Skip to main content

Quickstart

Step 1: Create an Account

Sign up at orbit.devotel.io/signup. The dashboard will route you to your locale-preferred URL automatically. No credit card required — verifying your email is all it takes to unlock the sandbox in the next step.

Step 2: Get a Sandbox API Key

Navigate to Settings > API Keys, create a new key, and set its mode to Test. Sandbox keys are prefixed dv_test_sk_, work immediately with no KYC or approval step, and cost $0 — every sandbox send is simulated in-house and never reaches a real carrier or touches Stripe. Keep the key server-side only. (Live keys are prefixed dv_live_sk_ and bill real traffic — see Step 5: Go Live once you’re ready for production numbers.)

Step 3: Send Your First Message (Sandbox)

The same /messages/<channel> endpoint shape works across SMS, WhatsApp, Email, RCS, Viber, and the other messaging channels — pick the channel you’re integrating first. Voice is separate: place calls with POST /voice/calls (see the Voice example below). Use your dv_test_sk_ key from Step 2 as $ORBIT_API_KEY below — the send is free and instant, with no live traffic risk. Each channel below pairs the raw curl with the equivalent typed Node SDK call side by side — one endpoint, one SDK method, same queued envelope.

SMS

WhatsApp

Email

The full Node SDK reference — every channel helper, plus pagination, webhooks, and error handling — lives at Node.js SDK.

Python SDK

The Python SDK is core-scope — SMS, WhatsApp, and email sends work today; deeper surfaces (voice recordings, conferences, IVR, dialer) are intentionally out of scope. For those, use the Node SDK above or call the REST API directly via the low-level client.request(method, path, ...) escape hatch — see SDK scope by language.

Go SDK

The Go SDK is core-scope and unpublished — client.Messages() + client.Voice() work today; voice conferences/IVR/dialer/recordings are out of scope. For those, use the Node SDK or the low-level client.Request(ctx, method, path, ...) escape hatch — see SDK scope by language.

Ruby SDK

The Ruby SDK is core-scope and unpublished — client.messages + client.voice sends work today; recordings/transcripts/conferences/ IVR/dialer are out of scope. For those, use the Node SDK or the low-level client.request(method, path, **opts) escape hatch — see SDK scope by language.

PHP SDK

The PHP SDK is core-scope and unpublished — $client->messages + $client->voice sends work today; conferences, IVR, dialer, SIP trunks, and recordings are out of scope. For those, use the Node SDK or the low-level OrbitClient::request(method: ..., path: ..., ...) escape hatch — see SDK scope by language.

Java SDK

The Java SDK is core-scope and unpublished — client.messages + client.voice sends work today; recordings/transcripts/conferences/ IVR/dialer and WhatsApp template components are out of scope. For those, use the Node SDK or the low-level client.request(method, path, ...) escape hatch — see SDK scope by language.

C# SDK

The .NET SDK is core-scope and unpublished — client.Messages + client.Voice sends work today; recordings/transcripts/conferences/ IVR/dialer are out of scope. For those, use the Node SDK or the low-level client.RequestAsync(method, path, ...) escape hatch — see SDK scope by language.

Voice

The other six SDKs (Python, Go, Ruby, PHP, Java, C#) cover POST /voice/calls under their core scope — see the per-language sections above. Voice recordings, transcripts, conferences, IVR, and dialer are out of scope for those SDKs; use the Node SDK or the REST API directly via each language’s low-level request(...) escape hatch — see SDK scope by language.
Starting from zero with voice? Walk through the dedicated Voice Quickstart — it covers provisioning a number, configuring an agent with a system prompt, browser-mic testing, and SSE event subscription, all in under 5 minutes.
The first-send snippets above stop at the send. The recipes that round out the loop — voice originate via the escape hatch, the full OTP verify round trip, and a paginated delivery-analytics read — have a per-language tab on the Per-language recipes guide.
Replace $ORBIT_API_KEY with the key from Step 2 (or export it in your shell). Don’t paste your key directly into shared snippets.

Step 4: Check the Response

Every messaging channel – and POST /voice/calls – returns the same queued envelope. Use the shape for the channel you’re integrating first:
Congratulations — you’ve sent your first message with Orbit, for free, in under 5 minutes. A sandbox send keeps its honest test_sent status rather than being promoted to delivered/failed — to trigger a specific delivery-receipt outcome (delivered, undelivered, expired, and 7 others) on demand, send to a recipient number with the matching trailing digit; see Sandbox Magic Numbers. Hook a delivery webhook next: see Webhooks.

Step 5: Go Live

Sandbox traffic never reaches a real carrier, so it’s the fastest way to build and test your integration — but going live requires two more things:
  1. KYC verification. Submit your business documents under Settings > KYC. Once an admin approves your organization, live sending is unlocked — but Orbit is pay-as-you-go with no automatic trial credit, so your live balance stays $0 until you add funds under Settings > Billing. SMS (US or international), WhatsApp, and voice all require both approved KYC and a funded balance before they’ll send.
  2. 10DLC registration for US SMS. Sending SMS to US numbers over live traffic also requires a 10DLC brand + campaign registration — a further compliance step layered on top of KYC, not a substitute for it. The worked campaign body below is the same one from the 10DLC registration guide — copy it as-is and swap in your brand_id:
    See Sender ID Registration for the broader sender-verification context, and 10DLC registration guide for the full walkthrough including throughput tiers and political-vertical cv_token notes.
Once KYC is approved, mint a live key (prefix dv_live_sk_) under Settings > API Keys and swap it in for the dv_test_sk_ key you used above — the request shape doesn’t change.