Sandbox & test values
The sandbox is a fully isolated environment (separate database) running the Simulator rail. Use it to build and test without moving real money.
- Base URL:
https://api-sandbox.starpay.example - Keys:
sk_test_…only (live keys are rejected here)
Magic values
The instrument you send drives a deterministic outcome:
Mobile money (msisdn)
| Number | Outcome |
|---|---|
0240000000 |
Success |
0240000001 |
Insufficient funds |
0240000002 |
Times out on the first attempt, then succeeds (exercises provider failover) |
Card
| Card number | Outcome |
|---|---|
4084 0840 8408 4081 |
Success |
4084 0840 8408 4082 |
Declined |
Name enquiry
Any instrument ending 0001 returns "no match" (404 not_found) — use it to
exercise the recipient-verification failure path on payouts. Everything else
resolves to a fixed holder name.
Rates & trades
The sandbox uses the venue simulator: the USD leg is ≈ 1.0000 and the USD/GHS
FX rate is a fixed 12.50, so USDT/GHS benchmarks around 12.50. Quotes carry
the standard 45s TTL — let one lapse to see rate_expired on execution.
To trade you must be approved on the ladder for sandbox (see
Authentication → Service access); a sk_test_ key on a
not-yet-approved merchant returns 403 compliance_block.
Stablecoin deposits (sells)
A sell creates an order awaiting an on-chain deposit to the address it
returns. Custody runs on the offline custody simulator (no chain), so the
deposit is simulated by delivering a Cobo-shaped, signed deposit event to the
custody webhook receiver — the same path a real Cobo callback takes. Confirmation
thresholds come from the asset registry (1 confirmation on TRON, 12 on Ethereum).
Under/over-payments and post-expiry deposits are handled explicitly (parked for
re-quote or excess-hold); watch for the deposit.confirmed and trade.settled
webhooks.
These let you assert success, failure, and failover paths end-to-end before going live. Webhooks fire in the sandbox exactly as they do in production.