Internal UI API¶
Not a supported integration API
These cookie-authenticated routes are implementation details used by the
Reclaimerr frontend. They may change without API-version or compatibility
guarantees. External integrations should use the supported
External API under /api/v1.
The running application exposes its complete FastAPI schema at:
GET /docsGET /redocGET /openapi.json
These generated documents include internal UI routes as well as the mounted external API. Contributors can use them for the exact internal request and response models.
Status And Setup¶
GET /api/setup/statusPOST /api/setupGET /healthGET /versionGET /update-status
Dashboard And UI State¶
GET /api/dashboardGET /api/info/sidebar-indicatorsGET /api/info/ui-indicatorsGET /api/alertsGET /api/notices
Settings¶
GET /api/settings/generalPUT /api/settings/generalGET /api/settings/servicesPOST /api/settings/save/serviceDELETE /api/settings/service/{service_config_id}POST /api/settings/notifications/testGET /api/settings/oidcGET /api/settings/integrations/api-tokensGET /api/settings/integrations/webhooksGET /api/settings/integrations/webhook-deliveries
Tasks¶
GET /api/tasks/tasksGET /api/tasks/tasks/{task_id}POST /api/tasks/tasks/{task_id}/runPUT /api/tasks/tasks/{task_id}/scheduleGET /api/tasks/history
Media And Reclaim Flow¶
GET /api/media/candidatesGET /api/media/candidates/rulesGET /api/media/candidates/presencePOST /api/media/candidates/deletePOST /api/media/candidates/moveGET /api/media/reclaim-history
The candidate list accepts rule_id to match exact membership in a candidate's matched_rule_ids array. The candidate rule-options endpoint returns enabled and disabled cleanup-candidate rules available to users with Candidates-page access; protection-only rules are omitted.
Requests And Protection¶
GET /api/protection-requestsPOST /api/protection-requestsGET /api/delete-requestsPOST /api/delete-requestsGET /api/protectedPOST /api/protectedPUT /api/protected/{entry_id}/durationDELETE /api/protected/{entry_id}
Rules¶
GET /api/rulesPOST /api/rulesPOST /api/rules/{rule_id}DELETE /api/rules/{rule_id}POST /api/rules/importPOST /api/rules/previewPOST /api/rules/validate-regexPOST /api/rules/validate-pathsGET /api/rules/path-treeGET /api/rules/seerr-usersGET /api/rules/playback-usersGET /api/rules/requester-watch-explainGET /api/rules/movie-collectionsGET /api/rules/genresGET /api/rules/original-languagesGET /api/rules/origin-countriesGET /api/rules/media-server-collectionsGET /api/rules/check-synced
GET /api/rules/requester-watch-explain reports how Seerr requester has watched resolves for one item: the requesters, the identities tried for each of them, the completed watches found, the episodes required, and any media server that could not report completion. It takes media_type and tmdb_id, plus target_scope, season_number, and episode_number for TV targets. Its verdict is produced by the same code a cleanup scan uses.
The lookup endpoints are admin-only helpers used by the rule editor. Language results use canonical ISO 639-3 codes. Country results use the codes currently stored in local TMDB metadata. Both endpoints support media-type filtering, search, and pagination.
Rule actions support outcome: "candidate" and outcome: "protect". Existing rules without an outcome remain candidate rules for compatibility. Protection previews include items that are already protected because the preview reports what the rule itself matches.
Protected-entry responses include source, source_rule_id, and source_rule_name. Entries with source: "rule" are managed by cleanup scans; duration updates and direct deletion return 409 Conflict. Movie entries scoped to a single file also carry version_file_name, version_resolution, version_size, version_video_codec, version_hdr, and version_dolby_vision, so the page can name the file a protection covers.
GET /api/protected lists only protections that are still in force. An expired entry protects nothing -- every enforcement query already ignores it -- so it is omitted from both the page and its total.
Protection scopes overlap rather than match exactly. A whole-movie protection already covers every version of that movie, so POST /api/protected and POST /api/protection-requests refuse a per-version protection on top of one, the same way a series-wide protection has always refused a season-scoped one. Approving a protection request reuses an overlapping protection and widens it if the approval grants longer, instead of creating a second entry.
Internal Behavior Notes¶
- Most routes require the frontend's session-cookie authentication.
- Some routes are admin-only, especially settings and task management.
- Saving an existing service with
enabled: falsedoes not require the external service to be reachable. Enabling it still performs connection validation. - Deleting the active main media server returns a conflict until another main server is assigned.
- Task execution and file operations are queued when appropriate, so internal routes often return a queued-job response instead of completing work inline.