Files
ombi-mcp/docs/schema/05-endpoint-coverage.md
gronod 958006cff2
Build and publish / Test and build (darwin) (pull_request) Successful in 1m50s
Build and publish / Test and build (linux) (pull_request) Successful in 2m21s
Build and publish / Test and build (windows) (pull_request) Successful in 3m6s
Build and publish / Build and publish Docker image (pull_request) Successful in 1m53s
Build and publish / Test and build (darwin) (push) Successful in 2m9s
Build and publish / Test and build (linux) (push) Successful in 2m31s
Build and publish / Test and build (windows) (push) Successful in 3m7s
Build and publish / Build and publish Docker image (push) Successful in 2m15s
Document #12 vote read upstream failures
2026-09-19 18:50:24 +01:00

110 KiB

Complete endpoint coverage ledger

This inventory enumerates every method directly declared under every resource in the supplied RAML: 377 HTTP operations across 321 paths. IDs follow source order and are audit references, not API identifiers. There is one disposition per operation, including intentional exclusions. Links point to the resource start; multiple methods can share a resource line. Ledger tool names reflect the read_*/write_* namespace.

Disposition Meaning Operations
D Direct tool contract; verification/authorization gates still apply 257
A Alternative/legacy route accounted for; enabled only by a verified compatibility adapter 37
P Partial exposure: typed, sanitized subset or server-owned body construction 59
I Internal authentication/provisioning, never a model-callable tool 12
X Deliberately excluded; manual administration or a narrower supported operation 12

The body/response columns describe the upstream schema, not a promise to pass that object through MCP. “Body unspecified” does not assert an empty response. “Type unspecified” can reflect a RAML generation defect: several type: declarations were folded into description text. The mapping contract supplies conservative public types and records semantic gaps. No inferred labels for numeric enums are treated as facts.

Operations

ID Method and literal path Disposition Owner / branch Wire inputs Success response Notes
001 GET /api/v2/Calendar D read_library / calendar none documented 200: array<CalendarViewModel> —
002 POST /api/v1/CouchPotato/profile D read_integration / options:couchpotato/profiles body CouchPotatoSettings 200: CouchPotatoProfiles Saved settings constructed privately; singular profile path.
003 POST /api/v1/CouchPotato/apikey I administrator credential provisioning body CouchPotatoSettings 200: CouchPotatoApiKey Acquires a credential; never return API keys.
004 GET /api/v1/CustomPage D read_settings / custom_page none documented 200: CustomPageSettings Allowlisted projection; no raw secrets.
005 POST /api/v1/CustomPage P write_settings_patch / patch:custom_page body CustomPageSettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
006 POST /api/v1/Emby I media-server provisioning body EmbySettings 200: EmbySettings Credential-bearing settings request/response; behaviour not established by RAML.
007 POST /api/v1/Emby/info D read_integration / media_server:emby/info body EmbyServers 200: PublicInfo POST resolves configured server privately.
008 GET /api/v1/Emby/users D read_integration / media_server:emby/users none documented 200: array<UsersViewModel> —
009 POST /api/v1/Emby/Library D read_integration / media_server:emby/libraries body EmbyServers 200: EmbyItemContainer POST resolves configured server privately.
010 GET /api/v2/Features D read_server / features none documented 200: array<FeatureEnablement> —
011 POST /api/v2/Features/enable P write_settings_patch / feature body FeatureEnablement 200: array<FeatureEnablement> Select enable/disable from enabled Boolean.
012 POST /api/v2/Features/disable P write_settings_patch / feature body FeatureEnablement 200: array<FeatureEnablement> Select enable/disable from enabled Boolean.
013 GET /api/v2/Hub/Users D read_users / online none documented 200: array<ConnectedUsersViewModel> Privileged visibility rules apply.
014 GET /api/v1/Identity/Users D read_users / list none documented 200: array<UserViewModel> —
015 GET /api/v1/Identity/dropdown/Users D read_users / dropdown none documented 200: array<UserViewModelDropdown> —
016 GET /api/v1/Identity D read_users / self none documented 200: UserViewModel —
017 POST /api/v1/Identity X manual user/profile administration body UserViewModel 200: IdentityResult Mixed credentials/claims/full entities or delivery-secret preference values are not tool inputs.
018 PUT /api/v1/Identity X manual user/profile administration body UserViewModel 200: IdentityResult Mixed credentials/claims/full entities or delivery-secret preference values are not tool inputs.
019 POST /api/v1/Identity/language D write_user_preferences / language body UserLanguage 200: body unspecified Body lang, not language.
020 GET /api/v1/Identity/streamingcountry D read_reference / streaming_countries none documented 200: body unspecified —
021 POST /api/v1/Identity/streamingcountry D write_user_preferences / streaming_country body CountryStreamingPreference 200: body unspecified Body code.
022 GET /api/v1/Identity/User/{id} D read_users / get path id:string required 200: UserViewModel —
023 PUT /api/v1/Identity/local X manual user/profile administration body UpdateLocalUserModel 200: IdentityResult Mixed credentials/claims/full entities or delivery-secret preference values are not tool inputs.
024 DELETE /api/v1/Identity/{userId} D write_user_manage / delete path userId:unspecified required 200: IdentityResult —
025 GET /api/v1/Identity/claims D read_users / claims none documented 200: array<ClaimCheckboxes> —
026 POST /api/v1/Identity/welcomeEmail P write_user_manage / welcome_email body UserViewModel 200: body unspecified Resolve user view model internally.
027 GET /api/v1/Identity/notificationpreferences D read_users / notification_preferences none documented 200: array<UserNotificationPreferences> —
028 GET /api/v1/Identity/notificationpreferences/{userId} D read_users / notification_preferences path userId:string required 200: array<UserNotificationPreferences> —
029 POST /api/v1/Identity/NotificationPreferences X manual user/profile administration body array<AddNotificationPreference> success unspecified Mixed credentials/claims/full entities or delivery-secret preference values are not tool inputs.
030 GET /api/v1/Identity/newsletter/unsubscribe/{userId} D write_user_preferences / unsubscribe_newsletter path userId:string required 200: body unspecified Mutating GET; never a read tool.
031 GET /api/v1/Images/tv/{tvdbid} D read_library / tv_images path tvdbid:integer required 200: string Response representation must be verified; no assumed public URL.
032 GET /api/v1/Images/poster D read_library / default_poster none documented 200: string Response representation must be verified; no assumed public URL.
033 GET /api/v1/Images/poster/movie/{movieDbId} D read_library / image path movieDbId:string required 200: string Response representation must be verified; no assumed public URL.
034 GET /api/v1/Images/poster/tv/{tvdbid} D read_library / image path tvdbid:integer required 200: string Response representation must be verified; no assumed public URL.
035 GET /api/v1/Images/poster/tv/tmdb/{tmdbId} D read_library / image path tmdbId:string required 200: string Response representation must be verified; no assumed public URL.
036 GET /api/v1/Images/background/movie/{movieDbId} D read_library / image path movieDbId:string required 200: string Response representation must be verified; no assumed public URL.
037 GET /api/v1/Images/banner/movie/{movieDbId} D read_library / image path movieDbId:string required 200: string Response representation must be verified; no assumed public URL.
038 GET /api/v1/Images/background/tv/{tvdbid} D read_library / image path tvdbid:integer required 200: string Response representation must be verified; no assumed public URL.
039 GET /api/v1/Images/background/tv/tmdb/{id} D read_library / image path id:string required 200: string Response representation must be verified; no assumed public URL.
040 GET /api/v1/Images/background D read_library / random_background none documented 200: body unspecified Response representation must be verified; no assumed public URL.
041 GET /api/v1/Images/background/info D read_library / background_info none documented 200: body unspecified Response representation must be verified; no assumed public URL.
042 GET /api/v2/Issues/{position}/{take}/{status} D read_issues / summary path position:integer required; path take:integer required; path status:IssueStatus required 200: array<IssuesSummaryModel> —
043 GET /api/v2/Issues/details/{providerId} D read_issues / provider_summary path providerId:string required 200: IssuesSummaryModel —
044 GET /api/v1/Issues/categories D read_reference / issue_categories none documented 200: array<IssueCategory> —
045 POST /api/v1/Issues/categories D write_issue_manage / create_category body IssueCategory 200: boolean —
046 DELETE /api/v1/Issues/categories/{catId} D write_issue_manage / delete_category path catId:integer required 200: boolean —
047 GET /api/v1/Issues A read_issues / list none documented 200: array<Issues> Unpaged list is compatibility only.
048 POST /api/v1/Issues P write_issue_create body Issues 200: integer Minimal issue creation projection.
049 GET /api/v1/Issues/{take}/{skip}/{status} D read_issues / list path take:integer required; path skip:integer required; path status:IssueStatus required 200: array<Issues> —
050 GET /api/v1/Issues/count D read_issues / counts none documented 200: IssueCountModel —
051 GET /api/v1/Issues/{id} D read_issues / get path id:integer required 200: Issues —
052 DELETE /api/v1/Issues/{id} D write_issue_manage / delete path id:integer required 200: boolean —
053 GET /api/v1/Issues/request/{id} D read_issues / by_request path id:integer required 200: body unspecified —
054 GET /api/v1/Issues/provider/{id} D read_issues / by_provider path id:string required 200: body unspecified —
055 GET /api/v1/Issues/{id}/comments D read_issues / comments path id:integer required 200: array<IssueCommentChatViewModel> —
056 POST /api/v1/Issues/comments D write_issue_comment body NewIssueCommentViewModel 200: IssueComments —
057 DELETE /api/v1/Issues/comments/{id} D write_issue_manage / delete_comment path id:integer required 200: boolean —
058 POST /api/v1/Issues/status D write_issue_manage / set_status body IssueStateViewModel 200: boolean —
059 POST /api/v1/Jellyfin I media-server provisioning body JellyfinSettings 200: JellyfinSettings Credential-bearing settings request/response; behaviour not established by RAML.
060 POST /api/v1/Jellyfin/info D read_integration / media_server:jellyfin/info body JellyfinServers 200: PublicInfo POST resolves configured server privately.
061 POST /api/v1/Jellyfin/Library D read_integration / media_server:jellyfin/libraries body JellyfinServers 200: JellyfinItemContainer POST resolves configured server privately.
062 GET /api/v1/Jellyfin/users D read_integration / media_server:jellyfin/users none documented 200: array<UsersViewModel> —
063 POST /api/v1/Job/update D write_job_run / run:update none documented 200: boolean Explicit per-job policy; job accepted is not job completed.
064 GET /api/v1/Job/update D read_server / update_check none documented 200: boolean —
065 POST /api/v1/Job/plexuserimporter D write_job_run / run:plexuserimporter none documented 200: boolean Explicit per-job policy; job accepted is not job completed.
066 POST /api/v1/Job/plexwatchlist D write_job_run / run:plexwatchlist none documented 200: boolean Explicit per-job policy; job accepted is not job completed.
067 POST /api/v1/Job/embyuserimporter D write_job_run / run:embyuserimporter none documented 200: boolean Explicit per-job policy; job accepted is not job completed.
068 POST /api/v1/Job/jellyfinuserimporter D write_job_run / run:jellyfinuserimporter none documented 200: boolean Explicit per-job policy; job accepted is not job completed.
069 POST /api/v1/Job/plexcontentcacher D write_job_run / run:plexcontentcacher none documented 200: boolean Explicit per-job policy; job accepted is not job completed.
070 POST /api/v1/Job/clearmediaserverdata D write_job_run / run:clearmediaserverdata none documented 200: boolean Explicit per-job policy; job accepted is not job completed.
071 POST /api/v1/Job/plexrecentlyadded D write_job_run / run:plexrecentlyadded none documented 200: boolean Explicit per-job policy; job accepted is not job completed.
072 POST /api/v1/Job/embycontentcacher D write_job_run / run:embycontentcacher none documented 200: boolean Explicit per-job policy; job accepted is not job completed.
073 POST /api/v1/Job/embyrecentlyadded D write_job_run / run:embyrecentlyadded none documented 200: boolean Explicit per-job policy; job accepted is not job completed.
074 POST /api/v1/Job/jellyfincontentcacher D write_job_run / run:jellyfincontentcacher none documented 200: boolean Explicit per-job policy; job accepted is not job completed.
075 POST /api/v1/Job/arrAvailability D write_job_run / run:arrAvailability none documented 200: boolean Explicit per-job policy; job accepted is not job completed.
076 POST /api/v1/Job/autodeleterequests D write_job_run / run:autodeleterequests none documented 200: boolean Explicit per-job policy; job accepted is not job completed.
077 POST /api/v1/Job/newsletter D write_job_run / run:newsletter none documented 200: boolean Explicit per-job policy; job accepted is not job completed.
078 GET /api/v1/LandingPage D read_server / landing none documented 200: MediaSeverAvailibilityViewModel —
079 GET /api/v1/Lidarr/enabled D read_integration / options:lidarr/enabled none documented 200: boolean —
080 POST /api/v1/Lidarr/Profiles A read_integration / options:lidarr/profiles body LidarrSettings 200: array<LidarrProfile> Private saved settings only; no connection overrides.
081 GET /api/v1/Lidarr/Profiles D read_integration / options:lidarr/profiles none documented 200: array<LidarrProfile> —
082 POST /api/v1/Lidarr/RootFolders A read_integration / options:lidarr/root_folders body LidarrSettings 200: array<LidarrRootFolder> Private saved settings only; no connection overrides.
083 GET /api/v1/Lidarr/RootFolders D read_integration / options:lidarr/root_folders none documented 200: array<LidarrRootFolder> —
084 POST /api/v1/Lidarr/Metadata D read_integration / options:lidarr/metadata body LidarrSettings 200: array<MetadataProfile> Private saved settings only; no connection overrides.
085 POST /api/v1/Logging X UI-client telemetry body UiLoggingModel 200: body unspecified No agent-facing log injection tool; MCP logging is a separate protocol facility.
086 GET /api/v1/request/music/{count}/{position}/{orderType}/{statusType}/{availabilityType} A read_requests / list path count:unspecified required; path position:unspecified required; path orderType:unspecified required; path statusType:integer required; path availabilityType:integer required 200: RequestsViewModel Legacy parent/array/filter semantics need verified adapter; not equivalent to v2 TV child pages.
087 GET /api/v1/request/music/total D read_request_stats / total none documented 200: integer —
088 GET /api/v1/request/music A read_requests / list none documented 200: array<AlbumRequest> Legacy parent/array/filter semantics need verified adapter; not equivalent to v2 TV child pages.
089 POST /api/v1/request/music D write_request_create / album body MusicAlbumRequestViewModel 200: RequestEngineResult —
090 GET /api/v1/request/music/search/{searchTerm} D read_requests / search path searchTerm:unspecified required 200: array<AlbumRequest> —
091 DELETE /api/v1/request/music/{requestId} D write_request_delete path requestId:unspecified required 200: RequestEngineResult —
092 POST /api/v1/request/music/approve D write_request_moderate / approve body AlbumUpdateModel 200: RequestEngineResult —
093 POST /api/v1/request/music/available D write_request_moderate / mark_available body AlbumUpdateModel 200: RequestEngineResult —
094 POST /api/v1/request/music/unavailable D write_request_moderate / mark_unavailable body AlbumUpdateModel 200: RequestEngineResult —
095 PUT /api/v1/request/music/deny D write_request_moderate / deny body DenyAlbumModel 200: RequestEngineResult —
096 GET /api/v1/request/music/remaining D read_request_stats / quota none documented 200: RequestQuotaCountModel —
097 POST /api/v1/Notifications/massemail P write_notification_send body MassEmailModel 200: boolean Resolve explicit user IDs into minimum verified entity body.
098 POST /api/v1/Plex I Plex authentication/provisioning body UserRequest 200: PlexAuthentication Credential-bearing account/OAuth workflow stays outside model tools.
099 POST /api/v1/Plex/Libraries A read_integration / plex_libraries body PlexServers 200: PlexLibrariesResponse Private saved-server POST alternative.
100 GET /api/v1/Plex/Libraries/{machineId} D read_integration / plex_libraries path machineId:string required 200: PlexLibrariesLiteResponse —
101 POST /api/v1/Plex/user X Plex account provisioning body PlexUserViewModel 200: body unspecified Side effects are insufficiently specified; no guessed read lookup.
102 GET /api/v1/Plex/servers D read_integration / plex:servers none documented 200: object wrapper {"success":bool,"servers":[...]} Verified upstream wrapper shape; projects servers array to reference_page with id=machineId, name=serverName, value=serverId.
103 POST /api/v1/Plex/servers I Plex authentication/provisioning body UserRequest 200: PlexServersViewModel Credential-bearing account/OAuth workflow stays outside model tools.
104 GET /api/v1/Plex/friends D read_integration / plex:friends none documented 200: array<UsersViewModel> —
105 POST /api/v1/Plex/oauth I Plex authentication/provisioning body PlexOAuthViewModel 200: body unspecified Credential-bearing account/OAuth workflow stays outside model tools.
106 GET /api/v1/Plex/WatchlistUsers D read_integration / plex:watchlist_users none documented 200: array<PlexUserWatchlistModel> —
107 POST /api/v1/Plex/WatchlistUsers/revalidate D write_job_run / revalidate_watchlist none documented 200: body unspecified —
108 POST /api/v1/Radarr/Profiles A read_integration / options:radarr/profiles body RadarrSettings 200: body unspecified Private saved settings only; no connection overrides.
109 GET /api/v1/Radarr/Profiles D read_integration / options:radarr/profiles none documented 200: body unspecified —
110 GET /api/v1/Radarr/enabled D read_integration / options:radarr/enabled none documented 200: boolean —
111 POST /api/v1/Radarr/RootFolders A read_integration / options:radarr/root_folders body RadarrSettings 200: array<RadarrRootFolder> Private saved settings only; no connection overrides.
112 GET /api/v1/Radarr/RootFolders D read_integration / options:radarr/root_folders none documented 200: array<RadarrRootFolder> —
113 GET /api/v1/Radarr/Profiles/4k D read_integration / options:radarr/profiles/4k none documented 200: body unspecified —
114 GET /api/v1/Radarr/RootFolders/4k D read_integration / options:radarr/root_folders/4k none documented 200: array<RadarrRootFolder> —
115 POST /api/v1/Radarr/tags A read_integration / options:radarr/tags body SonarrSettings 200: array<Tag> Private saved settings only; no connection overrides. RAML body unexpectedly references SonarrSettings; verify.
116 GET /api/v1/Radarr/tags D read_integration / options:radarr/tags none documented 200: array<Tag> —
117 GET /api/v1/RecentlyAdded/movies D read_library / recent none documented 200: array<RecentlyAddedMovieModel> grouped=true only for tv/grouped.
118 GET /api/v1/RecentlyAdded/tv D read_library / recent none documented 200: array<RecentlyAddedMovieModel> grouped=true only for tv/grouped.
119 GET /api/v1/RecentlyAdded/tv/grouped D read_library / recent none documented 200: array<RecentlyAddedMovieModel> grouped=true only for tv/grouped.
120 GET /api/v1/Request/movie/{count}/{position}/{orderType}/{statusType}/{availabilityType} A read_requests / list path count:unspecified required; path position:unspecified required; path orderType:unspecified required; path statusType:integer required; path availabilityType:integer required 200: RequestsViewModel Legacy parent/array/filter semantics need verified adapter; not equivalent to v2 TV child pages.
121 GET /api/v1/Request/movie/info/{requestId} D read_requests / get:movie path requestId:unspecified required 200: MovieRequests —
122 GET /api/v1/Request/movie/total D read_request_stats / total none documented 200: integer —
123 GET /api/v1/Request/movie A read_requests / list none documented 200: array<MovieRequests> Legacy parent/array/filter semantics need verified adapter; not equivalent to v2 TV child pages.
124 POST /api/v1/Request/movie D write_request_create / movie body MovieRequestViewModel 200: RequestEngineResult —
125 PUT /api/v1/Request/movie X full entity replacement body MovieRequests 200: MovieRequests Use typed options/moderation instead; do not expose recursive server-owned state.
126 GET /api/v1/Request/movie/search/{searchTerm} D read_requests / search path searchTerm:unspecified required 200: array<MovieRequests> —
127 DELETE /api/v1/Request/movie/{requestId} D write_request_delete path requestId:unspecified required 200: RequestEngineResult —
128 DELETE /api/v1/Request/movie/all X manual bulk deletion none documented 200: body unspecified Unbounded delete-all deliberately absent; selected single deletions remain possible.
129 POST /api/v1/Request/movie/approve D write_request_moderate / approve body MovieUpdateModel 200: RequestEngineResult —
130 POST /api/v1/Request/movie/available D write_request_moderate / mark_available body MovieUpdateModel 200: RequestEngineResult —
131 POST /api/v1/Request/movie/unavailable D write_request_moderate / mark_unavailable body MovieUpdateModel 200: RequestEngineResult —
132 PUT /api/v1/Request/movie/deny D write_request_moderate / deny body DenyMovieModel 200: RequestEngineResult —
133 GET /api/v1/Request/tv/total D read_request_stats / total none documented 200: integer —
134 GET /api/v1/Request/tv/{count}/{position}/{orderType}/{statusFilterType}/{availabilityFilterType} A read_requests / list path count:unspecified required; path position:unspecified required; path orderType:integer required; path statusFilterType:string required; path availabilityFilterType:string required; query statusType:integer optional; query availabilityType:integer optional 200: RequestsViewModel Legacy parent/array/filter semantics need verified adapter; not equivalent to v2 TV child pages.
135 GET /api/v1/Request/tvlite/{count}/{position}/{orderType}/{statusFilterType}/{availabilityFilterType} A read_requests / list path count:unspecified required; path position:unspecified required; path orderType:integer required; path statusFilterType:string required; path availabilityFilterType:string required; query statusType:integer optional; query availabilityType:integer optional 200: RequestsViewModel Legacy parent/array/filter semantics need verified adapter; not equivalent to v2 TV child pages.
136 GET /api/v1/Request/tv A read_requests / list none documented 200: array<TvRequests> Legacy parent/array/filter semantics need verified adapter; not equivalent to v2 TV child pages.
137 POST /api/v1/Request/tv D write_request_create / tv:tvdb body TvRequestViewModel 200: RequestEngineResult —
138 PUT /api/v1/Request/tv X full entity replacement body TvRequests 200: TvRequests Use typed options/moderation instead; do not expose recursive server-owned state.
139 GET /api/v1/Request/tvlite A read_requests / list none documented 200: array<TvRequests> Legacy parent/array/filter semantics need verified adapter; not equivalent to v2 TV child pages.
140 GET /api/v1/Request/tv/{requestId} D read_requests / get:tv_parent path requestId:integer required 200: TvRequests —
141 DELETE /api/v1/Request/tv/{requestId} D write_request_delete path requestId:unspecified required 200: body unspecified —
142 GET /api/v1/Request/tv/search/{searchTerm} D read_requests / search path searchTerm:unspecified required 200: array<TvRequests> —
143 PUT /api/v1/Request/tv/root/{requestId}/{rootFolderId} D write_request_options / tv_root path requestId:integer required; path rootFolderId:integer required 200: boolean —
144 PUT /api/v1/Request/tv/quality/{requestId}/{qualityId} D write_request_options / tv_quality path requestId:integer required; path qualityId:integer required 200: boolean —
145 PUT /api/v1/Request/tv/child X full entity replacement body ChildRequests 200: ChildRequests Use typed options/moderation instead; do not expose recursive server-owned state.
146 PUT /api/v1/Request/tv/deny D write_request_moderate / deny body DenyTvModel 200: RequestEngineResult TV child-ID semantics must be verified.
147 POST /api/v1/Request/tv/available D write_request_moderate / mark_available body TvUpdateModel 200: RequestEngineResult TV child-ID semantics must be verified.
148 POST /api/v1/Request/tv/unavailable D write_request_moderate / mark_unavailable body TvUpdateModel 200: RequestEngineResult TV child-ID semantics must be verified.
149 POST /api/v1/Request/tv/approve D write_request_moderate / approve body TvUpdateModel 200: RequestEngineResult TV child-ID semantics must be verified.
150 DELETE /api/v1/Request/tv/child/{requestId} D write_request_delete path requestId:unspecified required 200: RequestEngineResult —
151 GET /api/v1/Request/tv/{requestId}/child D read_requests / children path requestId:unspecified required 200: array<ChildRequests> —
152 GET /api/v1/Request/count D read_request_stats / counts none documented 200: RequestCountModel —
153 GET /api/v1/Request/userhasrequest D read_request_stats / has_requests query userId:string optional 200: boolean —
154 POST /api/v1/Request/movie/subscribe/{requestId} D write_request_subscribe / subscribe path requestId:integer required 200: boolean —
155 POST /api/v1/Request/tv/subscribe/{requestId} D write_request_subscribe / subscribe path requestId:integer required 200: boolean —
156 POST /api/v1/Request/movie/unsubscribe/{requestId} D write_request_subscribe / unsubscribe path requestId:integer required 200: boolean —
157 POST /api/v1/Request/tv/unsubscribe/{requestId} D write_request_subscribe / unsubscribe path requestId:integer required 200: boolean —
158 GET /api/v1/Request/movie/remaining D read_request_stats / quota none documented 200: RequestQuotaCountModel —
159 GET /api/v1/Request/tv/remaining D read_request_stats / quota none documented 200: RequestQuotaCountModel —
160 GET /api/v1/RequestRetry D read_requests / retry_queue none documented 200: array<FailedRequestViewModel> Privileged queue read.
161 DELETE /api/v1/RequestRetry/{queueId} D write_retry_remove path queueId:integer required 200: body unspecified —
162 GET /api/v2/Requests/movie/{count}/{position}/{sort}/{sortOrder} D read_requests / list path count:unspecified required; path position:unspecified required; path sort:unspecified required; path sortOrder:unspecified required 200: RequestsViewModel —
163 GET /api/v2/Requests/movie/availble/{count}/{position}/{sort}/{sortOrder} A read_requests / list path count:integer required; path position:integer required; path sort:string required; path sortOrder:string required 200: RequestsViewModel Misspelled alias; prefer available.
164 GET /api/v2/Requests/movie/available/{count}/{position}/{sort}/{sortOrder} D read_requests / list path count:integer required; path position:integer required; path sort:string required; path sortOrder:string required 200: RequestsViewModel —
165 GET /api/v2/Requests/movie/processing/{count}/{position}/{sort}/{sortOrder} D read_requests / list path count:integer required; path position:integer required; path sort:string required; path sortOrder:string required 200: RequestsViewModel —
166 GET /api/v2/Requests/movie/pending/{count}/{position}/{sort}/{sortOrder} D read_requests / list path count:integer required; path position:integer required; path sort:string required; path sortOrder:string required 200: RequestsViewModel —
167 GET /api/v2/Requests/movie/denied/{count}/{position}/{sort}/{sortOrder} D read_requests / list path count:integer required; path position:integer required; path sort:string required; path sortOrder:string required 200: RequestsViewModel —
168 GET /api/v2/Requests/movie/unavailable/{count}/{position}/{sort}/{sortOrder} D read_requests / list path count:unspecified required; path position:unspecified required; path sort:unspecified required; path sortOrder:unspecified required 200: RequestsViewModel —
169 GET /api/v2/Requests/tv/{count}/{position}/{sort}/{sortOrder} D read_requests / list path count:unspecified required; path position:unspecified required; path sort:unspecified required; path sortOrder:unspecified required 200: RequestsViewModel —
170 GET /api/v2/Requests/tv/pending/{count}/{position}/{sort}/{sortOrder} D read_requests / list path count:integer required; path position:integer required; path sort:string required; path sortOrder:string required 200: RequestsViewModel —
171 GET /api/v2/Requests/tv/processing/{count}/{position}/{sort}/{sortOrder} D read_requests / list path count:integer required; path position:integer required; path sort:string required; path sortOrder:string required 200: RequestsViewModel —
172 GET /api/v2/Requests/tv/available/{count}/{position}/{sort}/{sortOrder} D read_requests / list path count:integer required; path position:integer required; path sort:string required; path sortOrder:string required 200: RequestsViewModel —
173 GET /api/v2/Requests/tv/denied/{count}/{position}/{sort}/{sortOrder} D read_requests / list path count:integer required; path position:integer required; path sort:string required; path sortOrder:string required 200: RequestsViewModel —
174 GET /api/v2/Requests/tv/unavailable/{count}/{position}/{sort}/{sortOrder} D read_requests / list path count:unspecified required; path position:unspecified required; path sort:unspecified required; path sortOrder:unspecified required 200: RequestsViewModel —
175 POST /api/v2/Requests/movie/advancedoptions D write_request_options / advanced body MediaAdvancedOptions 200: RequestEngineResult —
176 POST /api/v2/Requests/tv/advancedoptions D write_request_options / advanced body MediaAdvancedOptions 200: RequestEngineResult —
177 GET /api/v2/Requests/album/available/{count}/{position}/{sort}/{sortOrder} D read_requests / list path count:integer required; path position:integer required; path sort:string required; path sortOrder:string required 200: RequestsViewModel —
178 GET /api/v2/Requests/album/processing/{count}/{position}/{sort}/{sortOrder} D read_requests / list path count:integer required; path position:integer required; path sort:string required; path sortOrder:string required 200: RequestsViewModel —
179 GET /api/v2/Requests/album/pending/{count}/{position}/{sort}/{sortOrder} D read_requests / list path count:integer required; path position:integer required; path sort:string required; path sortOrder:string required 200: RequestsViewModel —
180 GET /api/v2/Requests/album/denied/{count}/{position}/{sort}/{sortOrder} D read_requests / list path count:integer required; path position:integer required; path sort:string required; path sortOrder:string required 200: RequestsViewModel —
181 GET /api/v2/Requests/album/{count}/{position}/{sort}/{sortOrder} D read_requests / list path count:integer required; path position:integer required; path sort:string required; path sortOrder:string required 200: RequestsViewModel —
182 POST /api/v2/Requests/tv D write_request_create / tv:tmdb body TvRequestViewModelV2 200: RequestEngineResult —
183 POST /api/v2/Requests/reprocess/{type}/{requestId}/{is4K} D write_request_reprocess path type:RequestType required; path requestId:integer required; path is4K:boolean required 200: body unspecified Verify enum/target/4K combinations; do not infer album exclusion.
184 POST /api/v2/Requests/movie/collection/{collectionId} D write_request_create / collection path collectionId:integer required 200: RequestEngineResult No request body documented; success is RequestEngineResult.
185 GET /api/v2/Requests/recentlyRequested D read_requests / recent none documented 200: array<RecentlyRequestedModel> —
186 POST /api/v2/Search/multi/{searchTerm} D read_search / multi path searchTerm:unspecified required; body MultiSearchFilter 200: array<MultiSearchResult> —
187 GET /api/v2/Search/Genres/{media} D read_reference / genres path media:unspecified required 200: array<Genre> —
188 GET /api/v2/Search/Languages D read_reference / languages none documented 200: array<Language> —
189 GET /api/v2/Search/movie/{movieDbId} D read_media / details path movieDbId:unspecified required 200: MovieFullInfoViewModel —
190 GET /api/v2/Search/movie/imdb/{imdbid} D read_media / details path imdbId:string required 200: MovieFullInfoViewModel —
191 GET /api/v2/Search/movie/request/{requestId} D read_media / by_request path requestId:integer required 200: MovieFullInfoViewModel Request-ID namespace requires verification.
192 GET /api/v2/Search/movie/collection/{collectionId} D read_discover / collection path collectionId:unspecified required 200: MovieCollectionsViewModel —
193 GET /api/v2/Search/tv/{tvdbId} A read_media / details path tvdbid:unspecified required 200: SearchFullInfoTvShowViewModel TMDB-keyed alias of #195 despite the {tvdbId} placeholder; never use for a TVDB lookup.
194 GET /api/v2/Search/tv/request/{requestId} D read_media / by_request path requestId:integer required 200: SearchFullInfoTvShowViewModel Request-ID namespace requires verification.
195 GET /api/v2/Search/tv/moviedb/{moviedbid} D read_media / details path moviedbid:string required 200: SearchFullInfoTvShowViewModel —
196 POST /api/v2/Search/movie/similar D read_discover / similar body SimilarMoviesRefineModel 200: array<SearchMovieViewModel> —
197 GET /api/v2/Search/movie/popular A read_discover / browse none documented 200: array<SearchMovieViewModel> Nonpaged/legacy alternate only.
198 GET /api/v2/Search/movie/popular/{currentPosition}/{amountToLoad} D read_discover / browse path currentPosition:integer required; path amountToLoad:integer required 200: array<SearchMovieViewModel> —
199 POST /api/v2/Search/advancedSearch/movie/{currentPosition}/{amountToLoad} D read_discover / advanced_movie path currentPosition:integer required; path amountToLoad:integer required; body DiscoverModel 200: array<SearchMovieViewModel> —
200 GET /api/v2/Search/movie/seasonal/{currentPosition}/{amountToLoad} D read_discover / browse path currentPosition:integer required; path amountToLoad:integer required 200: array<SearchMovieViewModel> —
201 GET /api/v2/Search/movie/requested/{currentPosition}/{amountToLoad} D read_discover / browse path currentPosition:integer required; path amountToLoad:integer required 200: array<SearchMovieViewModel> —
202 GET /api/v2/Search/tv/requested/{currentPosition}/{amountToLoad} D read_discover / browse path currentPosition:integer required; path amountToLoad:integer required 200: array<SearchFullInfoTvShowViewModel> —
203 GET /api/v2/Search/movie/nowplaying A read_discover / browse none documented 200: array<SearchMovieViewModel> Nonpaged/legacy alternate only.
204 GET /api/v2/Search/movie/nowplaying/{currentPosition}/{amountToLoad} D read_discover / browse path currentPosition:integer required; path amountToLoad:integer required 200: array<SearchMovieViewModel> —
205 GET /api/v2/Search/movie/toprated A read_discover / browse none documented 200: array<SearchMovieViewModel> Nonpaged/legacy alternate only.
206 GET /api/v2/Search/movie/toprated/{currentPosition}/{amountToLoad} D read_discover / browse path currentPosition:integer required; path amountToLoad:integer required 200: array<SearchMovieViewModel> —
207 GET /api/v2/Search/movie/upcoming A read_discover / browse none documented 200: array<SearchMovieViewModel> Nonpaged/legacy alternate only.
208 GET /api/v2/Search/movie/upcoming/{currentPosition}/{amountToLoad} D read_discover / browse path currentPosition:integer required; path amountToLoad:integer required 200: array<SearchMovieViewModel> —
209 GET /api/v2/Search/tv/popular/{currentPosition}/{amountToLoad} D read_discover / browse path currentPosition:integer required; path amountToLoad:integer required 200: array<SearchTvShowViewModel> —
210 GET /api/v2/Search/tv/anticipated/{currentPosition}/{amountToLoad} D read_discover / browse path currentPosition:integer required; path amountToLoad:integer required 200: array<SearchTvShowViewModel> —
211 GET /api/v2/Search/tv/mostwatched/{currentPosition}/{amountToLoad} D read_discover / browse path currentPosition:integer required; path amountToLoad:integer required 200: array<SearchTvShowViewModel> —
212 GET /api/v2/Search/tv/trending/{currentPosition}/{amountToLoad} D read_discover / browse path currentPosition:integer required; path amountToLoad:integer required 200: array<SearchTvShowViewModel> —
213 GET /api/v2/Search/actor/{actorId}/movie D read_discover / credits path actorId:unspecified required 200: ActorCredits —
214 GET /api/v2/Search/actor/{actorId}/tv D read_discover / credits path actorId:unspecified required 200: ActorCredits —
215 GET /api/v2/Search/artist/{artistId} D read_media / details path artistId:string required 200: ArtistInformation —
216 GET /api/v2/Search/artist/request/{requestId} D read_media / by_request path requestId:integer required 200: ArtistInformation Request-ID namespace requires verification. MCP media=album maps to this literal artist route segment.
217 GET /api/v2/Search/artist/album/{albumId} D read_media / details path albumId:string required 200: ReleaseGroup —
218 GET /api/v2/Search/releasegroupart/{musicBrainzId} D read_library / album_art path musicBrainzId:string required 200: AlbumArt —
219 GET /api/v2/Search/ratings/movie/{name}/{year} D read_media / ratings path name:string required; path year:integer required 200: MovieRatings Ombi 4.53.x depends on removed Rotten Tomatoes private endpoints; on 404/5xx/empty results, fall back to an exact title/year v1 movie search and label TMDB rating fields.
220 GET /api/v2/Search/ratings/tv/{name}/{year} D read_media / ratings path name:string required; path year:integer required 200: TvRatings Ombi 4.53.x depends on removed Rotten Tomatoes private endpoints; on 404/5xx/empty results, fall back to an exact title/year v1 TV search and label TVMaze rating fields.
221 GET /api/v2/Search/stream/movie/{movieDbId} D read_media / streaming path movieDBId:integer required 200: array<StreamingData> —
222 GET /api/v2/Search/stream/tv/{movieDbId} D read_media / streaming path movieDbId:integer required 200: array<StreamingData> —
223 GET /api/v1/Search/movie/{searchTerm} D read_search / text path searchTerm:unspecified required 200: array<SearchMovieViewModel> —
224 POST /api/v1/Search/movie/actor D read_search / actor body SearchActorModel 200: body unspecified —
225 POST /api/v1/Search/movie D read_search / movie_refine body SearchMovieRefineModel 200: body unspecified —
226 GET /api/v1/Search/movie/info/{theMovieDbId} A read_media / details path theMovieDbId:unspecified required 200: SearchMovieViewModel Legacy details alternative.
227 POST /api/v1/Search/movie/info D read_media / movie_localized body SearchMovieExtraInfoRefineModel 200: body unspecified —
228 POST /api/v1/Search/movie/similar A read_discover / similar body SimilarMoviesRefineModel 200: array<SearchMovieViewModel> Preserve language semantics; no automatic fallback.
229 GET /api/v1/Search/movie/{theMovieDbId}/similar A read_discover / similar path theMovieDbId:unspecified required 200: array<SearchMovieViewModel> Preserve language semantics; no automatic fallback.
230 GET /api/v1/Search/movie/popular A read_discover / browse none documented 200: array<SearchMovieViewModel> Nonpaged/legacy alternate only.
231 GET /api/v1/Search/movie/nowplaying A read_discover / browse none documented 200: array<SearchMovieViewModel> Nonpaged/legacy alternate only.
232 GET /api/v1/Search/movie/toprated A read_discover / browse none documented 200: array<SearchMovieViewModel> Nonpaged/legacy alternate only.
233 GET /api/v1/Search/movie/upcoming A read_discover / browse none documented 200: array<SearchMovieViewModel> Nonpaged/legacy alternate only.
234 GET /api/v1/Search/tv/{searchTerm} D read_search / text path searchTerm:unspecified required 200: array<SearchTvShowViewModel> TVMaze-backed; theMovieDbId carries the TVDB id (emit tvdb), seriesId the TVMaze id (emit tvmaze).
235 GET /api/v1/Search/tv/info/{tvdbId} D read_media / details path tvdbId:unspecified required 200: SearchTvShowViewModel TVMaze-backed; the only true TVDB details route — also read privately by write_request_create season expansion. theMovieDbId carries the TVDB id (emit tvdb); seriesId is the TVMaze id (emit tvmaze).
236 GET /api/v1/Search/tv/popular A read_discover / browse none documented 200: array<SearchTvShowViewModel> Nonpaged/legacy alternate only.
237 GET /api/v1/Search/tv/anticipated A read_discover / browse none documented 200: array<SearchTvShowViewModel> Nonpaged/legacy alternate only.
238 GET /api/v1/Search/tv/mostwatched A read_discover / browse none documented 200: array<SearchTvShowViewModel> Nonpaged/legacy alternate only.
239 GET /api/v1/Search/tv/trending A read_discover / browse none documented 200: array<SearchTvShowViewModel> Nonpaged/legacy alternate only.
240 GET /api/v1/Search/music/artist/{searchTerm} D read_search / text path searchTerm:string required 200: array<SearchArtistViewModel> —
241 GET /api/v1/Search/music/album/{searchTerm} D read_search / text path searchTerm:string required 200: array<SearchAlbumViewModel> —
242 GET /api/v1/Search/music/album/info/{foreignAlbumId} A read_media / details path foreignAlbumId:string required 200: SearchAlbumViewModel Legacy details alternative.
243 GET /api/v1/Search/music/artist/album/{foreignArtistId} D read_discover / artist_albums path foreignArtistId:string required 200: array<SearchAlbumViewModel> —
244 GET /api/v1/Settings/ombi D read_settings / ombi none documented 200: OmbiSettings Allowlisted projection; no raw secrets.
245 POST /api/v1/Settings/ombi P write_settings_patch / patch:ombi body OmbiSettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
246 GET /api/v1/Settings/baseurl D read_settings / base_url none documented 200: string Allowlisted projection; no raw secrets.
247 GET /api/v1/Settings/about D read_server / about none documented 200: AboutViewModel —
248 POST /api/v1/Settings/ombi/resetApi X manual administration none documented 200: string Key rotation would invalidate configured credentials; no tool.
249 GET /api/v1/Settings/plex D read_settings / plex none documented 200: PlexSettings Allowlisted projection; no raw secrets.
250 POST /api/v1/Settings/plex P write_settings_patch / patch:plex body PlexSettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
251 GET /api/v1/Settings/clientid D read_settings / client_id none documented 200: string Allowlisted projection; no raw secrets.
252 GET /api/v1/Settings/emby D read_settings / emby none documented 200: EmbySettings Allowlisted projection; no raw secrets.
253 POST /api/v1/Settings/emby P write_settings_patch / patch:emby body EmbySettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
254 GET /api/v1/Settings/jellyfin D read_settings / jellyfin none documented 200: JellyfinSettings Allowlisted projection; no raw secrets.
255 POST /api/v1/Settings/jellyfin P write_settings_patch / patch:jellyfin body JellyfinSettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
256 GET /api/v1/Settings/landingpage D read_settings / landingpage none documented 200: LandingPageSettings Allowlisted projection; no raw secrets.
257 POST /api/v1/Settings/landingpage P write_settings_patch / patch:landingpage body LandingPageSettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
258 GET /api/v1/Settings/customization D read_settings / customization none documented 200: CustomizationSettings Allowlisted projection; no raw secrets.
259 POST /api/v1/Settings/customization P write_settings_patch / patch:customization body CustomizationSettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
260 GET /api/v1/Settings/defaultlanguage D read_settings / default_language none documented 200: string Allowlisted projection; no raw secrets.
261 GET /api/v1/Settings/themes D read_settings / themes none documented 200: array<PresetThemeViewModel> Allowlisted projection; no raw secrets.
262 GET /api/v1/Settings/sonarr D read_settings / sonarr none documented 200: SonarrSettings Allowlisted projection; no raw secrets.
263 POST /api/v1/Settings/sonarr P write_settings_patch / patch:sonarr body SonarrSettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
264 GET /api/v1/Settings/radarr D read_settings / radarr none documented 200: RadarrCombinedModel Allowlisted projection; no raw secrets.
265 POST /api/v1/Settings/radarr P write_settings_patch / patch:radarr body RadarrCombinedModel 200: boolean Only typed non-secret patch; preserve omitted/private fields.
266 GET /api/v1/Settings/lidarr D read_settings / lidarr none documented 200: LidarrSettings Allowlisted projection; no raw secrets.
267 POST /api/v1/Settings/lidarr P write_settings_patch / patch:lidarr body LidarrSettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
268 GET /api/v1/Settings/lidarrenabled D read_settings / lidarrenabled none documented 200: boolean Allowlisted projection; no raw secrets.
269 POST /api/v1/Settings/authentication P write_settings_patch / patch:authentication body AuthenticationSettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
270 GET /api/v1/Settings/authentication D read_settings / authentication none documented 200: AuthenticationSettings Allowlisted projection; no raw secrets.
271 POST /api/v1/Settings/Update P write_settings_patch / patch:update body UpdateSettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
272 GET /api/v1/Settings/Update D read_settings / update none documented 200: UpdateSettings Allowlisted projection; no raw secrets.
273 GET /api/v1/Settings/UserManagement D read_settings / user_management none documented 200: UserManagementSettings Allowlisted projection; no raw secrets.
274 POST /api/v1/Settings/UserManagement P write_settings_patch / patch:user_management body UserManagementSettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
275 GET /api/v1/Settings/CouchPotato D read_settings / couchpotato none documented 200: CouchPotatoSettings Allowlisted projection; no raw secrets.
276 POST /api/v1/Settings/CouchPotato P write_settings_patch / patch:couchpotato body CouchPotatoSettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
277 GET /api/v1/Settings/DogNzb D read_settings / dognzb none documented 200: DogNzbSettings Allowlisted projection; no raw secrets.
278 POST /api/v1/Settings/DogNzb P write_settings_patch / patch:dognzb body DogNzbSettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
279 POST /api/v1/Settings/SickRage P write_settings_patch / patch:sickrage body SickRageSettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
280 GET /api/v1/Settings/SickRage D read_settings / sickrage none documented 200: SickRageSettings Allowlisted projection; no raw secrets.
281 GET /api/v1/Settings/jobs D read_settings / jobs none documented 200: JobSettings Allowlisted projection; no raw secrets.
282 POST /api/v1/Settings/jobs P write_settings_patch / patch:jobs body JobSettings 200: JobSettingsViewModel Only typed non-secret patch; preserve omitted/private fields.
283 POST /api/v1/Settings/testcron D read_server / cron_validate body CronViewModelBody 200: CronTestModel Administrator-gated read calculation; Quartz uses 6-7 fields and ? for the unused day field.
284 POST /api/v1/Settings/Issues P write_settings_patch / patch:issues body IssueSettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
285 GET /api/v1/Settings/Issues D read_settings / issues none documented 200: IssueSettings Allowlisted projection; no raw secrets.
286 GET /api/v1/Settings/issuesenabled D read_settings / issuesenabled none documented 200: boolean Allowlisted projection; no raw secrets.
287 POST /api/v1/Settings/vote P write_settings_patch / patch:vote body VoteSettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
288 GET /api/v1/Settings/vote D read_settings / vote none documented 200: VoteSettings Allowlisted projection; no raw secrets.
289 GET /api/v1/Settings/voteenabled D read_settings / voteenabled none documented 200: boolean Allowlisted projection; no raw secrets.
290 POST /api/v1/Settings/themoviedb P write_settings_patch / patch:themoviedb body TheMovieDbSettings 200: boolean Only typed non-secret patch; preserve omitted/private fields.
291 GET /api/v1/Settings/themoviedb D read_settings / themoviedb none documented 200: TheMovieDbSettings Allowlisted projection; no raw secrets.
292 POST /api/v1/Settings/notifications/email P write_settings_patch / patch:notifications.email body EmailNotificationsViewModel 200: boolean Only typed non-secret patch; preserve omitted/private fields.
293 GET /api/v1/Settings/notifications/email D read_settings / notifications.email none documented 200: EmailNotificationsViewModel Allowlisted projection; no raw secrets.
294 GET /api/v1/Settings/notifications/email/enabled D read_settings / notifications.email.enabled none documented 200: boolean Allowlisted projection; no raw secrets.
295 POST /api/v1/Settings/notifications/discord P write_settings_patch / patch:notifications.discord body DiscordNotificationsViewModel 200: boolean Only typed non-secret patch; preserve omitted/private fields.
296 GET /api/v1/Settings/notifications/discord D read_settings / notifications.discord none documented 200: DiscordNotificationsViewModel Allowlisted projection; no raw secrets.
297 POST /api/v1/Settings/notifications/telegram P write_settings_patch / patch:notifications.telegram body TelegramNotificationsViewModel 200: boolean Only typed non-secret patch; preserve omitted/private fields.
298 GET /api/v1/Settings/notifications/telegram D read_settings / notifications.telegram none documented 200: TelegramNotificationsViewModel Allowlisted projection; no raw secrets.
299 POST /api/v1/Settings/notifications/pushbullet P write_settings_patch / patch:notifications.pushbullet body PushbulletNotificationViewModel 200: boolean Only typed non-secret patch; preserve omitted/private fields.
300 GET /api/v1/Settings/notifications/pushbullet D read_settings / notifications.pushbullet none documented 200: PushbulletNotificationViewModel Allowlisted projection; no raw secrets.
301 POST /api/v1/Settings/notifications/pushover P write_settings_patch / patch:notifications.pushover body PushoverNotificationViewModel 200: boolean Only typed non-secret patch; preserve omitted/private fields.
302 GET /api/v1/Settings/notifications/pushover D read_settings / notifications.pushover none documented 200: PushoverNotificationViewModel Allowlisted projection; no raw secrets.
303 POST /api/v1/Settings/notifications/slack P write_settings_patch / patch:notifications.slack body SlackNotificationsViewModel 200: boolean Only typed non-secret patch; preserve omitted/private fields.
304 GET /api/v1/Settings/notifications/slack D read_settings / notifications.slack none documented 200: SlackNotificationsViewModel Allowlisted projection; no raw secrets.
305 POST /api/v1/Settings/notifications/mattermost P write_settings_patch / patch:notifications.mattermost body MattermostNotificationsViewModel 200: boolean Only typed non-secret patch; preserve omitted/private fields.
306 GET /api/v1/Settings/notifications/mattermost D read_settings / notifications.mattermost none documented 200: MattermostNotificationsViewModel Allowlisted projection; no raw secrets.
307 GET /api/v1/Settings/notifications/twilio D read_settings / notifications.twilio none documented 200: TwilioSettingsViewModel Allowlisted projection; no raw secrets.
308 POST /api/v1/Settings/notifications/twilio P write_settings_patch / patch:notifications.twilio body TwilioSettingsViewModel 200: boolean Only typed non-secret patch; preserve omitted/private fields.
309 POST /api/v1/Settings/notifications/mobile P write_settings_patch / patch:notifications.mobile body MobileNotificationsViewModel 200: boolean Only typed non-secret patch; preserve omitted/private fields.
310 GET /api/v1/Settings/notifications/mobile D read_settings / notifications.mobile none documented 200: MobileNotificationsViewModel Allowlisted projection; no raw secrets.
311 POST /api/v1/Settings/notifications/gotify P write_settings_patch / patch:notifications.gotify body GotifyNotificationViewModel 200: boolean Only typed non-secret patch; preserve omitted/private fields.
312 GET /api/v1/Settings/notifications/gotify D read_settings / notifications.gotify none documented 200: GotifyNotificationViewModel Allowlisted projection; no raw secrets.
313 POST /api/v1/Settings/notifications/ntfy P write_settings_patch / patch:notifications.ntfy body NtfyNotificationViewModel 200: boolean Only typed non-secret patch; preserve omitted/private fields.
314 GET /api/v1/Settings/notifications/ntfy D read_settings / notifications.ntfy none documented 200: NtfyNotificationViewModel Allowlisted projection; no raw secrets.
315 POST /api/v1/Settings/notifications/webhook P write_settings_patch / patch:notifications.webhook body WebhookNotificationViewModel 200: boolean Only typed non-secret patch; preserve omitted/private fields.
316 GET /api/v1/Settings/notifications/webhook D read_settings / notifications.webhook none documented 200: WebhookNotificationViewModel Allowlisted projection; no raw secrets.
317 POST /api/v1/Settings/notifications/newsletter P write_settings_patch / patch:notifications.newsletter body NewsletterNotificationViewModel 200: boolean Only typed non-secret patch; preserve omitted/private fields.
318 GET /api/v1/Settings/notifications/newsletter D read_settings / notifications.newsletter none documented 200: NewsletterNotificationViewModel Allowlisted projection; no raw secrets.
319 POST /api/v1/Sonarr/Profiles A read_integration / options:sonarr/profiles body SonarrSettings 200: array<SonarrProfile> Private saved settings only; no connection overrides.
320 GET /api/v1/Sonarr/Profiles D read_integration / options:sonarr/profiles none documented 200: array<SonarrProfile> —
321 POST /api/v1/Sonarr/RootFolders A read_integration / options:sonarr/root_folders body SonarrSettings 200: array<SonarrRootFolder> Private saved settings only; no connection overrides.
322 GET /api/v1/Sonarr/RootFolders D read_integration / options:sonarr/root_folders none documented 200: array<SonarrRootFolder> —
323 GET /api/v1/Sonarr/v3/LanguageProfiles D read_integration / options:sonarr/language_profiles none documented 200: array<LanguageProfiles> —
324 POST /api/v1/Sonarr/v3/LanguageProfiles A read_integration / options:sonarr/language_profiles body SonarrSettings 200: array<LanguageProfiles> Private saved settings only; no connection overrides.
325 POST /api/v1/Sonarr/tags A read_integration / options:sonarr/tags body SonarrSettings 200: array<Tag> Private saved settings only; no connection overrides.
326 GET /api/v1/Sonarr/tags D read_integration / options:sonarr/tags none documented 200: array<Tag> —
327 GET /api/v1/Sonarr/enabled D read_integration / options:sonarr/enabled none documented 200: boolean —
328 GET /api/v1/Sonarr/version D read_integration / options:sonarr/version none documented 200: string —
329 GET /api/v1/Stats D read_server / stats query from:string required; query to:string required 200: UserStatsSummary from/to are required at the MCP layer; bare calls cause an upstream NRE.
330 GET /api/v1/Status D read_server / status none documented 200: HttpStatusCode —
331 GET /api/v1/Status/info D read_server / status_info none documented 200: string —
332 GET /api/v2/System/news X action removed none documented 200: Markdig HTML text Not structured data; action removed (#13).
333 GET /api/v2/System/logs D read_logs / list none documented 200: string array of file names Verified on 4.53.10.
334 GET /api/v2/System/logs/{logFileName} D read_logs / read path logFileName:string required 200: plain text Vetted opaque ID maps to filename; sanitized bounded local slicing (verified 4.53.10).
335 GET /api/v2/System/logs/download/{logFileName} X raw diagnostic download path logFileName:string required 200: body unspecified May expose secrets; sanitized logs tool is the supported alternative.
336 POST /api/v1/Tester/discord P write_integration_test / discord body DiscordNotificationSettings 200: boolean Saved authorized profile only; exact tester body differs by service.
337 POST /api/v1/Tester/pushbullet P write_integration_test / pushbullet body PushbulletSettings 200: boolean Saved authorized profile only; exact tester body differs by service.
338 POST /api/v1/Tester/pushover P write_integration_test / pushover body PushoverSettings 200: boolean Saved authorized profile only; exact tester body differs by service.
339 POST /api/v1/Tester/gotify P write_integration_test / gotify body GotifySettings 200: boolean Saved authorized profile only; exact tester body differs by service.
340 POST /api/v1/Tester/ntfy P write_integration_test / ntfy body NtfySettings 200: boolean Saved authorized profile only; exact tester body differs by service.
341 POST /api/v1/Tester/webhook P write_integration_test / webhook body WebhookSettings 200: boolean Saved authorized profile only; exact tester body differs by service.
342 POST /api/v1/Tester/mattermost P write_integration_test / mattermost body MattermostNotificationSettings 200: boolean Saved authorized profile only; exact tester body differs by service.
343 POST /api/v1/Tester/slack P write_integration_test / slack body SlackNotificationSettings 200: boolean Saved authorized profile only; exact tester body differs by service.
344 POST /api/v1/Tester/email P write_integration_test / email body EmailNotificationSettings 200: boolean Saved authorized profile only; exact tester body differs by service.
345 POST /api/v1/Tester/plex P write_integration_test / plex body PlexServers 200: boolean Saved authorized profile only; exact tester body differs by service.
346 POST /api/v1/Tester/emby P write_integration_test / emby body EmbyServers 200: boolean Saved authorized profile only; exact tester body differs by service.
347 POST /api/v1/Tester/jellyfin P write_integration_test / jellyfin body JellyfinServers 200: boolean Saved authorized profile only; exact tester body differs by service.
348 POST /api/v1/Tester/radarr P write_integration_test / radarr body RadarrSettings 200: TesterResultModel Saved authorized profile only; exact tester body differs by service.
349 POST /api/v1/Tester/sonarr P write_integration_test / sonarr body SonarrSettings 200: TesterResultModel Saved authorized profile only; exact tester body differs by service.
350 POST /api/v1/Tester/couchpotato P write_integration_test / couchpotato body CouchPotatoSettings 200: boolean Saved authorized profile only; exact tester body differs by service.
351 POST /api/v1/Tester/telegram P write_integration_test / telegram body TelegramSettings 200: boolean Saved authorized profile only; exact tester body differs by service.
352 POST /api/v1/Tester/sickrage P write_integration_test / sickrage body SickRageSettings 200: boolean Saved authorized profile only; exact tester body differs by service.
353 POST /api/v1/Tester/newsletter P write_integration_test / newsletter body NewsletterNotificationViewModel 200: boolean Saved authorized profile only; exact tester body differs by service.
354 POST /api/v1/Tester/mobile P write_integration_test / mobile body MobileNotificationTestViewModel 200: boolean Saved authorized profile only; exact tester body differs by service.
355 POST /api/v1/Tester/lidarr P write_integration_test / lidarr body LidarrSettings 200: TesterResultModel Saved authorized profile only; exact tester body differs by service.
356 POST /api/v1/Tester/whatsapp P write_integration_test / whatsapp body WhatsAppSettingsViewModel 200: boolean Saved authorized profile only; exact tester body differs by service.
357 GET /api/v1/TheMovieDb/Keywords D read_reference / keywords query searchTerm:unspecified optional 200: array<TheMovidDbKeyValue> —
358 GET /api/v1/TheMovieDb/Keywords/{keywordId} D read_reference / keyword path keywordId:unspecified required 200: body unspecified —
359 GET /api/v1/TheMovieDb/WatchProviders/movie D read_reference / watch_providers query searchTerm:unspecified optional 200: array<WatchProvidersResults> —
360 GET /api/v1/TheMovieDb/WatchProviders/tv D read_reference / watch_providers query searchTerm:unspecified optional 200: array<WatchProvidersResults> —
361 POST /api/v1/Token I upstream authentication adapter body UserAuthModel 200: Token Not model-callable; JWT-primary auth adapter (OMBI_AUTH_MODE=jwt); login/refresh semantics per 01-authentication.md; Bearer-on-all-routes remains Verify.
362 POST /api/v1/Token/plextoken I upstream authentication adapter body PlexTokenAuthentication success unspecified Not model-callable; JWT-primary auth adapter (OMBI_AUTH_MODE=jwt); login/refresh semantics per 01-authentication.md; Bearer-on-all-routes remains Verify.
363 GET /api/v1/Token/{pinId} I upstream authentication adapter path pinId:integer required success unspecified Not model-callable; JWT-primary auth adapter (OMBI_AUTH_MODE=jwt); login/refresh semantics per 01-authentication.md; Bearer-on-all-routes remains Verify.
364 POST /api/v1/Token/refresh I upstream authentication adapter body TokenController_TokenRefresh success unspecified Not model-callable; JWT-primary auth adapter (OMBI_AUTH_MODE=jwt); login/refresh semantics per 01-authentication.md; Bearer-on-all-routes remains Verify.
365 POST /api/v1/Token/requirePassword I upstream authentication adapter body UserAuthModel 200: boolean Not model-callable; JWT-primary auth adapter (OMBI_AUTH_MODE=jwt); login/refresh semantics per 01-authentication.md; Bearer-on-all-routes remains Verify.
366 POST /api/v1/Token/header_auth I upstream authentication adapter none documented 200: body unspecified Not model-callable; JWT-primary auth adapter (OMBI_AUTH_MODE=jwt); login/refresh semantics per 01-authentication.md; Bearer-on-all-routes remains Verify.
367 GET /api/v1/Update D read_server / update_info none documented 200: UpdateModel —
368 GET /api/v1/Vote D read_votes / list none documented 200: array<VoteViewModel> Ombi 4.53.10 can return HTTP 500 for existing instance data; no lossless alternate read route exists, so preserve UPSTREAM_REJECTED.
369 POST /api/v1/Vote/up/movie/{requestId} D write_vote path requestId:integer required 200: VoteEngineResult —
370 POST /api/v1/Vote/up/tv/{requestId} D write_vote path requestId:integer required 200: VoteEngineResult —
371 POST /api/v1/Vote/up/album/{requestId} D write_vote path requestId:integer required 200: VoteEngineResult —
372 POST /api/v1/Vote/down/movie/{requestId} D write_vote path requestId:integer required 200: VoteEngineResult —
373 POST /api/v1/Vote/down/tv/{requestId} D write_vote path requestId:integer required 200: VoteEngineResult —
374 POST /api/v1/Vote/down/album/{requestId} D write_vote path requestId:integer required 200: VoteEngineResult —
375 GET /api/v1/Vote/movie/{requestId} D read_votes / get path requestId:integer required 200: array<Votes> Ombi 4.53.10 can return HTTP 500 for existing instance data; no lossless alternate read route exists, so preserve UPSTREAM_REJECTED.
376 GET /api/v1/Vote/music/{requestId} D read_votes / get path requestId:integer required 200: array<Votes> —
377 GET /api/v1/Vote/tv/{requestId} D read_votes / get path requestId:integer required 200: array<Votes> —