IPXdocs
Guides

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.

By VRAM
Filter to a floor with min_vram_gb. The feed keeps only boxes with at least that much memory per card.
By price
The list is sorted cheapest first, so the box you want is usually near the top. Rates come back in both micro-USD and decimal USD.
By region
Each listing reports its 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.

find the cheapest box with at least 40 GB VRAM
# 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]'
response
{
  "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.

  1. Open Browse GPUs

    Go to Browse. You land on the same cheapest-first feed, with filters for VRAM, price, and region across the top.

  2. 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.

  3. 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.

  4. 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.

POST/api/v1/rentals
gpu_listing_idintegerrequired
The id of the listing to rent, taken from GET /api/v1/listings. The listing must still be available.
customer_ssh_key_idintegerrequired
The id of one of your SSH keys. Its public key is injected into the box at boot. The key must belong to you. Manage keys in SSH keys.
max_cost_micro_usdintegeroptional
Hard spend cap for this box, in micro-USD. We reclaim the box the moment accumulated cost hits it. Omit it and the cap defaults to your full prepaid balance. The cap must cover at least one hour at the box's rate. 5000000 is a $5 cap.
request
$ 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.

response · 201 Created
{
  "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

idinteger
The rental id. Use it to poll and to tear down.
statestring
The lifecycle state. See the states below.
gpu_namestring
The model of the rented card, for example RTX 4090.
vram_gbinteger
VRAM per card, in gigabytes.
price_micro_usd_per_hourinteger
Your locked-in rate for this box, in micro-USD per hour.
accumulated_cost_micro_usdinteger
What this box has cost so far, in micro-USD, metered per second. The box is reclaimed when this reaches the cap.
max_cost_micro_usdinteger
The effective hard spend cap for this box, in micro-USD.
connection_stringstring · null
The SSH command to reach the box, for example ssh -p 20137 root@gpu.ipxtechholding.com. It is null until the rental is active_connected.
created_atstring
ISO 8601 timestamp of when the rental was created.

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.

GET/api/v1/rentals/:id

A rental moves through these states:

  1. provisioning_requested · we accepted the request and reserved a gateway port.
  2. booting_instance · the box is starting on the underlying cloud with your key.
  3. awaiting_tunnel · the box is up and dialing home to open its reverse SSH tunnel.
  4. active_connected · the tunnel is up, connection_string is populated, and the per-second meter is running. This is where you SSH in.
  5. 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.

bash · poll until connected
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 is 5000000; a $20 ceiling is 20000000.
  • 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.

DELETE/api/v1/rentals/:id
terminal
$ 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.

Next steps