Sandbox

The sandbox environment lets you test your integration without processing real payments.

Sandbox vs Live

FeatureSandboxLive
Base URLSame (/v2/partners)Same (/v2/partners)
API Keysvgn_test_... keysvgn_live_... keys
PaymentsSimulated (no real charges)Saved card or wallet, real charge
Rate Limits5x higher than productionStandard limits
WebhooksDelivered with sandbox: trueDelivered normally
Ledger/PSPNever touchedReal wallet ledger and card PSP

The environment is determined entirely by the API key you use. Both environments expose the same endpoints and accept the same request formats, and every product listing response includes metadata.environment ('TEST' or 'LIVE') so you can confirm which mode you are in.

Simulated Payments

The sandbox accepts the same payment methods as live mode: saved_card and wallet. In sandbox mode:

  • The payment is always approved immediately. No payment processor or wallet ledger is contacted.
  • A real sandbox order record is created (so GET /orders and GET /orders/:id work against it) with all products in COMPLETED status.
  • Customer records are isolated: sandbox orders are attached to internal sandbox+ prefixed users, so test data never collides with real customers.

Response

POST /orders in sandbox returns the same shape as live mode, with a sandbox_ transaction ID prefix, the created order ID, and the sandbox flag:

json
{
	"transactionId": "sandbox_a1b2c3d4e5f67890",
	"status": "COMPLETED",
	"statusLabel": "COMPLETED",
	"orderId": "0d9c1c7e-3f4b-4d2a-9b1e-2f6a8c5d7e90",
	"sandbox": true
}

Webhooks in Sandbox

Sandbox order creation triggers an order.completed webhook delivery whose payload carries sandbox: true:

json
{
	"event": "order.completed",
	"data": {
		"orderId": "0d9c1c7e-3f4b-4d2a-9b1e-2f6a8c5d7e90",
		"transactionId": "sandbox_a1b2c3d4e5f67890",
		"status": "COMPLETED",
		"sandbox": true,
		"externalReference": "YOUR-ORDER-REF-001"
	},
	"timestamp": "2026-03-20T14:31:15.000Z",
	"webhookId": "..."
}

Later status-change events (order.failed, order.refunded, order.cancelled) are never emitted for sandbox orders.

Testing Tips

  • Test webhook delivery in sandbox to verify your endpoint handles payloads and signature verification correctly. Branch on data.sandbox to keep test events out of production flows.
  • Rate limits in sandbox are 5x the production limits, giving you room to test rapidly.
  • Use distinct idempotencyKey values per test run; idempotency replay works identically in sandbox.