*[DediGPU](https://dedigpu.com/) — Markdown mirror of [https://dedigpu.com/api](https://dedigpu.com/api) · updated 2026-09-02 · index for LLMs: [llms.txt](https://dedigpu.com/llms.txt) · everything: [llms-full.txt](https://dedigpu.com/llms-full.txt)*

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](https://dedigpu.com/app/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](https://dedigpu.com/status). 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.

[Open the console](https://dedigpu.com/app/api) [Create an account](https://dedigpu.com/signup)
