Files
bookhoard/docs/developer/api/admin/hash_conflicts_api.md
T
John O'Keefe e21e1facde docs(media-items,collections,koreader,admin): Beam batch 11 — final backfill
All remaining endpoint docs frontmatter'd: media-item bulk ops + audio
surface, collections book-listing/preview, koreader rating/review/stats
plugin protocol, hash-conflicts JSON list.

Scope call (Claude): resolve_hash_conflict.md DELETED — the resolve POST
renders an htmx fragment (renderResolved), a web-admin flow under rule 3;
only the GET list is a JSON API. update_media_review skipped by Beam
(correct): ratings/upsert_media_review.md already covers the PUT.

Registry: 16 entries. koreader rating/review/stats all bind
koreaderBookRef (query or body) — odd=half-star rating scale; audio track
endpoint serves raw bytes (ServeContent, Range) — response nil. Fixed
drift: deleted_annotations doc's secondary restore/purge fences
unlabeled (gate validates labeled blocks against the ONE frontmatter
route); chapters example labeled. UNVERIFIED: 1 (koreader book-ref
fields, push_stats). make test 9/9.
2026-10-24 18:21:17 -04:00

1.2 KiB

method, path, auth, area
method path auth area
GET /api/admin/hash-conflicts jwt+admin admin

Hash Conflicts (API)

Lists pending content-duplicate groups (same library + SHA-256 at different paths) with per-item usage counts.

Example response

{
  "conflicts": [
    {
      "id": "uuid",
      "library_id": "uuid",
      "library_name": "Manga",
      "sha256": "abc123...",
      "created_at": "2026-10-24T13:57:01Z",
      "items": [
        {
          "id": "uuid",
          "title": "Book Title",
          "author": "Author",
          "file_path": "/path/to/book.epub",
          "file_size": 12345,
          "created_at": "2026-10-24T13:57:01Z",
          "progress_count": 0,
          "highlight_count": 0,
          "bookmark_count": 0,
          "note_count": 0,
          "collection_count": 0
        }
      ]
    }
  ],
  "total": 1
}

Errors

Status Body When
401 {"error": "unauthorized"} no/invalid JWT
403 {"error": "admin access required"} non-admin
500 {"error": "failed to list hash conflicts"} unexpected server error