Renting a GPU
Pick a box by VRAM, price, and region from one cheapest-first feed, then rent it from the console or one API call.
Every GPU on IPX lives in a single price-sorted list, no matter which cloud it came from. You filter that list down to the hardware you need, rent a listing, and we provision the box, inject your SSH key at boot, and open a reverse tunnel back to our gateway. A rental moves through a short lifecycle and, once it reaches active_connected, hands you a connection string. This page covers choosing a box, renting it both ways, polling the lifecycle, setting a spend cap, and tearing down.
You need prepaid credit before you can rent. A rental is rejected unless your cap covers at least one hour of runtime and your balance can cover that cap. See Billing to top up.
Choosing a box
There is exactly one feed and it is always sorted cheapest first. You do not choose a provider. You choose hardware, and we route you to the lowest-priced box that matches.
min_vram_gb. The feed keeps only boxes with at least that much memory per card.region. Pick by latency or data residency, then take the cheapest match.From the API, the feed is GET /api/v1/listings. It returns boxes ordered cheapest first, excludes interruptible (spot) hardware by default, and accepts min_vram_gb, interruptible, and limit. Full details live in the listings reference.
# one price-sorted feed across every cloud, cheapest first
$ curl -s "https://gpu.ipxtechholding.com/api/v1/listings?min_vram_gb=40" \
-H "Authorization: Bearer $IPX_TOKEN" | jq '.listings[0]'
{
"id": 8821,
"gpu_name": "RTX 4090",
"vram_gb": 48,
"num_gpus": 2,
"region": "us-east",
"interruptible": false,
"price_micro_usd_per_hour": 680000,
"price_usd_per_hour": 0.68
}
Prices are in micro-USD: 1 USD is 1,000,000 micro. So price_micro_usd_per_hour of 680000 is $0.68/hr. Every listing also carries the decimal price_usd_per_hour so you do not have to convert. The id from this feed is the gpu_listing_id you rent.
Renting from the console
The console is the fastest path. No token, no JSON, just two clicks.
-
Open Browse GPUs
Go to Browse. You land on the same cheapest-first feed, with filters for VRAM, price, and region across the top.
-
Filter to your hardware
Set a VRAM floor, a price ceiling, and a region if you care about one. The list re-sorts and keeps the cheapest matching boxes at the top.
-
Pick a key and a cap, then Rent
Choose which SSH key to inject and, optionally, a hard spend cap for the box. Click Rent. Provisioning starts immediately.
-
Wait for the connection string
The box appears on your dashboard in a provisioning state. When it reaches
active_connected, the connection string is shown. Copy it and SSH in.
No SSH key on file yet? Add one under Settings before you rent. We inject only the public key, at boot. There are no passwords and no shared logins.
Renting via the API
One POST creates a rental and kicks off provisioning. Authenticate with a bearer token from Settings → API access, sent as Authorization: Bearer <token> and shown below as $IPX_TOKEN.
id of the listing to rent, taken from GET /api/v1/listings. The listing must still be available.5000000 is a $5 cap.$ curl -s -X POST "https://gpu.ipxtechholding.com/api/v1/rentals" \
-H "Authorization: Bearer $IPX_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"gpu_listing_id": 8821,
"customer_ssh_key_id": 42,
"max_cost_micro_usd": 5000000
}'
On success the endpoint returns 201 Created with the new rental. It has just been created, so its state is provisioning_requested and connection_string is null until the tunnel comes up.
{
"id": 5140,
"state": "provisioning_requested",
"gpu_name": "RTX 4090",
"vram_gb": 48,
"price_micro_usd_per_hour": 680000,
"accumulated_cost_micro_usd": 0,
"max_cost_micro_usd": 5000000,
"connection_string": null,
"created_at": "2026-06-24T17:02:11Z"
}
Response fields
RTX 4090.ssh -p 20137 root@gpu.ipxtechholding.com. It is null until the rental is active_connected.A rental is rejected with an error if the SSH key is not yours, the listing is no longer available, your cap is below one hour of runtime at the box's rate, or your prepaid credit cannot cover the cap. Top up first under Billing.
The lifecycle and polling
Provisioning is asynchronous. After the create call returns, fetch the rental until it connects. There is one feed of truth per rental at GET /api/v1/rentals/:id.
A rental moves through these states:
provisioning_requested· we accepted the request and reserved a gateway port.booting_instance· the box is starting on the underlying cloud with your key.awaiting_tunnel· the box is up and dialing home to open its reverse SSH tunnel.active_connected· the tunnel is up,connection_stringis populated, and the per-second meter is running. This is where you SSH in.terminated· the box is gone and the meter has stopped, whether you tore it down or the cap was hit.
Two terminal failure paths exist as well. provisioning_failed means the underlying cloud could not boot the box (you are not charged), and terminating is the brief state while a teardown is in flight before it settles on terminated.
Poll GET /api/v1/rentals/:id until state is active_connected, then read connection_string. A short fixed interval is plenty. Boxes usually connect within a minute or two.
RENTAL_ID=5140 # poll every 5s until the tunnel is up while :; do RESP=$(curl -s "https://gpu.ipxtechholding.com/api/v1/rentals/$RENTAL_ID" \ -H "Authorization: Bearer $IPX_TOKEN") STATE=$(echo "$RESP" | jq -r '.state') echo "state: $STATE" [ "$STATE" = "active_connected" ] && break sleep 5 done # grab the connection string and SSH in echo "$RESP" | jq -r '.connection_string'
Once you see active_connected, the connection_string points only at IPX. Run it and you land on your GPU as root. The provider's real address is never exposed. See Connecting for the SSH details.
Setting a spend cap
A spend cap is a hard ceiling per box, in micro-USD. When accumulated_cost_micro_usd reaches the cap, we reclaim the box automatically. Set it with max_cost_micro_usd at rent time, in the console or the API.
- Set it. Pass
max_cost_micro_usd. A $5 ceiling is5000000; a $20 ceiling is20000000. - Omit it. The cap defaults to your full prepaid balance, so the box can run until your credit runs out.
- Floor. Whatever you pass must cover at least one hour at the box's rate, and your balance must be able to cover the cap. Otherwise the rental is rejected.
The cap is a backstop, not your main billing control. You are billed per second only while the box is connected, and you can never be charged past your balance. The cap exists so a forgotten box cannot quietly drain credit. To compute a cap from a target spend, multiply USD by 1,000,000.
Tearing down
Tear down to stop the meter. You can do it from the console or the API, and the cap will also tear a box down on its own if it is hit.
From the console
Open the box on your dashboard and click Terminate. The box moves to terminated and billing stops.
From the API
Send a DELETE to the rental. We terminate the box and return its final state.
$ curl -s -X DELETE "https://gpu.ipxtechholding.com/api/v1/rentals/5140" \
-H "Authorization: Bearer $IPX_TOKEN" | jq '.state'
# "terminated"
The response is the same rental object, now with state set to terminated and a final accumulated_cost_micro_usd. Teardown is idempotent in effect: once a box is gone, it stays gone.
Terminating destroys the box. Anything not saved off the machine is lost. Move your results to your own storage before you tear down.