Sandbox
A newly registered merchant organization has status SANDBOX. API credentials created for that organization call the same routes as a live organization. Collection, payout, bank transfer, and card checkout for a sandbox organization are answered by a simulator. They do not call MTN, Airtel, Pegasus, Yo, or the PegPay card host. The sandbox is not a production payment environment.
The simulator reads the organization status stored on the account. A request field cannot switch that status. A call with no organization, or with a status other than SANDBOX or LIVE, is refused before any provider request. It is not treated as a live payment.
devwallet.ssentezo.com. That host is not defined in this codebase. Sandbox behavior comes from the organization status on this application, not from a second host. A LIVE organization still uses the configured providers.
What you can test
- Authentication errors, by omitting or changing the Basic header.
- Validation errors, by sending an amount below 500 or a bad phone number.
- Balance, bank list, transaction history, and status for references on that organization. The playground can run these for a signed-in sandbox merchant.
- A simulated collection, payout, bank transfer, or card checkout. Use one of the test numbers below. Any other number stays pending and is not sent to a provider.
Simulated outcomes
Put the test number in msisdn, or include the matching token in your reference. Any other number or reference stays pending. The same choice is reused when status is checked later. Checking status again does not create a second payment. These numbers and tokens apply only to a SANDBOX organization. On a LIVE organization they do not select a simulated result.
The public status API still reports the wallet row. A simulated success becomes SUCCEEDED when the existing status checker runs. It does not do that at the moment the request is accepted. Pending and timeout stay unresolved. A timeout is not proof that the payment failed: the status checker leaves it pending and does not send a failure callback. The simulator does not send a callback.
| Outcome | Test number | Reference token |
|---|---|---|
| Success | 256770000001 | sandbox-success |
| Failure | 256770000002 | sandbox-failure |
| Pending | 256770000003 | sandbox-pending |
| Timeout | 256770000004 | sandbox-timeout |
Timeout does not open a provider connection. It stays pending, the same way an unanswered provider request stays pending. It is not reported as FAILED. There is no simulated cancellation status. Callbacks are still unsigned, and this simulator does not send one. No simulated provider callback is emitted. Signed webhook delivery stays off unless that organization enables it. Pegasus and card credential lookups read local secret rows and do not contact those providers. A Yo status check waits when its transaction cannot be resolved.
Statuses the API returns
| API value | Meaning |
|---|---|
| SUCCEEDED | Internal status 3, completed. |
| FAILED | Internal status 4. |
| PENDING | Any other internal status, including pending, approval, manual retry, reconcile, and reversed. |
There is no public cancelled or timed-out status. Leave an order pending until the status API says SUCCEEDED or FAILED.
Resetting a workspace
There is no API to wipe a sandbox organization. Create a new external reference for each attempt. References are unique forever, including references used on a request that failed validation after the row was stored.
What stays on the live path
A LIVE organization uses the existing MTN, Airtel, Pegasus, and Yo calls. The simulator runs only when the organization status is SANDBOX. InterSwitch registration in this repository does not call an InterSwitch host. Signed webhook delivery stays off unless that organization enables it.
Ssentezo Developers