Decline code
Incorrect Number
`incorrect_number` means the card number submitted with the charge doesn't pass validation or doesn't match a real, issuable card. Stripe's own definition: "The card number is incorrect." Almost always this comes down to a typo: a digit transposed, dropped, or misread while entering the card.
Why it happens
This decline shows up heavily around manual entry moments: a new customer signing up and typing their card number by hand, or an existing customer updating their payment method after a prior failure. Long card numbers, usually sixteen digits, are easy to mistype, especially on mobile keyboards or when reading the number off a physical card. Because the number itself fails basic validation before it even reaches the issuing bank in a meaningful way, this is a submission problem, not a reflection of the customer's actual card or account.
How to fix it
No amount of retrying changes a wrong card number into a right one. Every attempt against the same incorrect digits produces the same decline. The only way forward is the customer re-entering the number correctly. Here's the honest picture of what actually happens today. Foxhound's decline classifier places recognized declines into one of four named buckets: soft, network, expired, or fraud, with an unknown bucket for anything unrecognized. `incorrect_number` does not have a dedicated case in the four named buckets. Anything the classifier doesn't specifically recognize falls to the unknown bucket, which fails closed rather than retrying: no automatic retry runs against it. So an `incorrect_number` failure goes straight to a card-update email rather than a silent retry, which is the right outcome, since a retry has no way of succeeding against a card number that was simply typed wrong. That's exactly why going straight to a card-update request works better than a retry ever could: a short, plain message asking the customer to confirm their payment details, without dwelling on the specific reason, tends to get faster action than waiting would.
How Foxhound recovers it
This code has no dedicated bucket in the recovery engine's classification sets, so it fails closed rather than defaulting to a silent retry: no repeat charge runs against a code Foxhound cannot classify. Recovery goes straight to the same email sequence expired cards get, carrying the hosted card-update link, until this code earns its own bucket.
Questions
See what this looks like on your account
The free audit shows what Stripe already recovered and what is still dying, no signup required.
Run your free audit