Errors and limits

Errors are JSON with a stable code you can program against; message is for humans and may change.

{ "statusCode": 403, "code": "access.denied", "message": "This key is not allowed to do this" }
Status Code Meaning
400 resource.unknown_filter, resource.bad_filter_op, resource.bad_filter_value, resource.bad_sort, resource.bad_limit, resource.bad_parameter, resource.bad_id Fix the request
401 credential.invalid Missing, unknown, revoked or expired key or token
402 billing.inactive No active subscription
403 access.denied Outside the grants
403 credential.ip_not_allowed Key used outside its IP allowlist
403 exact.division_disabled Administration not enabled in the dashboard
403 exact.forbidden Exact Online refused (the connected Exact user lacks rights)
404 resource.unknown, exact.not_found No such resource or record
404 exact.not_connected An administrator must connect Exact Online
409 exact.needs_reauth An administrator must reconnect Exact Online
422 exact.rejected Exact Online rejected the request's content
429 rate_limited, exact.rate_limited Slow down; honour Retry-After
502 exact.unavailable Exact Online is unavailable; retry later
503 exact.paused The gateway paused calls to a failing Exact endpoint; retry after Retry-After

Rate limits

Every 429 and retryable 503 carries Retry-After (seconds). Retry with backoff; never retry 4xx other than 429.