---
title: "Update the listening position"
method: PUT
path: "/v1/reader/audiobooks/{audiobookId}/progress"
tags: ["reader"]
---

# Update the listening position

`PUT /v1/reader/audiobooks/{audiobookId}/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/reader/audiobooks/{audiobookId}/progress`
- Auth: HTTP bearer

Conflicts resolve on `lastReadAtMs`, not arrival order: an update older than the stored one is ignored rather than applied, so a device that was offline cannot rewind a position set somewhere else.

## Path parameters

- `audiobookId` string, required

## Request body

- UpdateProgressDto
  - `chapterIndex` number
  - `paragraphIndex` number: Segment within the chapter.
  - `cfi` string: An epub.js CFI, if you have one.
  - `percentComplete` number: 0..1
  - `totalReadingTimeMs` number: Total listening/reading time, ms.
  - `lastReadAtMs` number: Client clock, ms epoch. Last-write-wins is resolved on THIS, not on arrival order — an update older than the stored one is ignored, so a device coming back online cannot rewind a position set elsewhere.

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