TryVox

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

  1. Creation — implicit. The conference appears the moment the first call enters it via VoxML's <Conference> verb. There is no explicit "create conference" API.
  2. Joining — calls join by executing a VoxML response that includes <Conference>NAME</Conference> from their answer_url.
  3. Management — list members, mute, deafen, kick, record, play audio.
  4. 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}/conferences

Example request

curl -u $TRYVOX_AUTH_ID:$TRYVOX_AUTH_TOKEN \
  https://api.tryvox.io/v1/voice/accounts/$TRYVOX_AUTH_ID/conferences

Response

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-1

Response

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-1

Response

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}/mute

Example 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/mute

Response

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}/unmute

Example 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/unmute

Response

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}/deaf

Example 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/deaf

Response

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}/kick

Example 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/kick

Response

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}/record

Request body

ParameterTypeRequiredDescription
file_formatstringnomp3 or wav. Default: mp3.
callback_urlstringnoWebhook 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}/record

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-1/record

Response

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}/speak

Request body

ParameterTypeRequiredDescription
textstringyesText to synthesise. Max 3000 characters.
voicestringnoVoice ID. Default: provider default for language.
languagestringnoBCP-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}/play

Request body

ParameterTypeRequiredDescription
urlsstring[]yesPublic URLs to mp3/wav files. Played in order.
loopbooleannoLoop 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 mix flag 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.

On this page