Skip to main content

Worked sequences

These four flows walk an outbound call from creation to completed-recording retrieval, including the two error shapes you must handle on the way. All requests use your API key (X-API-Key) against https://api.orbit.devotel.io.

1. Place an outbound call

POST /voice/calls initiates an outbound call and returns the new call id and its initial status. 202 is not returned here — a successful initiation responds 201.
cURL
201 Created
status starts as initiated; the lifecycle progresses through the terminal state completed/no-answer/failed (see hangup_reason on the webhook, or GET /voice/calls/{id} below). Poll the status endpoint or listen for the webhook — don’t assume the call is still ringing.

2. Poll the call status

GET /voice/calls/{id} returns the call row with the fields updated as the call progresses.
cURL
200 OK

3. Webhook — call.completed

Register a webhook endpoint (POST /webhooks) subscribed to call.completed so your server receives the terminal status the moment it happens, instead of polling.
POST to your endpoint
The full event list and endpoint-management API live at Webhook events. Field-level definitions (the same payload every webhook carries) are pinned against call.initiated and call.completed there.

4. Retrieve the recording

Once a call shows a recording, GET /voice/calls/{id}/recording returns a signed, time-limited playback URL plus the duration/format and any chapter markers. The url is pre-signed and expires after the expires_at epoch-ms timestamp.
cURL
200 OK
When structured chaptering is enabled, chapters carries [{ start_ms, end_ms, title, summary }] markers; when it is off, it is []. A call that was never recorded returns 404 NOT_FOUND.

Error — unverified caller-id

When the caller-id in from is neither a platform/tenant number you own nor a verified external caller-id, the request is rejected before dispatch.
422 Unprocessable Entity
Fix it by enrolling the number through the verified-caller-id flow (POST /voice/caller-ids/verify + OTP confirm) and retrying, or by picking a number already active on your account.