--- method: POST path: /api/libraries/:id/issues/:issueId/retry auth: jwt+admin area: libraries --- # Retry Processing Issue Re-runs the work that produced an open issue through the individual scanner — deliberately NOT a library-wide rescan. Two shapes: - **Item-backed issues** (media item exists): the item is rescanned via the same mechanism as the book-detail Rescan action — self-resolving folders, multi-file audiobook routing, write-after-success guards. - **Row-less `import_failed` issues** (no media item): the single file is re-imported through the scanner's standalone per-file path. On success the issue is closed. On failure the response carries the REAL error (e.g. the underlying SQL failure), so the UI can show why the issue still exists. The issue's library must be in the requester's visible set. ## Example response ```json example-response { "success": true, "message": "File imported; issue resolved" } ``` ## Errors | Status | Body | When | | ------ | ---- | ---- | | 400 | `{"error": "Invalid issue ID"}` | malformed path param | | 403 | — | issue's library not in requester's visible set | | 404 | `{"error": "Issue not found"}` | no such issue | | 409 | `{"error": "Issue is already resolved"}` / `{"error": "media file not found on disk: …"}` | nothing to retry, or the file vanished | | 500 | `{"error": "…"}` | the retried work failed — body carries the underlying error |