Errors
Every non-2xx REST response uses this envelope:
{ "code": "string", "message": "string", "request_id": "string" }request_idmatches theX-Request-Idresponse header.codeis the only machine-readable discriminator.messageis a human display string — never pattern-match it in client code; only match oncode.
Error code reference
Covers only the codes returned by the endpoints and MCP tools documented on this site:
| Code | Status | Where |
|---|---|---|
invalid_asset_symbol | 400 | REST rate endpoint, MCP get_rate/convert_currency |
invalid_amount | 400 | MCP convert_currency only |
unsupported_pair | 404 | REST rate endpoint, MCP get_rate/convert_currency |
unauthorized | 401 | Any ApiKey/Session-protected endpoint |
too_many_requests | 429 | Auth endpoints only (register/login/password-reset/verify-resend) |
quota_exceeded | 429 (REST) / tool error (MCP) | REST rate endpoint, MCP get_rate/convert_currency |
validation_error | 400 | Auth/API-key request body validation |
not_found | 404 | Unknown/foreign/already-revoked API-key id |
method_not_allowed | 405 | Wrong HTTP method on any route |
temporarily_unavailable | 503 | Any endpoint, on storage/dependency failure |
MCP error model
MCP tool-call domain errors are not an HTTP status code. They are
returned as CallToolResult{IsError: true} carrying the same
{code, message, request_id} fields (plus limit/remaining/reset_at
for quota_exceeded) inside the tool’s structured content. Auth failures
(bad/missing API key) remain ordinary HTTP 401, before any MCP tool call is
attempted. See MCP overview for details.