Skip to main content

ImportReadingProgressResponse

The response for both a real import and a dry run: the shape is identical either way, so a client cannot tell from the response alone whether anything was written. Only dryRun (and the DB) says that.

dryRunbooleanrequired
noticesstring[]

Informational notes about the request, e.g. reattachSessions having no effect because the file carries no sessions.

series object[]required
  • Array [
  • attemptedbooleanrequired

    Whether book/rating processing was attempted at all (only when disposition == matched).

    books object[]required
  • Array [
  • 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

  • ]
  • committedbooleanrequired

    Whether this series' transaction was committed. Always false in a dry run, and false if attempted but a write failed.

    dispositionSeriesDispositionrequired

    Why a series in the import file could not be resolved to exactly one series in the current library.

    Possible values: [matched, ambiguous, unmatched]

    errorstring | nullnullable
    libraryRelativePathstringrequired
    matchedSeriesId(string | null)<uuid>nullable
    namestringrequired
    ratingFieldOutcome

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

    Possible values: [inserted, updated, skipped]

  • ]
  • sessionsInFilebooleanrequired
    summary objectrequired

    Totals across every series in the file, for a one-line summary.

    booksAmbiguousinteger<int32>required

    Possible values: >= 0

    booksHashMismatchinteger<int32>required

    Possible values: >= 0

    booksInSelectedLibraries(integer | null)<int32>nullable

    Live books in the scoped libraries. None when not scoped.

    Possible values: >= 0

    booksInUnmatchedSeriesinteger<int32>required

    Books counted in books_unmatched only because their whole series did not match.

    books_unmatched mixes two outcomes. In a scoped import these are books belonging to other libraries, which is expected. The remainder, books_unmatched - books_in_unmatched_series, are books missed inside a series that did match, which is worth a reader's attention and must not be hidden under the reassuring label.

    Possible values: >= 0

    booksMatchedinteger<int32>required

    Possible values: >= 0

    booksMatchedDistinctinteger<int32>required

    Distinct destination books matched, for the same reason.

    Possible values: >= 0

    booksStemMatchedinteger<int32>required

    Possible values: >= 0

    booksTotalinteger<int32>required

    Possible values: >= 0

    booksUnmatchedinteger<int32>required

    Possible values: >= 0

    completionsInsertedinteger<int32>required

    Possible values: >= 0

    completionsReattachedinteger<int32>required

    Possible values: >= 0

    progressWritteninteger<int32>required

    Possible values: >= 0

    ratingsWritteninteger<int32>required

    Possible values: >= 0

    rowsStrandedinteger<int32>required

    Rows left behind on a live book in another library. Non-zero means the import moved less than it appears to have.

    Possible values: >= 0

    seriesAmbiguousinteger<int32>required

    Possible values: >= 0

    seriesCommittedinteger<int32>required

    Possible values: >= 0

    seriesInSelectedLibraries(integer | null)<int32>nullable

    Live series in the libraries the import was scoped to. None when the import was not scoped: the denominator would then be every series the reader can see, which measures nothing.

    With this set, a file series that did not match is almost always one that belongs to another library, which is expected when a split imports into one of several new libraries, not a matching failure.

    Possible values: >= 0

    seriesMatchedinteger<int32>required

    Possible values: >= 0

    seriesMatchedDistinctinteger<int32>required

    Distinct destination series that at least one file series resolved to.

    series_matched counts file series, and two of those can resolve to one destination series by name, so it can exceed what the destination holds. Coverage of the destination has to count this instead.

    Possible values: >= 0

    seriesTotalinteger<int32>required

    Possible values: >= 0

    seriesUnmatchedinteger<int32>required

    Possible values: >= 0

    sessionsInsertedinteger<int32>required

    Possible values: >= 0

    sessionsReattachedinteger<int32>required

    Possible values: >= 0

    wantToReadRestoredinteger<int32>required

    Queue entries put back into want-to-read.

    Possible values: >= 0

    ImportReadingProgressResponse
    {
    "dryRun": true,
    "notices": [
    "string"
    ],
    "series": [
    {
    "attempted": true,
    "books": [
    {
    "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
    }
    }
    ],
    "committed": true,
    "disposition": "matched",
    "error": "string",
    "libraryRelativePath": "string",
    "matchedSeriesId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "name": "string",
    "rating": "inserted"
    }
    ],
    "sessionsInFile": true,
    "summary": {
    "booksAmbiguous": 0,
    "booksHashMismatch": 0,
    "booksInSelectedLibraries": 0,
    "booksInUnmatchedSeries": 0,
    "booksMatched": 0,
    "booksMatchedDistinct": 0,
    "booksStemMatched": 0,
    "booksTotal": 0,
    "booksUnmatched": 0,
    "completionsInserted": 0,
    "completionsReattached": 0,
    "progressWritten": 0,
    "ratingsWritten": 0,
    "rowsStranded": 0,
    "seriesAmbiguous": 0,
    "seriesCommitted": 0,
    "seriesInSelectedLibraries": 0,
    "seriesMatched": 0,
    "seriesMatchedDistinct": 0,
    "seriesTotal": 0,
    "seriesUnmatched": 0,
    "sessionsInserted": 0,
    "sessionsReattached": 0,
    "wantToReadRestored": 0
    }
    }