Errors

UberLLM returns OpenAI-style error envelopes so existing error handling works unchanged:

{
  "error": {
    "code": "insufficient_credits",
    "message": "Your credit balance is too low to serve this request.",
    "type": "insufficient_credits"
  }
}

Inference surface (/v1/*)

HTTP code Meaning What to do
402 insufficient_credits Your prepaid balance can't cover the request's reservation. Top up at Dashboard → Credits.
402 key_spend_cap_exceeded This key hit its configured spend limit (daily / monthly / lifetime). Raise or remove the key's cap, or use another key.
404 unknown_model The model id isn't in the catalog. Check GET /v1/models; fix the id.
429 rate_limited This key exceeded its per-minute request limit, or an upstream rate-limited us and no fallback was available. Back off and retry with jitter; raise the key's rate limit.
502 no_available_provider Every candidate provider failed before returning any content (after failover). Retry shortly; the deprioritized providers recover automatically. Any reservation was fully released.

Reservations and aborts

UberLLM reserves an estimated cost before proxying and settles from actual usage afterward. If a request errors, aborts, or you disconnect mid-stream, the unused reservation is released — you are only billed for content actually produced. Aborted streams are reconciled from a tokenizer estimate and flagged in Dashboard → Activity.

Rate limiting

Per-key rate limits are enforced with a fixed window. On the inference surface, rate-limit checks fail closed — if UberLLM cannot verify your limit, the request is rejected rather than served unmetered. Set (or raise) a key's rate_limit_per_min when you create it.

Seller API (/api/v1/seller/*)

These use standard REST codes:

HTTP code Meaning
400 invalid_request Validation failed (e.g. non-https endpoint_url, missing prices for absolute, multiplier outside 0 < m ≤ 1.5). The message names the field.
400 model_not_in_catalog model_id isn't a known catalog model.
401 unauthorized Missing or invalid dashboard JWT.
404 seller_not_found No seller for your org — call POST /api/v1/seller/register first.
404 offer_not_found No offer with that id under your seller.
409 invalid_status_transition Illegal status change — e.g. resuming a delisted offer (delisted is terminal).

Note: a failed validation probe is not an error response. The offer is created/updated successfully and returned with status: "paused" and a last_probe_error explaining why — fix the endpoint and PATCH it back to active to re-probe. See Sellers.

Auth errors

HTTP Meaning
401 Missing/invalid Authorization header. Inference keys are Bearer ull_...; dashboard endpoints use your account JWT.
403 The key is valid but lacks the required scope (e.g. an inference-only key calling a dashboard endpoint).