Test and Live are fully isolated environments. The API key prefix (sk_test_ vs sk_live_) encodes the environment, so a Test key can never address Live data and vice versa.
Exact comparison
How isolation works
The environment is determined by the key prefix before any database query runs. The API:
- Extracts the bearer token from the
Authorization header.
- Reads the prefix (
sk_test_ or sk_live_).
- Hashes the key with SHA-256.
- Looks up the hash in the database, scoped to the claimed environment.
- If the stored environment does not match the prefix, the key is rejected.
This means a Test key cannot reach Live data even if the hash matches a Live key row — the environment mismatch is a hard stop.
Producing quotes in each environment
A Test key cannot create commitments. The commitment endpoint returns commitment_rejected when called with a Test key.
Webhooks per environment
Webhook endpoints are scoped to one environment. A Test endpoint receives only Test events; a Live endpoint receives only Live events. When you create a webhook endpoint, you choose the environment it subscribes to.
When to use Test
- Developing and testing your integration
- Running simulations to verify pricing
- Testing quote production without affecting Live customers
- Verifying webhook signature validation
When to use Live
- Serving real customer requests
- Producing quotes that customers see
- Creating commitments (holds, deposits, handoffs)
- Receiving real commitment events via webhooks
Switching environments
To switch between Test and Live, use a different API key. There is no mode-switching parameter on the API — the key determines the environment. Mint a Live key from the Developers page when you are ready to go to production.
Rate limits per environment
Rate limits are scoped to account and environment. Test and Live have separate quotas. A burst of Test requests does not consume your Live rate limit.