The developer loop: sandbox → playground → first live send
This guide walks the full first-week loop in one pass: provision a sandbox key, see what the Sandbox page gives you, drive a real request through the API playground, lift the generated curl and SDK code out of it, and graduate the same call to live when you are ready. Two other guides cover each half in depth: Sandbox and test mode and API playground. This one is the connective path — the order to do things in, and what to expect as you move between surfaces.1. The sandbox primitives
- The test key prefix. Sandbox keys start with
dv_test_sk_. The prefix decides the mode: a test key is always sandboxed on every request, and no request header can override it. - Cost: $0. Sandbox sends are simulated end to end — no provider is called and no balance moves, so you can mint and exercise a key before any KYC or funding step.
- A response marker. Every sandboxed response carries
meta.test_mode: true. Assert on that marker in your tests rather than on which key you meant to use. - Deterministic outcomes. The trailing digit of the recipient picks the delivery result:
+15005550002delivers,+15005550003does not. The full table lives at Sandbox magic numbers.
2. Open Developer → Sandbox
The Sandbox page is the orientation surface for a first session. It gathers everything you need before you send anything:
Do two things here before moving on: mint a
dv_test_sk_ key (or copy one you created under Settings → API keys), and note the sandbox sender +15550100 you will send from.
3. Take the same key into Developer → API playground
The playground is the dashboard’s interactive request builder. It picks the first active key that matches the current mode, so with your new test key in place, flip the builder’s toggle to Sandbox and the status line under the form names yourdv_test_sk_ key. With no matching key, Send stays disabled.
The page lays out in three panes:
- Endpoints (left) — a curated catalog of the most-used public endpoints, grouped under Messages, Voice, Contacts, Campaigns, and more.
- Request builder (centre) — a form rendered from each endpoint’s schema, with the global Sandbox/Live toggle in its header.
- Code + result (right) — the code preview (cURL, Node, Python, Go, Ruby, PHP), the response card, and Recent requests.
4. The worked full loop
-
Provision. Mint a
dv_test_sk_key from the Sandbox page’s Test API keys card, or under Settings → API keys. - Open the playground and flip the toggle to Sandbox. The status line should name your test key.
-
Pick the endpoint. Under Messages, choose Send SMS (
POST /messages). -
Fill the form.
channel—sms;to—+15005550002;from—+15550100;body—Hi from Orbit! -
Hit Send. The response card shows a success badge and a body like:
test_sentis the terminal sandbox state: the message was accepted and simulated, not dispatched. -
Lift it as curl. The code panel renders the same request:
The panel masks your key to prefix plus last four — substitute the full key before you run it in a terminal.
-
Lift it as SDK code. Switch the panel to Node, Python, Go, Ruby, or PHP: the same request through the official SDK for that language, reading the key from
ORBIT_SANDBOX_KEY. Paste it into your codebase and your integration now makes the exact call you just verified by eye. -
Exercise a failure path. Send again with
toset to+15005550003and inspect the failed shape in the response card — that is the response your retry and alerting logic must parse.
5. What the playground does not do
- No live carrier dispatch. In sandbox mode every send terminates at
test_sentor the simulated failure you chose. No real phone rings. - No wallet-side effect. Nothing deducts from your balance, and sandbox traffic never appears on an invoice.
- Sender validation still applies. The sandbox simulates delivery, not permission:
frommust be a sender in your tenant, which is why the worked example uses the sandbox sender+15550100. - History is browser-local. The request list lives in that browser only. Clearing browser data starts fresh; the durable record is Request Logs.
6. The same call, live
When the loop above passes:- Complete KYC and fund your balance — both are required before live sending.
- Mint a live key (
dv_live_sk_) under Settings → API keys. A test key is never promoted; the prefix is the mode, so going live always means a new live key. - Flip the playground toggle to Live, or swap
ORBIT_SANDBOX_KEYforORBIT_API_KEYin your code, and send the same body. The request is real now: it dispatches and it bills. - Walk the production go-live checklist for numbers, webhooks, and compliance. The Sandbox page’s pre-launch checklist card shows what remains.
See also
- Quickstart — first sandbox key and first send in five minutes
- API playground — the full playground reference, including its failure-mode table
- Sandbox and test mode — the key, header, and session-auth routing matrix
- Sandbox magic numbers — every trailing-digit scenario