status: DECLINED, the response carries a declineReason object that explains why.
Only
message is written for the cardholder. code is for your integration.codeis a machine-readable identifier for your backend logic, monitoring, and support tooling. Branch on it to route the cardholder to a top-up screen, prompt for a PIN re-entry, surface a “card blocked” support flow, alert your on-call team, and so on. Do not show the code, or a label derived from it, to end users: some codes describe your own systems rather than anything the cardholder did.messageis plain English copy safe to show the cardholder as it is. You can also write your own copy keyed offcodewhen you want fuller control over the experience.
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 apolicy 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
Your authorization endpoint
External authorization projects only. Reap fails closed: when your authorization endpoint does not return a valid decision, Reap declines the transaction. These codes tell you the decline came from your endpoint, so you can investigate on your side without contacting Reap support.
The decline carries the same
transactionId and eventId Reap sent your endpoint, so you can find the request in your own logs. See Reconciliation.
The cardholder message for both codes is a generic “couldn’t be completed” message that does not mention your systems.
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.