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 at GET /v1/payment_intents/{id} under charges[0].decline_code.
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.
