#Testing
Build and verify your entire integration without moving real money. Test mode rides the same endpoints as live — only the API key differs.
#Test mode
Use a test key (sk_test_…, pk_test_…). Everything you create is flagged is_test: true and isolated from live data. Webhooks fire in test mode too, so you can exercise your receiver end-to-end.
#Test cards
When confirming a payment client-side with a test publishable key, use Stripe's standard test cards (any future expiry, any CVC, any ZIP):
| Number | Behavior |
|---|---|
4242 4242 4242 4242 |
Visa — succeeds. |
4000 0000 0000 0002 |
Card declined (card_declined). |
4000 0000 0000 9995 |
Declined — insufficient funds. |
4000 0025 0000 3155 |
Requires 3D Secure authentication. |
The full list is in Stripe's testing documentation. For ACH, see the ACH test payment methods.
#Simulating a terminal payment
Physical readers aren't required in test mode. After creating a terminal payment, present a test card on a simulated reader:
POST /v1/terminal/simulate-payment
| Field | Type | Required |
|---|---|---|
reader_id |
string | ✔ |
{ "data": { "reader_id": "tmr_simulated_…", "status": "succeeded" } }
This endpoint is test-mode only — calling it with a live key returns 400.
#A full test loop
- Register a webhook endpoint (test mode) pointing at your receiver — e.g. a webhook.site bucket or a local tunnel.
- Create a payment with a
sk_test_…key. - Confirm it client-side with a test card, or use the terminal simulator.
- Observe
payment.createdthenpayment.succeeded(orpayment.failed) hit your endpoint. - Verify the signature on each delivery.