Guides

Errors

Errors use standard HTTP status codes and a consistent JSON body with a machine-readable code.

json
{
  "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.