---
title: "Get a meeting transcript"
method: GET
path: "/api/v1/meetings/{meetingId}/transcript"
tags: ["Meetings"]
---

# Get a meeting transcript

`GET /api/v1/meetings/{meetingId}/transcript`

Returns the meeting transcript as time-ordered speaker segments. Each segment resolves to an Atlas user (speakerUserId), an Atlas person (speakerPersonId), or neither (unknown speaker — the raw ASR label is preserved in `speaker`). Speaker identification is best-effort. A valid meeting whose transcript has not been generated yet returns 200 with an empty `segments` array; 404 is reserved for an unknown or forbidden meeting id.

This endpoint serves **general meetings only**. If the requested ID resolves to a candidate interview, the response is a `422` whose body points at `GET /api/v1/interviews/{interviewId}/transcript`.

## Path parameters

- `meetingId` string, uuid, required — ID of the meeting to retrieve

## Response `200`

Meeting transcript

- object
  - `status` 'ok', required
  - `data` object, required
    - `meetingId` string, uuid, required
    - `language` string, nullable, required — BCP-47 language tag. Not currently stored — always null until added upstream.
    - `durationSeconds` integer, nullable, required — Length of the conversation in seconds, derived from the transcript span (last phrase end − first phrase start). Falls back to the meeting start/end window when no transcript timing is available.
    - `generatedAt` string, nullable, required — Best-effort transcript generation time. Currently the meeting completedAt timestamp (proxy).
    - `segments` object[], required
      - `speaker` string, required — Resolved speaker name, or the raw ASR label for unknown speakers
      - `speakerUserId` string, uuid, nullable, required — Atlas user ID when the speaker resolves to a user, otherwise null
      - `speakerPersonId` string, uuid, nullable, required — Atlas person ID when the speaker resolves to a person, otherwise null
      - `startMs` integer, required — Segment start offset in milliseconds
      - `endMs` integer, required — Segment end offset in milliseconds
      - `text` string, required — Concatenated phrase text for this speaker turn

## Other responses

- `401` — Unauthorized - missing or invalid API key
- `404` — Meeting not found or belongs to a different agency
- `422` — meetingId is not a valid UUID, or the ID belongs to an interview (the body then carries `correctEndpoint: "GET /api/v1/interviews/:interviewId/transcript"`).
- `429` — Too many requests - the caller has exceeded the per-agency rate limit for the tier this endpoint counts against (default per minute: 1200 read / 400 write / 60 upload). Inspect the `RateLimit-*` headers — returned on every response, not only on 429s — and back off until the window resets. See the "Rate limits" section of the introduction for details.

---

[API](https://skmtc.dev/recruitwithatlas/apis/atlas-api.md) · [All operations](https://skmtc.dev/recruitwithatlas/apis/atlas-api/llms.txt) · [OpenAPI document](https://skmtc.dev/recruitwithatlas/apis/atlas-api/revisions/cd4bc8bbd95e?raw)
