Errors
Errors use standard HTTP status codes and a consistent JSON body with a machine-readable code.
{
"error": {
"code": "BAD_DATE",
"message": "pay_date must be YYYY-MM-DD",
"request_id": "req_Q1w2E3r4T5y6",
"docs_url": "https://…/docs/errors#bad_date"
}
}Branch on error.code, not on the message — messages may be reworded. Codes are stable within an API version.
Retrying
Retry 429 and 5xx responses with exponential backoff and jitter. Don't retry other 4xx responses; they won't succeed without a change. All endpoints are read-only, so retries are always safe.
Error codes
API_KEY_REQUIRED HTTP 401
No key was sent.
Send Authorization: Bearer <key>.
API_KEY_INVALID HTTP 401
The key is unknown or has been revoked.
Check for whitespace or truncation; create a new key in the dashboard if it was revoked.
ACCOUNT_SUSPENDED HTTP 403
The account is suspended.
Contact support; requests resume as soon as the account is reactivated.
ACCOUNT_CANCELLED HTTP 403
The subscription was cancelled.
Contact us to reactivate.
TRIAL_EXPIRED HTTP 402
The plan's trial ended without conversion.
Request an upgrade from your dashboard.
PLAN_FEATURE HTTP 403
The request uses a feature your plan doesn't include (for example as_of or the change feed).
Remove the parameter or upgrade.
MISSING_PARAMETER HTTP 400
A required parameter is missing.
The message names the parameter.
BAD_PARAMETER HTTP 400
A parameter has an invalid value.
The message explains what is allowed.
BAD_DATE HTTP 400
A date is not YYYY-MM-DD.
Send ISO calendar dates such as 2025-10-15.
BAD_AS_OF HTTP 400
as_of is not a valid timestamp.
Send ISO 8601, e.g. 2025-06-30T23:59:59Z.
BAD_SINCE HTTP 400
since is not a valid timestamp.
Send ISO 8601.
VALIDATION HTTP 400
The request failed validation.
Read the message for details.
NOT_FOUND HTTP 404
The jurisdiction, version or route doesn't exist.
Check the code or id; list jurisdictions to see valid codes.
RATE_LIMITED HTTP 429
Too many requests this minute.
Wait for the Retry-After seconds, then retry with backoff.
QUOTA_EXCEEDED HTTP 429
The monthly request quota of a hard-capped plan is used up.
Upgrade, or wait for the next calendar month (UTC).
INTERNAL HTTP 500
Something went wrong on our side.
Retry with backoff. If it persists, send us the request_id.