Skip to main content
Every key is issued for exactly one network — kp_test_… or kp_live_… — and that choice reaches everything the key can see or touch. There is no network field to pass yourself: it comes from which key you used.

Testnet

Real chain activity, on each chain’s public testnet. Free assets, no financial risk, safe to script and re-run.

Mainnet

Real assets with real value. Withdrawal policies, allowlists and approval thresholds apply exactly as configured — nothing here is relaxed for convenience.

What’s isolated per network

  • Entities and accounts — a testnet customer and a mainnet customer with the same externalId are two unrelated records.
  • Balances — a testnet balance is not a preview of a mainnet one; they never share a ledger.
  • Withdrawal policies and allowlists — configure each network independently. An address allowed on testnet is not allowed on mainnet until you add it there too.
  • Webhooks — deliveries are tagged for the network that produced them; a single endpoint can receive both if you register it under both keys.

Moving from testnet to mainnet

Nothing about the integration changes beyond the key: same endpoints, same request and response shapes, same error codes. When you’re ready, swap kp_test_… for kp_live_… and configure that network’s policies and allowlists — testnet’s do not carry over.