Networks, test mode and live mode
Test mode runs on the Monad testnet with test USDC; live mode on Monad mainnet. The API key chooses.
ZyloPay runs on two Monad networks. Your API key decides which one a request uses.
| Test mode (sandbox) | Live mode | |
|---|---|---|
| Secret key prefix | zp_test_sk_ | zp_live_sk_ |
| Network | Monad testnet | Monad mainnet |
| Chain ID | 10143 | 143 |
| USDC | test USDC 0x534b2f3A21130d7a60830c2Df862319e593943A3 | USDC 0x754704Bc059F8C67012fEd69BC8A327a5aafb603 |
livemode on objects | false | true |
| Business verification | not needed | needed for live keys and payments |
| Webhook URLs | http or https | https only |
| Rate limits (per key, per minute) | 600 reads, 120 writes | 1500 reads, 300 writes |
One API, two separate worlds
Both modes use the same base URL, https://zylopay-api.fly.dev/api/v1, and the same endpoints. Everything else is separate per mode:
- Objects. A test key never sees live payments, intents, refunds, terminals, events or webhook endpoints, and the reverse. A lookup with the wrong mode's key answers
404 resource_missing. - Terminals. A terminal is provisioned for one network. Its device key works only there.
- Passes. A customer's wallet pass is issued for one network. A testnet pass tapped on a mainnet terminal is declined with
pass_wrong_network. - Merchant ID. Your merchant has one on-chain ID per network. You register on each network separately with Go Live in the dashboard. Until you do, payment intents answer
409 account_not_live. - Webhook endpoints receive only the events of their own mode.
kyb.status_changedis the one event sent in both modes. - Idempotency keys are scoped per mode.
Do not send a network header
The dashboard and ZyloPay's own apps send an X-Network header. The public API does not need it: the key is the source of truth. If you send X-Network and it contradicts the key, the API refuses the request with 400 network_mismatch instead of guessing.
Switching the dashboard
The dashboard shows one mode at a time. Use the network switch in Settings (or the banner in Sandbox) to move between them. API keys of both modes are listed together; webhook endpoints and terminals follow the selected mode.
What test mode does not simulate
Test mode is a real network with test money, not a mock. There are no magic amounts or test card numbers. A test payment needs a testnet terminal and a testnet pass, exactly like a live one. See the testing guide.