Short answer
Show a message that asks for the billing ZIP of the card, not the shipping address. Check that your form sends the postal code field the customer typed, and doesn’t prefill it from the shipping address or a profile. Then let the customer try again.
Rather not fix it yourself? Stripe Billing Fix and Setup handles it at a fixed price, agreed before work starts.
Why the ZIP fails, and the fix
01
The customer entered the wrong postal code
“The customer needs to try again using the correct billing postal code.” Stripe, Decline codes (incorrect_zip)
People often type their shipping or home ZIP when the card is billed to another address, such as a work card or a recent move. A clear message fixes most cases.
02
The form prefills or sends the wrong field
A checkout that copies the shipping ZIP into billing_details, or a saved profile ZIP, sends a value the customer never checked. Let the customer see and edit the billing postal code, and pass it as billing_details.address.postal_code.
// Stripe.js. Only pass billing_details if your Payment Element is set to // fields.billingDetails.address: 'never'; otherwise the element collects the postal code itself. const { error } = await stripe.confirmPayment({ elements, confirmParams: { return_url: 'https://example.com/done', payment_method_data: { billing_details: { address: { postal_code: billingZip } }, // billingZip: from your form }, }, }); if (error && (error.code === 'incorrect_zip' || error.decline_code === 'incorrect_zip')) { showMessage('Check the billing ZIP of your card.'); }03
You see a decline, but no incorrect_zip
“A card issuer might still consider a payment that fails CVC or postal code verification legitimate, and therefore approve it.” Stripe, Radar rules
Radar has rules that block payments when the postal code check fails. A payment blocked by a rule is a Radar block, not a bank decline, so check the payment’s Radar details in the Dashboard. Some banks approve a payment that fails the check, so a rule can block payments the bank would have accepted. Decide on the rule from your fraud rate.
04
A saved card has an old ZIP
A saved card or wallet can carry the postal code from before a move. Let the customer edit the billing address or add the card again.
05
Cards from outside the US
Postal codes outside the US have other formats, and some banks don’t check them at all. Don’t force a five-digit ZIP format on every card.
Checked against the vendor’s docs on : Stripe docs: Decline codes; Stripe docs: Radar rules.
Rather hand it over?
Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.
- $950Stripe Billing Fix and SetupSubscriptions, webhooks, customer portal and failed payments set up or fixed, tested in Stripe test mode.See scope and start
- from $450App Fix TicketOne reproducible bug in an existing mobile or web app, diagnosed and fixed.See scope and start
- from $450AI-Built App RescueA Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.See scope and start
“Working with Simon makes everything run so smoothly and better than I could ask for it. Amazingly communicative, extremely knowledgeable of coding and the backend processes. I strongly recommend.”
Related: Stripe incorrect_cvc · Stripe card_velocity_exceeded · Stripe generic_decline · Stripe incorrect_number