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 with sk_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

BrandNumberResult
Visa4242 4242 4242 4242Succeeds, no authentication
Mastercard5555 5555 5555 4444Succeeds, no authentication
Amex3782 822463 10005Succeeds (CVC is 4 digits)

Declines & authentication

NumberResult
4000 0025 0000 3155Requires 3-D Secure authentication (test the challenge flow)
4000 0000 0000 0002Declined — generic card_declined
4000 0000 0000 9995Declined — insufficient_funds
4000 0000 0000 0069Declined — expired_card
4100 0000 0000 0019Blocked — 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. 1. Create a payment link with your sk_test_… key.
  2. 2. Open the returned url and pay with 4242 4242 4242 4242.
  3. 3. Watch the payment.succeeded webhook arrive (and find the event in GET /v1/events).
  4. 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.