Get started
Testing
Build and verify your whole integration in test mode— no real money moves, nothing settles to your balance, and no payout is ever triggered. Flip to live only when you're ready to charge real cards.
Test mode vs live mode
Every API key is bound to one mode. The key prefix tells you which:
sk_test_… · pk_test_… → testsk_live_… · pk_live_… → live- • A resource is permanently tagged with the mode of the key that created it (
livemode: true|false). A payment link created withsk_test_…always checks out in test mode, even after your account goes live — exactly like Stripe. - • Test charges never touch your real balance and never produce a payout. They show up in the dashboard behind the Test toggle, kept separate from live data.
- • In the dashboard you switch the view with the Test ⇄ Live pill in the top bar (available once you're verified). Over the API there's no switch — just use the test or live key.
Test cards
Use these on the hosted checkout (or your widget) while in test mode. Any future expiry date, any CVC, and any postal code are accepted.
Successful payment
| Brand | Number | Result |
|---|---|---|
| Visa | 4242 4242 4242 4242 | Succeeds, no authentication |
| Mastercard | 5555 5555 5555 4444 | Succeeds, no authentication |
| Amex | 3782 822463 10005 | Succeeds (CVC is 4 digits) |
Declines & authentication
| Number | Result |
|---|---|
| 4000 0025 0000 3155 | Requires 3-D Secure authentication (test the challenge flow) |
| 4000 0000 0000 0002 | Declined — generic card_declined |
| 4000 0000 0000 9995 | Declined — insufficient_funds |
| 4000 0000 0000 0069 | Declined — expired_card |
| 4100 0000 0000 0019 | Blocked — flagged as fraud (Radar) |
Minimum charge still applies in test mode (≈ 10 USD equivalent), so use an amount at or above the floor when testing a successful payment.
A quick end-to-end test
- 1. Create a payment link with your
sk_test_…key. - 2. Open the returned
urland pay with4242 4242 4242 4242. - 3. Watch the
payment.succeededwebhook arrive (and find the event inGET /v1/events). - 4. Confirm the charge appears under the dashboard's Test view and your live balance is untouched.
Going live
Swap your sk_test_… key for the sk_live_… one, point your webhook endpoint at production, and re-run the same flow with a real card. Nothing else in your code changes — the request and response shapes are identical across modes.