A failed payment is not one thing but three: wrong card data, an unfinished authentication step, or an acquirer-side risk decision. The correct response to each conflicts with the others — bad data means fixing it and retrying, an unfinished check means completing 3DS, and a risk block means every extra retry makes things worse. Identify the category from the error text first, then act. Stripe suggests a maximum of eight retries for a single charge and notes that issuers may read additional retries as potential fraud.
Why a charge works one month and fails the next
When a charge arrives, the issuer’s automated systems decide whether to authorise it using signals such as spending habits, account balance and card data including expiry date, address information and CVC [2]. The same subscription succeeding last month and failing this month usually means one of those signals changed, not that the card broke.
For subscription charges, a few signals matter more than the rest:
- Billing address— whether it matches the one on file with your issuer;
- How many times the same charge has been submitted in a short window;
- Whether the issuing country and the network environment’s location conflict — Stripe notes that a card issued in one country used from an IP address in another may be declined as possible unauthorised use, while acknowledging that travelling internationally is a legitimate exception [2];
- Your issuer’s default blocking rules: some issuers block online transactions, cross-border transactions or certain merchant categories by default [2].
Only by separating these can you tell what to change next. Changing the wrong thing adds failures, and the failure count is itself a risk signal.
When you can see the code: use this table
Stripe normalises the reasons issuers return into a fixed set of decline codes. Cardholders rarely see them, but they do appear in virtual-card apps, banking apps and payment debugging views. The table below picks out the codes most relevant to subscription charges; both the meaning and the next step are taken from Stripe’s own documentation [1] [2].
| Code | What the official documentation says it means | What the official documentation says to do next |
|---|---|---|
incorrect_number / invalid_number | The card number is incorrect | Try again with the correct card number |
incorrect_cvc / invalid_cvc | The CVC is incorrect | Try again with the correct CVC |
incorrect_zip | The billing postal code is incorrect | Try again with the correct billing postal code |
incorrect_address | The billing address is incorrect | Try again with the correct address |
invalid_expiry_month / invalid_expiry_year | The expiry date is invalid | Try again with the correct expiry date |
expired_card | The card has expired | Use another card |
insufficient_funds | The card has insufficient funds for this purchase | Use an alternative payment method |
withdrawal_count_limit_exceeded | The balance or credit limit on the card has been exceeded | Use an alternative payment method |
card_velocity_exceeded | The balance, credit limit or transaction-amount limit on the card has been exceeded | Contact the card issuer |
currency_not_supported | The card does not support this currency | Check with the issuer whether the card can be used for this currency |
card_not_supported | The card does not support this type of purchase | Check with the issuer that the card can be used for this type of purchase |
authentication_required | The transaction requires authentication such as 3D Secure | Retry and complete the authentication step; an off-session renewal cannot complete an interactive check |
authentication_not_handled | The transaction proceeded without the required authentication | Run the full 3DS or SCA flow |
processing_error | An error occurred while processing the card | Retry; if it still fails, contact the issuer |
do_not_honor | Declined for an unknown reason | Contact the card issuer |
generic_decline | Declined for an unknown reason, or blocked by Stripe Radar or Adaptive Acceptance | Contact the card issuer |
transaction_not_allowed | Declined for an unknown reason | Contact the card issuer |
pickup_card / restricted_card | This card cannot be used for this payment (it may have been reported lost or stolen) | Contact the card issuer |
fraudulent | Stripe suspects the payment is fraudulent | Stripe instructs merchants not to give the cardholder a more specific reason and to present it as generic_decline |
lost_card / stolen_card | The card has been reported lost or stolen | The specific reason is not disclosed to the cardholder |
Two things to watch when reading this table. First,a code tells you who declined, not always why: do_not_honor, generic_decline, transaction_not_allowed all three carry the official description “declined for an unknown reason”. Second, Stripe states plainly that issuers categorise most declines as generic and that, for privacy and security reasons,an issuer discusses the specifics of a decline only with its own cardholder [2]. So “the code doesn’t explain it” is the normal outcome, not a gap in the information.
When all you see is “card was declined”
This is the most common case: the page shows one generic line. That is not laziness on the page’s part but a direct result of the rule above — the issuer did not hand over the detail, so the merchant has nothing to show.
There is exactly one correct next step:contact your issuer and ask why this charge was declined. Swapping cards, changing addresses and resubmitting are all changes made without knowing the cause: the result is uninterpretable and the failure count keeps climbing.
The OpenAI help centre directs failed renewals to three places: whether the issuer blocked the charge, whether the billing details match the issuer’s records, and whether a regional payment restriction applies [3]. That order matches the one here: ask the issuer first, check the details second, and treat regional factors last.
Three causes whose remedies conflict
The codes above fall into three groups, each with its own set of actions. Mixing them cancels the effort out.
| Category | Typical codes | What to do | Does retrying help? |
|---|---|---|---|
| Incorrect card data | incorrect_*, invalid_*, expired_card | Check each field against the card and the billing address, then resubmit | Yes, provided you actually fixed it |
| Authentication not completed | authentication_required, authentication_not_handled | Retry and run the full 3DS or SCA flow | Only if the check is completed |
| Acquirer- or issuer-side risk control | generic_decline, do_not_honor, fraudulent, card_not_supported | Ask the issuer about the restriction, or use another card | Repeated retries make the assessment worse |
The third group has an easily missed branch:generic_decline is officially described as including payments blocked by Stripe Radar or Adaptive Acceptance [1]. In that case the charge may never have reached the issuer, which is why the bank’s support team finds no record — not because they are stonewalling, but because the request genuinely did not get that far. The tell is this: if the bank has no authorisation record at all, the problem is more likely on the acquirer side than the issuer side.
Retry or not: read the advice code
Alongside the decline code, Stripe returns an advice code that states directly whether the charge can be retried [2]:
do_not_try_again— do not use this card again for the same transaction;try_again_later— you can retry later;confirm_card_data— the information provided is wrong, so check the card details first.
With no code to read, work from this principle:do not submit the same charge on the same card more than once or twice in a row. Stripe notes that the card networks limit how often a single charge may be reattempted, suggests a maximum of eight, and warns that issuers may read extra retries as potential fraud — making legitimate charges more likely to be declined, not less [2].
Subscriptions add another layer: an automatic renewal is an off-session charge, so when it triggers authentication_required there is no way to surface an authentication page for the cardholder to complete 3DS. Stripe’s guidance is to complete authentication on-session first and save it, then use that for later charges [1]. That is why “the first manual subscription went through but the renewal failed” keeps happening.
A step-by-step checklist
Work through these in order, submitting once after each change. Do not change several variables at the same time.
- Check the card details digit by digit: card number, expiry date, CVC. Copy from the app rather than typing from memory.
- Billing address and postal code: what counts is the one recorded in your issuer’s system, not one that merely looks plausible. A random local address will not pass verification.
- Balance and limit: confirm there is enough for this charge, and check whether an existing pre-authorisation hold is occupying part of the limit.
- The card’s feature switches: some cards ship with online, cross-border or subscription charges switched off, and they must be enabled in the app.
- Submission frequency: resubmitting the same charge in a short window is itself a risk signal.
- Network and device environment: Stripe lists a mismatch between issuing country and IP location as a possible cause of decline [2]. Switching environments frequently makes that signal worse.
If it still fails after all six, stop retrying and contact the issuer. The most useful things you can give them are the time of the failure, the amount, the merchant name, and any code you saw.
When you must contact the issuer
In any of the following cases, the next step belongs to the issuer, not the merchant’s page:
- The code is
do_not_honor,generic_decline,transaction_not_allowed,security_violation,service_not_allowed— the official next step for each of these is that the cardholder contacts the issuer [1]; - The code is
card_not_supportedorcurrency_not_supported, and you need to confirm whether the card is permitted for this type of purchase or this currency; - The code is
card_velocity_exceeded,pickup_cardorrestricted_card; - the same card works at other merchants and only this one fails;
- you have already failed more than three times on the same card.
When you call, ask three questions directly: did this charge reach your authorisation system; if it did, what was the decline reason code; and does this card carry any extra restriction on online, cross-border or subscription transactions.
What not to do
- Do not retry repeatedly on the same card. See the retry limit and fraud-assessment notes above.
- Do not open a new account because a payment failed. A failed payment and an account deactivated for policy violations are two different things, and treating them as one adds risk. See ChatGPT and Claude Account Bans: Preventing and Appealing Them Under the Official Rules.
- Do not “get it through” with someone else’s card or a payment agent. Sharing accounts and payment credentials are both grounds for deactivation under the two platforms’ terms.
- Do not trust “internal channel” or “guaranteed approval” services. A decline is decided by the issuer and the acquirer; no third party can change it on your behalf, and this site does not offer ways to evade risk controls.
A failed payment does not by itself change your account status or prevent a later subscription. What makes things worse is retrying repeatedly without knowing why.
Frequently asked questions
Can a failed ChatGPT Plus payment get my account banned?
They are separate paths. OpenAI’s terms treat a payment that cannot be completed differently from an account deactivated for violations: the former may lead to the account being downgraded or access suspended until payment is received. This article covers only the payment step; for a deactivated account, use the official appeal channel.
Does changing the billing address actually help?
Address verification is a signal used by both the issuer and the acquirer, and Stripe says that when it fails the cardholder should verify the details before another attempt. The premise is that the address you enter matches the issuer’s record; a random local address will not pass and may worsen the risk score.
My virtual card was declined — will a physical card do better?
Stripe notes that some card types restrict the categories they can buy (FSA and HSA cards, for instance, are limited to specific merchants), so card type is genuinely one of the signals an issuer returns. But this site does not treat card type as a guarantee of approval, nor does swapping card types replace proper diagnosis.
The bank says it cannot find the transaction, but the page said it failed?
That suggests the request never reached the issuer. The official description of <code>generic_decline</code> includes being blocked by Stripe Radar or Adaptive Acceptance; in that case the charge was stopped on the acquirer side and the bank will have no record of it.
How many times should I resubmit the same charge?
Read the advice code: <code>do_not_try_again</code> means do not use this card again; <code>try_again_later</code> means you can retry later; <code>confirm_card_data</code> means check the details first. With no code visible, contact the issuer rather than resubmitting.