> ## Documentation Index
> Fetch the complete documentation index at: https://docs.policymate.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Transcripts

> Read transcripts of hearings, sessions, and meetings, with their chapters and speakers.

Transcripts give you what was said at hearings, plenary sessions, and public meetings as text you can search and quote. Each transcript is split into chapters by topic, and what is said is attributed to the person who said it.

A transcript comes from one of two origins, given by its `origin` attribute:

| Origin | Text | Speakers | Timings |
| - | - | - | - |
| `official_record` | The institution's own verbatim record, as published | As the record names them | Estimated from the speech's start time, when the record gives one |
| `speech_recognition` | Produced by AI from the recording, then cleaned of hesitations and repetitions | Identified automatically | Measured on the recording |

> [!WARNING]
>
> Transcripts produced by speech recognition may mishear words, especially names and numbers. Before quoting one, you should check the passage against the recording.

## Retrieving Transcripts

To retrieve a list of transcripts, newest first, send a `GET` request to the `/transcripts` endpoint. For example, the following request retrieves Texas hearings that discussed data centers:

```http theme={null}
GET /api/v0/transcripts?jurisdiction=US-TX&q=%22data%20center%22
```

To retrieve a single transcript, send a `GET` request to `/transcripts/{id}`.

## Filtering Transcripts

The `/transcripts` endpoint accepts the [shared filters](https://docs.policymate.io/filtering.md), including the [recommendation filters](https://docs.policymate.io/filtering.md#recommendation-filters), along with the following query parameters:

| Parameter | Example | Description |
| - | - | - |
| `speaker` | a person `id` | Only transcripts in which this person speaks. Accepts a list. |
| `origin` | `official_record` | Only transcripts of this origin |
| `published_after`, `published_before` | `2026-10-01` | Only transcripts of recordings published within this range |
| `sort` | `-published_at` | Also `updated_at`, or `relevance` when searching with `q`. Defaults to `-published_at`. |

The `q` parameter searches the transcript's name, its chapters, and everything said in it. Categories belong to chapters, so the `category` parameter returns transcripts with at least one chapter in that category.

## The Transcript Object

A transcript looks like the following. The values below are illustrative:

```json theme={null}
{
  "id": "e41c7a20-...",
  "type": "transcript",
  "name": "House Committee on State Affairs, February 18, 2027",
  "origin": "speech_recognition",
  "jurisdiction": { "id": "US-TX", "name": "Texas" },
  "language": "en",
  "published_at": "2027-02-18T20:41:00Z",
  "duration": 9342,
  "chapters_count": 7,
  "recommendations": [
    { "workspace": { "id": "3a9d...", "name": "Data centers" }, "importance": "high" }
  ],
  "links": {
    "source": "https://house.texas.gov/videos/...",
    "recording": null,
    "app": "https://app.policymate.io/transcripts/e41c7a20-.../show"
  },
  "created_at": "2027-02-19T02:10:44Z",
  "updated_at": "2027-02-19T03:02:18Z"
}
```

The `duration` attribute is the length of the recording in seconds, and is `null` when there is no recording. The `language` attribute is the language spoken, as an ISO 639-1 code, and is `null` when it was not recorded. The text is returned in the language spoken.

The `links.source` attribute links to the page where the recording or the record was published. The `links.recording` attribute links directly to the recording when it is hosted elsewhere, such as on a video platform, and is `null` otherwise. An official record may have no recording at all.

PolicyMate recommends the chapters of a transcript rather than the whole recording. The transcript's `recommendations` attribute gathers them, with the highest importance among its chapters for each workspace, as described in [Recommendations on Records](https://docs.policymate.io/filtering.md#recommendations-on-records).

## Chapters

PolicyMate splits each transcript into chapters, one for each item on the agenda or each topic discussed. You may retrieve a transcript's chapters, in order, using the `GET /transcripts/{id}/chapters` endpoint:

```json theme={null}
{
  "id": "5f2b...",
  "title": "HB 1234: Reporting duties for large data centers",
  "summary": { "text": "The committee heard invited testimony from the PUC and two grid operators ...", "source": "ai" },
  "starts_at_second": 1830.4,
  "ends_at_second": 4112.9,
  "categories": [ { "id": "0b6f2d4e-...", "label": "Energy policy" } ],
  "recommendations": [
    { "workspace": { "id": "3a9d...", "name": "Data centers" }, "importance": "high" }
  ]
}
```

Chapter titles, summaries, and categories are written by AI. The `starts_at_second` and `ends_at_second` attributes give the chapter's place in the recording, and are `null` when the transcript has no timings. Chapters follow one another and never overlap.

A chapter keeps its `id` for as long as the transcript exists, so you may store it alongside the recommendations that point to it.

## Speakers

The `GET /transcripts/{id}/speakers` endpoint returns the people who speak in a transcript, each listed once:

```json theme={null}
{
  "name": "Jane Doe",
  "person": { "id": "5c1d...", "name": "Jane Doe" },
  "affiliation": null,
  "words_spoken": 2140
}
```

The `person` attribute links the speaker to a [person](https://docs.policymate.io/reference/people-and-organisations.md#people) when the official record names them or PolicyMate has identified them, and is `null` otherwise. A speaker's `person.id` is the same `id` the `speaker` filter accepts. The `affiliation` attribute is the organisation the speaker says they represent, such as a company testifying at a hearing, and is `null` when the recording does not say. The `words_spoken` attribute tells you how much the speaker said.

## Transcript Text

The `GET /transcripts/{id}/text` endpoint returns the whole transcript as `text/plain`. Each passage is preceded by its time in the recording, when known, and the speaker's name, so you can find it in the recording:

```text theme={null}
[00:31:52] Jane Doe: We expect the reporting threshold in this bill to cover most hyperscale sites in the state.
```

You may pass the `chapter` query parameter to only retrieve the text of one chapter.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.