Skip to main content

Make your first outbound PSTN call

Two paths turn a new Orbit account into a phone that dials the PSTN:
  • Option A — register a SIP trunk with your own PBX or softphone software, and let API-origin calls dial out over it.
  • Option B — the browser softphone, where an agent dials straight from a web page with no SIP client to install.
Both end at the same place: an outbound PSTN call with a readable lifecycle (ringing → answered → completed). This guide walks either path end to end and links the deep-dive page for the path you pick.
Every outbound leg terminates through the Devotel softswitch. A trunk you register here is one origin surface; the termination path stays on Orbit’s own network either way.

From one call to a verified pipeline

The walkthrough below puts a single outbound call on the wire. What it leaves untouched is the part operators run every day: before any dial leaves the account, preview how it routes; as dials run, watch outcomes from the dashboard’s Voice → Calls console instead of polling raw statuses; and on retries or cold traffic, chain into the sibling guides that cover pacing, timing, and gates. The sequence below is the same one that shows up on every voice onboarding checklist.

1. Gate before the first dial

Run the pre-flight send gates checklist so the campaign does not trip on spend caps, quiet hours, or missing ownership of the caller-ID DID after the first call has already gone out.

2. Route with a preview, not a guess

If recipients on the campaign are reachable over more than one channel (SMS, WhatsApp, RCS, voice), call the smart-route-preview endpoint first. It returns the channel the router would pick, the ordered fallback chain, and a per-message cost estimate — without dispatching anything. For pure voice campaigns, use it to confirm voice is the selected surface before pacing begins.

3. Pace cold numbers and cold audiences

New numbers and new senders are rate-sensitive. Throttle the ramp with the number warming phases and daily caps (10DLC senders), and pick dial windows with best time to dial rather than sending the full audience at hour zero.

4. Verify and monitor from the Calls console

Once dials run, open Voice → Calls in the dashboard for live verification: each call row shows the lifecycle (ringing → in_progress → completed / failed / no-answer) plus recordings when calls were placed with record: true. That page is the verification loop of record — a failed dialed-leg, an unexpected terminal state, or a missing recording shows on the console first. For API-side verification on retry-aware campaigns, track delivery outcomes with DLR outcomes monitoring instead of hand-polling terminal states.

5. Find the gap from delivery logs

When the console shows an anomalous outcome (fallback fired when it should not have, a no-answer cluster at a specific hour), drill into the delivery logs the route-preview guide introduced — the same forensic read applies whether the failing hop was the route choice or the dial itself. Putting it together: buy → gate → preview → pace → monitor is one pipeline, and the Calls console is its verification point. The sections below walk a single call end to end; bring the loop above into play as soon as the account moves past the first call.

1. Prerequisites

Which prerequisite applies depends on the path:
  • Option A (SIP/trunk): a SIP-capable PBX (FreeSWITCH, Asterisk, 3CX) or a desktop SIP client (for example MicroSIP or Linphone), plus inbound SIP-credentials you mint on the account.
  • Option B (browser softphone): an HTTPS page and a browser with a microphone grant — the same rules the browser softphone guide lists in full.
  • Either path: at least one voice-enabled DID in the account to present as caller ID, and an API key with voice scope if you dial via the API.

2. Buy a voice-capable number

If the account has no DID yet, work through Buy and provision numbers — search inventory with capabilities=voice (or sms,voice when messaging will share the number), purchase, and poll the order until the line reports provisioned:
Keep the E.164 of the purchased number — it is the from on every dial below, and it is the only caller ID the outbound surface accepts.

3. Option A — register a SIP trunk

This path connects your own phone system to Orbit. The full lifecycle (direction choice, probe-before-save, credential capture, routing, monitoring) is a nine-step walkthrough in Connect a SIP trunk; the short version for a first call:
  1. Create the trunk with the carrier-facing details:
The same create in cURL and in every published SDK. The SDK tabs use each client’s untyped request method, the escape hatch documented in the raw-request cookbook: same auth, same retry, same typed errors, and exact parity with the API whether or not a typed helper wraps the route yet.
The create returns the trunk row. status reads unregistered until your PBX completes its first REGISTER against the SIP edge host shown in Settings → SIP trunks:
Response
  1. Register the device that will originate calls (your PBX, or a SIP client on an agent’s desk) against the SIP edge host shown in Settings → SIP trunks, using the digest or IP-allowlist auth the trunk is configured with.
  2. Skip to section 5 — once the originating surface exists, the dial step is identical to Option B.
A trunk that fails to register never carries the first call — run the pre-save probe (POST /api/v1/voice/sip-trunks/probe, exercised in sip-trunk-setup) and it names the failing phase (DNS, connect, or REGISTER) instead of a generic rejected call.

4. Option B — the browser softphone

The no-install path: mint a short-lived credential, connect the client, dial. The full guide is Set up the browser (WebRTC) softphone; on a first call you need three moves.
  1. Mint a token:
  1. From your own page, mount the SDK softphone and connect — a minimal HTML page:
  1. Dial from the browser, or call the endpoint directly once the client is connected:
Credentials live 60 minutes — re-mint before expiresAt instead of recycling. The browser-fallback reality and the inbound decision (DNIS → queue or SIP routing for inbound rings) live in the softphone guide.

5. Dial a single PSTN call

With either origin surface registered, the dial step is one API call — POST /api/v1/voice/calls. Pass the bought DID as from and any PSTN destination as to; a record: true flag captures the audio for the post-call read:
The 2xx envelope carries the new call at its first state:
Response
The 2xx response returns data.id (call_…) — the handle every later step uses. Options answer_url/staticVerbs, AMD, and metadata-level bookkeeping are at Program an outbound voice call; for a first call there is nothing to configure beyond to and from.

6. Read the lifecycle states

A call moves ringing → in_progress → a terminal completed on answer (or failed / no-answer on a declined or unanswered ring). Poll the record:
The record keeps the same shape as the create response, with status advanced along the sequence above; a terminal read looks like:
Response
…or subscribe to call.completed / call.failed webhooks under Settings → Webhooks and verify the delivery signature. The Voice calls page in the dashboard lists the same progression per call; the full state map and webhook payloads live in programmable-voice-call.

7. Common errors

These cover the failures a first outbound call hits in the wild: SIP failures past this short list are covered in Troubleshooting: SIP trunk down or calls failing; lifecycle outcomes that look like (no-answer, busy, unreachable) map in programmable-voice-call.

Where to go next