---
title: "Stream one narration segment"
method: GET
path: "/v1/reader/segments/{segmentId}/audio"
tags: ["reader"]
---

# Stream one narration segment

`GET /v1/reader/segments/{segmentId}/audio`

## Request

- Base URL: `https://api.ditto.audio` (the document declares no server; this is the origin it was published from)
- URL: `https://api.ditto.audio/v1/reader/segments/{segmentId}/audio`
- Auth: HTTP bearer

302s to a short-lived storage URL that serves the bytes (and honours Range requests). The redirect target expires; THIS url does not, so a manifest you cached last week still plays.

Send `?redirect=false` for `{ url, expiresInSec }` as JSON instead — some HTTP clients replay the `Authorization` header on redirect, and storage rejects a request carrying two credentials.

## Path parameters

- `segmentId` string, required

## Query parameters

- `redirect` boolean

## Other responses

- `302`: Redirect to the audio bytes.
- `404`: Unknown segment, or no stored audio for it yet.

---

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