This week All our GPUs are sold at cost price — zero margin on the server. See the cost sheets

This week Every GPU sold at cost price

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.

Base URL https://dedigpu.com · JSON · UTC timestamps · updated 2 September 2026

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

StatusBodyMeaning
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"
}
FieldTypeMeaning
balance_usdnumberPrepaid balance, two decimals.
monthly_commitment_usdnumberSum of the monthly price of every server online.
next_renewalobject or nullThe 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" }
  ]
}
FieldTypeMeaning
idstringServer id, i- plus eight hex characters. Same as the console URL.
gpu, countstring, intCard id from the catalogue and cards per server.
regionstringREY, HEL, AMS or SIN.
os, templatestringIds from /api/v1/gpus.
model, precisionstring or nullPre-loaded model and precision on serving templates.
optionsobjectExtra NVMe (TB), extra IPv4 (count), 25 Gbit/s uplink, private VLAN.
statusstringprovisioning · active · grace · suspended · cancelled.
ipv4string or nullNull while provisioning.
price_per_monthnumberLocked monthly price after the term discount, options and licence included.
base_per_month, options_per_monthnumberThe two parts before the discount.
term_months, term_discount_pctintTerm length and the discount applied.
renewal_amountnumberWhat the next renewal charges: price × term.
term_endstringUTC. 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.

Issue a token from the console.

One per account, shown once, rotated in a click.