Skip to main content

Testing and sandbox

Test your Sandbox and Development environments before you launch to production.

Sandbox environment

ValueDescription
Base URLProvided by your system in admin. Later under API → URLs → Sandbox
MarkerUse your Merchant Test Key as merchant_key
EffectsNo real money moves; transactions appear in the admin panel marked as test.

Card scenarios

All sandbox card scenarios use 4111 1111 1111 1111 with any 3-digit CVV; the expiry date selects the scenario:

ExpiryOutcome
01/38Success (immediate settle). Use this for recurring initialization.
02/38Decline by processing.
05/383DS challenge → success.
06/383DS challenge → fail.

Invalid Luhn (e.g., 1111 2222 3333 4444): rejected at form validation with Bad Request. Brand of card does not support.

[!NOTE] For testing recurring, you must use 01/38 for the initial sale. Other expiries do not return a recurring token.

Webhook testing

Your notification_url must be reachable from the public internet for callbacks to arrive. While developing locally:

  • Use RequestBin / webhook.site to capture and inspect raw callback payloads (good for one-off debugging, not for actual integration).
  • Trigger a manual resend from admin panel → Components → Callback Response Management.

Common test recipes

GoalSteps
Successful saleQuickstart payload + card 4111... / 01/38.
3DS successSame payload, expiry 05/38. Verify you receive two callbacks: type=3ds, status=success then type=sale, status=success.
DeclineExpiry 02/38. Verify type=sale, status=fail, reason="Declined by processing.".
Two-step (DMS)Use a MID configured for DMS. The first callback is type=sale, status=success, order_status=pending (funds held, not captured). Then call /payment/capture and observe type=capture, status=success, order_status=settled.
RefundAfter a settled sale, call /payment/refund. Observe type=refund, status=success.
RecurringInitial sale with recurring_init=true (expiry 01/38). Capture recurring_init_trans_id + recurring_token from callback. Call /payment/recurring to charge again.