GET /v1/sessions/:id/live
Returns the lines of an RPG session’s live transcription while it’s still being played. For a voice meeting, use GET /v1/meetings/:id/live; it works the same way. Find the id of what’s recording with GET /v1/live: sessions have type: "session".
Each line is one sentence, timed on its own, and shows up a few seconds after the speaker pauses. Someone talking without a break (or with an open mic) is sent in pieces of up to 4 minutes, so their sentences can arrive in a batch. Names are corrected against your vocabulary and campaign roster as each line is saved. The finished transcript, from GET /v1/sessions/:id once the session ends, is corrected again with the roster as it is then, so it can differ slightly from the live lines.
Same token, paid-plan requirement and rate limit (100 requests a minute per server) as the rest of the public API. Polling every 3 to 5 seconds is plenty.
Request
GET /v1/sessions/<id>/live?after=<cursor>
Authorization: Bearer <token>
| Query param | Required | Description |
|---|---|---|
after | No | The cursor from your previous call. Leave it out on the first call to get every line so far. |
No request body.
Response
{
"id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"type": "session",
"discord_channel_id": "123456789012345678",
"started_at": "2026-10-15T09:00:04Z",
"status": "live",
"cursor": 1792055565123,
"lines": [
{
"id": "111111111111111111-1792055550120-0",
"speaker": { "discord_id": "111111111111111111", "name": "Rook" },
"text": "I check the captain's cabin for the compass.",
"started_at": "2026-10-15T09:12:30.120Z",
"ended_at": "2026-10-15T09:12:33.900Z"
}
]
}
- Pass
cursorback asafteron your next call to get only the new lines. - Lines can arrive out of speaking order (a long piece finishes after shorter ones that started later), so sort by
started_atif order matters. - When
statusturns toended, stop polling. The finished transcript and session notes are available fromGET /v1/sessions/:ida minute or two later, and in thetranscript.readywebhook.
People who haven’t given consent on a server with consent opt-in are never transcribed, live or afterwards.
Errors
| Status | When |
|---|---|
404 Not Found | The session doesn’t exist, isn’t an RPG session, or belongs to a different Discord server than your token. |
503 Service Unavailable | The live transcript couldn’t be reached for a moment ("error": "live_unavailable"). Try again on your next poll. |
The live transcript also shows on the dashboard: open Transcripts while the session is recording.