invalid_account: what this Stripe decline code means when the account behind the card is gone
lane: request_updateinvalid_accountThe card, or account the card is connected to, is invalid. Stripe's suggested next step is for the customer to contact their card issuer to check that the card is working correctly.
What it means
The issuer says the card, or the account behind it, is invalid. Not short of funds, not over a limit, not suspicious: invalid, as in the thing your charge points at no longer works as an account. The usual stories are a closed bank account, a card cancelled outside the lost-and-stolen flow, a number retired in a portfolio migration, or a card that was never activated. The issuer isn't more specific, and Stripe can't be more specific than the issuer.
For a renewal this is as final as expired_card, without the courtesy of a printed date. There is no report behind it and no disclosure rule attached, so you are free to talk to the customer about it; you just don't have much to say beyond the fact that the stored card has stopped being a card.
The uncomfortable part is the question underneath: whether there is a customer left to write to. Some of these accounts closed because a person switched banks and everything else about them is unchanged. Some closed because a business folded, or a life changed, or the account holder is no longer there. The decline can't tell you which, and any message you send is written into that uncertainty.
Why it happens
A closed account
The customer ended the relationship with that bank, and the card died with the account. Everything else about the customer may be exactly as it was.
A cancelled card on a live account
Cardholders cancel individual cards, products get discontinued, downgrades happen. The account can be healthy while the specific credentials you hold are void.
A migration that retired the number
Bank mergers and portfolio moves invalidate old card ranges. Some of those surface as expired_card, some as this, and the issuer's choice of code is not something you control.
Never activated, or closed for dormancy
A card saved before its owner activated it, or an account an issuer shut for inactivity, can both come back invalid. Some issuers report these more specifically; plenty don't.
Common mistakes
Retrying it
Invalid is a state, and it doesn't drift back to valid. Every attempt asks the same question of the same dead account, and the only thing that changes the answer is different card details.
Writing the email as if the card broke
Someone who deliberately closed an account reads there is a problem with your card as a small piece of nonsense, and someone dealing with the reasons an account closed reads it worse. Neutral copy survives every version: the bank declined the charge, add a card to continue.
Confusing it with new_account_information_available
Stripe's docs give the two codes the same description sentence, word for word, and the names carry the only distinction. The neighbouring code's name at least implies replacement details exist somewhere; this one implies nothing. Treat both as the stored details being finished, and let the name calibrate your hope.
How Lirova handles it
Lirova routes invalid_account to request_update: zero retries, and an email asking for a new card. It is worth being plain about how odd that is. The account behind the card may be closed, which makes please add a card a message to someone who may have left, about an account that no longer exists. We send it anyway, and the reasoning is narrow. The alternative lane, stop, schedules the same number of retries, none, so the choice between them changes nothing about attempts and everything about what the customer hears. stop says nothing to anyone. request_update says something imperfect to the people who are still there: the ones who changed banks, kept the subscription in mind, and need a working card on file. The email is written for them and wasted on the rest, and a wasted email costs less than a silent cancellation.
An advice code from the issuer, or the payment's own state, can route the case before the code's lane is consulted, here as everywhere.
FAQ
What does invalid_account mean in Stripe?
The card, or the account it is connected to, is invalid. The stories behind it include a closed bank account, a cancelled card, a number retired in a migration and a card never activated, and the issuer doesn't say which. It is a statement about validity rather than funds or risk.
Should I retry an invalid_account decline?
No. Invalid is a state, and it doesn't drift back to valid, so every attempt asks the same question of the same dead account. Different card details are the only thing that changes the answer.
What should I tell the customer after an invalid_account decline?
Something neutral that survives every version of the story: the bank declined the charge, and adding a card keeps the subscription going. Avoid claiming the card is broken, because the account may have been closed on purpose, and avoid guessing at reasons you don't have.
What is the difference between invalid_account and new_account_information_available?
Stripe's docs give the two codes the same description sentence, so the names carry the only distinction. new_account_information_available implies replacement details exist somewhere; invalid_account implies nothing. Treat both as the stored details being finished.
Related codes
Updated 2026-09-01