https://api-sandbox.therius.io/v1, prv_sandbox_... keys) is a fully isolated environment. Requests are handled by the built-in Therius sandbox provider, which simulates responses without touching a card network — no real money moves. This page lists the test data that drives each simulated outcome.
The card numbers below apply to the built-in Therius sandbox provider. If you have configured a real provider in sandbox/test mode (for example Stripe test keys), that provider’s own test-card set applies instead — use the numbers from their documentation.
Using the test cards
- Send the request with a
prv_sandbox_...key, or add the headerX-Environment: sandbox. - Use any future expiry (for example
12/29) and any 3-digit CVV (for example123). - American Express requires a 4-digit CVV (for example
1234).
Approvals
Declines
Each of these card numbers returns adeclined status with a matching refusalCode — see Declined Payments for the full code reference.
3D Secure
3DS is enabled per route, not per card — the step-up decision is made by a 3D Secure step in the routing pipeline. The default seeded sandbox route sends the BINs below through the built-in 3DS simulator and then to the sandbox gateway, so these cards work out of the box.Walking through the challenge card
1
Submit the purchase
Charge
4000002500003155. The response is:2
Send the shopper to the challenge URL
Redirect to
actionRequired.url. The sandbox simulator treats the challenge as instantly completed — no interaction is required.3
Resume the payment
Call
POST /payment/resume with { "sessionId": "..." } and your Authorization: Bearer prv_sandbox_... header — the prv_sandbox_ prefix routes to the sandbox. Sessions are single-use and expire after 15 minutes. A successful resume returns the final PaymentResponse with status: "captured".The sandbox gateway refuses the two 3DS BINs (
40000032200, 40000025000) if they arrive without ECI/CAVV data — so an approval proves the 3DS handoff actually happened, rather than the step being silently skipped.Alternative payment methods
SetpaymentMethod.type to the method you want to test instead of "card". No card number is needed. Each method returns a deterministic sandbox response:
Subscriptions in the sandbox
- Create a subscription with any approval card above. It is stored on the sandbox database, fully separate from production.
- The dunning worker processes sandbox subscriptions on the sandbox schedule.
- Webhook deliveries for sandbox events are written to the sandbox delivery log and are marked with
"environment": "sandbox"in the payload.
Idempotency in the sandbox
TheIdempotency-Key header is optional in the sandbox but behaves exactly as it does in production — retrying with the same key returns the cached first response. Build the habit here so your production code is already correct. See Idempotency.
