sk_sandbox_) and production keys (sk_live_). Every new project starts in sandbox. Sandbox keys place real calls, but under guardrails designed for safe testing.
Sandbox minutes
A sandbox key places real calls from one shared Wave number. Each project has 15 sandbox minutes. Wave counts the answered seconds of the project’s ended sandbox-key calls (not simulated calls). The cap is 900 seconds.- Sandbox calls are never billed.
- When the minutes are used up, a real sandbox call returns
403witherror_code: SANDBOX_MINUTES_EXCEEDED. - Simulated calls (the test numbers and the
x-wave-simulateheader below) place no call. They keep working after the minutes are used up. - You can call any valid destination. There is no destination lock.
Go-Live
A project goes live through its own Go-Live. You apply in the dashboard, a Wave admin reviews the request, assigns the project its own phone number, and Wave creates a production key for the project. Other projects of the same organization stay as they are. Your sandbox keys stay active after Go-Live. Production calls do not use sandbox minutes.Keys see only their own environment
A sandbox key reads and acts on sandbox data only, and a production key on production data only. This holds for every list, every read by id and every action on a call, callback or campaign.- Lists (
GET /v1/calls,GET /v1/callbacks,GET /v1/usage,GET /v1/campaigns) return the rows of the key’s environment. They acceptenvironment: leave it out, or send the key’s own value. Another value returns400 VALIDATION_ERROR. - Reads and actions by id (a callback, a call recording, in-call control, transfer, conference, callback cancel, campaign pause, resume and stop) return
404for a row of the other environment, as if it did not exist. - New campaigns take the key’s environment.
Reset the sandbox
In the dashboard, Reset sandbox deletes the sandbox calls of the selected project only. An organization owner or admin, or the admin of that project, can do this.Test numbers & simulated errors
Force specific outcomes without depending on a live call, in two ways. The header wins if both apply. Reserved test number
The
x-wave-simulate header
Set x-wave-simulate on POST /v1/callback to force an error variant (sandbox keys only — production ignores it):

