Documentation Index
Fetch the complete documentation index at: https://orbit-docs.devotel.io/llms.txt
Use this file to discover all available pages before exploring further.
Voice API
Build voice applications with Orbit’s Voice API. Make and receive calls, connect AI agents, configure SIP trunks, build IVR menus, host conference calls, and manage voicemail — all through a unified API. Base path:/v1/voice
Calls
Initiate a Call
POST /v1/voice/calls
Start an outbound call. Route it to an AI voice agent, an IVR flow, or a raw SIP destination.
Destination phone number in E.164 format
Caller ID — must be a number registered in your Orbit account
AI agent to handle the call (omit for raw SIP or IVR)
IVR flow ID to execute when the call connects
URL to receive call status callbacks
Whether to record the call
Maximum call duration in seconds
Arbitrary key-value pairs attached to the call
List Calls
GET /v1/voice/calls
Retrieve call logs with cursor-based pagination and optional filters.
Cursor for pagination
Results per page (max 100)
Filter by status:
initiating, ringing, in_progress, completed, failedFilter by caller number
Filter by destination number
Get Call Details
GET /v1/voice/calls/{id}
Retrieve full details of a call including status, duration, recording URL, and agent interaction summary.
Hang Up a Call
POST /v1/voice/calls/{id}/hangup
Terminate an active call. AI agents receive a graceful shutdown signal before disconnection.
Accept / Decline an Inbound Call
POST /v1/voice/calls/{id}/accept
Accept an incoming call before it auto-rings the configured number-handler. Use when the softphone or programmatic handler wants to answer in lieu of the default routing.
POST /v1/voice/calls/{id}/decline
Reject an incoming call. The carrier receives 486 Busy Here.
Mute / Unmute a Call Leg
POST /v1/voice/calls/{id}/mute
POST /v1/voice/calls/{id}/unmute
Mute or unmute the operator side of a connected call. Mute is per-leg — the participant on the other side keeps speaking and their audio still records.
Hold / Unhold
POST /v1/voice/calls/{id}/hold
POST /v1/voice/calls/{id}/unhold
Place the remote party on hold (carrier-side music or silence depending on the trunk’s hold_music configuration). Unhold restores audio in both directions.
Send DTMF Tones
POST /v1/voice/calls/{id}/dtmf
String of DTMF digits to send (
0–9, *, #, A–D). Plays at standard 100ms / 100ms gap.Transfer (Blind)
POST /v1/voice/calls/{id}/transfer
Cold-transfer the call to a new destination. Hangs up the original leg the moment the new leg connects.
Destination phone number, agent ID (
agt_*), or extension (ext_*).Override the From number presented to the destination. Defaults to the original caller’s number.
Warm Transfer
POST /v1/voice/calls/{id}/warm-transfer
Start a warm transfer — the calling agent stays connected while a third leg is dialled. The original caller is placed on hold; once the third party answers, the agent has a private “whisper” window with them before completing the handoff.
Destination for the warm-transfer consult leg.
Optional TTS message played to the consult party before audio bridges (e.g. “Customer Jane Doe, escalation tier 2”).
POST /v1/voice/calls/{id}/warm-transfer/complete
Bridge the original caller into the consult leg and disconnect the original agent. The two non-agent legs are now connected.
POST /v1/voice/calls/{id}/warm-transfer/cancel
Abort the warm transfer and return the original caller to the agent. The consult leg is hung up.
Recording
Recordings are configured per-call viarecord: true on POST /v1/voice/calls, or started/stopped mid-call via the endpoints below. Storage is tenant-isolated; URLs expire after 24 hours and require re-fetching via the call detail endpoint.
Start / Stop Mid-Call Recording
POST /v1/voice/calls/{id}/recording/start
Begin recording an in-progress call. Idempotent — calling on an already-recording call returns the existing recording id.
Record agent + caller on separate audio channels (left/right). Single-channel mixes both.
Trim leading/trailing silence from the saved file.
POST /v1/voice/calls/{id}/recording/stop
Stop the in-progress recording and finalise the file. Subsequent reads of GET /v1/voice/calls/{id}/recording will return the fully-encoded URL.
Retrieve a Call Recording
GET /v1/voice/calls/{id}/recording
Returns the recording metadata + a 24h-expiring signed URL. If the call is still being recorded, status is in_progress and signed_url is null.
Conference Recording
POST /v1/voice/conferences/{id}/recording/start
POST /v1/voice/conferences/{id}/recording/stop
Same semantics as call recording but for conference rooms — captures the mixed audio of every participant.
SIP Trunks
Bring your own carrier by connecting SIP trunks to Orbit. Orbit acts as an SBC (Session Border Controller) with TLS and SRTP encryption.Create SIP Trunk
POST /v1/voice/sip-trunks
A descriptive name for the trunk
SIP URI for outbound call routing (e.g.,
sip:trunk.carrier.com:5060)SIP URIs that Orbit should accept inbound calls from
SIP authentication username
SIP authentication password
Preferred audio codecs in priority order
Transport encryption:
tls_srtp, tls, or noneList SIP Trunks
GET /v1/voice/sip-trunks
Get SIP Trunk
GET /v1/voice/sip-trunks/{id}
Update SIP Trunk
PUT /v1/voice/sip-trunks/{id}
Delete SIP Trunk
DELETE /v1/voice/sip-trunks/{id}
IVR (Interactive Voice Response)
Build programmable voice menus that route callers through options, collect DTMF input, and transfer to agents or queues.Create IVR Flow
POST /v1/voice/ivr
IVR flow name
Text-to-speech greeting played when a caller connects
Language for TTS and speech recognition
Menu definition with DTMF key-to-action mappings
Seconds to wait for DTMF input before replaying the menu
Maximum menu replays before fallback action
Action when max retries reached:
voicemail, transfer_number, hangupList IVR Flows
GET /v1/voice/ivr
Update IVR Flow
PUT /v1/voice/ivr/{id}
Delete IVR Flow
DELETE /v1/voice/ivr/{id}
Conferences
Host multi-party conference calls with moderation controls, recording, and real-time participant management.Create Conference
POST /v1/voice/conferences
Conference name
Maximum number of participants
Record the conference
Mute participants when they join
URL for conference event callbacks
Add Participant
POST /v1/voice/conferences/{id}/participants
Phone number to dial into the conference
Join the participant in muted state
Remove Participant
DELETE /v1/voice/conferences/{id}/participants/{participantId}
End Conference
POST /v1/voice/conferences/{id}/end
Voicemail
Manage voicemail boxes for receiving and transcribing voice messages when calls go unanswered.Create Voicemail Box
POST /v1/voice/voicemail
Voicemail box name
Custom TTS greeting (default: “Please leave a message after the tone.”)
Automatically transcribe voicemail messages using STT
Maximum voicemail recording duration in seconds
Email to send voicemail notifications to
URL for voicemail event callbacks
List Voicemail Messages
GET /v1/voice/voicemails
Retrieve voicemail messages across the org with transcriptions, with cursor pagination and filters by direction, status, and unread state.
GET /v1/voice/voicemails/{id}
Get a single voicemail message including transcription and recording URL.
PATCH /v1/voice/voicemails/{id}/read
Mark a voicemail as read.
DELETE /v1/voice/voicemails/{id}
Permanently delete a voicemail message.
Conference Operations (advanced)
BeyondAdd Participant / Remove Participant, the conference API exposes a complete moderation surface.
Mute / Unmute a Participant
POST /v1/voice/conferences/{id}/participants/{participantId}/mute
POST /v1/voice/conferences/{id}/participants/{participantId}/unmute
Mute / Unmute Everyone
POST /v1/voice/conferences/{id}/mute-all
POST /v1/voice/conferences/{id}/unmute-all
Useful for “all-hands” conferences where the moderator wants to control the floor. Already-muted participants keep their state.
Hold / Unhold a Participant
POST /v1/voice/conferences/{id}/participants/{participantId}/hold
POST /v1/voice/conferences/{id}/participants/{participantId}/unhold
Lock / Unlock Conference
POST /v1/voice/conferences/{id}/lock
POST /v1/voice/conferences/{id}/unlock
When locked, no new participants can join — existing participants stay connected. Use to seal a conference for a confidential discussion.
End / Delete a Conference
POST /v1/voice/conferences/{id}/end
End the active conference and disconnect every participant gracefully. The conference row is retained for analytics.
DELETE /v1/voice/conferences/{id}
Hard-delete the conference row (only allowed when status is ended).
Call Queues
Queue inbound calls by skill / priority and route them to the next available agent. Pairs with the AI agent layer for hybrid human + AI front-desk experiences.Create a Queue
POST /v1/voice/queues
Queue name (visible to supervisors in the wallboard).
Distribution strategy:
longest_idle, round_robin, least_calls, random.Maximum hold time before the call falls through to
overflow_action.Action when max-wait expires:
voicemail, transfer_number, hangup.Public URL of an MP3 played while waiting.
List / Update / Delete
GET /v1/voice/queues
PUT /v1/voice/queues/{id}
DELETE /v1/voice/queues/{id}
Enqueue a Call
POST /v1/voice/queues/{id}/enqueue
Call ID to add to the queue.
Higher priority routes ahead of lower. VIP customers, escalations.
Queue Stats
GET /v1/voice/queues/{id}/stats
Returns live counts: waiting, connected, abandoned_24h, avg_wait_seconds_24h, plus per-agent presence.
Set Agent Status
POST /v1/voice/agents/{id}/status
Agent presence:
available, busy, wrap_up, offline.available agents are eligible for the next call.
Ring Groups
A ring group rings multiple users / extensions in parallel or sequence on a single inbound number. Use for “ring all sales reps until someone answers” patterns.Create / List / Get / Delete
POST /v1/voice/ring-groups
Ring group name.
Ring strategy:
simultaneous, sequential, random.Array of
{ extension_id?: string, phone_number?: string, ring_seconds?: number } entries. Pass either extension_id (registered SIP extension) or a raw phone_number for PSTN forwards.Per-leg timeout (sequential strategy). Total ring time = members × timeout.
Action when no member answers:
voicemail, transfer_number, hangup.GET /v1/voice/ring-groups
GET /v1/voice/ring-groups/{id}
DELETE /v1/voice/ring-groups/{id}
Extensions
SIP extensions for soft-phone registration. Each extension binds one user to a SIP credential pair (managed via the SIP Credentials endpoints) and can receive direct calls or appear in ring groups. Extensions are managed end-to-end through the dashboard at Voice → Extensions. The underlying call-flow surface (registering, rotating credentials, observing register state) is exposed via the SIP Credentials API at/v1/voice/sip-credentials/* (see SIP Credentials).
Calendars
Per-extension business-hours calendars route inbound calls to voicemail / a fallback number outside of working hours. Calendars carry an IANA timezone and a list of weekday windows.Create a Calendar
POST /v1/voice/calendars
Calendar name.
IANA timezone, e.g.
Europe/Istanbul.Array of
{ weekday: 0-6, start: "HH:MM", end: "HH:MM" }. weekday follows ISO-8601 (1=Mon, 7=Sun).Array of ISO-8601 dates (
YYYY-MM-DD) treated as off-hours.List / Get / Delete
GET /v1/voice/calendars
GET /v1/voice/calendars/{id}
DELETE /v1/voice/calendars/{id}
Monitoring
Live supervisor surface — listen-in, whisper to the agent, or barge into a call for real-time coaching. All operations require thevoice:monitor scope.
Start Listening (silent monitoring)
POST /v1/voice/calls/{id}/listen
Open a one-way audio bridge to the supervisor — neither call leg hears the supervisor.
POST /v1/voice/calls/{id}/unlisten
Disconnect the supervisor leg.
Whisper to the Agent
POST /v1/voice/calls/{id}/whisper
Audio plays only to the agent leg. The customer cannot hear. Use to coach the agent mid-call.
Barge In
POST /v1/voice/calls/{id}/barge
Add the supervisor as a third audible participant. Both call legs hear the supervisor.
Live Monitoring Snapshot
GET /v1/voice/monitoring
Returns a denormalised snapshot of every active call, queue, and agent presence — drives the wallboard / Voice → Monitoring page.
Real-time Transcripts
GET /v1/voice/calls/{callId}/transcript/stream
Server-Sent Events (SSE) stream of live STT transcript chunks for an in-progress call. Each event carries a JSON body of:
GET /v1/voice/calls/{id}/transcript
Final, post-call transcript (one shot, no streaming). Available once the recording has been processed (~30s after hangup).
POST /v1/voice/transcribe
Submit an arbitrary audio URL for asynchronous transcription. Returns a transcript_id to poll for the result.
AI Call Intelligence
Post-call analysis — sentiment trajectory, key moments, summary, action items, customer effort score. Powered by the agent runtime’s call intelligence model.Per-Call Intelligence
GET /v1/voice/calls/{id}/intelligence
Run Sentiment On-Demand
POST /v1/voice/calls/{id}/sentiment
Forces a re-run of the sentiment analyzer. Used when a call’s transcript has been edited or when the org’s sentiment model has changed.
List Intelligence Records
GET /v1/voice/intelligence/calls
List intelligence records for the org with filters by sentiment, agent, date range, and customer-effort threshold.
Trends
GET /v1/voice/intelligence/trends
Aggregated time-series of sentiment + effort score, bucketed by day / week. Drives the Voice → Intelligence → Trends dashboard.
ISO-8601 start of the trend window. Defaults to 30 days ago.
ISO-8601 end of the trend window. Defaults to now.
Aggregation bucket:
hour, day, week.Voice Quality (VAQI)
Voice Aggregated Quality Index — a 0–100 score derived from MOS, jitter, packet-loss, and one-way audio detection. Surface for SIP-trunk health and per-call diagnostics.Aggregates
GET /v1/voice/quality/aggregates
Per-period rollup of every active SIP trunk: average MOS, p95 jitter, packet loss percentage, VAQI score. Used by the Voice → Quality dashboard.
Per-Carrier Quality
GET /v1/voice/quality/carriers
Same shape as /aggregates but bucketed by upstream carrier. Use to compare provider performance across the same time window.
Worst Calls
GET /v1/voice/quality/worst-calls
Top-N calls in the period by lowest VAQI / highest packet loss / highest jitter. Drives the “Investigate” CTA in the dashboard.
VAQI Detail
GET /v1/voice/vaqi
Full per-call quality matrix (MOS, jitter, packet loss, RTT, audio gaps) with optional call_id filter for a single-call drill-down.
Softphone Token
POST /v1/voice/softphone/token
Mints a short-lived JWT (default 60s expiry) for browser-based softphone clients to register against the LiveKit / Jambonz cluster without exposing a long-lived API key.
POST /v1/voice/softphone/dial
Server-initiated outbound dial from a softphone session — the softphone client passes the to and Orbit places the call from the bound extension’s caller-ID.
Voice Clones
Custom-trained TTS voices for AI agents. Voices are tenant-scoped and require an upfront audio-sample upload — at least 30 seconds of clean speech from a single speaker, ≥ 16 kHz mono WAV / MP3 / FLAC.Create / List / Delete
POST /v1/voice/clones
GET /v1/voice/clones
DELETE /v1/voice/clones/{id}
Voice IDs returned by GET /v1/voice/clones can be referenced from agent configuration via tts_voice_id.
Call Statuses
| Status | Description |
|---|---|
initiating | Call is being set up |
ringing | Destination phone is ringing |
in_progress | Call is connected and active |
completed | Call ended normally |
failed | Call could not be connected |
busy | Destination returned busy signal |
no_answer | Destination did not answer within timeout |
cancelled | Call was cancelled before connection |