Environments and sandbox
Staging
Staging (https://wallet-staging.simpleeasytransactions.com) runs the same code as production against the provider's sandbox. No real money moves. Use set_test_ keys.
The provider's sandbox cannot complete hosted verification links or move money, so SET adds simulators under /v1/sandbox/* (staging only; production answers 404):
| Call | Stands in for |
|---|---|
POST /v1/sandbox/customers/{id}/approve | The customer completing KYB or KYC |
POST /v1/sandbox/deposits {virtualAccount, amount, sender?} then /v1/sandbox/deposits/{id}/advance | A bank transfer into a virtual account, step by step |
POST /v1/sandbox/cash_out_payments {cashOutAddress, amount, fromAddress?} then /{id}/advance | Stablecoin into a Cash-Out Address and its payout |
POST /v1/sandbox/conversion_payments then /{id}/advance | A conversion payment |
Everything simulated is labelled "Sandbox:" and has sandbox: true. A sandbox deposit is never delivered, because nothing reached a chain.
What the sandbox does not do: currency endorsements are not checked (endorsement_required never appears), live deposit instructions are synthetic, and GET /v1/virtual_accounts/{id}/microdeposits is always empty.
A first run in staging
POST /v1/customers { "externalId": "test-1", "type": "business", "name": "Test Merchant LLC", "email": "test@example.com" }
POST /v1/sandbox/customers/{id}/approve
POST /v1/payment_setups { "customer": "cus_…", "way": "wallet", "asset": "usdc-base", "address": "0x…",
"beneficiary": { "type": "customer", "walletType": "self_custodied", "ownershipVerifiedAt": "2026-11-01T12:00:00Z" } }
POST /v1/sandbox/deposits { "virtualAccount": "…", "amount": "250.00" }
POST /v1/sandbox/deposits/{id}/advance (repeat until payment_processed)
GET /v1/eventsOn Windows PowerShell 5.1, call with curl.exe (not the curl alias) or Invoke-RestMethod:
Invoke-RestMethod -Method Get -Uri https://wallet-staging.simpleeasytransactions.com/v1/ping -Headers @{ Authorization = "Bearer $env:SET_TEST_KEY" }Local demo
The set-wallet-kit repository runs a fully simulated copy of the API on your own computer (npm run sandbox:api, then http://localhost:8788; npm run sandbox:merchant for the Merchant API and its order form). It runs SET's real API code with the provider simulated; nothing leaves the computer.
Going live
- SET completes KYB on your business and the platform oversight review (platforms) and you sign SET's terms.
- SET registers your legal details for the Travel Rule and issues a
set_live_key with your fee and webhook URL. - Your merchants verify live; the sandbox approval call does not exist in production.
- Your first live movement is watched end to end by SET's compliance owner.