IPXdocs
API reference

Rentals

The rental is the core resource. You create one to provision a GPU, poll it until the tunnel is up, then delete it to stop the meter.

A rental ties together a listing, one of your SSH keys, and an optional spend cap. Creating it kicks off provisioning on the cheapest acceptable cloud. The box boots, injects your public key, and dials home to open a reverse SSH tunnel to gpu.ipxtechholding.com. Once that tunnel connects, a connection_string appears and the per-second meter starts. Deleting the rental tears the box down and stops billing.

Every endpoint on this page requires a bearer token. Create or rotate one at Settings · API access and send it as Authorization: Bearer <token>. Examples below use the shell variable $IPX_TOKEN.

The rental object

Every endpoint returns the same shape. Money is expressed in micro-USD, where 1000000 equals one dollar.

idinteger
Unique rental identifier. Use it to poll and to terminate.
statestring
Lifecycle state. One of provisioning_requested, active_connected, or terminated.
gpu_namestring
The GPU model on the box. RTX 4090
vram_gbinteger
VRAM on the GPU, in gigabytes. 24
price_micro_usd_per_hourinteger
Your locked hourly rate in micro-USD. 680000 is $0.68/hr.
accumulated_cost_micro_usdinteger
What this rental has billed so far, in micro-USD. Metered per second from tunnel connect to teardown.
max_cost_micro_usdintegernullable
Your hard spend cap in micro-USD, or null for none. The box is reclaimed the moment it is hit. 5000000 is a $5 cap.
connection_stringstringnullable
null until the tunnel connects, then the ready-to-run SSH command. ssh -p 20137 root@gpu.ipxtechholding.com
created_attimestamp
When the rental was created, in ISO 8601.

Lifecycle

A rental moves through three states. You will only ever see these values in the state field.

  1. provisioning_requested

    The state right after POST. We have picked a box and are booting it, injecting your key, and waiting for it to dial home. connection_string is null and nothing is billing yet.

  2. active_connected

    The reverse tunnel is up. connection_string is populated and the per-second meter is running. This is when you SSH in and work.

  3. terminated

    The box has been torn down, either by your DELETE call or because the spend cap was reached. The meter has stopped. connection_string returns to null.

There is no webhook. After creating a rental, poll GET /api/v1/rentals/:id on a short interval (every few seconds is plenty) and stop once state reads active_connected.

Create a rental

Provisions a GPU from a listing and starts the lifecycle. Returns the new rental in provisioning_requested with a null connection string.

POST/api/v1/rentals
gpu_listing_idintegerrequired
The listing to rent. Pull a current one from the listings endpoint.
customer_ssh_key_idintegerrequired
Which of your keys to inject at boot. Manage keys via the SSH keys endpoint.
max_cost_micro_usdintegeroptional
Hard spend cap in micro-USD. The box is reclaimed the instant it is reached. Omit for no cap. 5000000 caps the box at $5.
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": 4271,
      "customer_ssh_key_id": 88,
      "max_cost_micro_usd": 5000000
    }'
response · 201 Created
{
  "id": 9012,
  "state": "provisioning_requested",
  "gpu_name": "RTX 4090",
  "vram_gb": 24,
  "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"
}

A successful create returns 201 Created. The connection_string is null at this point. That is expected. The box has not connected yet.

Retrieve a rental

Fetches the current state of one rental. This is the endpoint you poll while waiting for the tunnel.

GET/api/v1/rentals/:id
idintegerrequired
The rental id returned at create. Path segment. 9012
request
$ curl -s https://gpu.ipxtechholding.com/api/v1/rentals/9012 \\
    -H "Authorization: Bearer $IPX_TOKEN"
response · 200 OK · tunnel connected
{
  "id": 9012,
  "state": "active_connected",
  "gpu_name": "RTX 4090",
  "vram_gb": 24,
  "price_micro_usd_per_hour": 680000,
  "accumulated_cost_micro_usd": 11333,
  "max_cost_micro_usd": 5000000,
  "connection_string": "ssh -p 20137 root@gpu.ipxtechholding.com",
  "created_at": "2026-06-24T17:02:11Z"
}

Once state reads active_connected and connection_string is set, the box is yours. Run the connection string straight from your shell.

poll until connected, then SSH in
# poll every 3s until the tunnel is up
$ until curl -s https://gpu.ipxtechholding.com/api/v1/rentals/9012 \\
    -H "Authorization: Bearer $IPX_TOKEN" \\
    | grep -q '"state":"active_connected"'; do sleep 3; done

# the connection_string points only at IPX
$ ssh -p 20137 root@gpu.ipxtechholding.com
root@gpu:~# nvidia-smi

Terminate a rental

Tears the box down and stops the meter. Returns the rental in its final terminated state. The reason recorded is customer requested.

DELETE/api/v1/rentals/:id
idintegerrequired
The rental to terminate. Path segment. 9012
request
$ curl -s -X DELETE https://gpu.ipxtechholding.com/api/v1/rentals/9012 \\
    -H "Authorization: Bearer $IPX_TOKEN"
response · 200 OK
{
  "id": 9012,
  "state": "terminated",
  "gpu_name": "RTX 4090",
  "vram_gb": 24,
  "price_micro_usd_per_hour": 680000,
  "accumulated_cost_micro_usd": 47600,
  "max_cost_micro_usd": 5000000,
  "connection_string": null,
  "created_at": "2026-06-24T17:02:11Z"
}

Termination is final. The box is reclaimed and its disk is wiped. Anything you have not pulled off the box is gone. The same teardown happens automatically if accumulated_cost_micro_usd reaches your max_cost_micro_usd cap.

Billing is prepaid. The meter only runs while a rental is active_connected, and you can never be charged past your credit balance. Read more in Credits and Billing.

Next steps