Skip to content

Errors - codes reference ​

Every error response carries a stable machine-readable code:

json
{
  "error": { "code": "refresh_cooldown", "message": "…", "nextRefreshPossibleAt": "…" },
  "requestId": "req_8f3a2c1e"
}

Branch on error.code only. error.message is human-readable and may change without notice - parsing it will break your integration. Any other field in the error body is informational. Every response also carries an X-Request-Id header (echoed as requestId) - include it when contacting support.

The SDKs surface all of this as typed errors (PartnerApiError.code, .httpStatus / .http_status, .requestId / .request_id).

Codes ​

error.codeHTTPMeaning / how to react
validation_error400Malformed request (missing field, bad format). Fix the request; do not retry as-is.
unauthorized401Missing/invalid X-Api-Key. Check the key and its mode (bb_test_ vs bb_live_).
capability_disabled403The capability (refresh/reconnect/…) is not enabled for your partner config - see GET /v2/partner/config.
operation_temporarily_unavailable403The operation is currently not allowed; retry later.
connection_not_recoverable400The connection is Disabled and cannot be reconnected - create a new one.
consent_inactive403The connection's consent is no longer active - offer the user a reconnect.
not_found404Unknown resource (or not yours).
refresh_in_progress400A refresh is already running; wait for its webhook.
refresh_cooldown400Too soon since the last refresh. error.nextRefreshPossibleAt says when.
refresh_quota_exceeded400Daily refresh quota reached. error.nextRefreshPossibleAt says when.
background_refresh_not_allowed406The bank requires user presence. Side effects: the connection is inactivated and a consent webhook follows. Never retried by the SDKs.
conflict409The request conflicts with the current state of the resource. Re-read the resource before retrying.
rate_limited429Rate limit hit; honor the Retry-After header (the SDKs do).
internal_error5xxOur fault. The SDKs retry idempotent calls with backoff; if it persists, contact support with the requestId.
pilot_provider_not_allowed403The provider is not reachable with this key: sandbox keys (bb_test_…) reach sandbox providers (*_xf) only; live keys reach the real catalog.
sandbox_provider_not_allowed403The provider is a sandbox provider (*_xf) and the key is a live key (bb_live_…). Live connections are real; use a bb_test_… key to test against the sandbox.
pilot_connection_cap_reached409The cap on concurrently active real connections for this key is full. Revoke a connection you no longer need.
application_not_active403Your application is not activated, so it cannot open bank connections. Check its state in the portal.

These two codes are returned only by POST /v1/connections and POST /v1/connections/{connectionId}/reconnect, which fingerprint the request behind an Idempotency-Key:

error.codeHTTPMeaning / how to react
idempotency_key_reused422The Idempotency-Key was replayed with a different request body or X-Client-Id. Use a new key for a new request.
idempotency_key_in_use409The first request with this Idempotency-Key is still in flight. Retry after it has answered; the retry replays its response.

Notes:

  • 401/429 are produced at the gateway and may not carry the full envelope - the SDKs fall back to status-derived codes.
  • The SDKs retry only 429 and 5xx, and POSTs only under an Idempotency-Key; 4xx codes are never retried.