Threads API
Realtime chat channels that hang off a live Meeting. Every Meeting starts with one default thread (main) and - just like a Slack channel - any client can spin up extra threads on‑the‑fly (/v1/meetings/{meeting_id}/threads
). Use them to separate side‑bars (qa‑chat), action‑items, or Assistant‑only command lanes.
Looking for auth, base URLs, pagination, or error formats? Head over to API Foundations.
Endpoints at a glance
Method & Path | Purpose |
---|---|
POST /v1/meetings/{meeting_id}/threads | Create a new thread |
GET /v1/meetings/{meeting_id}/threads/{id} | Show a single thread |
PATCH /v1/meetings/{meeting_id}/threads/{id} | Update metadata or rename |
Real‑world hook: Daily Scrum Assistant auto‑flags new blockers in the blockers thread while the team is still in the stand‑up.
Thread object schema
Field | Type | Description |
---|---|---|
id | string | Unique identifier, prefixed th_ . |
meeting_id | string | Parent Meeting. |
name | string | Human‑friendly label ("main" , "action‑items" ). |
created_at | timestamp | When the thread was instantiated (ISO‑8601 UTC). |
closed_at | timestamp | When the meeting ended - after this point the thread becomes read‑only. |
readonly | boolean | true once closed_at is set or thread manually locked. |
message_count | integer | Number of messages currently stored. |
metadata | object | Free‑form (< 8 KB) JSON for your integrations. |
Thread statuses
Threads have no separate lifecycle events; instead readonly = false/true
tells you if writing is allowed. Posting into a read‑only thread yields thread_readonly
.
Create a Thread
POST /v1/meetings/{meeting_id}/threads
Body parameters
Field | Type | Description |
---|---|---|
name | string | Human‑friendly label ("main" , "action‑items" ). |
metadata | object? | Free‑form (< 8 KB) JSON for your integrations. |
Example request
curl -X POST https://api.voilo.io/meetings/meeting_123/threads \
-H "Authorization: Bearer $VOILO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "blockers",
"metadata": { "jira_epic": "AI‑123" }
}'
Response 201 Created
{
"id": "th_blockers",
"meeting_id": "meeting_123",
"name": "blockers",
"created_at": "2025-06-17T11:44:12Z",
"readonly": false,
"message_count": 0,
"metadata": { "jira_epic": "AI‑123" }
}
Show a Thread
GET /v1/meetings/{meeting_id}/threads/{id}
Example request
curl -X GET https://api.voilo.io/meetings/meeting_123/threads/th_blockers \
-H "Authorization: Bearer $VOILO_API_KEY"
200 OK – returns the Thread object.
404 Not Found – if the thread doesn’t exist.
Update a Thread (rename / metadata)
PATCH /v1/meetings/{meeting_id}/threads/{id}
Body param | Type | Notes |
---|---|---|
name | string? | Change the display name. |
metadata | object? | Replace entire metadata blob. |
Example request
curl -X PATCH https://api.voilo.io/meetings/meeting_123/threads/th_blockers \
-H "Authorization: Bearer $VOILO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "blockers",
"metadata": { "jira_epic": "AI‑123" }
}'
200 OK – returns the Thread object.
See also
- Messages API – send messages to the thread.
- Assistant Configuration – how to wire prompts & tools.
- API Foundations – base URLs, auth, pagination, and errors.