Skip to main content
Use these values with any test-mode checkout — hosted, embedded, or payment links. Test payments never move money and never touch the card networks.

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_action is 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.