Errors & request IDs

Our error codes, and how to tell ours apart from upstream's.

Last updated 2026-08-12edit on github

Telling our errors from upstream’s

Upstream errors reach you unmodified, in the provider’s own shape. Errors we generate carry an x-lcllm-error: true header and a machine-readable code prefixed lcllm_. That distinction matters during an incident: it tells you in one header whether to look at the provider’s status page or ours.

Our error codes

StatusCodeWhat it meansWhat to do
401lcllm_invalid_keyKey is malformed, revoked, or expired.Check the prefix and expiry in the dashboard.
402lcllm_insufficient_creditBalance reached zero.Top up. Enable auto-reload to avoid it entirely.
402lcllm_budget_exceededThis key hit its own monthly spend cap.Raise the cap, or find what is burning it.
403lcllm_model_not_allowedKey's allowlist excludes this model.Add the model to the key, or use another key.
404lcllm_model_not_availableWe do not carry this model.Check the pricing page. We never substitute.
429lcllm_rate_limitedYour tier limit, enforced by us.Back off; see retries
502lcllm_upstream_errorProvider returned something unusable.Retry. Original body is in error.upstream.
503lcllm_upstream_unavailableProvider is down or unreachable.See failover

Reporting a problem

Send us the x-lcllm-request-id and nothing else is strictly necessary. It resolves to the full trace, including the upstream provider’s own request ID, timings, and the exact error body we received. Do not paste your prompt into a support email; we do not need it and would rather not have it.