Get a meeting's transcript
Returns metadata plus a short-lived (1-hour) presigned S3 URL to download the meeting’s transcript as a JSONL file (one utterance per line, no embeddings). Returns 404 if the meeting does not exist, your API key is not entitled to it, or it has no built transcript artifact (has_transcript on the meeting list tells you in advance). The link is never broken: a 200 always carries a valid, downloadable URL.
A meeting that recessed and reconvened is transcribed as several consecutive parts. Read coverage (or part_count) and use the parts array to get the whole meeting: the top-level download_url, url_expires_at and uuid describe parts[0] only, so a client that reads just those fields gets the first part of such a meeting — truthful, but partial, and with no error to signal it. Single-artifact meetings, which is nearly all of them, report coverage: "single" with one entry in parts.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The meeting's public uuid.
"9a1c2b3d-4e5f-6071-8293-a4b5c6d7e8f9"
Response
Transcript metadata with a 1-hour presigned download URL.
The transcript's public identifier.
"d8e1f2a3-4b5c-6d7e-8f90-1a2b3c4d5e6f"
The meeting's public identifier; matches the path.
"9a1c..."
The downloaded artifact's format. Always jsonl (one utterance object per line).
jsonl "jsonl"
Whether this meeting's transcript is one artifact (single) or several consecutive parts that must be read in order (multipart). Branch on this — or on part_count — before treating download_url as the complete meeting. Describes what parts actually contains rather than what the meeting was recorded as: a meeting known to have parts whose artifacts are not built yet reports single with a null rendition, because the one artifact returned cannot be attributed to that coverage.
single, multipart "single"
How many parts are available to download, i.e. the length of parts. Can be lower than the meeting's true part count while a later part's artifact is still being built, so a multipart response with part_count: 1 means 'more is coming', not 'this is all there is'.
1
Which coverage of the meeting these parts come from, when a meeting has been recorded more than once (Granicus and YouTube, say). Null for a meeting with a single unnumbered recording, which is the overwhelming majority. Parts are never mixed across renditions.
null
Every downloadable part, in reading order. Always present and never empty — a single-artifact meeting is one part. This is the authoritative list: the top-level download_url, url_expires_at and uuid describe parts[0] only.
Presigned S3 URL for the JSONL transcript, valid 1 hour. Download it before it expires. Describes parts[0] only. For a multipart meeting this is the FIRST part, not the whole meeting — a client that reads only this field gets a truthful but partial transcript and no error. Use parts when coverage is multipart.
"https://hamlet-transcripts-prod.s3.us-west-1.amazonaws.com/…?X-Amz-Signature=…"
ISO-8601 UTC timestamp when download_url expires. Describes parts[0].
"2026-06-22T15:30:00.000Z"
ISO-8601 UTC timestamp for when the transcript artifact was built. The NEWEST across all parts, so it answers 'how fresh is this transcript?' for the meeting as a whole — unlike the other top-level fields, which describe parts[0].
"2026-05-22T09:20:00.000Z"