Basics
| Base URL | https://powergpu.io/v1 |
|---|---|
| Auth | Authorization: Bearer pg_live_… |
| Format | JSON in, JSON out, UTF-8. Errors: {"error":{"code","message"}} |
| Rate limits | 120 req/min (auto-raises with account history) — 429 + Retry-After past it |
Public endpoints — try them now
GET /v1/gpus/pricing
The complete price sheet as data: all 76 models, three modes each, market medians and the pricing rule itself.
curl https://powergpu.io/v1/gpus/pricing{
"object": "gpu_pricing",
"currency": "USD",
"billing": "per_second",
"price_rule": "market_median * 0.70, rounded down; …",
"market_snapshot": "2026-09-03",
"data": [
{
"slug": "h100-sxm",
"name": "NVIDIA H100 SXM",
"vram_gb": 80,
"price_per_gpu_hour": {
"on_demand": 1.587,
"interruptible": 0.793,
"reserved": 1.031
},
"market_median": 2.2676,
"available_gpus": 69
}, …
]
}GET /v1/offers
Live machine inventory. Filters: gpu (slug), region, num_min, price_max ($/hr for the whole machine), limit (≤100).
curl "https://powergpu.io/v1/offers?gpu=rtx-4090&num_min=2&limit=3"Authenticated endpoints
Create a key under Console → API keys (docs), then:
GET /v1/balance
curl -H "Authorization: Bearer " https://powergpu.io/v1/balance
{ "object": "balance", "currency": "USD", "balance": 41.2183, "month_spend": 12.8402 }POST /v1/instances
Deploy on a machine from /v1/offers. Body: machine_id (required), template, disk_gb, type (od | interruptible | res).
curl -X POST -H "Authorization: Bearer " \
-H "Content-Type: application/json" \
-d '{"machine_id":"m-1d29c04a","template":"vllm","disk_gb":80,"type":"od"}' \
https://powergpu.io/v1/instances
{ "object": "instance", "id": "i-52ab77c1", "status": "running",
"hostname": "i-52ab77c1.powergpu.io", "price_hr": 1.5983, … }GET /v1/instances · GET /v1/instances/{id}
List active instances / fetch one (state, price, hostname, timestamps). Billing is settled at read time, so the numbers are per-second fresh.
POST /v1/instances/{id}/actions
-d '{"action":"stop"}' # or start | destroyDELETE /v1/instances/{id}
Alias for the destroy action. Instance disk is erased; attached volumes survive.
Errors
| Status | code | Meaning |
|---|---|---|
| 401 | unauthorized | Missing or unknown Bearer key |
| 404 | not_found / no_route | Unknown instance or endpoint |
| 409 | deploy_failed / action_failed | Business rule said no — the message says why (balance, capacity, state) |
| 422 | missing_machine / bad_action | Request shape is wrong |
| 429 | rate_limited | Slow down; honour Retry-After |
Prefer a wrapper? The CLI and Python SDK cover this API one-to-one.