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
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
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 infrom is neither a platform/tenant number you own nor
a verified external caller-id, the request is rejected before dispatch.
422 Unprocessable Entity
POST /voice/caller-ids/verify + OTP confirm) and retrying, or by picking a
number already active on your account.