---
title: "Generate chapter markers"
method: POST
path: "/api/v1/transcriptions/{id}/chapters"
---

# Generate chapter markers

`POST /api/v1/transcriptions/{id}/chapters`

## Request

- Base URL: `https://podcaststotext.com`
- URL: `https://podcaststotext.com/api/v1/transcriptions/{id}/chapters`
- Auth: HTTP bearer

Timestamped chapters: a title and a start time in seconds for each section. Cached like show notes. Needs a transcript with word timings, which is a property of the TRANSCRIPT rather than of the account: one made on the free tier has no segments to place chapters against, and upgrading does not change that. Requires the "ai:write" scope and a paid plan.

## Path parameters

- `id` string, required

## Request body

- object
  - `force` boolean

## Response `200`

Chapters

- object
  - `id` string
  - `chapters` object[]
    - `title` string
    - `start` number: Seconds from the start
  - `cached` boolean

## Other responses

- `400`: Transcript has no word timings
- `401`: Missing or invalid API key
- `403`: The account's plan does not allow this: either it includes no API access, or the requested scope needs write access. `error.code` is "plan_required". No plan is in that state today, so in practice you will see 402 insufficient_credits instead, which means the plan is fine and the balance is empty.
- `404`: No such transcription on this account
- `429`: Too many requests. Limits are per API key, counted per minute and per day, and depend on the plan. Operations that cost money to run (transcription, renders, AI) carry a second, tighter limit of their own. Read RateLimit-Remaining on every successful response to pace requests rather than waiting to be refused.

---

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