sk_test_ key can’t reach production and a sk_live_ key can’t reach sandbox, so the wrong-environment class of accident can’t happen.
Funding a balance
Payouts debit a balance, and nothing pays into a sandbox account on its own. Create money:Deterministic outcomes
Real rails fail in real ways — a wallet rejects, a bank times out, a customer never approves the prompt. Sandbox lets you trigger each one on purpose.Payouts — the amount’s cents choose the outcome
So
150.00 completes, 150.07 goes pending and then fails — same code path your production integration will hit.
Collections — the amount’s cents choose the outcome
Validation — the account number’s suffix chooses the outcome
Simulated inflows
Money arriving has no natural trigger in sandbox, so there are endpoints for it:POST /v1/simulations/virtual-account-deposit— a customer transferred into a virtual account (choosecompletedorfailed).POST /v1/simulations/checkout-deposit— a payer completed a bank-transfer checkout session.- Crypto deposits: send real testnet tokens to the address, or use the checkout page’s dev tools locally.
GET /v1/simulations returns this whole table as JSON, so your test suite can read the rules rather than hardcode them.
What sandbox won’t tell you
Sandbox proves your integration — envelopes, idempotency, webhook handling, state machines. It doesn’t prove a specific rail’s behaviour on a Tuesday afternoon in Lagos: real settlement times, real operator downtime, real limits. Treat theestimatedSettlement values in capabilities as the honest production guide.
Moving to production
You can create ask_live_ key and use the production API from day one — change nothing but the key and base URL. The one thing gated is sending payouts with real money: production access is enabled per organization. Email api-support@chippercash.com with your organization name and use case.