Skip to main content
The GPU Outlet API is a plain JSON REST surface. Every endpoint:
  • Lives under https://gpuoutlet.ai/v1/
  • Uses session-cookie auth (the same cookie the dashboard uses)
  • Returns JSON with Content-Type: application/json
  • Uses standard HTTP status codes (200, 400, 401, 403, 404, 409, 429, 500)
  • Versions via the path (/v1/) — breaking changes ship under /v2/ and the previous version stays alive for at least 12 months

Base URL

https://gpuoutlet.ai/v1
For local development against the mock backend:
http://localhost:5173/v1

Quick smoke test

Once you’re signed in via the dashboard (which sets the cookie):
curl https://gpuoutlet.ai/v1/auth/me --cookie "sid=$SID" | jq
# { "user": { "id": "usr_01H…", "email": "you@example.com", … } }
If you see {"error":"unauthorized"} instead, the session is expired — sign back in via the dashboard.

Conventions

IDs are ULIDs

Every entity ID is a 26-char ULID prefixed by type: usr_, rent_, key_, led_, cus_, pm_.

Money is in cents

All amounts are integer cents, USD. 1.40 USD/hr140 in JSON.

Timestamps are ISO 8601

UTC with Z suffix: 2026-06-07T08:14:22Z.

Pagination is cursor-based

List responses include nextCursor (or null). Pass it as ?cursor=.

Errors

Every error response has the shape:
{
  "error": "code_snake_case",
  "message": "Human-readable explanation",
  "details": { "field": "additional context, optional" }
}
See Errors for the full code list.

Rate limits

100 requests per minute per session, 1,000 per hour. See Rate limits.

What this API does NOT do

  • Stream pod logs — use ssh and tail -f /var/log/... inside the pod
  • Stream metering events — poll GET /v1/rentals/:id/meter if you need live values; the per-second updates are server-side only
  • Manage SSH inside running pods — once a pod is up, we have no shell access. SSH key changes only affect future pods.

Need something not here?

Drop a note in help@gpuoutlet.ai — the API is shaped by what users ask for first.