Schemas
Last updated August 14, 2026
AMDParams
| Field | Type | Description | |
|---|---|---|---|
initial_silence_timeout | integer | optional | Max milliseconds of silence before declaring no_speech 2500 |
greeting_duration | integer | optional | Speech duration threshold (ms) above which answerer is classified as machine 1500 |
after_greeting_silence | integer | optional | Silence duration (ms) after initial speech to declare human 800 |
total_analysis_time | integer | optional | Max analysis window in milliseconds. A threshold longer than this window suppresses that verdict; a window shorter than all of initial_silence_timeout, greeting_duration and after_greeting_silence is rejected, since the call could only end not_sure. 5000 |
minimum_word_length | integer | optional | Minimum speech burst duration (ms) to count as a word 100 |
beep_timeout | integer | optional | Max time (ms) to wait for the voicemail beep after machine detection. 0 or omitted = disabled. 0 |
AddLegRequest
| Field | Type | Description | |
|---|---|---|---|
leg_id | string | required | ID of the leg to add |
mute | boolean | optional | If set, apply this mute state to the leg atomically before it joins the mixer (no race where un-muted audio enters the mix). Omit to leave current state untouched (useful when moving between rooms). |
deaf | boolean | optional | If set, apply this deaf state to the leg atomically before it joins the mixer. Omit to leave current state untouched. |
accept_dtmf | boolean | optional | If set, control whether this leg receives DTMF digits broadcast from other legs in the same room. Omit to leave current state untouched (default for new legs is true). |
role | string | optional | If set, apply this routing role to the leg atomically before it joins the mixer. The room's routing matrix (see PUT /v1/rooms/{id}/routing) decides which other legs this leg hears and is heard by based on roles. Pass "" to clear the role (full mesh). Omit to leave the current role untouched. |
streams | array[object] | optional | Additional audio streams of the leg to mix into this room, each with its own routing role. Omit to add only the leg's primary stream. A stream already mixed elsewhere is moved here. |
AddLegStreamRequest
| Field | Type | Description | |
|---|---|---|---|
direction | enum | optional | Media direction for the new stream, from this server's point of view. Defaults to sendrecv. "sendrecv"Values: sendrecv, sendonly, recvonly, inactive |
lang | string | optional | BCP 47 language tag advertised as a=lang (RFC 8866), e.g. "es-ES" for a Spanish translation feed. |
content | enum | optional | Value advertised as a=content (RFC 4796). Use "main" for original audio and "alt" for an alternative feed such as a translation. Values: main, alt, speaker, slides, sl |
label | string | optional | Value advertised as a=label (RFC 4574), for correlating the stream with external metadata. |
room_id | string | optional | If set, attach the new stream to this room once it is negotiated. |
role | string | optional | Routing role to apply when room_id is set. |
AddRoomStream
| Field | Type | Description | |
|---|---|---|---|
stream_id | string | required | Stream identifier from GET /v1/legs/{id}/streams. The primary stream is not addressable here — it joins with the leg itself. |
role | string | optional | Routing role for this stream inside the room. |
AgentMessageRequest
| Field | Type | Description | |
|---|---|---|---|
message | string | required | Context or instruction to inject into the running agent session |
AnswerLegRequest
| Field | Type | Description | |
|---|---|---|---|
speech_detection | boolean | optional | If true, emit speaking.started and speaking.stopped events for this leg. If false, suppress them. Omit to use the server default (SPEECH_DETECTION_ENABLED env var, default false). |
codec | enum | optional | Explicit codec for the answer SDP. Must appear in the remote offer's offered_codecs list. Omit to use the server's default preference order. Values: PCMU, PCMA, G722, opus, AMR-WB, AMR-NB |
streams | array[object] | optional | Rooms for the caller's additional audio streams, applied once the answer is negotiated. Positional: entry i addresses the i-th accepted stream beyond the primary, in m-line order — the caller's offer decides how many exist, so an entry with no matching stream is ignored. Use POST /v1/legs/{id}/streams/{streamId}/room to re-route a stream later. |
AnswerLegStream
| Field | Type | Description | |
|---|---|---|---|
room_id | string | optional | Room to mix this stream into once the answer is negotiated. May differ from the room the leg itself joins. |
role | string | optional | Routing role for this stream inside its room. |
AttachStreamRoomRequest
| Field | Type | Description | |
|---|---|---|---|
room_id | string | required | Room to mix this stream into. May differ from the leg's own room. |
role | string | optional | Routing role for the stream inside that room. The room's routing matrix decides who hears it. |
BridgeView
| Field | Type | Description | |
|---|---|---|---|
id | string | required | Bridge identifier |
room_id | string | required | The peer room joined to the room in the path |
direction | enum | required | Audio flow relative to the room in the path: bidirectional, send, receive, or none. Values: bidirectional, send, receive, none |
sample_rate | integer | required | Shared mixer sample rate in Hz (both rooms must match). |
ChallengeRequest
| Field | Type | Description | |
|---|---|---|---|
realm | string | required | |
username | string | optional | |
password | string | optional | |
ha1 | string | optional | |
algorithm | string | optional | |
qop | array[string] | optional | |
max_expires | integer | optional |
CreateLegRequest
| Field | Type | Description | |
|---|---|---|---|
type | enum | required | Leg type Values: sip, whatsapp, websocket, livekit_room |
to | string | optional | Destination. For sip legs, a SIP URI (e.g. "sip:[email protected]"). For whatsapp legs, an E.164 phone number (with or without '+'). |
uri | string | optional | Deprecated alias for `to` (sip legs only). Prefer `to`. |
from | string | optional | Caller ID. A bare user-part (e.g. "+15551234567", "alice") sets the user of the SIP From header. A full SIP URI (e.g. "sip:[email protected]") sets both the user and the host; otherwise the host comes from the matched trunk's AOR realm, falling back to SIP_DOMAIN. |
privacy | string | optional | SIP Privacy header value (e.g. "id", "none") |
ring_timeout | integer | optional | Seconds to wait for answer; 0 = no timeout 0 |
max_duration | integer | optional | Maximum call duration in seconds after connect. Automatically hung up when reached. 0 or omitted = no limit. 0 |
codecs | array[enum] | optional | Codec preference order (sip legs only) |
headers | object | optional | Custom headers to include in the outbound INVITE (sip/whatsapp) or the WebSocket upgrade request (websocket) |
room_id | string | optional | Room ID to auto-add the leg to once media is ready (early_media or connected). If the room does not exist, it is automatically created. |
auth | any | optional | Digest auth credentials. Required for whatsapp legs (Meta-issued password; username defaults to `from` with '+' stripped). Optional for sip legs (sipgo retries on 401/407 challenge). |
webhook_url | string(uri) | optional | Route all events for this leg exclusively to this URL instead of global webhooks. |
webhook_secret | string | optional | HMAC-SHA256 signing secret for the per-leg webhook. |
amd | any | optional | Enable Answering Machine Detection on outbound calls. Include the object (even empty) to enable with defaults; omit to disable. |
accept_dtmf | boolean | optional | If false, this leg will not receive DTMF digits broadcast from other legs in the same room. Defaults to true. true |
app_id | string | optional | Application identifier. Carried through to all events for this leg. Use to filter the WebSocket event stream by app. |
speech_detection | boolean | optional | If true, emit speaking.started and speaking.stopped events for this leg. If false, suppress them. Omit to use the server default (SPEECH_DETECTION_ENABLED env var, default false). |
rtt | boolean | optional | For sip legs: offer Real-Time Text (ITU-T T.140 over RTP per RFC 4103) alongside audio. For websocket legs: enable the bidirectional text-message channel. Default: false. false |
streams | array[object] | optional | SIP outbound only. Extra m=audio sections to offer alongside the call's primary bidirectional audio, so a multi-stream call is established by the first INVITE instead of a follow-up re-INVITE. Each entry binds its own RTP port and may be mixed into its own room. To add a stream to a call that is already up, use POST /v1/legs/{id}/streams instead. |
url | string(uri) | optional | WebSocket target URL (ws:// or wss://) for outbound websocket legs. Required when type=websocket. |
sample_rate | enum | optional | PCM sample rate for websocket legs. The room's mixer automatically resamples between this and the room rate. 16000Values: 8000, 16000, 24000, 48000 |
wire_format | enum | optional | Audio framing for websocket legs. `binary` ships raw PCM as WebSocket binary frames; `json_base64` wraps PCM as `{"type":"audio","audio":"<base64>"}` text frames (browser-friendly). "binary"Values: binary, json_base64 |
sample_format | enum | optional | On-the-wire PCM sample encoding for websocket legs. v1 only supports `s16le`. "s16le"Values: s16le |
livekit | any | optional | LiveKit room join parameters (only used when type=livekit_room). |
CreateLegStream
| Field | Type | Description | |
|---|---|---|---|
direction | enum | optional | Media direction for this stream, from this server's point of view. Defaults to sendrecv. "sendrecv"Values: sendrecv, sendonly, recvonly, inactive |
lang | string | optional | BCP 47 language tag advertised as a=lang (RFC 8866), e.g. "es-ES" for a Spanish translation feed. |
content | enum | optional | Value advertised as a=content (RFC 4796). Use "alt" for an alternative feed such as a translation. Values: main, alt, speaker, slides, sl |
label | string | optional | Value advertised as a=label (RFC 4574), for correlating the stream with external metadata. |
room_id | string | optional | Room to mix this stream into once the call connects. May differ from the leg's own room_id, which governs the primary stream. |
role | string | optional | Routing role for this stream inside its room. |
CreateRoomBridgeRequest
| Field | Type | Description | |
|---|---|---|---|
id | string | optional | Custom bridge ID (auto-generated UUID if omitted) |
room_id | string | required | The other room to join. Must use the same sample rate as the room in the path. |
direction | enum | optional | Audio flow relative to the room in the path: bidirectional (both hear each other), send (path room → other only), receive (other → path room only), none (allocated but silent). Default: bidirectional. "bidirectional"Values: bidirectional, send, receive, none |
CreateTrunkRequest
| Field | Type | Description | |
|---|---|---|---|
type | enum | required | Trunk type discriminator. Only `sip_register` is implemented today; `ip_ip` is reserved and returns 501. Values: sip_register, ip_ip |
app_id | string | optional | Application identifier carried through to every event emitted by this trunk. |
sip_register | any | optional | Required when type == "sip_register". Configures the outbound REGISTER (registrar URI, AOR, digest credentials, expiry). |
ip_ip | any | optional | Reserved for static-IP peering (no REGISTER). Not yet implemented; supplying this returns 501. |
CreateTrunkResponse
| Field | Type | Description | |
|---|---|---|---|
id | string | required | |
type | string | required | |
status | string | required |
DTMFRequest
| Field | Type | Description | |
|---|---|---|---|
digits | string | required | DTMF digits to send (0-9, *, #) |
DeepgramAgentRequest
| Field | Type | Description | |
|---|---|---|---|
settings | object | optional | Full Deepgram agent settings object (agent.listen, agent.think, agent.speak, etc.). When omitted, sensible defaults are used (nova-3 STT, gpt-4o-mini LLM, aura-2-asteria-en TTS). |
greeting | string | optional | Agent greeting message |
language | string | optional | Language code (e.g. "en", "es") |
api_key | string | optional | API key override (falls back to DEEPGRAM_API_KEY env var) |
DeleteLegRequest
| Field | Type | Description | |
|---|---|---|---|
reason | enum | optional | Disconnect reason. Only honored for unanswered SIP inbound legs (state `ringing` or `early_media`); on connected legs the body is ignored and the leg is hung up with the legacy `api_hangup` reason. The value flows through to `leg.disconnected`'s `cdr.reason` and selects the SIP final response: `busy`→486, `declined`/`rejected`→603, `unavailable`→480, `not_found`→404, `forbidden`→403, `server_error`→500. Values: busy, declined, rejected, unavailable, not_found, forbidden, server_error |
EarlyMediaLegRequest
| Field | Type | Description | |
|---|---|---|---|
codec | enum | optional | Explicit codec for the 183 Session Progress SDP. Must appear in the remote offer's offered_codecs list. Omit to use the server's default preference order. Values: PCMU, PCMA, G722, opus, AMR-WB, AMR-NB |
ElevenLabsAgentRequest
| Field | Type | Description | |
|---|---|---|---|
agent_id | string | required | ElevenLabs agent ID |
first_message | string | optional | Override the agent's first message |
language | string | optional | Language code (e.g. "en", "es") |
dynamic_variables | object | optional | Key-value pairs passed to the agent as dynamic variables |
api_key | string | optional | API key override (falls back to ELEVENLABS_API_KEY env var) |
Error
| Field | Type | Description | |
|---|---|---|---|
instance_id | string | optional | Instance identifier |
error | string | required | Error message |
ICECandidateInit
| Field | Type | Description | |
|---|---|---|---|
candidate | string | required | ICE candidate string |
sdpMid | string | optional | Media stream identification tag |
sdpMLineIndex | integer | optional | Index of the media description |
IPIPTrunkSpec
| Field | Type | Description | |
|---|---|---|---|
peer_uri | string | optional | Static peer SIP URI for IP-IP peering. Reserved; not yet implemented. |
IPIPTrunkView
| Field | Type | Description | |
|---|---|---|---|
peer_uri | string | optional |
Leg
| Field | Type | Description | |
|---|---|---|---|
instance_id | string | optional | Instance identifier |
id | string | required | Unique leg identifier (UUID) |
type | enum | required | Leg type Values: sip_inbound, sip_outbound, webrtc, whatsapp_in, whatsapp_out, websocket_in, websocket_out, moq_in, livekit_publish, livekit_participant |
state | enum | required | Leg state Values: ringing, early_media, connected, held, hung_up |
room_id | string | optional | Room ID if the leg is in a room, empty otherwise |
muted | boolean | required | Whether the leg is muted (cannot be heard by others) |
deaf | boolean | required | Whether the leg is deaf (cannot hear others) |
accept_dtmf | boolean | required | Whether the leg receives DTMF digits broadcast from other legs in the same room. Defaults to true. |
held | boolean | required | Whether the call is on hold (SIP legs only) |
role | string | optional | Routing role used by the room's audio routing matrix (e.g. "customer", "agent", "supervisor"). Empty string means unroled (full mesh). |
app_id | string | optional | Application identifier for event stream filtering. |
sip_headers | object | optional | Deprecated: X-* headers from the inbound INVITE. Only present on sip_inbound legs. Use `headers` for new code; it carries the same map plus surfaces handshake headers for websocket legs. |
headers | object | optional | Custom protocol headers exposed by the leg's transport — X-/P- headers from a SIP INVITE, the WebSocket upgrade request, or supplied at outbound dial time. |
LegStreamView
| Field | Type | Description | |
|---|---|---|---|
id | string | required | Stream identifier, stable for the life of the dialog. The primary stream is always "0". |
mid | string | optional | The stream's SDP a=mid token (RFC 5888), used to correlate it across offer/answer. |
index | integer | required | Position of the stream's m= line in the SDP. Fixed for the life of the dialog (RFC 3264 §8). |
primary | boolean | required | True for the call's main bidirectional audio stream, which cannot be removed or attached to a room independently. |
state | enum | required | Negotiation state. Values: pending, active, removed |
direction | enum | required | Negotiated media direction from this server's point of view. Values: sendrecv, sendonly, recvonly, inactive |
desired_direction | enum | optional | Direction requested by the application. Survives hold/unhold, unlike the negotiated direction. Values: sendrecv, sendonly, recvonly, inactive |
codec | string | optional | Codec negotiated for this stream. Streams on one leg may use different codecs. |
sample_rate | integer | optional | Native sample rate of the stream's codec, in Hz. |
local_port | integer | optional | Local RTP port. Each stream binds its own port; a shared transport is undefined without BUNDLE (RFC 9143). |
remote_addr | string | optional | Remote RTP address media is currently sent to. |
label | string | optional | The stream's a=label value (RFC 4574), for correlating it with external metadata. |
content | string | optional | The stream's a=content value (RFC 4796), e.g. "main" for original audio and "alt" for a translated feed. |
lang | string | optional | The stream's a=lang value (RFC 8866): a BCP 47 language tag such as "en" or "es-ES". |
room_id | string | optional | Room this stream's audio is mixed into. A secondary stream may sit in a different room than its leg. |
role | string | optional | Routing role of this stream within its room. Streams carry their own role, independent of their leg's. |
LiveKitParams
| Field | Type | Description | |
|---|---|---|---|
url | string(uri) | optional | LiveKit server endpoint (wss://...). Overrides LIVEKIT_URL. |
token | string | optional | Pre-signed LiveKit JWT. Mutually exclusive with `room`/`identity` (mint mode); if both are present the token wins. |
room | string | optional | LiveKit room name. Required when minting (i.e. `token` is empty AND LIVEKIT_TOKEN_SIGNING_ENABLED=true). |
identity | string | optional | LiveKit participant identity. Required when minting. |
participant_name | string | optional | Display name for the participant; surfaces in LK Room UIs. |
permissions | any | optional | LiveKit grant flags. Nil pointers default to publish=true, subscribe=true, data=false, admin=false. |
token_ttl | string | optional | Go duration string (e.g. "30m", "6h"). Used only when minting. Defaults to LIVEKIT_DEFAULT_TOKEN_TTL (6h). |
opus_bitrate | integer | optional | Override LIVEKIT_OPUS_BITRATE for this leg. 6000..510000. |
LiveKitPermissions
| Field | Type | Description | |
|---|---|---|---|
can_publish | boolean | optional | Allow publishing tracks. Default true. |
can_subscribe | boolean | optional | Allow subscribing to remote tracks. Default true. |
can_publish_data | boolean | optional | Allow publishing data channel messages. Default false (audio bridge does not use data). |
room_admin | boolean | optional | Grant admin actions on the room (e.g., server-side MuteTrack of remote participants). Default false. |
PipecatAgentRequest
| Field | Type | Description | |
|---|---|---|---|
websocket_url | string(uri) | required | WebSocket URL of the Pipecat bot (e.g. ws://my-bot:8765) |
PlaybackRequest
| Field | Type | Description | |
|---|---|---|---|
url | string(uri) | required | URL of the audio file (mutually exclusive with tone) |
tone | string | required | Built-in telephone tone name. Format: {country}_{type} or bare {type} (defaults to US). Types: ringback, busy, dial, congestion. Countries: us, gb, de, fr, au, jp, it, in, br, pl, ru. Examples: us_ringback, gb_busy, dial. |
mime_type | string | required | MIME type (e.g. audio/wav). Required when using url. |
repeat | integer | required | Number of times to repeat playback (url only) 0 |
volume | integer | required | Volume adjustment in dB (-8 to 8) 0 |
RTTRequest
| Field | Type | Description | |
|---|---|---|---|
text | string | required | UTF-8 text to send. May be one or more characters and may include T.140 control codes (e.g. backspace U+0008, CR/LF). |
RecordingRequest
| Field | Type | Description | |
|---|---|---|---|
storage | enum | required | "file" (default) — local disk, "s3" — upload to S3 after recording stops, "gcs" — upload to Google Cloud Storage via the native GCS API (Application Default Credentials / Workload Identity) Values: file, s3, gcs |
multi_channel | boolean | required | When true, record each participant to a separate mono WAV file in addition to the full mix. Only applies to room recordings. false |
s3_bucket | string | required | S3 bucket name. Overrides S3_BUCKET env var. Required if env var is not set. |
s3_region | string | required | AWS region. Overrides S3_REGION env var. Default us-east-1. |
s3_endpoint | string | required | Custom S3 endpoint (MinIO, etc.). Overrides S3_ENDPOINT env var. |
s3_prefix | string | required | Key prefix (e.g. recordings/). Overrides S3_PREFIX env var. |
s3_access_key | string | required | AWS access key ID. Overrides default credential chain. |
s3_secret_key | string | required | AWS secret access key. Must be set together with s3_access_key. |
gcs_bucket | string | required | GCS bucket name. Overrides GCS_BUCKET env var. Required if env var is not set when storage=gcs. |
gcs_object_name_prefix | string | required | Object name prefix (e.g. recordings or recordings/). Overrides GCS_OBJECT_NAME_PREFIX env var. A trailing slash is added automatically when missing. |
filename | string | required | Optional output basename for the WAV file. A .wav suffix is added when missing. Must be a single path segment (no directories). Dots inside the name are preserved (only a trailing .wav is treated as the extension). Rejected with 409 if the file already exists or another recording is using the same name. When omitted, a timestamped name is generated. |
RegistrationAcceptRequest
| Field | Type | Description | |
|---|---|---|---|
max_expires | integer | optional |
RegistrationRejectRequest
| Field | Type | Description | |
|---|---|---|---|
code | integer | optional | |
reason | string | optional |
RegistrationView
| Field | Type | Description | |
|---|---|---|---|
aor | string | required | |
contact | string | required | |
socket | string | required | |
transport | string | required | |
user_agent | string | optional | |
call_id | string | optional | |
app_id | string | optional | |
created_at | string | required | |
last_refresh | string | required | |
expires_at | string | required | |
granted_expires_seconds | integer | required |
RegistrationsResponse
| Field | Type | Description | |
|---|---|---|---|
bindings | array[object] | required |
Room
| Field | Type | Description | |
|---|---|---|---|
instance_id | string | optional | Instance identifier |
id | string | required | Room identifier |
app_id | string | optional | Application identifier for event stream filtering. |
sample_rate | integer | required | Mixer sample rate in Hz (8000, 16000, or 48000). |
participants | array[object] | required | Legs currently in this room |
RoomCreateRequest
| Field | Type | Description | |
|---|---|---|---|
id | string | required | Custom room ID (auto-generated UUID if omitted) |
webhook_url | string(uri) | optional | Route all events for this room exclusively to this URL instead of global webhooks. |
webhook_secret | string | optional | HMAC-SHA256 signing secret for the per-room webhook. |
app_id | string | optional | Application identifier. Carried through to all events for this room. Use to filter the WebSocket event stream by app. |
sample_rate | enum | optional | Mixer sample rate in Hz. Allowed values: 8000, 16000, 48000. Default: 16000. 16000Values: 8000, 16000, 48000 |
RoomRoutingRequest
| Field | Type | Description | |
|---|---|---|---|
matrix | object | required | Listener-role → list of allowed source roles. Omitted listener roles default to full mesh. Empty list = hears nothing. |
RoomRoutingUpdateRequest
| Field | Type | Description | |
|---|---|---|---|
updates | array[object] | required | Per-listener-role row replacements applied as a single atomic update. |
RoomRoutingView
| Field | Type | Description | |
|---|---|---|---|
matrix | object | required | Listener-role → list of allowed source roles. Roles absent from the matrix default to full mesh. |
RoutingRowUpdate
| Field | Type | Description | |
|---|---|---|---|
listener_role | string | required | The role whose row is being replaced. |
sources | array[string] | required | New list of allowed source roles for this listener role. Pass null to clear the row (full mesh). |
SIPAuth
| Field | Type | Description | |
|---|---|---|---|
username | string | optional | Digest auth username. Optional for whatsapp legs (defaults to `from` with '+' stripped, per Meta's spec). |
password | string | required | Digest auth password. |
SIPRECParticipantView
| Field | Type | Description | |
|---|---|---|---|
participant_id | string | required | The participant_id attribute from the recording metadata document. |
aor | string | optional | The participant's address of record, e.g. "sip:[email protected]". |
name | string | optional | The participant's display name, when the metadata carries one. |
SIPRECSessionView
| Field | Type | Description | |
|---|---|---|---|
leg_id | string | required | Leg carrying the recording session. |
session_id | string | optional | Communication session being recorded, from the metadata's sessionrecordingassoc. |
data_mode | enum | optional | Data mode of the most recently applied metadata document (RFC 7865 §6.1). Values: complete, partial |
room_id | string | optional | Room this session's streams were attached to, when SIPREC_ROOM_MODE placed them in one. |
participants | array[object] | required | Every party currently recorded by this session. |
streams | array[object] | required | Every negotiated media stream, joined to the participant it carries. |
metadata | string | optional | The raw rs-metadata XML document as most recently received. |
SIPRECStreamView
| Field | Type | Description | |
|---|---|---|---|
leg_stream_id | string | required | Identifier of the leg stream carrying this recorded media, as used by /v1/legs/{id}/streams. |
mid | string | optional | The stream's SDP a=mid token (RFC 5888). |
label | string | optional | The stream's a=label value (RFC 4574). This is the key that binds the m= section to the recording metadata. |
direction | enum | optional | Negotiated media direction. Always recvonly or inactive: a recording server never transmits. Values: recvonly, inactive |
codec | string | optional | Codec negotiated for this stream. |
room_id | string | optional | Room this stream's audio is mixed into, when it has been attached to one. |
role | string | optional | Routing role of this stream within its room. Defaults to the participant's identity. |
participant_id | string | optional | Participant whose audio arrives on this stream, from the metadata's participantstreamassoc send binding. |
participant_aor | string | optional | Address of record of the participant sending on this stream. |
participant_name | string | optional | Display name of the participant sending on this stream. |
SIPRegisterTrunkSpec
| Field | Type | Description | |
|---|---|---|---|
registrar_uri | string | required | Upstream registrar SIP URI (e.g. "sip:pbx.example.com:5060" or "sips:pbx.example.com:5061;transport=tls"). |
aor | string | required | Address-of-record this trunk REGISTERs (e.g. "sip:[email protected]"). Becomes the From URI on outbound REGISTER, and the From / P-Asserted-Identity host on outbound INVITEs placed `from` this AOR. |
username | string | optional | Digest auth username. Defaults to the AOR user-part when empty. |
password | string | required | Digest auth password. Required. Never returned in any response. |
contact_user | string | optional | Override the user-part of the Contact header sent in REGISTER. Defaults to the AOR user-part. |
expires_seconds | integer | optional | Requested registration lifetime in seconds. Clamped to [SIP_OUTBOUND_REGISTRATION_MIN_EXPIRES_SECONDS, SIP_OUTBOUND_REGISTRATION_MAX_EXPIRES_SECONDS]. Default: SIP_OUTBOUND_REGISTRATION_DEFAULT_EXPIRES_SECONDS (3600). |
SIPRegisterTrunkView
| Field | Type | Description | |
|---|---|---|---|
registrar_uri | string | required | |
aor | string | required | |
username | string | optional | |
contact_uri | string | optional | |
requested_expires_seconds | integer | required | |
granted_expires_seconds | integer | optional | |
last_registered_at | string | optional | |
next_refresh_at | string | optional | |
call_id | string | optional | |
cseq | integer | optional | |
source_address | string | optional |
STTRequest
| Field | Type | Description | |
|---|---|---|---|
language | string | required | Language code (e.g. "en", "es") |
partial | boolean | required | Emit partial (non-final) transcripts false |
provider | enum | optional | STT provider: "elevenlabs" (default), "deepgram" (/v1/listen), "deepgram_flux" (/v2/listen, conversational turn detection) or "azure" Values: elevenlabs, deepgram, deepgram_flux, azure |
api_key | string | optional | API key override (falls back to ELEVENLABS_API_KEY, DEEPGRAM_API_KEY or AZURE_SPEECH_KEY env var depending on provider) |
model | string | optional | Provider-specific model. Deepgram: default "nova-3". Deepgram Flux: "flux-general-en" (default) or "flux-general-multi". |
keyterms | array[string] | optional | Terms to boost recognition of (Deepgram and Deepgram Flux). |
endpointing | integer | optional | Deepgram only: milliseconds of silence before a segment is finalized. 0 disables endpointing. |
utterance_end_ms | integer | optional | Deepgram only: milliseconds of silence after which an stt.turn event with event=utterance_end is emitted. Deepgram requires interim results for this, which are requested automatically and still suppressed unless partial is true. |
eager_eot_threshold | number | optional | Deepgram Flux only: end-of-turn confidence that fires an eager_end_of_turn stt.turn event, enabling speculative generation. Must be between 0.3 and 0.9. When unset, no eager_end_of_turn or turn_resumed events are emitted at all. |
eot_threshold | number | optional | Deepgram Flux only: end-of-turn confidence required to close a turn. Deepgram default 0.7. |
eot_timeout_ms | integer | optional | Deepgram Flux only: milliseconds of silence after which a turn is closed regardless of confidence. Deepgram default 5000. |
language_hints | array[string] | optional | Deepgram Flux only: candidate language codes for the "flux-general-multi" model. |
SetLegRoleRequest
| Field | Type | Description | |
|---|---|---|---|
role | string | required | New routing role for the leg. The room's routing matrix decides which other legs this leg hears and is heard by based on roles. Pass an empty string to clear the role (full mesh). |
StartSIPRECRequest
| Field | Type | Description | |
|---|---|---|---|
srs_uri | string | required | SIP URI of the session recording server, e.g. "sip:[email protected]:5060". A recording session carries the metadata document alongside the SDP and exceeds the UDP message limit, so the target should accept TCP. |
leg_ids | array[string] | optional | Which participants to record. Each entry is either a leg ID (that leg's own audio) or "<legID>#<streamID>" for one of a leg's secondary audio streams mixed into the room. Empty or absent records every participant. An entry that is not in the room is a 404. |
session_id | string | optional | Communication session identifier put in the recording metadata. Defaults to the room ID. |
app_id | string | optional | Application identifier tagged onto the resulting leg and its events. |
auth_username | string | optional | SIP digest username, when the recording server challenges the INVITE. |
auth_password | string | optional | SIP digest password, when the recording server challenges the INVITE. |
headers | object | optional | Extra SIP headers to include in the INVITE. Require: siprec is always sent. |
StatusResponse
| Field | Type | Description | |
|---|---|---|---|
instance_id | string | optional | Instance identifier |
status | string | required |
TTSRequest
| Field | Type | Description | |
|---|---|---|---|
text | string | required | Text to synthesize |
voice | string | required | Provider-specific voice identifier. ElevenLabs: voice name or ID. AWS Polly: voice ID (e.g. Joanna, Matthew). Google Cloud: voice name — either full format (e.g. en-US-Neural2-F) or short name for Gemini models (e.g. Achernar, Kore). Deepgram: model name (e.g. aura-2-asteria-en). |
model_id | string | required | Provider-specific model/engine. ElevenLabs: model ID. AWS Polly: engine (standard, neural, long-form, generative; default neural). Google Cloud: model name (e.g. gemini-2.5-pro-tts, chirp3-hd). |
language | string | optional | Language code (e.g. "en-US", "pl-pl"). Required for Google Gemini TTS voices that use short names (e.g. Achernar). Auto-extracted from full voice names like en-US-Neural2-F. |
prompt | string | optional | Style/tone instruction for promptable voice models (Google Gemini TTS only). E.g. "Read aloud in a warm, welcoming tone." |
volume | integer | required | Volume adjustment in dB (-8 to 8) 0 |
provider | enum | optional | TTS provider: "elevenlabs" (default), "aws", "google", or "deepgram" Values: elevenlabs, aws, google, deepgram |
api_key | string | optional | ElevenLabs: API key override (falls back to ELEVENLABS_API_KEY env var). AWS: optional ACCESS_KEY:SECRET_KEY override (falls back to default AWS credential chain). Google Cloud: optional API key override (falls back to Application Default Credentials). Deepgram: API key override (falls back to DEEPGRAM_API_KEY env var). |
TransferCompleteRequest
| Field | Type | Description | |
|---|---|---|---|
success | boolean | required | |
status_code | integer | optional | |
reason | string | optional |
TransferDeclineRequest
| Field | Type | Description | |
|---|---|---|---|
code | integer | optional | |
reason | string | optional |
TransferProgressRequest
| Field | Type | Description | |
|---|---|---|---|
status_code | integer | required | |
reason | string | optional |
TransferRequest
| Field | Type | Description | |
|---|---|---|---|
target | string | required | SIP URI to transfer the call to (e.g. "sip:[email protected]"). |
replaces_leg_id | string | optional | ID of an existing connected SIP leg whose dialog should be replaced (attended transfer). Omit for blind transfer. |
TrunkView
| Field | Type | Description | |
|---|---|---|---|
id | string | required | |
type | string | required | |
app_id | string | optional | |
status | string | required | |
last_error | string | optional | |
created_at | string | required | |
sip_register | any | optional | |
ip_ip | any | optional |
TrunksListResponse
| Field | Type | Description | |
|---|---|---|---|
trunks | array[object] | required |
UpdateLegStreamRequest
| Field | Type | Description | |
|---|---|---|---|
role | string | optional | New routing role for this stream inside its room. The room's routing matrix decides who hears it. Pass an empty string to clear the role (full mesh). Omit to leave it untouched. Applied atomically — the room's allow-sets are recomputed in a single mixer-mutex acquisition, so no audio bleeds through mid-change. |
UpdateRoomBridgeRequest
| Field | Type | Description | |
|---|---|---|---|
direction | enum | required | New audio flow relative to the room in the path: bidirectional, send, receive, or none. Values: bidirectional, send, receive, none |
VAPIAgentRequest
| Field | Type | Description | |
|---|---|---|---|
assistant_id | string | required | VAPI assistant ID |
first_message | string | optional | Override the agent's first message |
variable_values | object | optional | Key-value pairs passed as VAPI variable values (assistantOverrides.variableValues) |
api_key | string | optional | API key override (falls back to VAPI_API_KEY env var) |
VolumeRequest
| Field | Type | Description | |
|---|---|---|---|
volume | integer | required | Volume adjustment (-8 to 8, ~3dB per step, 0 = unchanged) |
WebRTCCandidatesResult
| Field | Type | Description | |
|---|---|---|---|
candidates | array[object] | required | |
done | boolean | required |
WebRTCOfferRequest
| Field | Type | Description | |
|---|---|---|---|
sdp | string | required | SDP offer from the browser |
app_id | string | optional | Application identifier. Carried through to all events emitted for this leg, and matched against the VSI `app_id` filter. |
WebRTCOfferResult
| Field | Type | Description | |
|---|---|---|---|
leg_id | string | required | |
sdp | string | required |
WebhookEvent
Event envelope delivered via HTTP POST to registered webhook URLs. Event-specific fields are flattened into the top-level object (no "data" wrapper). Includes X-Signature-256 header when a secret is configured, and an X-Event-Id header equal to the event_id field.
| Field | Type | Description | |
|---|---|---|---|
type | enum | required | Values: leg.ringing, leg.early_media, leg.connected, leg.disconnected, leg.joined_room, leg.left_room, leg.muted, leg.unmuted, leg.deaf, leg.undeaf, leg.hold, leg.unhold, leg.command_failed, leg.stream_added, leg.stream_removed, leg.stream_rejected, leg.stream_failed, leg.stream_room_changed, leg.stream_role_changed, siprec.session_started, siprec.session_ended, siprec.metadata_updated, siprec.participant_joined, siprec.participant_left, dtmf.received, rtt.received, speaking.started, speaking.stopped, playback.started, playback.finished, playback.error, tts.started, tts.finished, tts.error, tts.staged, tts.discarded, recording.started, recording.finished, recording.paused, recording.resumed, leg.transfer_initiated, leg.transfer_requested, leg.transfer_progress, leg.transfer_completed, leg.transfer_failed, room.created, room.deleted, room.bridged, room.bridge_updated, room.unbridged, room.routing_changed, leg.role_changed, stt.text, stt.turn, agent.connected, agent.disconnected, agent.user_transcript, agent.agent_response, amd.result, amd.beep, sip.registration_attempt, sip.registration_active, sip.registration_expired, sip.outbound_registration_active, sip.outbound_registration_failed, sip.outbound_registration_expired |
timestamp | string(date-time) | required | |
event_id | string(uuid) | optional | Stable per-event idempotency key; identical across delivery retries and across all subscribers of the event. |
instance_id | string | optional | Instance identifier |