Skip to content

Consuming session content

Use the content endpoints when you want a ready-to-render pack for a session or event — not the raw polymorphic transcriptions list.

GoalEndpoint family
Display a full session transcript + AI artifacts in an appGET .../sessions/{sessionId}/content
Browse packs across an eventGET .../content (paginated)
Event report PDF + recap rollupGET .../content/event
Create/update raw fragments, summaries, insights.../transcriptions CRUD

Scope: read:transcriptions (legacy tokens with empty scopes still pass for reads).

Terminal window
curl --request GET \
--url 'https://public-api.sessionboard.com/v1/event/6046/sessions/{sessionId}/content' \
--header 'x-access-token: YOUR_TOKEN'

Response shape (proxy envelope):

{
"data": {
"id": "session-uuid",
"event_id": 6046,
"title": "Keynote",
"speakers": [{ "id": "0", "label": "Speaker 0", "name": null }],
"has_transcription": true,
"has_summary": true,
"has_podcast": false,
"items": [
{
"type": "transcription",
"text": "Full joined transcript…",
"elements": [
{
"value": "Speaker turn text…",
"speaker": { "id": "0", "label": "Speaker 0", "name": null },
"start_time": 2.23,
"end_time": 51.88,
"fragment_ids": ["…"]
}
]
},
{ "type": "summary", "provider": "openai", "content": { "summary": "…", "key_points": [] } },
{ "type": "insight", "insight_type": "thought", "name": "…" },
{ "type": "podcast", "status": "none", "url": null },
{ "type": "document", "document_type": "summary_pdf", "url": "https://…/sessions/{sessionId}/content/documents/summary_pdf" }
]
}
}
const transcription = data.items.find((i) => i.type === "transcription");
const fullText =
transcription?.text ??
transcription?.elements?.map((e) => e.value).join(" ") ??
"";

elements.map(e => e.value).join(' ') always equals text when elements are present.

  • Default: consecutive same-speaker fragments → one element (speaker turns).
  • ?interval_sec=60: rechunk same-speaker blocks into ~60s windows (speaker changes still split).
Terminal window
# Transcript + summary only
.../content?expand=transcription,summary
Terminal window
.../content?provider=claude

When multiple rolling summaries exist, the newest is returned unless provider matches.

Terminal window
curl --request GET \
--url 'https://public-api.sessionboard.com/v1/event/6046/content?page=1&page_size=25' \
--header 'x-access-token: YOUR_TOKEN'

Returns { data: [ SessionContent, … ], pagination: { current_page, page_size, total_pages, total_results } }.

List packs are compact by default (transcription text without full elements). Pass expand=items (with other types) for full element arrays.

Terminal window
GET /v1/event/{eventId}/content/event

Includes document (event_report) and recap (quotes, topics, summary excerpts).

ItemBehavior
podcaststatus: none | queued | generating | ready | failed. When ready, url is a time-limited download link; refresh before expires_at.
documentMetadata + url pointing at authenticated download routes (summary_pdf, summary_card, event_report).

Generation of podcasts/PDFs is not triggered by the public API — content endpoints are read-only.

Terminal window
GET /v1/event/{eventId}/content/items/{itemId}
itemIdResult
Session UUIDComposed transcription item
Summary / insight / podcast UUIDThat item
summary_pdf / summary_cardDocument metadata (?session_id= required)
event_report / recapEvent-level item

Get release notes by email

A short digest on the days something new goes live — each change with a link to its note in the release notes. No marketing, and one click to stop.

Company email addresses only. We’ll send one email to confirm it’s you. Already use Sessionboard? You can also turn this on under Community → What’s new.