API reference
Errors
Every error code the API returns and what to do about it.
Errors return an OpenAI-style body:
{ "error": { "message": "Insufficient credits", "code": "insufficient_credits" } }
| HTTP | code | Meaning | What to do |
|---|---|---|---|
| 400 | invalid_request |
Malformed body / missing messages |
Fix the request shape |
| 400 | unknown_model |
Model id not in the catalog | Use an id from GET /api/v1/models |
| 401 | invalid_api_key |
Missing, malformed, or revoked key | Re-mint at Console → API Keys |
| 402 | insufficient_credits |
Balance can't cover the estimate | Top up at Console → Billing |
| 402 | lkm_key_missing |
Account provisioned but no inference key yet | A top-up provisions one automatically |
| 402 | daily_limit / key_budget_exceeded |
Per-key cap hit (balance is fine) | Raise the cap or wait for reset |
| 429 | rate_limited |
> 60 req/min on this key | Back off; honor Retry-After |
| 502 | upstream_error |
Inference cell failed | Retry — failed requests are auto-refunded |
| 503 | upstream_warming |
Cell is cold-starting (scale-from-zero) | Retry after Retry-After seconds |
| 503 | billing_unavailable |
Billing DB briefly unreachable | Never a free pass — retry shortly |
Semantics that matter
- Fail-closed billing: if our billing plane is down you get
503, never free inference. We consider that a feature. - Refund guarantees: any request that errors (
502,529, mid-stream death) is refunded atomically. Verify with the ledger at Console → Billing. - Idempotency: retried requests create new reservations — dedupe on your side by not re-sending the same logical request unless the first errored.