Skip to content

Errors

Every 4xx and 5xx response uses one envelope:

{
"error": {
"code": "validation_error",
"message": "Request validation failed.",
"request_id": "9f1c2e7a-7b3d-4c1e-8a0a-2f6b1c4d5e6f"
}
}
  • code — a stable, machine-readable string from the table below. Branch on this, not on the human message.
  • message — a human-readable summary. Safe to log or surface; not guaranteed to be stable across releases.
  • request_id — mirrors the X-Request-Id header. Quote it in support requests.

A validation_error (HTTP 400) adds a details object mapping each rejected field to its messages, while the top-level message stays a stable generic string:

{
"error": {
"code": "validation_error",
"message": "Request validation failed.",
"request_id": "",
"details": {
"fips": ["This field is required."],
"page_size": ["Ensure this value is less than or equal to 500."]
}
}
}
CodeHTTPMeaning
unauthorized401Missing or invalid credentials.
forbidden403Authenticated, but not permitted.
subscription_required402A Pro subscription is required to use the API.
tier_upgrade_required402Your plan doesn’t include REST access (on the Free plan, use the MCP server or upgrade).
usage_limit_exceeded402Usage cap for your plan reached; resets at the start of your next billing period.
validation_error400Invalid request parameters. Carries a details field.
not_found404The resource does not exist.
method_not_allowed405HTTP method not supported on this endpoint.
rate_limited429Too many requests — back off and retry. See Rate limits.
internal_error500An unexpected server error.

Errors are never billed: X-Tokens-Used is 0 on any error response.