Files
bookhoard/docs/developer/api/book-matching/search_books.md
T
John O'Keefe 18084de7a6 docs(book-matching,collections): Beam batch 10 — 15 endpoints
WO3 sync internals resolved: the book-matching docs ARE the sync surface
(books/query, link-book, bulk/auto-link, unlinked-books, suggestions,
file-alias CRUD) + collections rule/test/bulk-assign/shelf-mapping
surface.

Dedupe resolved (Claude call): search_books.md declared
GET /api/books/match but its BODY documents POST /api/sync/books/query —
both routes exist and are distinct (query-param device protocol vs JSON
body plugin protocol). Repointed search_books.md frontmatter to the POST
route; get_book_matches.md keeps the GET.

Claude registry: 15 entries (one pre-existing link-book entry deduped).
Drift fixed by gate: auto-link request {confidence_threshold, limit} not
{device_id, threshold}; bulk-link link objects {unlinked_book_id,
media_item_id, confidence_score} not {device_id, book_id, ...};
responses {results,total,successful,failed}/{auto_linked,results}; added
missing example-responses (bare delete, remove-rule is_smart-after
semantics, bulk-assign per-book results). make test 9/9.
2026-10-24 17:59:27 -04:00

1.5 KiB

method, path, auth, area
method path auth area
POST /api/sync/books/query jwt book-matching

Search Books for Matching

Query books to find potential matches for linking.

Endpoint: POST /api/sync/books/query Auth: Required Content-Type: application/json

Request Body

Field Type Required Description
identifiers array No List of identifiers (ISBN, UUID)
sha256 string No SHA256 hash of book file
title string No Book title
author string No Book author
file_size integer No File size in bytes

Example Request

{
  "identifiers": ["isbn:978-0345391802", "uuid:abc-123"],
  "sha256": "a1b2c3d4e5f6abc123...",
  "title": "The Hobbit",
  "author": "J.R.R. Tolkien",
  "file_size": 2456789
}

Response (200 OK)

{
  "matches": [
    {
      "media_item_id": "uuid-123",
      "bookhoard_uuid": "uuid-123",
      "confidence": 1.0,
      "match_method": "uuid_match"
    }
  ],
  "action": "auto_link"
}

Error Responses

Code Description
400 Invalid query parameters
401 Invalid or expired token