# Get a recording with its transcript

Source: https://workroad.app/docs/api/get-recording

`GET https://workroad.app/api/v1/recordings/{recordingId}`

The recording's transcript, one line per entry, and its summary, key terms and chapters when it has them. Write notes, flashcards or a practice test from the transcript with your own model, then save them with `POST /notes`, `POST /sets` or `POST /tests/from-questions`.

- MCP tool: `getRecording` on `https://workroad.app/api/mcp`
- Required scopes: notes:view
- Test mode: `GET https://workroad.app/api/test/v1/recordings/{recordingId}` checks the request and returns the example response without changing anything.

## Path parameters

- `recordingId`: string (uuid), required. Recording id from `GET /notes/{noteId}/recordings`.

## Response

`200` OK

- `data`: object, required
  - `id`: string (uuid), required
  - `noteId`: string (uuid), required
  - `title`: string or null, required
  - `status`: one of `"recording"`, `"assembling"`, `"finished"`, required. `recording` while audio is still coming in, `assembling` while WorkRoad puts the transcript together, `finished` once it is final.
  - `summaryStatus`: one of `"none"`, `"queued"`, `"running"`, `"done"`, `"failed"`, required. Whether the recording has a summary: `done` when one is saved, `queued` or `running` while WorkRoad's AI writes one.
  - `createdAt`: string (date-time), required. When the recording started.
  - `transcript`: array of string, required. The transcript, one entry per line, in order. Empty until the recording is finished.
  - `summary`: string or null, required. The saved summary, or `null`.
  - `keyTerms`: array of objects, required
    - `term`: string, required
    - `definition`: string, required
  - `chapters`: array of objects, required
    - `startMs`: integer, required
    - `title`: string, required
    - `summary`: string, required

### Example

```json
{
  "data": {
    "id": "5e4d3c2b-1a09-4f8e-9d7c-6b5a49382716",
    "noteId": "2f1e0d9c-8b7a-4c6d-9e5f-4a3b2c1d0e9f",
    "title": "Lecture 7: CPU scheduling",
    "status": "finished",
    "summaryStatus": "done",
    "createdAt": "2026-01-15T09:30:00.000Z",
    "transcript": [
      "Today we look at how the scheduler picks the next process.",
      "Round robin gives each process a fixed time slice, in turn."
    ],
    "summary": "How a CPU scheduler chooses the next process, with round robin as the main example.",
    "keyTerms": [
      {
        "term": "Round robin",
        "definition": "Each process runs for a fixed time slice, in turn."
      }
    ],
    "chapters": [
      {
        "startMs": 0,
        "title": "Scheduling",
        "summary": "Why the CPU needs a scheduler."
      }
    ]
  }
}
```

## Errors

Every error has the body `{ "error": { "code", "message", "details" } }`.

- `400`: Invalid request body or query
- `401`: Missing, invalid, disabled or expired API key
- `403`: The API key lacks the required scope
- `404`: No recording with that id exists for this key's user.
- `405`: Method not allowed. Use a method from the Allow header.
- `429`: Rate limit exceeded. Wait for Retry-After before retrying. The rate-limit headers are absent when the key's own limiter rejected the request before the per-endpoint bucket check ran.
- `500`: Internal server error
