Skip to main content

Meetings API

CRUD operations for Voilo Meetings – a Meeting is a live instance of an Assistant that actually joins a call, streams the transcript, answers questions, and calls tools in real‑time.

Looking for auth, base URLs, pagination, or error formats? Head over to API Foundations.

Endpoints at a glance​

Method & PathPurpose
POST /v1/meetingsCreate (start) a new Meeting
GET /v1/meetingsList Meetings (cursor‑paginated)
GET /v1/meetings/{id}Show a Meeting
PATCH /v1/meetings/{id}Update a Meeting (pause/resume/rename)
DELETE /v1/meetings/{id}Delete (soft‑archive) a Meeting
GET /v1/meetings/{id}/transcriptGet the Meeting transcript

Meeting object schema​

FieldTypeDescription
idstringUnique identifier for the Meeting (prefixed mtg_).
assistant_idstringAssistant template the Meeting was initialized from.
meeting_urlstringThe dial‑in URL Voilo should join.
namestring?Friendly label shown in dashboards.
statusstringCurrent lifecycle state (see Statuses).
started_attimestampUTC ISO‑8601 when the Assistant attempted to join.
ended_attimestamp?When the Assistant left or the Meeting was terminated.
duration_secondsinteger?Calculated difference between started_at and ended_at.
languagestringBCP‑47 code for the dominant language.
audio_urlstringREST endpoint that returns audio recording.
video_urlstringREST endpoint that returns video recording.
tool_results_urlstringEndpoint exposing past tool call outputs.
realtime_endpointobject?Realtime endpoint for streaming transcription, audio, or video.
metadataobject?Free‑form JSON (< 16 KB) for your app’s needs.

Statuses​

ValueMeaning
queuedMeeting created, waiting for connection worker.
connectingConnection in progress.
joinedAssistant is in the call but hasn’t heard speech yet.
listeningStreaming audio and transcripts in real‑time.
completedMeeting ended gracefully; transcript sealed.
pausedTemporarily suspended (via PATCH).
failedMeeting aborted due to an unrecoverable error.

Tip: Intermediate statuses (connecting, joined, listening) typically advance in less than 5 seconds each.

Realtime endpoint​

Use realtime_endpoint as Meeting parameter to stream transcription, audio, or video in real-time. You can use ngrok (or any tunnel) for local dev:

ngrok http 8080   # exposes http://<id>.ngrok.app
FieldTypeDescription
typestringtranscription
urlstringThe URL to stream the transcription, audio, or video.

Create a Meeting​

POST /v1/meetings

Example request​

curl -X POST https://api.voilo.io/meetings \
-H "Authorization: Bearer $VOILO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"assistant_id": "asst_456",
"meeting_url": "https://meet.google.com/abc-defg-hij",
"name": "Daily Scrum – 2025‑06‑17",
"metadata": { "team": "backend" }
}'

Response 201 Created​

{
"id": "mtg_123",
"status": "queued",
}

Error responses​

CodeHTTP StatusWhen it happens
meeting_url_invalid400URL can’t be parsed or isn’t supported.
assistant_not_found404assistant_id is unknown.
meeting_limit_reached429Your org hit the concurrency cap.

List Meetings​

GET /v1/meetings

Filtering​

Query paramTypeDefaultPurpose
cursorstring?–Cursor returned from previous page.
limitinteger?20Max objects per page (1–100).
assistant_idstring?–Filter by Assistant.
statusstring?–Filter by lifecycle state.
started_aftertimestamp?–Return Meeting that began after this UTC time.
started_beforetimestamp?–Return Meeting that began before this UTC time.

Example request​

curl "https://api.voilo.io/meetings?assistant_id=asst_456&status=completed" \
-H "Authorization: Bearer $VOILO_API_KEY"

Response 200​

{
"data": [ /* array of Meeting objects */ ],
"next_cursor": "MjAyNS0wNi0xMFQxNDo1MDozMFo",
"has_more": true
}

Cursor semantics live in API Foundations → Pagination.

Show a Meeting​

GET /v1/meetings/{id}

Example request​

curl https://api.voilo.io/meeting/mtg_123 \
-H "Authorization: Bearer $VOILO_API_KEY"

200 OK – returns the Meeting object.

404 Not Found – ID unknown or archived.

Update a Meeting​

PATCH /v1/meetings/{id}
Body paramTypeNotes
namestring?Rename the Meeting.
pausedboolean?true → pause, false → resume.
completedboolean?true → force Assistant to leave the call.
metadataobject?Replace entire metadata blob.

Example request​

curl -X PATCH https://api.voilo.io/meetings/mtg_123 \
-H "Authorization: Bearer $VOILO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "paused": true }'

200 OK – returns the updated resource.

Delete (archive) a Meeting​

DELETE /v1/meetings/{id}

Soft‑archives the Meeting. Transcript & tool results remain readable.

curl -X DELETE https://api.voilo.io/meetings/mtg_123 \
-H "Authorization: Bearer $VOILO_API_KEY"

204 No Content – the Assistant is now archived.

Get Meeting transcript​

GET /v1/meetings/{id}/transcript

Returns the full transcript of the Meeting as a JSON object containing all spoken segments with timestamps, speaker identification, and confidence scores.

Example request​

curl https://api.voilo.io/meetings/mtg_123/transcript \
-H "Authorization: Bearer $VOILO_API_KEY"

Response 200 OK​

{
"transcript": {
"segments": [
{
"id": "segment_001",
"start": 0.0,
"end": 3.2,
"text": "Hello everyone, let's start the meeting.",
"speaker": "John Doe",
"confidence": 0.95
},
{
"id": "segment_002",
"start": 3.5,
"end": 7.1,
"text": "Thanks John. I'll share my screen now.",
"speaker": "Jane Smith",
"confidence": 0.92
}
],
"duration_seconds": 1800,
"language": "en-US",
"summary": "Team meeting discussing project status and next steps."
}
}

Error responses​

CodeHTTP StatusWhen it happens
meeting_not_found404Meeting ID is unknown or archived.
transcript_not_ready409Meeting is still in progress or transcript processing incomplete.

Error handling recap​

All non‑2xx responses follow the shared envelope documented in API Foundations → Error Envelope. For example:

{
"error": {
"code": "invalid_auth",
"message": "API key expired"
}
}

See also​