Errors

Branch on the HTTP status code. A failure returns the same envelope with description carrying the reason, and no machine-readable code.

Bridge uses conventional HTTP status codes. A failure returns the same envelope, with data absent and description carrying the reason.

{ "description": "No financial account exists for the given account number" }
Code Meaning
400 The request was malformed or failed validation. description names the problem.
401 Missing, invalid, expired or revoked credentials.
403 Authenticated, but not permitted to do this.
404 No such resource, within this tenant.
409 The request conflicts with existing state.
410 The thing you referenced has expired.
429 Rate limited. Back off and retry. See Rate limits.
500 Something failed on our side.
503 A dependency is unavailable. This is the status where retrying the same request is the right response.

Branch on the status code, never on the description. There is no machine-readable error code on the wire today, and the description is prose for a person. A client that pattern-matches on error text breaks on a copy edit.

A timeout is not a failure you can assume. If a money movement times out, retry it with the same idempotency key: you’ll get the original result, never a second movement. See Idempotency.