Skip to main content
When a payment is declined, the Charge records the reason in decline_code and decline_type, and the PaymentIntent returns to requires_payment_method. Confirming the PaymentIntent returns 402 with code PAYMENT_DECLINED and the same fields.

Where to read the code

A PaymentIntent’s charges list is ordered oldest first, so use latest_charge_id for the most recent attempt.

Decline types

retryable: true means the same card could succeed on a later attempt, for example after funds are deposited or a limit resets. It does not mean an immediate retry will succeed.

Codes

Authorization declines

retryable
The card does not have enough available funds.
retryable
The card reached an amount or frequency limit.
retryable
The card reached a limit on the number of transactions.
retryable
The issuer declined without giving a reason.
retryable
The card was declined for an unspecified reason.
retryable
The card cannot be used for this payment, including when the cardholder stopped recurring payments to the merchant.
not retryable
The card has expired.
not retryable
The card number is invalid.
not retryable
The security code is incorrect.
not retryable
The payment was declined as a duplicate of a recent one.

Authentication declines

These codes report a fraud signal from the issuer.
not retryable
The card was reported stolen.
not retryable
The card was reported lost.
not retryable
The issuer suspects fraud.
not retryable
The issuer asked for the card to be retained.
not retryable
The card is restricted.
not retryable
The issuer reported a security violation.

Infrastructure declines

retryable
An error occurred while processing the payment.
retryable
The card issuer could not be reached.
retryable
The payment could not be completed now.
not retryable
The payment was rejected before it reached the card issuer, for example because the card type is not supported.

Messages the buyer sees

Ionic-hosted checkout and hosted invoice pages show the buyer one message per code. Every authentication code shows the same neutral message, so the buyer does not learn which fraud signal the issuer reported. Use the same approach on payment pages you build.

Other payment outcomes

See Errors for the error envelope and every status code.

Test declines

In test mode, a charge under $1.00 declines with generic_decline. To test how your integration handles a specific code on a subscription renewal, arm a collection scenario with that decline_code. See Test cards.