Skip to main content
Use the generated operations to record page-based progress, mark books or series read, and store OPDS/Readium positions. Each operation returns { data, error, request, response }; pass flat parameters first and { client } second.

Book read progress

Progress lifecycle

A book with no readProgress is unread. Setting page while completed is false makes it in progress; setting completed: true makes it read. Deleting progress removes the server record and returns the book to unread. The page value is one-based: page 1 is the first page.

Mark a book as read

readProgressUpdateDto is the generated body parameter. page can be omitted when completion is explicit:

Update page progress

completed can be omitted; Komga determines it from the page passed and the book’s total page count:

Mark a book as unread

Series read progress

These operations update every book in the series. They are useful for an explicit “mark all” action; they do not preserve each book’s previous page position:

OPDS progression

OPDS progression stores an exact Readium position and device metadata. Use it for EPUB readers; use page-based progress for comics and manga. getBookProgression can return no position when the user has never opened the book.

Get a position

Save a position

r2Progression requires device, locator, and an ISO timestamp. The locations object requires fragments, even when it is empty; position and totalProgression are optional:
When multiple devices synchronize, keep the server’s modified timestamp and only overwrite it when the local position is newer according to your application’s conflict policy.

Workflows

Build a reading tracker

The current getBooks operation requires a bookSearch object. The lifecycle fields on BookDto make it possible to compute all three states without a second request:

Resume in-progress books

BookDto.readProgress includes the current page, total page count is in book.media.pagesCount, lastModified tracks progress updates, and readDate is the completion timestamp when available:

Mark books in a series as read

Use getBooks with a seriesId condition so pagination and filtering use the current list operation. BookDto.number is numeric, unlike the display string in metadata:

Filter by read status

Read status values are UNREAD, IN_PROGRESS, and READ. Put the condition inside bookSearch; the removed top-level readStatus body field is not a 1.0 parameter:

Sync a position across devices

Compare timestamps before writing a local position so an older mobile event does not overwrite a newer server position:

Handle failures

Generated calls do not throw for an HTTP error by default. Inspect error and response; a 401 means authentication is missing or invalid, while a 403 means the user lacks the operation’s permission:
Use unwrap when your application prefers exceptions. It throws KomgaApiError for an unsuccessful response; see Quickstart for the throwing boundary.

Next steps

Books

Learn more about book operations.

Series

Manage series and their metadata.