Appearance
API Reference
Interactive API documentation generated from the OpenAPI spec.
API Version: 0.1.0
List API keys
Create API key
POST
/api/auth/keys
Generate a new API key with the given label
Request Body
application/json
{
}
Responses
API key created — returns the raw key (shown only once)
application/json
{
}
POST
/api/auth/keys
Samples
Delete API key
Initial setup
POST
/api/auth/setup
Create the first API key. Only works when no keys exist yet.
Request Body
application/json
{
}
Responses
API key created — returns the raw key (shown only once)
application/json
{
}
POST
/api/auth/setup
Samples
Delete book
Approve book metadata
POST
/api/books/{id}/approve
Select metadata fields from candidates, mark book as organized, and enqueue file organization
Parameters
Path Parameters
id*
Type
Requiredstring
Format
"uuid"Request Body
application/json
{
}
Responses
Book approved and organize job enqueued
application/json
{
}
POST
/api/books/{id}/approve
Samples
Get metadata candidates
GET
/api/books/{id}/candidates
List metadata candidates fetched from external sources for a book
Parameters
Path Parameters
id*
Type
Requiredstring
Format
"uuid"Responses
Book info with metadata candidates
application/json
{
}
GET
/api/books/{id}/candidates
Samples
Check service credentials
GET
/api/credentials/{service}
Check whether credentials are configured for a service (opds or kosync). Returns the username and timestamps if configured.
Parameters
Path Parameters
service*
Type
Requiredstring
Valid values
"opds""kosync""hardcover"Responses
Credential status
application/json
{
}
GET
/api/credentials/{service}
Samples
Set service credentials
PUT
/api/credentials/{service}
Set or update credentials for a service. Passwords for opds/kosync are bcrypt-hashed. Hardcover tokens are sealed with reversible encryption.
Parameters
Path Parameters
service*
Type
Requiredstring
Valid values
"opds""kosync""hardcover""google_books"Request Body
application/json
{
}
Responses
Credentials updated
application/json
{
}
PUT
/api/credentials/{service}
Samples
Delete service credentials
DELETE
/api/credentials/{service}
Remove stored credentials for a service (opds, kosync, or hardcover).
Parameters
Path Parameters
service*
Type
Requiredstring
Valid values
"opds""kosync""hardcover"Responses
Credentials deleted
application/json
{
}
DELETE
/api/credentials/{service}
Samples
Get dashboard data
GET
/api/dashboard
Returns currently reading books, recently added, inbox count, library stats, and pipeline status
Responses
Dashboard data
application/json
{
}
GET
/api/dashboard
Samples
Get Hardcover connection status
GET
/api/hardcover/status
Check whether a Hardcover credential is configured, verify the token with the Hardcover API, and return the connected username and last sync timestamp.
Responses
Connection status
application/json
{
}
GET
/api/hardcover/status
Samples
Trigger Hardcover sync
List Hardcover sync log entries
GET
/api/hardcover/sync/log
Return recent Hardcover sync log entries joined with book titles, sorted by last synced timestamp descending.
Parameters
Query Parameters
limit
Type
integer
Default
20Minimum
1Maximum
100Responses
Array of sync log entries
application/json
[
]
GET
/api/hardcover/sync/log
Samples
Health check
GET
/api/health
Returns minimal status for unauthenticated requests. Provide a valid API key for detailed check info.
Responses
All systems healthy
application/json
{
}
GET
/api/health
Samples
Get inbox book
GET
/api/inbox/{id}
Retrieve a single inbox/review book with its files and metadata candidates
Parameters
Path Parameters
id*
Type
Requiredstring
Format
"uuid"Responses
Book with files and candidates
application/json
{
}
GET
/api/inbox/{id}
Samples
Get inbox book cover image
Rescan inbox book metadata
PATCH
/api/inbox/{id}/rescan
Delete existing metadata candidates and re-fetch from external sources
Parameters
Path Parameters
id*
Type
Requiredstring
Format
"uuid"Responses
Rescan enqueued
application/json
{
}
PATCH
/api/inbox/{id}/rescan
Samples
Get inbox count
List inbox books
GET
/api/inbox
Paginated list of books in inbox or review status
Parameters
Query Parameters
page
Type
integer
Default
1limit
Type
integer
Default
20Maximum
100q
Search title, author, or description
Type
string
sort
Sort order for results
Type
string
Valid values
"title_asc""title_desc""detected_newest""detected_oldest""status_asc""status_desc"Default
"detected_newest"Responses
Paginated list of inbox books with files
application/json
{
}
GET
/api/inbox
Samples
Inbox processing status
GET
/api/inbox/processing
Returns the current pipeline stage for books being processed (parsing, fetching metadata, organizing)
Responses
Map of bookId to processing stage
application/json
{
}
GET
/api/inbox/processing
Samples
Upload book files to inbox
POST
/api/inbox/upload
Upload one or more book files via multipart/form-data. Supported formats: epub, pdf, mobi, azw3, cbz, cbr. Max 100MB per file.
Request Body
multipart/form-data
object
file
string[]
Responses
Files uploaded successfully
application/json
{
}
POST
/api/inbox/upload
Samples
Retry a failed job
POST
/api/jobs/{id}/retry
Retry a specific failed job by ID. Searches all queues for the job.
Parameters
Path Parameters
id*
Job ID to retry
Type
Requiredstring
Responses
Job retried successfully
application/json
{
}
POST
/api/jobs/{id}/retry
Samples
List failed jobs
GET
/api/jobs/failed
Return failed jobs across all queues with job ID, queue name, error message, timestamps, and attempt count
Responses
List of failed jobs
application/json
{
}
GET
/api/jobs/failed
Samples
Job queue status
GET
/api/jobs/status
Return job counts per queue (waiting, active, completed, failed, delayed, paused)
Responses
Queue status counts
application/json
{
}
GET
/api/jobs/status
Samples
Get library book
GET
/api/library/{id}
Retrieve a single organized book with its files
Parameters
Path Parameters
id*
Type
Requiredstring
Format
"uuid"Responses
Book with files
application/json
{
}
GET
/api/library/{id}
Samples
Update library book
PATCH
/api/library/{id}
Edit metadata fields on an organized book
Parameters
Path Parameters
id*
Type
Requiredstring
Format
"uuid"Request Body
application/json
{
}
Responses
Updated book
application/json
{
}
PATCH
/api/library/{id}
Samples
Apply refetched metadata to a library book
POST
/api/library/{id}/apply-metadata
Select metadata fields from refetched candidates and apply them to an organized book. Automatically enqueues a re-organize job to update file paths and re-embed EPUB metadata.
Parameters
Path Parameters
id*
Type
Requiredstring
Format
"uuid"Request Body
application/json
{
}
Responses
Metadata applied and re-organize job enqueued
application/json
{
}
POST
/api/library/{id}/apply-metadata
Samples
Get book cover image
Download book file
GET
/api/library/{id}/download/{fileId}
Download a specific file (EPUB, PDF, etc.) belonging to an organized book
Parameters
Path Parameters
id*
Type
Requiredstring
Format
"uuid"fileId*
Type
Requiredstring
Format
"uuid"Responses
File download with Content-Disposition header
application/octet-stream
GET
/api/library/{id}/download/{fileId}
Samples
Get reading progress for a book
GET
/api/library/{id}/progress
Returns reading progress across all devices by matching book file content hashes to KoReader document identifiers
Parameters
Path Parameters
id*
Type
Requiredstring
Format
"uuid"Responses
Reading progress entries for the book
application/json
{
}
GET
/api/library/{id}/progress
Samples
Refetch metadata from external sources
POST
/api/library/{id}/refetch
Delete existing non-file metadata candidates and re-fetch from external sources (Google Books, Hardcover) for an organized book. The book stays organized throughout.
Parameters
Path Parameters
id*
Type
Requiredstring
Format
"uuid"Responses
Refetch enqueued
application/json
{
}
POST
/api/library/{id}/refetch
Samples
Re-organize a library book
POST
/api/library/{id}/reorganize
Enqueue a BOOK_ORGANIZE job for an already-organized book so its files are moved to match updated metadata (author/title)
Parameters
Path Parameters
id*
Type
Requiredstring
Format
"uuid"Responses
Reorganize job enqueued
application/json
{
}
POST
/api/library/{id}/reorganize
Samples
Get library filter facets
List library books
GET
/api/library
Paginated list of organized books with optional search and filtering
Parameters
Query Parameters
page
Type
integer
Default
1limit
Type
integer
Default
20Maximum
100author
Filter by author (partial match)
Type
string
genre
Filter by genre (exact, case-insensitive)
Type
string
q
Full-text search across title, author, and description with typo tolerance
Type
string
sort
Sort order for results
Type
string
Valid values
"title_asc""title_desc""author_asc""author_desc""added_newest""added_oldest"Default
"title_asc"Responses
Paginated list of books with files
application/json
{
}
GET
/api/library
Samples
List books by reading status
GET
/api/reading-status/{status}
Returns a paginated list of organized books filtered by the given reading status, with optional search and sorting.
Parameters
Path Parameters
status*
Reading status to filter by
Type
Requiredstring
Valid values
"unread""reading""finished""paused"Query Parameters
page
Page number (1-based)
Type
integer
Default
1perPage
Number of items per page
Type
integer
Default
20Maximum
100sort
Sort field
Type
string
Valid values
"title""author""percentage""lastRead"Default
"title"order
Sort direction
Type
string
Valid values
"asc""desc"Default
"asc"search
Full-text search query
Type
string
Responses
Paginated list of books with reading progress
application/json
{
}
GET
/api/reading-status/{status}
Samples
Get reading status counts
Search suggestions for command palette
GET
/api/search/suggest
Lightweight prefix search returning up to 8 results for autocomplete. Searches both organized and review books.
Parameters
Query Parameters
q*
Search prefix
Type
Requiredstring
Responses
Search suggestions
application/json
{
}
GET
/api/search/suggest
Samples
Get settings
Update settings
PATCH
/api/settings
Request Body
application/json
{
}
Responses
Settings updated
application/json
{
}
PATCH
/api/settings
Samples
Get reading statistics
GET
/api/stats
Returns reading analytics: books finished, daily activity, genre distribution, reading streak, average finish time
Responses
Reading statistics
application/json
{
}
GET
/api/stats
Samples
Get reading progress
GET
/kosync/syncs/progress/{document}
Get the most recent reading progress for a document. The document identifier is the MD5 hash of the book file, as computed by KOReader.
Parameters
Path Parameters
document*
MD5 hash of the book file
Type
Requiredstring
Responses
Reading progress for the document
application/json
{
}
GET
/kosync/syncs/progress/{document}
Samples
Update reading progress
PUT
/kosync/syncs/progress
Create or update reading progress for a document on a device. Upserts on (document, device) and appends to reading history.
Request Body
application/json
{
}
Responses
Progress saved
application/json
{
}
PUT
/kosync/syncs/progress
Samples
Authenticate KoSync user
POST
/kosync/users/auth
Authenticate a KOReader device for reading progress sync. Validates against configured KoSync credentials.
Request Body
application/json
{
}
Responses
Authentication successful
application/json
{
}
POST
/kosync/users/auth
Samples
Register KoSync user
POST
/kosync/users/create
KOReader calls this to register a new user. Registration is disabled — credentials must be configured via environment variables or the settings UI.
Request Body
application/json
{
}
Responses
Registration disabled
POST
/kosync/users/create
Samples
OPDS books by author
OPDS single book entry
OPDS all books feed
OPDS cover image
OPDS file download
OPDS books by genre
OPDS genres navigation feed
OPDS catalog root
OPDS new arrivals feed
OPDS search
GET
/opds/search
Returns an OpenSearch description document (no query), or a search results acquisition feed (?q=term)
Parameters
Query Parameters
q
Search query
Type
string
page
Type
integer
Default
1Responses
OpenSearch description or OPDS acquisition feed (Atom XML)
application/atom+xml
GET
/opds/search