Environment
Tulu Switch has two environments: TEST (sandbox) and LIVE (production), each with its own API base URL.
| Environment | Base URL |
|---|---|
| TEST (Sandbox) | https://api.sandbox.switch.tulupay.com |
| LIVE (Production) | https://api.switch.tulupay.com |
TEST (Sandbox) Environment
Use TEST keys during development and integration. All operations are sandbox-scoped: no real money moves, and providers use their own test/sandbox APIs.
Base URL
https://api.sandbox.switch.tulupay.comKey prefixes
pk_test_...sk_test_...Key characteristics
- Uses provider sandbox APIs (Paystack test keys, Flutterwave test keys, Seerbit test keys)
- Wallet balances, transactions, and pool data are scoped to TEST — entirely separate from LIVE data
- Webhooks fire to your TEST-configured URL
- Stablecoin operations use testnet chains (e.g. base-sepolia, hedera-testnet)
- No KYB requirement — any registered account can generate TEST keys
- Bank transfer (payout) operations are hard-blocked in TEST mode — attempting them returns a 400 error
LIVE (Production) Environment
LIVE keys route all operations to production provider APIs and process real money. LIVE access is gated — your account must pass additional checks before LIVE keys can be generated.
Base URL
https://api.switch.tulupay.comKey prefixes
pk_live_...sk_live_...Environment Resolution
Point your requests at the correct base URL for the environment you want, and use the matching key prefix:
- Use
https://api.sandbox.switch.tulupay.comwithpk_test_/sk_test_keys for TEST. - Use
https://api.switch.tulupay.comwithpk_live_/sk_live_keys for LIVE. - All wallet lookups, pool operations, and webhook deliveries are scoped to whichever environment the request targets.
Using a TEST key against the LIVE base URL (or vice versa) will be rejected — base URL and key prefix must match.
LIVE Access Gate
Your account must meet all of these requirements before LIVE keys can be generated or LIVE operations can proceed:
- Email address verified
- Account status is
ACTIVE - KYB compliance status is
APPROVED— not DRAFT, PENDING, or REJECTED
Accounts that are SUSPENDED, DEACTIVATED, or INACTIVE cannot access either environment until the status is resolved.
Key Differences
| Aspect | TEST | LIVE |
|---|---|---|
| API Base URL | https://api.sandbox.switch.tulupay.com | https://api.switch.tulupay.com |
| Key prefix | pk_test_ / sk_test_ | pk_live_ / sk_live_ |
| Real money | No | Yes |
| Provider APIs | Provider sandbox (test) APIs | Provider production APIs |
| Bank payouts (transfers) | Blocked — returns 400 | Allowed |
| KYB required | No | Yes (complianceStatus = APPROVED) |
| Stablecoin chains | Testnets (base-sepolia, etc.) | Mainnets (base, etc.) |
| Hedera chain | hedera-testnet | hedera |
| Webhook URL | TEST-configured URL | LIVE-configured URL |
| Wallet / pool data | Separate (test) rows | Separate (live) rows |
Best Practices
- Keep TEST and LIVE key pairs in separate environment variable files and never mix them
- Complete all integration testing in TEST before generating LIVE keys
- Configure separate webhook URLs for TEST and LIVE so test events do not pollute your production event log
- Use the Swagger API Reference (
/docs/builderor/docs/customer) to explore endpoints before coding