Skip to main content
When a transaction has status: DECLINED, the response carries a declineReason object that explains why.
code is for your integration; message is for the cardholder.
  • code is a machine-readable identifier intended for your backend logic - branching on it to route the cardholder to a top-up screen, prompt for a PIN re-entry, surface a “card blocked” support flow, and so on. Do not render the code string itself to end users.
  • message is human-readable English copy safe to display directly to the cardholder as a sensible default. You can also write your own copy keyed off code whenever you want fuller control over UX.
This page groups every code that can appear in declineReason.code by what your integration or the cardholder can do about it. For lifecycle context (when a decline is recorded, what webhook fires) see Decline at authorization.

Cardholder can self-resolve

The cardholder can take an action and retry.

Network-mandated limits

The transaction exceeded a limit enforced by the platform. Trying a smaller amount or waiting for the limit window to reset usually resolves it.

Merchant or transaction restriction

The card cannot be used for this particular transaction. The cardholder should use a different payment method or merchant; retrying the same flow will not help.

Spending policy controls

The transaction was blocked by a spend policy you configured. The declined transaction also carries a policy reference naming the exact policy responsible, so you can tell which rule fired. Retrying the same transaction will not help until the limit window resets or the policy is changed.

Requires support or program action

The card or account is in a state that the cardholder cannot resolve themselves - your team needs to act, or the cardholder needs to contact support.

Security

Catch-all

If you need the underlying reason for a specific transaction that came back as INTERNAL_ERROR, contact Reap support with the transaction ID. In External authorization projects, INTERNAL_ERROR is also what the cardholder sees when your authorization endpoint does not respond in time or returns an invalid response. Reap fails closed and records the underlying cause on its side.