Skip to main content

Sessions

Get sessions and transcripts over API

Written by James

Before you get started make sure to create an API key in your CaptionKit dashboard and read up on the API authentication.

Your API key is scoped to your account, so it can only access your own account's sessions. You can find your account ID in the id field of the Account endpoint.

Listing your sessions

GET /v2/accounts/{accountId}/sessions

Returns your account's past caption sessions, newest first.

Using curl

curl "https://api.captionkit.com/v2/accounts/{ACCOUNT_ID}/sessions?key={API_KEY}"

Using fetch in JS or Node

fetch(`https://api.captionkit.com/v2/accounts/${ACCOUNT_ID}/sessions?key=${API_KEY}`)

Query parameters

All parameters are optional:

  • limit — number of sessions to return, between 1 and 100. Defaults to 20.

  • offset — number of sessions to skip, for paging through results. Defaults to 0.

  • orderasc or desc by start time. Defaults to desc (newest first).

  • profile_id — only return sessions for a specific profile.

  • language — only return sessions with this source language, e.g. en-US.

Response

{
"data": [
{
"id": "2355239b-578f-4bca-bfa5-8cd544633967",
"account_id": "9c9a80c2-ee91-4590-a83a-cf2a454893c3",
"profile_id": "b1f6d0d7-3d1c-4a4e-9a58-2f0d54cf40a1",
"language": "en-US",
"translations": ["es-419"],
"duration": 5423,
"started_at": "2026-08-14T18:31:03.199Z"
}
],
"pagination": {
"limit": 20,
"offset": 0,
"total": 42,
"hasMore": true
}
}

Use pagination.hasMore to check whether there are more sessions to fetch — if it's true, request the next page by increasing offset by limit.

Sessions are cached briefly, so a session that just finished can take up to a minute to appear in the list.

Downloading a transcript

GET /v2/accounts/{accountId}/sessions/{sessionId}/transcript

Returns the full transcript for a single session, in your choice of format.

Using curl

curl "https://api.captionkit.com/v2/accounts/{ACCOUNT_ID}/sessions/{SESSION_ID}/transcript?key={API_KEY}"

Using fetch in JS or Node

fetch(`https://api.captionkit.com/v2/accounts/${ACCOUNT_ID}/sessions/${SESSION_ID}/transcript?key=${API_KEY}`)

Query parameters

  • format — one of json, text or srt. Defaults to json.

    • json — structured captions with timing information.

    • text — a plain text transcript, one caption per line.

    • srt — a subtitle file, delivered as a .srt download.

  • lang — return a translation instead of the original transcript, e.g. lang=es-419. Only languages the session was translated into are available (see the translations field on the session). If the translation doesn't exist you'll get a 404.

Response (json format)

{
"id": "2355239b-578f-4bca-bfa5-8cd544633967",
"language": "en-US",
"items": [
{
"start": 0,
"duration": 3200,
"text": "Welcome everyone, thanks for joining us today.",
"isComplete": true
}
]
}

Each item includes start and duration in milliseconds, so you can rebuild timing for your own captioning or archiving workflows.

Did this answer your question?