Base URL:
https://api.zeam.money/gw/v1The sandbox uses the same base URL as production. Which environment a
request runs in is determined by your application’s registration and role, not
by the host. Sandbox and production credentials are separate.What the sandbox is for
- Authenticating: issuing an access token and calling protected endpoints.
- Building the payment flow end to end: wallets, connectors, quotes, and P2P, swap, and off-ramp payments.
- Exercising deterministic off-ramp outcomes.
- Testing your webhook handling.
- Validating your error handling against the RFC 7807 contract.
Sandbox versus production
- Same base URL. Sandbox and production share
https://api.zeam.money/gw/v1; your application’s registration determines the environment, so there is no host to switch. - Separate credentials. Sandbox and production credentials are distinct and not interchangeable. See Register your application.
- No real value moves. Off-ramp payouts are simulated (see below); no funds reach a real mobile-money or bank account.
- Same contract. Endpoints, request and response shapes, and error formats match production, so your integration code does not change between them.
Off-ramp testing
In the sandbox, off-ramp execution is simulated so you can test both outcomes deterministically. The simulator decides the result from the sender’s MSISDN (mobile number):- Sender MSISDN ends in
111: the off-ramp succeeds. - Sender MSISDN ends in
000: the off-ramp fails. - Any other ending is treated as a failure.
The simulator evaluates the sender MSISDN that the platform resolves for the
off-ramp. The gateway’s
POST /v1/payments/offramp request does not itself
carry a sender MSISDN field.202 Accepted with a
transactionRecordId, and the simulated outcome arrives afterwards. Poll the
transaction or receive webhooks to observe it.
1
Submit the off-ramp
cURL
202 Accepted
2
Confirm a success (sender MSISDN ends in 111)
A successful simulation moves the transaction to
completed and emits the
IntentSuccessful webhook event.GET /v1/transactions/{transactionRecordId}
3
Confirm a failure (sender MSISDN ends in 000)
A failed simulation moves the transaction to
failed and emits the
IntentFailed webhook event.GET /v1/transactions/{transactionRecordId}