Card numbers that approve
Use any future expiration date and any billing postal code.
Simulating declines
The duplicate rule exists to catch accidental double-submits, and it applies
in test mode too. If your test payment unexpectedly declines right after a
successful one, vary the amount and try again.
A declined test payment behaves exactly like a real decline: the checkout
session stays
open, the buyer can retry in place, and the decline reason is
readable as decline_code on the Charge at the PaymentIntent’s latest_charge_id.
See Decline codes.
What test mode does not simulate
- 3-D Secure challenges — Ionic does not currently run 3DS flows, so
there are no 3DS test cards.
payment_intent.requires_actionis defined in the webhook catalog but is not emitted. - Settlement timing — test payments complete immediately.
Going live
Test cards only work with test-mode keys (sk_v1_test_...). When you switch
to live keys, real cards are charged — see Going live
for the full checklist.
What’s next
Go live
Switch to live keys and run the go-live checklist.
Decline codes
Look up what each card decline means and whether the same card can succeed later.
Reliable API requests
Retry safely and recover when a response does not arrive.

