IOSOR Learn

Sandbox vs production keys: a cutover checklist without double billing

A developer checklist for cutting over from sandbox to production API keys on a prepaid white-label platform — without double billing, blind spots, or leaked test traffic.

A test key left live in a production build is how a load test becomes a real invoice. A production key pasted into a staging environment "just to check" is how a staging bug reaches real recipients. This guide is for engineering leads running a prepaid white-label integration who need a clean sandbox-to-production cutover — one that does not double the bill or double the blast radius.

IOSOR keeps sandbox and production on separate keys, separate credit posture, and separate webhook targets by design — the cutover checklist below is what makes that separation actually hold once a real launch date is on the calendar. Near USD 1,000+ monthly platform usage, a botched cutover is not a bug report, it is a reconciliation project.

Why sandbox/production confusion becomes a billing incident

Mistake What happens
Sandbox traffic left pointed at the production key after go-live Test messages billed as real sends
Production key used in a load test Real prepaid spend for synthetic traffic
Both keys active with no environment flag Nobody can explain which environment produced which invoice line

What separates a sandbox key from a production key

  • Distinct credential identity, never a shared key with an "environment" query parameter
  • Different rate limits and, where relevant, different destination reachability
  • Separate webhook/callback targets so test events never reach production listeners
  • Clearly different prefix or label in the dashboard — no guessing by staring at the string

The cutover sequence that avoids double billing

  1. Freeze sandbox traffic and confirm nothing in production code still references sandbox credentials
  2. Issue the production key with least-privilege scope for the actual send types in use
  3. Point webhooks and callback URLs to production endpoints before the first real send
  4. Run one real, deliberate send with the production key and verify the ledger line matches expectation exactly
  5. Revoke or downgrade the sandbox key's ability to reach real destinations once cutover is confirmed

Key rotation and revocation without downtime

Rotate on a schedule and immediately after any suspected leak — but stagger revocation: issue the new key, confirm live traffic on it, then revoke the old one. Simultaneous issue-and-revoke is how a mid-flight deploy loses authentication for real customer traffic.

Red flags

  • One shared key toggled by an environment variable instead of two real credentials
  • Sandbox webhook signature checks disabled "to make testing easier"
  • No record of who issued which key or when
  • Production cutover done without a rollback plan for the sandbox path
  • Load tests run against the production key "just this once"

Start with IOSOR

Open the IOSOR console credentials panel to audit active API keys and verify that your test environment uses distinct sandbox prefixes.

How do I handle idempotency debt in my second month of API usage? · How do we parse DLR status codes to identify carrier blocks? · How does a wallet volume review help with spend governance?

IOSOR takeaway

Using identical credentials across environments or toggling behavior with a simple flag inevitably leads to synthetic load hitting production channels and unexpected billing events. Clear credential isolation with distinct prefixes and dedicated webhook endpoints guarantees that test traffic never consumes real balance or fires live events.

Do stagger key rotation by issuing new production credentials and confirming active message flow before revoking old keys. Don't rely on a shared API key toggled by a query parameter or disable webhook signature validation to shortcut staging tests.

Was this guide helpful?

Related guides