---
title: "Update reading progress for a book"
method: PUT
path: "/v1/sync/books/{bookId}/progress"
tags: ["sync/library"]
---

# Update reading progress for a book

`PUT /v1/sync/books/{bookId}/progress`

## 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/sync/books/{bookId}/progress`
- Auth: HTTP bearer

## Path parameters

- `bookId` string, required

## Request body

- UpsertProgressDto
  - `bookId` string
  - `chapterIndex` number
  - `paragraphIndex` number
  - `cfi` string: epub.js CFI (web reader)
  - `percentComplete` number: 0..1
  - `totalReadingTimeMs` number
  - `lastReadAtMs` number

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