Documentation

Errors

One error envelope shared by every product on the platform.

Envelope

Failures always answer with an error object carrying a stable machine-readable code and a human-readable message. Branch on code, never on the message text.

400 Bad Request
{
  "error": {
    "code": "invalid_currency",
    "message": "Unknown currency code: XYZ."
  }
}

Codes you should handle

StatusCodeMeaning
400invalid_currencyA currency or asset code is not quoted.
400invalid_amountThe amount is missing, zero or negative.
401invalid_api_keyMissing, unknown, disabled or revoked key.
403product_access_deniedThe key belongs to a different product.
403subscription_inactiveNo active subscription for this product.
429rate_limit_exceededPer-minute limit reached. Retry-After applies.
429monthly_limit_exceededMonthly quota reached until the period resets.
503rates_unavailableUpstream rates are momentarily unavailable.

Retrying safely

Every endpoint is a GET and therefore idempotent, so retries are safe. Back off with jitter on 429 and 503, and treat a monthly quota rejection as terminal until the period resets.