Reference
API v1
Everything the console shows, as JSON: your balance and next renewal, your servers with their term and locked price, and the catalogue with every cost sheet. Read-only today; write endpoints follow the console feature by feature and are listed here when they land.
Authentication
Issue a token under Console → API. It is shown once and stored as a hash; rotating it invalidates the old one immediately. Send it as a bearer token on every request:
curl -s https://dedigpu.com/api/v1/me \
-H "Authorization: Bearer dg_..."Tokens have the rights of the account. There are no scopes yet; treat the token like the password.
Rate limit and errors
| Status | Body | Meaning |
|---|---|---|
| 200 | {"ok": true, …} | Success. |
| 401 | {"ok": false, "error": "unauthorized"} | Missing, revoked or wrong token. |
| 404 | {"ok": false, "error": "not_found"} | Unknown endpoint. |
| 429 | {"ok": false, "error": "rate_limited"} | More than 60 requests in the last minute for this token. Wait a minute. |
GET /api/v1/me
The account: balance, monthly commitment across running servers, and the next renewal.
{
"ok": true,
"email": "the address you signed up with",
"balance_usd": 2480.55,
"monthly_commitment_usd": 1134.0,
"next_renewal": { "server": "i-3f9a1c2e", "due": "2026-10-02 10:12:00", "term_months": 1, "amount_usd": 1134.0 },
"created_at": "2026-09-02 09:41:07"
}| Field | Type | Meaning |
|---|---|---|
balance_usd | number | Prepaid balance, two decimals. |
monthly_commitment_usd | number | Sum of the monthly price of every server online. |
next_renewal | object or null | The earliest renewal: server id, due date (UTC), term length, amount charged. |
GET /api/v1/servers
Every server on the account, cancelled ones included. /api/v1/instances is an alias.
{
"ok": true,
"servers": [
{ "id": "i-3f9a1c2e", "name": "finetune-llama", "gpu": "h100-sxm", "count": 2, "region": "REY",
"os": "ubuntu-24.04", "template": "vllm", "model": "meta-llama/Llama-3.3-70B-Instruct", "precision": "fp8",
"options": { "nvme": 2, "ipv4": 1, "uplink": false, "vlan": false }, "ssh_keys": [12, 15],
"status": "active", "ipv4": "203.0.113.10", "hostname": "srv-4k2p.rey.dedigpu.cloud",
"price_per_month": 2062.8, "base_per_month": 2268.0, "options_per_month": 24.0, "term_discount_pct": 10,
"term_months": 12, "renewal_amount": 24753.6, "term_end": "2027-08-28 10:12:00",
"auto_renew": true, "created_at": "2026-09-02 10:12:00" }
]
}| Field | Type | Meaning |
|---|---|---|
id | string | Server id, i- plus eight hex characters. Same as the console URL. |
gpu, count | string, int | Card id from the catalogue and cards per server. |
region | string | REY, HEL, AMS or SIN. |
os, template | string | Ids from /api/v1/gpus. |
model, precision | string or null | Pre-loaded model and precision on serving templates. |
options | object | Extra NVMe (TB), extra IPv4 (count), 25 Gbit/s uplink, private VLAN. |
status | string | provisioning · active · grace · suspended · cancelled. |
ipv4 | string or null | Null while provisioning. |
price_per_month | number | Locked monthly price after the term discount, options and licence included. |
base_per_month, options_per_month | number | The two parts before the discount. |
term_months, term_discount_pct | int | Term length and the discount applied. |
renewal_amount | number | What the next renewal charges: price × term. |
term_end | string | UTC. Renewal date, or the stop date when auto-renew is off. |
GET /api/v1/gpus
The whole catalogue with cost sheets, the term discounts, the operating systems, the templates and the options. Public data, but the token is still required.
{
"ok": true,
"checked": "2 September 2026",
"term_discount_pct": {"1":0,"3":3,"6":6,"12":10},
"gpus": [ {
"id": "h100-sxm",
"name": "NVIDIA H100 SXM5 80 GB",
"vendor": "NVIDIA",
"vram_gb": 80,
"memory": "HBM3",
"bandwidth_gbs": 3350,
"interconnect": "NVLink 4 \u00b7 900 GB/s",
"vcpu": 20,
"ram_gb": 192,
"nvme_gb": 1500,
"network_gbit": 100,
"price_per_month": 1134,
"cost_sheet": {
"hardware": 993.06,
"power": 27.5,
"rack_cooling": 45,
"network_ip": 9,
"spares_failures": 45,
"operations": 14
},
"cheapest_competitor": {
"price_per_month": 1230,
"provider": "Latitude.sh",
"kind": "dedicated"
},
"counts": [
1,
2,
4,
8
],
"terms": [
1,
3,
6,
12
]
}, … ],
"os": [ { "id": "ubuntu-24.04", "name": "Ubuntu 24.04 LTS", "family": "linux", "vendors": ["NVIDIA","AMD"], "classes": ["sxm","pcie","consumer"], "licence_per_month": 0 }, … ],
"templates": [ { "id": "vllm", "name": "vLLM 0.9", "kind": "serve", "vendors": ["NVIDIA","AMD"], "os_families": ["linux"], "accepts_model": true, "ports": [["OpenAI-compatible API", 8000]] }, … ],
"options": [ { "id": "nvme", "name": "Extra NVMe", "price": 6, "unit": "per TB per month" }, … ]
}The price of a server is price_per_month × count, then × (100 − term_discount_pct) / 100 for the term, plus options and licence before the discount. The same arithmetic runs on the order form and on the server.
GET /status.json
Public, no token: the state of every region with 90-day availability and the incident list. Same source as the status page. Cached one minute, CORS open.
curl -s https://dedigpu.com/status.json | jq '.regions[] | {code, uptime_90d_pct}'Examples
curl + jq
# The cheapest server per GB of GPU memory
curl -s https://dedigpu.com/api/v1/gpus -H "Authorization: Bearer dg_..." \
| jq -r '.gpus | sort_by(.price_per_month / .vram_gb)[] | "\(.id)\t\(.price_per_month / .vram_gb | . * 100 | round / 100) $/GB"'Python
import requests
H = {"Authorization": "Bearer dg_..."}
me = requests.get("https://dedigpu.com/api/v1/me", headers=H, timeout=10).json()
srv = requests.get("https://dedigpu.com/api/v1/servers", headers=H, timeout=10).json()["servers"]
print(f"balance {me['balance_usd']:.2f} USD, {len(srv)} servers")
for s in srv:
if s["status"] in ("active", "grace"):
print(s["id"], s["gpu"], s["count"], s["region"], s["ipv4"], "renews", s["term_end"])What is next
Write endpoints land in the order the console features stabilise: ordering a server with the same six-step validation as the form, server actions (reboot, rename, auto-renew, extend, cancel), SSH key management, and top-up invoices. Each is listed on this page with its request and response the day it ships; nothing is documented before it works.