---
title: "Create or update an audiobook"
method: PUT
path: "/v1/reader/audiobooks/{audiobookId}"
tags: ["reader"]
---

# Create or update an audiobook

`PUT /v1/reader/audiobooks/{audiobookId}`

## 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/audiobooks/{audiobookId}`
- Auth: HTTP bearer

Idempotent upsert keyed on the path id — safe to retry, and safe to call from several of your own devices. `title` is required; any other field you omit keeps the value it already had.

## Path parameters

- `audiobookId` string, required

## Request body

- UpsertAudiobookDto
  - `id` string: Your own stable id for this audiobook (an ISBN, a uuid, your primary key). Ignored on PUT — the path wins. Omit on POST and one is generated.
  - `title` string, required
  - `author` string
  - `format` string: Source document type.
  - `chapterCount` number: How many chapters the source has.
  - `contentHash` string: sha-256 of the source file, lowercase hex. Enables upload dedup.
  - `coverImageUrl` string: https:// or data:image/ URL.

## Response `200`

---

[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)
