Resources

Sandbox scenarios

The sandbox runs the same code as production against the same catalogue. Only issuing and money are simulated.

What is identical to live

  • The catalogue, plan IDs, filters and pricing logic.
  • Validation, idempotency, rate limiting and the error envelope.
  • Order and eSIM objects, field for field.
  • Wallet debits, refunds and the transaction history.
  • Webhook delivery, signing and retries.

What is simulated

  • Nothing is provisioned on the live network. eSIMs are generated locally with a valid-looking ICCID and LPA activation code.
  • The QR image is real and scannable but the profile behind it is not a working eSIM — installing it gives no connectivity.
  • Usage never changes on its own: a sandbox eSIM stays ALLOCATED with zero bytes used.
  • Your balance is play money, topped up by Journey Stack. Debits and refunds behave exactly as in live.

Reproducing each failure

ScenarioHow to trigger it
unauthorizedSend a malformed key, or revoke a key in the portal and reuse it.
invalid_requestPOST /orders with plan_id set to "not-a-uuid", or quantity 0.
days rejected on a fixed planOrder a plan where validity.billed_per_day is false and send days: 5.
not_foundOrder a well-formed UUID that is not in the catalogue.
insufficient_fundsOrder quantity 50 of an expensive plan until the sandbox balance runs out, or ask support to zero it.
rate_limitedFire more than 120 requests in a minute from a loop.
idempotent replaySend the same order twice with one Idempotency-Key and compare the response headers.
order.completed webhookPlace any sandbox order with a sandbox webhook URL registered.
bash
# idempotent replay: the second call returns 200 with Idempotent-Replay: true
curl -si -X POST $BASE/orders -H "Authorization: Bearer $JS_KEY" \
  -H "Content-Type: application/json" -H "Idempotency-Key: demo-1" \
  -d '{"plan_id":"'"$PLAN_ID"'","quantity":1,"days":3}' | head -n 12

Always run one live order before launch

Sandbox cannot prove that a real profile installs. Buy a single cheap live eSIM, install it on a real device and confirm your delivery email end to end.

Prefer clicking to curl? Use the sandbox console.