--- method: POST path: /api/media-items/:id/merge auth: jwt+admin area: media-items --- # Merge Archived Media Item **Admin only.** Merges an archived/missing item's reading data (progress, annotations, highlights, notes, bookmarks, ratings, collections, Kobo shelves) into an active item with identical content (same SHA-256), then deletes the archived row. Covers the copy-then-delete-later workflow. Per-user collisions keep the active copy's data (mirrors hash-conflict resolution). ## Example request ```json example-request { "target_id": "550e8400-e29b-41d4-a716-446655440000" } ``` ## Example response ```json example-response { "message": "Merged reading progress, annotations, and collections into the active item" } ``` ## Errors | Status | Body | When | | ------ | ---- | ---- | | 400 | `{"error": "source item is not archived or missing"}` / `{"error": "target item is not active"}` / `{"error": "items do not share the same content hash"}` | precondition violations | | 403 | `{"error": "admin access required"}` | not an admin | | 404 | `{"error": "archived item not found"}` / `{"error": "target item not found"}` | missing rows | | 500 | `{"error": "failed to merge reading data: ..."}` | unexpected server error |