Skip to main content

ImportBookReport

The outcome for one book in the import file.

appliedbooleanrequired

Whether any writes were attempted for this book. False for every disposition except matched, and except stem_match when acceptStemMatches is off.

completions objectrequired

Insert/reattach/skip counts for an append-only table (completions or sessions) within one book.

insertedinteger<int32>required

Possible values: >= 0

reattachedinteger<int32>required

Adopted an orphaned row (book_id IS NULL) rather than inserting a new one.

Possible values: >= 0

skippedinteger<int32>required

Already present with the same book attached; re-importing is a no-op. Includes stranded, so inserted + reattached + skipped still totals every row in the file.

Possible values: >= 0

strandedinteger<int32>required

Skipped because the row sits on a book that is still live in another library, which is not the same thing as a harmless re-import: the reading history stays behind while the progress moves. Reattaching it would strip a library the reader may still be using, so the import reports it instead of guessing.

Possible values: >= 0

dispositionBookDispositionrequired

Why a book in the import file could not be resolved to exactly one book in its matched series.

Possible values: [matched, stem_match, ambiguous, unmatched, hash_mismatch]

fileNamestringrequired
matchedBookId(string | null)<uuid>nullable
pathstringrequired
progressFieldOutcome

What happened to one scalar field write (progress or rating) under the active conflict policy.

Possible values: [inserted, updated, skipped]

sessions objectrequired

Insert/reattach/skip counts for an append-only table (completions or sessions) within one book.

insertedinteger<int32>required

Possible values: >= 0

reattachedinteger<int32>required

Adopted an orphaned row (book_id IS NULL) rather than inserting a new one.

Possible values: >= 0

skippedinteger<int32>required

Already present with the same book attached; re-importing is a no-op. Includes stranded, so inserted + reattached + skipped still totals every row in the file.

Possible values: >= 0

strandedinteger<int32>required

Skipped because the row sits on a book that is still live in another library, which is not the same thing as a harmless re-import: the reading history stays behind while the progress moves. Reattaching it would strip a library the reader may still be using, so the import reports it instead of guessing.

Possible values: >= 0

ImportBookReport
{
"applied": true,
"completions": {
"inserted": 0,
"reattached": 0,
"skipped": 0,
"stranded": 0
},
"disposition": "matched",
"fileName": "string",
"matchedBookId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"path": "string",
"progress": "inserted",
"sessions": {
"inserted": 0,
"reattached": 0,
"skipped": 0,
"stranded": 0
}
}