Private GPU private silicon
A private GPU is an on-demand, dedicated LLM host that is yours for the duration of a session (a “burst”). You start it through the API, infer on it exactly like any OpenAI-compatible model, and stop it when you’re done — paying only for the time it runs.
How it relates to your org & user (console)
Private GPUs are per user, billed to the user’s org. Configuration happens in the console before you can start anything:
- Offerings — staff enable GPU offerings for your org (hardware tier, hourly rate, optional max duration). You can only start an active offering your org has. Staff manage this on the console GPU page.
- Entitlements — your org grants the offering to a group or a specific
user. If you’re not entitled,
POST /v1/gpu/burstsreturns403. - One live burst per user — you can’t start a second burst until
the first is stopped (
409conflict).
Your API key does the rest — the same rk-… key you use for public models
authenticates all private-GPU endpoints and ties the burst to you + your org.
Endpoints
| Purpose | Endpoint | Auth |
|---|---|---|
| Start a burst | POST /v1/gpu/bursts | API key |
| List your bursts | GET /v1/gpu/bursts | API key |
| Stop a burst | POST /v1/gpu/bursts/:id/stop | API key |
| Discover the model | GET /v1/models | API key |
| Infer on the GPU | POST /v1/chat/completions "model":"seligo/gpu" | API key |
1. Start a burst
POST /v1/gpu/bursts with an offering id (a UUID your org is entitled
to) and a duration in minutes. You will already have the offering id from staff; on the
console it is shown on the GPU page.
curl -s -X POST "$SELIGO_BASE/gpu/bursts" \
-H "authorization: Bearer rk-…" \
-H "content-type: application/json" \
-d '{"offering_id":"<offering-uuid>","duration_min":60}'
A successful start returns 201 with your new burst (including its
id and the session slug):
{"burst":{"id":"<burst-uuid>","slug":"burst-…","status":"pending",
"auto_end_at":"2026-09-15T18:00:00Z", …}}
auto_end_at, even while the GPU is still booting. Stop it when you’re done.
2. Wait for it to be ready
A cold GPU takes several minutes to boot (a warm boot is faster). Poll your bursts:
curl -s "$SELIGO_BASE/gpu/bursts" -H "authorization: Bearer rk-…"
The status moves through pending / provisioning /
booting_warm → ready (then draining / ended after
stop). Once ready, GET /v1/models lists the stable
seligo/gpu alias for your key:
curl -s "$SELIGO_BASE/models" -H "authorization: Bearer rk-…" \
| grep -i "seligo/gpu"
3. Infer on the GPU
Use the stable alias seligo/gpu as the model. It always
resolves to your live, ready burst — so your client code never needs to know the
per-session endpoint id.
curl -s "$SELIGO_BASE/chat/completions" \
-H "authorization: Bearer rk-…" \
-H "content-type: application/json" \
-d '{"model":"seligo/gpu",
"messages":[{"role":"user","content":"Analyse this data residency question"}]}'
While the burst is still booting, calls to seligo/gpu return
409 with code gpu_booting. If no burst is live for your key they
return 404 gpu_not_started — start one first (step 1).
gpu_booting (e.g. with backoff) until the burst reports
ready. Handle gpu_not_started by starting a burst rather than
failing hard.
4. Stop the burst
Stop when done so you stop paying:
curl -s -X POST "$SELIGO_BASE/gpu/bursts/<burst-uuid>/stop" \
-H "authorization: Bearer rk-…"
The burst drains (finishes in-flight work) then the GPU is torn down and deregistered. A refund is settled for the unused reserved time.
Chat UI equivalent
If you use the Seligo chat interface in the console, it drives the same machinery: the picker shows a purple Private GPU row when you have a live burst, and chat turns are relayed to your GPU through the same router. The console GPU page shows offerings, entitlements, your live burst (uptime + auto-stop), and lets you start and stop it without writing any curl.
GET /v1/gpu/bursts until
ready → infer on model: "seligo/gpu" → stop. See
API reference for the shared OpenAI-compatible details.