Skip to content

Errors & Rate Limits

Error format

All errors return a JSON body:

json
{
  "message": "Human-readable description",
  "code": "MACHINE_READABLE_CODE"
}

Authentication errors include an additional authenticated field:

json
{
  "message": "Invalid API key",
  "code": "INVALID_API_KEY_EXCEPTION",
  "authenticated": false
}

HTTP status codes

StatusMeaning
400 Bad RequestMissing required fields, invalid values, or constraint violations
401 UnauthorizedMissing or invalid API key
403 ForbiddenAuthenticated, but not permitted to perform this action
404 Not FoundResource does not exist or is not reachable with your current permissions
429 Too Many RequestsRate limit exceeded
500 Internal Server ErrorUnexpected server error

Rate limits

Each endpoint is assigned a tier that determines its rate limit. Counters are per-route and shared across all API keys owned by the same account.

TierLimitWindowBlock duration
Tier 15 requests5 minutes30 minutes
Tier 25 requests1 minute10 minutes
Tier 320 requests1 minute10 minutes
Tier 460 requests1 minute10 minutes

Every response includes these headers:

HeaderDescription
x-ratelimit-limitMaximum requests per minute
x-ratelimit-remainingRequests remaining in the current window
x-ratelimit-resetTimestamp when the window resets

When blocked, only x-ratelimit-reset is returned alongside the 429 status.