Token Kiosk
API Reference

Error Codes

Error shapes, status codes, and handling behavior.

All errors follow a consistent shape:

{ "error": "ERROR_CODE", "message": "Human readable description" }

Error reference

HTTPCodeWhen
400VALIDATION_ERRORMissing/invalid params, unknown model, amount too low, thinking/reasoning_effort not allowed
401UNAUTHORIZEDMissing/invalid API key or SIWE signature
402INSUFFICIENT_BALANCENot enough credit for the estimated cost
404NOT_FOUNDResource not found
429RATE_LIMITEDPer-wallet rate limit exceeded
500INTERNAL_ERRORServer error
502UPSTREAM_ERRORLLM provider failed or timed out

Detailed examples

Insufficient Balance (402)

Returned when balance can't cover the reserved cost estimate.

{
  "error": "INSUFFICIENT_BALANCE",
  "message": "Insufficient balance. Top up at POST /v1/topup"
}

Rate Limited (429)

Returned when per-wallet sliding window limits are exceeded.

{
  "error": "RATE_LIMITED",
  "message": "Rate limit exceeded"
}

Validation Error (400)

{
  "error": "VALIDATION_ERROR",
  "message": "Thinking/reasoning models are not supported"
}

Upstream Error (502)

Returned when the LLM provider fails. The balance lock is released (no charge).

{
  "error": "UPSTREAM_ERROR",
  "message": "Provider returned an error"
}

Error handling behavior

ScenarioBehavior
Insufficient balanceHTTP 402 with top-up instructions and current balance
Provider downRelease lock, return 502, no balance deducted
Invalid modelReturn 400, release lock, no balance deducted
Rate limitedReturn 429, no balance deducted
Invalid API keyReturn 401
Expired/invalid SIWEReturn 401
Top-up below minimumReturn 400 before issuing 402

On this page