Error & status codes

Every code you can receive, and the correct reaction.

Envelope

{ "error": { "type": "insufficient_scope", "message": "Missing required scope: payments:read",
  "request_id": "req_9f21c" } }

Always log request_id — support can trace any call with it.

HTTP status map

Status Meaning Retry?
400 Malformed request or bad parameter No — fix the call
401 Token missing, expired or revoked Refresh once, then stop
403 Permission, suspension or mode problem No
404 Object not found for this merchant No
409 Conflicting state No — re-read, then decide
422 Semantically invalid No
429 Rate limited Yes, honour Retry-After
500/502/503 Our side Yes, exponential backoff with jitter

API error types

Type Cause Fix
invalid_request Unknown parameter, bad pagination value Correct the request
invalid_token Expired or revoked access token Refresh; on failure treat the install as gone
insufficient_scope Scope not granted Request it in a new version, re-consent
installation_suspended Merchant or app suspended Back off, keep data
installation_uninstalled App was removed Stop calling, delete data
mode_mismatch Test token against live data or vice versa Use the right credentials
not_found Wrong id, or not this merchant's object Check the id
rate_limit_exceeded Quota exhausted Backoff per Retry-After
internal_error Unexpected failure Retry, then contact support with request_id

OAuth errors

Returned on the redirect (?error=…) or from the token endpoint.

Code Cause
access_denied Merchant declined consent
invalid_request Missing parameter, e.g. no code_challenge
invalid_client Wrong client id, or wrong mode
invalid_grant Code expired/used, refresh token rotated away, bad code_verifier
redirect_uri_mismatch URI is not an exact registered match
invalid_scope Scope unknown or not approved for your app
unsupported_grant_type Only authorization_code and refresh_token exist

Authorization codes are single-use and expire after 10 minutes.

Webhook-side failures

Your response Our behaviour
2xx Delivered, done
3xx Treated as a failure — we do not follow redirects
4xx Retried on the standard schedule
5xx / timeout (>10 s) Retried on the standard schedule
Failing 72 h continuously Endpoint auto-disabled, you are notified

Retry recipe

Retry only 429 and 5xx. Exponential backoff starting at 1 s, factor 2, max 5 attempts, plus random jitter of up to 250 ms.