Errors
Common API error responses and app-facing remediation guidance.
Map Ando API failures to product states before your app goes live. Users should know whether they need to reconnect Ando, update spend controls, wait for a rate limit, or retry later.
Account-owned provider routes
These errors apply to the ordinary Ando provider path that uses:
Authorization: Bearer <user-virtual-key>401 Unauthorized
The user's Virtual Key is missing, invalid, expired, revoked, or pasted into the wrong provider field.
App state: Ando needs to be reconnected.
Recommended action: ask the user to paste a new Ando Virtual Key, then retest
with GET /v1/models.
402 Payment Required
For Virtual Key routes, the user's Ando budget, spend cap, or available inference balance cannot cover the request.
App state: Ando spend limit reached.
Recommended action: tell the user to review their Ando spend controls or choose a smaller request. Keep the failed prompt in your app so the user can retry after the Ando account is ready.
403 Forbidden
The key may be valid, but the request is outside the key or connection policy. This can happen when a model is not available to that connection.
App state: Ando connection policy blocked this request.
Recommended action: refresh GET /v1/models, use an allowed model, or ask the
user to check the Ando connection.
429 Too Many Requests
Rate limiting has been applied for the key, account, or route.
App state: Ando is rate limiting this connection.
Recommended action: back off, retry later, and avoid automatic retry loops that can spend user budget without progress.
5xx Errors
Ando or the upstream inference path failed temporarily.
App state: Ando is temporarily unavailable.
Recommended action: retry with exponential backoff and keep a request ID for support. Do not store raw Virtual Keys, payment credentials, prompt content, or response bodies in support logs.
Tempo MPP errors
For POST /v1/mpp/chat/completions, the endpoint returns MPP-specific error
codes in the response body:
payment_required: send an unpaid request first, then retry the identical request withAuthorization: Payment <credential>.mpp_session_deposit_below_request_cost: the Tempo session deposit or available escrow is lower than the active voucher authorization. Open or top up a Tempo session with enough deposit to cover the current voucher bucket, then retry the same request.mpp_malformed_credential: the payment credential is missing, too large, not base64url JSON, or not anAuthorization: Paymentcredential.mpp_method_unsupported: the credential is not a Temposessionpayment.mpp_invalid_challenge: the challenge is expired, malformed, missing required fields, or not issued by Ando.mpp_body_digest_mismatch: the paid retry body does not exactly match the body bound into the challenge.mpp_request_quote_invalid: Ando could not derive a positive prepaid bucket quote for the request.mpp_request_exceeds_voucher_bucket: the quoted request would exceed the active voucher bucket before inference work.mpp_payment_verification_failed: the Tempo session credential could not be verified.mpp_payer_not_allowed: optional emergency/operator containment is enabled and the verified payer is not allowed.mpp_voucher_bucket_refresh_required: the accepted cumulative voucher bucket is exhausted, expired, or not yet authorized.mpp_reservation_failed: Ando could not reserve accepted voucher authorization before inference.mpp_commit_failed: Ando could not commit paid usage after inference, so noPayment-Receiptis emitted.mpp_session_close_unavailable: session close cannot run because the Tempo close signer or backend close path is not configured.mpp_session_close_failed: the Tempo session close credential could not be settled or recorded.mpp_streaming_unavailable: streaming is disabled for the first MPP rollout.
Troubleshooting MPP session deposit errors
If the response error is mpp_session_deposit_below_request_cost, the paid
retry reached Ando but the verified Tempo session did not cover the active
voucher authorization. Read the latest WWW-Authenticate: Payment challenge
and open or top up a session with enough deposit for the current voucher
bucket. The challenge may include a higher suggestedDeposit; that is a
reusable-session hint, not Ando's hard protocol minimum.
Some Tempo clients can fail locally before sending the paid retry, for example
with Deposit too low for request. In that case Ando cannot return an API
error because no paid request reached the gateway. Treat it the same way:
increase or top up the client's active session deposit enough to cover the
voucher bucket, then retry the exact same request body.
Troubleshooting MPP voucher bucket errors
If the response error is mpp_voucher_bucket_refresh_required, the paid retry
reached Ando but the accepted cumulative voucher bucket was exhausted, expired,
or missing. Sign a fresh or higher cumulative Tempo session voucher and retry
the exact same request body.
Troubleshooting MPP session close errors
If the response error is mpp_session_close_unavailable, the gateway has not
been configured to submit Tempo close transactions or cannot reach the backend
close recorder. The session remains open on Tempo. Configure the operator close
signer and retry the close credential.
If the response error is mpp_session_close_failed, the close credential
reached Ando but the Tempo close transaction or backend close record failed.
Retry the close credential and include the session or channel references in
operator escalation.