Test data only
The Sandbox behaves like Live — without the money.
Same endpoints, same validation, same idempotency rules, same webhooks. The only difference is the provider: Sandbox transfers are settled by a deterministic simulator that never makes a network call, so a Sandbox request cannot reach a real payment provider.
https://api.gloresend.com/sandbox/v1Deterministic outcomes
The outcome of a Sandbox transfer is chosen by the last four characters of the destination account_number or phone_number. Any other value succeeds.
| Identifier ends with | HTTP | Result |
|---|---|---|
| anything else | 201 | Transfer succeeds; reserved funds are settled. |
| …0002 | 201 | Transfer is created and immediately fails with `failure_code: destination_account_closed`. |
| …0003 | 504 | Simulates a provider timeout. The transfer is recorded as failed and the reservation is released. |
| …0004 | 502 | Simulates a provider-side error. The transfer is recorded as failed and the reservation is released. |
| amount + fee > available | 402 | insufficient_funds; no transfer is created. |
Simulated balances
Each Sandbox wallet starts with 1,000,000 units of its currency. Add more with POST /test/fund.
Clearly labelled
Every Sandbox object carries test_data: true, and the dashboard marks Sandbox views with an amber TEST DATA indicator.
Separate keys and storage
Sandbox keys start with gs_test_ and are rejected by the Live base URL. Sandbox and Live records are filtered by environment on every query.
Ready for real money? Live access is requested from the dashboard by an organization owner with two-factor authentication. See Environments.