Conferences
Create and manage multi-party conference calls.
Conferences
A conference is a named room that calls join via VoxML. Member management, recording, and audio playback all happen on a live conference via REST.
Lifecycle
- Creation — implicit. The conference appears the moment the first call enters it via VoxML's
<Conference>verb. There is no explicit "create conference" API. - Joining — calls join by executing a VoxML response that includes
<Conference>NAME</Conference>from theiranswer_url. - Management — list members, mute, deafen, kick, record, play audio.
- End — automatically when the last member leaves, or explicitly via
DELETE.
{name} in every URL is the case-sensitive conference name. Allowed characters: letters, numbers, hyphens, underscores. Maximum 10 participants per conference by default — contact support to raise the cap.
List Conferences
Endpoint
GET https://api.tryvox.io/v1/voice/accounts/{auth_id}/conferencesExample request
curl -u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
https://api.tryvox.io/v1/voice/accounts/$TRYVOX_AUTH_ID/conferencesResponse
200 OK:
{
"conferences": [
{
"name": "support-room-1",
"status": "in-progress",
"members": 3,
"recording_status": "started",
"created_at": "2026-04-09T10:30:00Z"
}
]
}Get Conference
Endpoint
GET https://api.tryvox.io/v1/voice/accounts/{auth_id}/conferences/{name}Example request
curl -u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
https://api.tryvox.io/v1/voice/accounts/$TRYVOX_AUTH_ID/conferences/support-room-1Response
200 OK:
{
"name": "support-room-1",
"account_id": "TJab12cd34",
"status": "in-progress",
"recording_status": "started",
"created_at": "2026-04-09T10:30:00Z",
"members": [
{
"id": "m1",
"call_uuid": "650e8400-e29b-41d4-a716-446655440000",
"muted": false,
"deaf": false
},
{
"id": "m2",
"call_uuid": "750e8400-e29b-41d4-a716-446655440001",
"muted": true,
"deaf": false
}
]
}404 CONFERENCE_NOT_FOUND if the conference doesn't exist or has already ended.
End Conference
Disconnect every member and tear down the room.
Endpoint
DELETE https://api.tryvox.io/v1/voice/accounts/{auth_id}/conferences/{name}Example request
curl -X DELETE \
-u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
https://api.tryvox.io/v1/voice/accounts/$TRYVOX_AUTH_ID/conferences/support-room-1Response
204 No Content.
Mute Member
Stop a member's audio from being mixed into the conference. They can still hear others.
Endpoint
POST https://api.tryvox.io/v1/voice/accounts/{auth_id}/conferences/{name}/members/{member_id}/muteExample request
curl -X POST \
-u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
https://api.tryvox.io/v1/voice/accounts/$TRYVOX_AUTH_ID/conferences/support-room-1/members/m2/muteResponse
204 No Content. Re-fetch the conference to confirm the new member state.
Unmute Member
Endpoint
POST https://api.tryvox.io/v1/voice/accounts/{auth_id}/conferences/{name}/members/{member_id}/unmuteExample request
curl -X POST \
-u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
https://api.tryvox.io/v1/voice/accounts/$TRYVOX_AUTH_ID/conferences/support-room-1/members/m2/unmuteResponse
204 No Content.
Deafen Member
Stop a member from hearing the conference. Their audio still flows in (unless they're also muted). Useful for a moderator who is dialled into the room only to be heard, e.g. a translator on a one-way pass.
Endpoint
POST https://api.tryvox.io/v1/voice/accounts/{auth_id}/conferences/{name}/members/{member_id}/deafExample request
curl -X POST \
-u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
https://api.tryvox.io/v1/voice/accounts/$TRYVOX_AUTH_ID/conferences/support-room-1/members/m2/deafResponse
204 No Content. There is no separate "undeafen" endpoint — drop and re-add the member, or end the call leg and have them rejoin.
Kick Member
Disconnect a single member. Their call leg ends immediately. They can rejoin only by dialling in again.
Endpoint
POST https://api.tryvox.io/v1/voice/accounts/{auth_id}/conferences/{name}/members/{member_id}/kickExample request
curl -X POST \
-u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
https://api.tryvox.io/v1/voice/accounts/$TRYVOX_AUTH_ID/conferences/support-room-1/members/m3/kickResponse
204 No Content.
Start Recording
Begin recording the entire conference (all members mixed into one file). The recording finalises and is delivered via callback_url when the conference ends or Stop Recording is called.
Endpoint
POST https://api.tryvox.io/v1/voice/accounts/{auth_id}/conferences/{name}/recordRequest body
| Parameter | Type | Required | Description |
|---|---|---|---|
file_format | string | no | mp3 or wav. Default: mp3. |
callback_url | string | no | Webhook URL that receives the finished recording metadata. |
Example request
curl -X POST https://api.tryvox.io/v1/voice/accounts/$TRYVOX_AUTH_ID/conferences/support-room-1/record \
-u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
-H "Content-Type: application/json" \
-d '{"file_format": "mp3", "callback_url": "https://your-app.com/conf-rec"}'Response
204 No Content. The conference's recording_status becomes started. See Recordings for the webhook payload.
Stop Recording
End the recording before the conference itself ends.
Endpoint
DELETE https://api.tryvox.io/v1/voice/accounts/{auth_id}/conferences/{name}/recordExample request
curl -X DELETE \
-u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
https://api.tryvox.io/v1/voice/accounts/$TRYVOX_AUTH_ID/conferences/support-room-1/recordResponse
204 No Content. The recording file finalises asynchronously; the URL still arrives at the callback_url registered when starting.
Speak to Conference
Speak TTS audio into the room so all members hear it.
Endpoint
POST https://api.tryvox.io/v1/voice/accounts/{auth_id}/conferences/{name}/speakRequest body
| Parameter | Type | Required | Description |
|---|---|---|---|
text | string | yes | Text to synthesise. Max 3000 characters. |
voice | string | no | Voice ID. Default: provider default for language. |
language | string | no | BCP-47 language tag. Default: en-US. |
Example request
curl -X POST https://api.tryvox.io/v1/voice/accounts/$TRYVOX_AUTH_ID/conferences/support-room-1/speak \
-u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
-H "Content-Type: application/json" \
-d '{"text": "This call is being recorded for quality assurance."}'Response
204 No Content.
Play to Conference
Play an audio file to the room.
Endpoint
POST https://api.tryvox.io/v1/voice/accounts/{auth_id}/conferences/{name}/playRequest body
| Parameter | Type | Required | Description |
|---|---|---|---|
urls | string[] | yes | Public URLs to mp3/wav files. Played in order. |
loop | boolean | no | Loop the playlist. Default: false. |
Example request
curl -X POST https://api.tryvox.io/v1/voice/accounts/$TRYVOX_AUTH_ID/conferences/support-room-1/play \
-u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
-H "Content-Type: application/json" \
-d '{"urls": ["https://example.com/announcement.mp3"]}'Response
204 No Content.
Joining a Conference (VoxML)
Conferences are entered through the Conference VoxML verb returned from a call's answer_url:
{
"voxml_version": "1.0",
"instructions": [
{
"verb": "Conference",
"name": "support-room-1",
"muted": false,
"start_on_enter": true,
"end_on_exit": false,
"record": true
}
]
}The first member to join with start_on_enter: true activates the conference. Setting end_on_exit: true on the moderator's leg ends the room when they hang up.
Notes
- Mutation responses are
204. All write operations (mute, deafen, kick, end, record start/stop, speak, play) are fire-and-forget. Re-fetch the conference to observe the new state. - Member IDs are stable for the duration of a member's participation in the room. They are not stable across rejoins — a member who is kicked and re-dials gets a new ID.
- Speak/Play interrupt each other. A new Speak preempts an in-flight Play and vice versa. There is no
mixflag at the conference level. - Recording outputs one file, mixed across all members. There is no per-member track export.
- Billing is per-member-second. Recording adds a small overhead per member.