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

396 lines
110 KiB
Markdown

# 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`](../api/raml/api.raml#L11) | D | `read_library / calendar` | none documented | 200: array<[CalendarViewModel](../api/raml/types/Ombi.Core.Models.Search.V2.CalendarViewModel.raml)> | — |
| 002 | [POST `/api/v1/CouchPotato/profile`](../api/raml/api.raml#L27) | D | `read_integration / options:couchpotato/profiles` | body [CouchPotatoSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.CouchPotatoSettings.raml) | 200: [CouchPotatoProfiles](../api/raml/types/Ombi.Api.External.ExternalApis.CouchPotato.Models.CouchPotatoProfiles.raml) | Saved settings constructed privately; singular profile path. |
| 003 | [POST `/api/v1/CouchPotato/apikey`](../api/raml/api.raml#L45) | I | `administrator credential provisioning` | body [CouchPotatoSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.CouchPotatoSettings.raml) | 200: [CouchPotatoApiKey](../api/raml/types/Ombi.Api.External.ExternalApis.CouchPotato.Models.CouchPotatoApiKey.raml) | Acquires a credential; never return API keys. |
| 004 | [GET `/api/v1/CustomPage`](../api/raml/api.raml#L63) | D | `read_settings / custom_page` | none documented | 200: [CustomPageSettings](../api/raml/types/Ombi.Settings.Settings.Models.CustomPageSettings.raml) | Allowlisted projection; no raw secrets. |
| 005 | [POST `/api/v1/CustomPage`](../api/raml/api.raml#L63) | P | `write_settings_patch / patch:custom_page` | body [CustomPageSettings](../api/raml/types/Ombi.Settings.Settings.Models.CustomPageSettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 006 | [POST `/api/v1/Emby`](../api/raml/api.raml#L93) | I | `media-server provisioning` | body [EmbySettings](../api/raml/types/Ombi.Core.Settings.Models.External.EmbySettings.raml) | 200: [EmbySettings](../api/raml/types/Ombi.Core.Settings.Models.External.EmbySettings.raml) | Credential-bearing settings request/response; behaviour not established by RAML. |
| 007 | [POST `/api/v1/Emby/info`](../api/raml/api.raml#L113) | D | `read_integration / media_server:emby/info` | body [EmbyServers](../api/raml/types/Ombi.Core.Settings.Models.External.EmbyServers.raml) | 200: [PublicInfo](../api/raml/types/Ombi.Api.External.MediaServers.Emby.Models.PublicInfo.raml) | POST resolves configured server privately. |
| 008 | [GET `/api/v1/Emby/users`](../api/raml/api.raml#L131) | D | `read_integration / media_server:emby/users` | none documented | 200: array<[UsersViewModel](../api/raml/types/Ombi.Models.External.UsersViewModel.raml)> | — |
| 009 | [POST `/api/v1/Emby/Library`](../api/raml/api.raml#L143) | D | `read_integration / media_server:emby/libraries` | body [EmbyServers](../api/raml/types/Ombi.Core.Settings.Models.External.EmbyServers.raml) | 200: [EmbyItemContainer](../api/raml/types/Ombi.Api.External.MediaServers.Emby.Models.EmbyItemContainer_1__Ombi.Api.External.MediaServers.Emby.Models.Media.MediaFolders__Ombi.Api.External__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | POST resolves configured server privately. |
| 010 | [GET `/api/v2/Features`](../api/raml/api.raml#L161) | D | `read_server / features` | none documented | 200: array<[FeatureEnablement](../api/raml/types/Ombi.Settings.Settings.Models.FeatureEnablement.raml)> | — |
| 011 | [POST `/api/v2/Features/enable`](../api/raml/api.raml#L177) | P | `write_settings_patch / feature` | body [FeatureEnablement](../api/raml/types/Ombi.Settings.Settings.Models.FeatureEnablement.raml) | 200: array<[FeatureEnablement](../api/raml/types/Ombi.Settings.Settings.Models.FeatureEnablement.raml)> | Select enable/disable from enabled Boolean. |
| 012 | [POST `/api/v2/Features/disable`](../api/raml/api.raml#L202) | P | `write_settings_patch / feature` | body [FeatureEnablement](../api/raml/types/Ombi.Settings.Settings.Models.FeatureEnablement.raml) | 200: array<[FeatureEnablement](../api/raml/types/Ombi.Settings.Settings.Models.FeatureEnablement.raml)> | Select enable/disable from enabled Boolean. |
| 013 | [GET `/api/v2/Hub/Users`](../api/raml/api.raml#L227) | D | `read_users / online` | none documented | 200: array<[ConnectedUsersViewModel](../api/raml/types/Ombi.Models.ConnectedUsersViewModel.raml)> | Privileged visibility rules apply. |
| 014 | [GET `/api/v1/Identity/Users`](../api/raml/api.raml#L245) | D | `read_users / list` | none documented | 200: array<[UserViewModel](../api/raml/types/Ombi.Core.Models.UI.UserViewModel.raml)> | — |
| 015 | [GET `/api/v1/Identity/dropdown/Users`](../api/raml/api.raml#L257) | D | `read_users / dropdown` | none documented | 200: array<[UserViewModelDropdown](../api/raml/types/Ombi.Core.Models.UI.UserViewModelDropdown.raml)> | — |
| 016 | [GET `/api/v1/Identity`](../api/raml/api.raml#L269) | D | `read_users / self` | none documented | 200: [UserViewModel](../api/raml/types/Ombi.Core.Models.UI.UserViewModel.raml) | — |
| 017 | [POST `/api/v1/Identity`](../api/raml/api.raml#L269) | X | `manual user/profile administration` | body [UserViewModel](../api/raml/types/Ombi.Core.Models.UI.UserViewModel.raml) | 200: [IdentityResult](../api/raml/types/Ombi.Models.Identity.IdentityResult.raml) | Mixed credentials/claims/full entities or delivery-secret preference values are not tool inputs. |
| 018 | [PUT `/api/v1/Identity`](../api/raml/api.raml#L269) | X | `manual user/profile administration` | body [UserViewModel](../api/raml/types/Ombi.Core.Models.UI.UserViewModel.raml) | 200: [IdentityResult](../api/raml/types/Ombi.Models.Identity.IdentityResult.raml) | Mixed credentials/claims/full entities or delivery-secret preference values are not tool inputs. |
| 019 | [POST `/api/v1/Identity/language`](../api/raml/api.raml#L318) | D | `write_user_preferences / language` | body [UserLanguage](../api/raml/types/Ombi.Models.Identity.UserLanguage.raml) | 200: body unspecified | Body lang, not language. |
| 020 | [GET `/api/v1/Identity/streamingcountry`](../api/raml/api.raml#L335) | D | `read_reference / streaming_countries` | none documented | 200: body unspecified | — |
| 021 | [POST `/api/v1/Identity/streamingcountry`](../api/raml/api.raml#L335) | D | `write_user_preferences / streaming_country` | body [CountryStreamingPreference](../api/raml/types/Ombi.Models.Identity.CountryStreamingPreference.raml) | 200: body unspecified | Body code. |
| 022 | [GET `/api/v1/Identity/User/{id}`](../api/raml/api.raml#L359) | D | `read_users / get` | path `id`:string required | 200: [UserViewModel](../api/raml/types/Ombi.Core.Models.UI.UserViewModel.raml) | — |
| 023 | [PUT `/api/v1/Identity/local`](../api/raml/api.raml#L374) | X | `manual user/profile administration` | body [UpdateLocalUserModel](../api/raml/types/Ombi.Models.Identity.UpdateLocalUserModel.raml) | 200: [IdentityResult](../api/raml/types/Ombi.Models.Identity.IdentityResult.raml) | Mixed credentials/claims/full entities or delivery-secret preference values are not tool inputs. |
| 024 | [DELETE `/api/v1/Identity/{userId}`](../api/raml/api.raml#L394) | D | `write_user_manage / delete` | path `userId`:unspecified required | 200: [IdentityResult](../api/raml/types/Ombi.Models.Identity.IdentityResult.raml) | — |
| 025 | [GET `/api/v1/Identity/claims`](../api/raml/api.raml#L410) | D | `read_users / claims` | none documented | 200: array<[ClaimCheckboxes](../api/raml/types/Ombi.Core.Models.UI.ClaimCheckboxes.raml)> | — |
| 026 | [POST `/api/v1/Identity/welcomeEmail`](../api/raml/api.raml#L422) | P | `write_user_manage / welcome_email` | body [UserViewModel](../api/raml/types/Ombi.Core.Models.UI.UserViewModel.raml) | 200: body unspecified | Resolve user view model internally. |
| 027 | [GET `/api/v1/Identity/notificationpreferences`](../api/raml/api.raml#L437) | D | `read_users / notification_preferences` | none documented | 200: array<[UserNotificationPreferences](../api/raml/types/Ombi.Store.Entities.UserNotificationPreferences.raml)> | — |
| 028 | [GET `/api/v1/Identity/notificationpreferences/{userId}`](../api/raml/api.raml#L447) | D | `read_users / notification_preferences` | path `userId`:string required | 200: array<[UserNotificationPreferences](../api/raml/types/Ombi.Store.Entities.UserNotificationPreferences.raml)> | — |
| 029 | [POST `/api/v1/Identity/NotificationPreferences`](../api/raml/api.raml#L461) | X | `manual user/profile administration` | body array<[AddNotificationPreference](../api/raml/types/Ombi.Models.Identity.AddNotificationPreference.raml)> | success unspecified | Mixed credentials/claims/full entities or delivery-secret preference values are not tool inputs. |
| 030 | [GET `/api/v1/Identity/newsletter/unsubscribe/{userId}`](../api/raml/api.raml#L489) | 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}`](../api/raml/api.raml#L499) | 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`](../api/raml/api.raml#L512) | 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}`](../api/raml/api.raml#L521) | 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}`](../api/raml/api.raml#L534) | 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}`](../api/raml/api.raml#L547) | 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}`](../api/raml/api.raml#L560) | 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}`](../api/raml/api.raml#L573) | 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}`](../api/raml/api.raml#L586) | 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}`](../api/raml/api.raml#L599) | 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`](../api/raml/api.raml#L612) | 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`](../api/raml/api.raml#L618) | 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}`](../api/raml/api.raml#L624) | D | `read_issues / summary` | path `position`:integer required; path `take`:integer required; path `status`:[IssueStatus](../api/raml/types/Ombi.Store.Entities.Requests.IssueStatus.raml) required | 200: array<[IssuesSummaryModel](../api/raml/types/Ombi.Core.Engine.V2.IssuesSummaryModel.raml)> | — |
| 043 | [GET `/api/v2/Issues/details/{providerId}`](../api/raml/api.raml#L650) | D | `read_issues / provider_summary` | path `providerId`:string required | 200: [IssuesSummaryModel](../api/raml/types/Ombi.Core.Engine.V2.IssuesSummaryModel.raml) | — |
| 044 | [GET `/api/v1/Issues/categories`](../api/raml/api.raml#L667) | D | `read_reference / issue_categories` | none documented | 200: array<[IssueCategory](../api/raml/types/Ombi.Store.Entities.Requests.IssueCategory.raml)> | — |
| 045 | [POST `/api/v1/Issues/categories`](../api/raml/api.raml#L667) | D | `write_issue_manage / create_category` | body [IssueCategory](../api/raml/types/Ombi.Store.Entities.Requests.IssueCategory.raml) | 200: boolean | — |
| 046 | [DELETE `/api/v1/Issues/categories/{catId}`](../api/raml/api.raml#L698) | D | `write_issue_manage / delete_category` | path `catId`:integer required | 200: boolean | — |
| 047 | [GET `/api/v1/Issues`](../api/raml/api.raml#L713) | A | `read_issues / list` | none documented | 200: array<[Issues](../api/raml/types/Ombi.Store.Entities.Requests.Issues.raml)> | Unpaged list is compatibility only. |
| 048 | [POST `/api/v1/Issues`](../api/raml/api.raml#L713) | P | `write_issue_create` | body [Issues](../api/raml/types/Ombi.Store.Entities.Requests.Issues.raml) | 200: integer | Minimal issue creation projection. |
| 049 | [GET `/api/v1/Issues/{take}/{skip}/{status}`](../api/raml/api.raml#L744) | D | `read_issues / list` | path `take`:integer required; path `skip`:integer required; path `status`:[IssueStatus](../api/raml/types/Ombi.Store.Entities.Requests.IssueStatus.raml) required | 200: array<[Issues](../api/raml/types/Ombi.Store.Entities.Requests.Issues.raml)> | — |
| 050 | [GET `/api/v1/Issues/count`](../api/raml/api.raml#L766) | D | `read_issues / counts` | none documented | 200: [IssueCountModel](../api/raml/types/Ombi.Models.IssueCountModel.raml) | — |
| 051 | [GET `/api/v1/Issues/{id}`](../api/raml/api.raml#L777) | D | `read_issues / get` | path `id`:integer required | 200: [Issues](../api/raml/types/Ombi.Store.Entities.Requests.Issues.raml) | — |
| 052 | [DELETE `/api/v1/Issues/{id}`](../api/raml/api.raml#L777) | D | `write_issue_manage / delete` | path `id`:integer required | 200: boolean | — |
| 053 | [GET `/api/v1/Issues/request/{id}`](../api/raml/api.raml#L804) | D | `read_issues / by_request` | path `id`:integer required | 200: body unspecified | — |
| 054 | [GET `/api/v1/Issues/provider/{id}`](../api/raml/api.raml#L814) | D | `read_issues / by_provider` | path `id`:string required | 200: body unspecified | — |
| 055 | [GET `/api/v1/Issues/{id}/comments`](../api/raml/api.raml#L824) | D | `read_issues / comments` | path `id`:integer required | 200: array<[IssueCommentChatViewModel](../api/raml/types/Ombi.Models.IssueCommentChatViewModel.raml)> | — |
| 056 | [POST `/api/v1/Issues/comments`](../api/raml/api.raml#L840) | D | `write_issue_comment` | body [NewIssueCommentViewModel](../api/raml/types/Ombi.Models.NewIssueCommentViewModel.raml) | 200: [IssueComments](../api/raml/types/Ombi.Store.Entities.Requests.IssueComments.raml) | — |
| 057 | [DELETE `/api/v1/Issues/comments/{id}`](../api/raml/api.raml#L860) | D | `write_issue_manage / delete_comment` | path `id`:integer required | 200: boolean | — |
| 058 | [POST `/api/v1/Issues/status`](../api/raml/api.raml#L875) | D | `write_issue_manage / set_status` | body [IssueStateViewModel](../api/raml/types/Ombi.Models.IssueStateViewModel.raml) | 200: boolean | — |
| 059 | [POST `/api/v1/Jellyfin`](../api/raml/api.raml#L893) | I | `media-server provisioning` | body [JellyfinSettings](../api/raml/types/Ombi.Core.Settings.Models.External.JellyfinSettings.raml) | 200: [JellyfinSettings](../api/raml/types/Ombi.Core.Settings.Models.External.JellyfinSettings.raml) | Credential-bearing settings request/response; behaviour not established by RAML. |
| 060 | [POST `/api/v1/Jellyfin/info`](../api/raml/api.raml#L913) | D | `read_integration / media_server:jellyfin/info` | body [JellyfinServers](../api/raml/types/Ombi.Core.Settings.Models.External.JellyfinServers.raml) | 200: [PublicInfo](../api/raml/types/Ombi.Api.External.MediaServers.Jellyfin.Models.PublicInfo.raml) | POST resolves configured server privately. |
| 061 | [POST `/api/v1/Jellyfin/Library`](../api/raml/api.raml#L931) | D | `read_integration / media_server:jellyfin/libraries` | body [JellyfinServers](../api/raml/types/Ombi.Core.Settings.Models.External.JellyfinServers.raml) | 200: [JellyfinItemContainer](../api/raml/types/Ombi.Api.External.MediaServers.Jellyfin.Models.JellyfinItemContainer_1__Ombi.Api.External.MediaServers.Jellyfin.Models.MediaFolders__Ombi.Api.External__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | POST resolves configured server privately. |
| 062 | [GET `/api/v1/Jellyfin/users`](../api/raml/api.raml#L949) | D | `read_integration / media_server:jellyfin/users` | none documented | 200: array<[UsersViewModel](../api/raml/types/Ombi.Models.External.UsersViewModel.raml)> | — |
| 063 | [POST `/api/v1/Job/update`](../api/raml/api.raml#L961) | 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`](../api/raml/api.raml#L961) | D | `read_server / update_check` | none documented | 200: boolean | — |
| 065 | [POST `/api/v1/Job/plexuserimporter`](../api/raml/api.raml#L982) | 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`](../api/raml/api.raml#L993) | 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`](../api/raml/api.raml#L1004) | 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`](../api/raml/api.raml#L1015) | 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`](../api/raml/api.raml#L1026) | 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`](../api/raml/api.raml#L1037) | 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`](../api/raml/api.raml#L1048) | 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`](../api/raml/api.raml#L1059) | 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`](../api/raml/api.raml#L1070) | 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`](../api/raml/api.raml#L1081) | 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`](../api/raml/api.raml#L1092) | 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`](../api/raml/api.raml#L1103) | 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`](../api/raml/api.raml#L1112) | 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`](../api/raml/api.raml#L1123) | D | `read_server / landing` | none documented | 200: [MediaSeverAvailibilityViewModel](../api/raml/types/Ombi.Models.MediaSeverAvailibilityViewModel.raml) | — |
| 079 | [GET `/api/v1/Lidarr/enabled`](../api/raml/api.raml#L1132) | D | `read_integration / options:lidarr/enabled` | none documented | 200: boolean | — |
| 080 | [POST `/api/v1/Lidarr/Profiles`](../api/raml/api.raml#L1141) | A | `read_integration / options:lidarr/profiles` | body [LidarrSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.LidarrSettings.raml) | 200: array<[LidarrProfile](../api/raml/types/Ombi.Api.External.ExternalApis.Lidarr.Models.LidarrProfile.raml)> | Private saved settings only; no connection overrides. |
| 081 | [GET `/api/v1/Lidarr/Profiles`](../api/raml/api.raml#L1141) | D | `read_integration / options:lidarr/profiles` | none documented | 200: array<[LidarrProfile](../api/raml/types/Ombi.Api.External.ExternalApis.Lidarr.Models.LidarrProfile.raml)> | — |
| 082 | [POST `/api/v1/Lidarr/RootFolders`](../api/raml/api.raml#L1174) | A | `read_integration / options:lidarr/root_folders` | body [LidarrSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.LidarrSettings.raml) | 200: array<[LidarrRootFolder](../api/raml/types/Ombi.Api.External.ExternalApis.Lidarr.Models.LidarrRootFolder.raml)> | Private saved settings only; no connection overrides. |
| 083 | [GET `/api/v1/Lidarr/RootFolders`](../api/raml/api.raml#L1174) | D | `read_integration / options:lidarr/root_folders` | none documented | 200: array<[LidarrRootFolder](../api/raml/types/Ombi.Api.External.ExternalApis.Lidarr.Models.LidarrRootFolder.raml)> | — |
| 084 | [POST `/api/v1/Lidarr/Metadata`](../api/raml/api.raml#L1207) | D | `read_integration / options:lidarr/metadata` | body [LidarrSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.LidarrSettings.raml) | 200: array<[MetadataProfile](../api/raml/types/Ombi.Api.External.ExternalApis.Lidarr.Models.MetadataProfile.raml)> | Private saved settings only; no connection overrides. |
| 085 | [POST `/api/v1/Logging`](../api/raml/api.raml#L1228) | X | `UI-client telemetry` | body [UiLoggingModel](../api/raml/types/Ombi.Models.UiLoggingModel.raml) | 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}`](../api/raml/api.raml#L1243) | 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](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.AlbumRequest__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | Legacy parent/array/filter semantics need verified adapter; not equivalent to v2 TV child pages. |
| 087 | [GET `/api/v1/request/music/total`](../api/raml/api.raml#L1273) | D | `read_request_stats / total` | none documented | 200: integer | — |
| 088 | [GET `/api/v1/request/music`](../api/raml/api.raml#L1284) | A | `read_requests / list` | none documented | 200: array<[AlbumRequest](../api/raml/types/Ombi.Store.Entities.Requests.AlbumRequest.raml)> | Legacy parent/array/filter semantics need verified adapter; not equivalent to v2 TV child pages. |
| 089 | [POST `/api/v1/request/music`](../api/raml/api.raml#L1284) | D | `write_request_create / album` | body [MusicAlbumRequestViewModel](../api/raml/types/Ombi.Core.Models.Requests.MusicAlbumRequestViewModel.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | — |
| 090 | [GET `/api/v1/request/music/search/{searchTerm}`](../api/raml/api.raml#L1315) | D | `read_requests / search` | path `searchTerm`:unspecified required | 200: array<[AlbumRequest](../api/raml/types/Ombi.Store.Entities.Requests.AlbumRequest.raml)> | — |
| 091 | [DELETE `/api/v1/request/music/{requestId}`](../api/raml/api.raml#L1332) | D | `write_request_delete` | path `requestId`:unspecified required | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | — |
| 092 | [POST `/api/v1/request/music/approve`](../api/raml/api.raml#L1348) | D | `write_request_moderate / approve` | body [AlbumUpdateModel](../api/raml/types/Ombi.Core.Models.Requests.AlbumUpdateModel.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | — |
| 093 | [POST `/api/v1/request/music/available`](../api/raml/api.raml#L1368) | D | `write_request_moderate / mark_available` | body [AlbumUpdateModel](../api/raml/types/Ombi.Core.Models.Requests.AlbumUpdateModel.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | — |
| 094 | [POST `/api/v1/request/music/unavailable`](../api/raml/api.raml#L1388) | D | `write_request_moderate / mark_unavailable` | body [AlbumUpdateModel](../api/raml/types/Ombi.Core.Models.Requests.AlbumUpdateModel.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | — |
| 095 | [PUT `/api/v1/request/music/deny`](../api/raml/api.raml#L1408) | D | `write_request_moderate / deny` | body [DenyAlbumModel](../api/raml/types/Ombi.Core.Models.Requests.DenyAlbumModel.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | — |
| 096 | [GET `/api/v1/request/music/remaining`](../api/raml/api.raml#L1428) | D | `read_request_stats / quota` | none documented | 200: [RequestQuotaCountModel](../api/raml/types/Ombi.Core.Models.RequestQuotaCountModel.raml) | — |
| 097 | [POST `/api/v1/Notifications/massemail`](../api/raml/api.raml#L1439) | P | `write_notification_send` | body [MassEmailModel](../api/raml/types/Ombi.Core.Models.MassEmailModel.raml) | 200: boolean | Resolve explicit user IDs into minimum verified entity body. |
| 098 | [POST `/api/v1/Plex`](../api/raml/api.raml#L1457) | I | `Plex authentication/provisioning` | body [UserRequest](../api/raml/types/Ombi.Api.External.MediaServers.Plex.Models.UserRequest.raml) | 200: [PlexAuthentication](../api/raml/types/Ombi.Api.External.MediaServers.Plex.Models.PlexAuthentication.raml) | Credential-bearing account/OAuth workflow stays outside model tools. |
| 099 | [POST `/api/v1/Plex/Libraries`](../api/raml/api.raml#L1477) | A | `read_integration / plex_libraries` | body [PlexServers](../api/raml/types/Ombi.Core.Settings.Models.External.PlexServers.raml) | 200: [PlexLibrariesResponse](../api/raml/types/Ombi.Models.External.PlexLibrariesResponse.raml) | Private saved-server POST alternative. |
| 100 | [GET `/api/v1/Plex/Libraries/{machineId}`](../api/raml/api.raml#L1497) | D | `read_integration / plex_libraries` | path `machineId`:string required | 200: [PlexLibrariesLiteResponse](../api/raml/types/Ombi.Models.External.PlexLibrariesLiteResponse.raml) | — |
| 101 | [POST `/api/v1/Plex/user`](../api/raml/api.raml#L1510) | X | `Plex account provisioning` | body [PlexUserViewModel](../api/raml/types/Ombi.Models.External.PlexUserViewModel.raml) | 200: body unspecified | Side effects are insufficiently specified; no guessed read lookup. |
| 102 | [GET `/api/v1/Plex/servers`](../api/raml/api.raml#L1525) | 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`](../api/raml/api.raml#L1525) | I | `Plex authentication/provisioning` | body [UserRequest](../api/raml/types/Ombi.Api.External.MediaServers.Plex.Models.UserRequest.raml) | 200: [PlexServersViewModel](../api/raml/types/Ombi.Models.External.PlexServersViewModel.raml) | Credential-bearing account/OAuth workflow stays outside model tools. |
| 104 | [GET `/api/v1/Plex/friends`](../api/raml/api.raml#L1552) | D | `read_integration / plex:friends` | none documented | 200: array<[UsersViewModel](../api/raml/types/Ombi.Models.External.UsersViewModel.raml)> | — |
| 105 | [POST `/api/v1/Plex/oauth`](../api/raml/api.raml#L1564) | I | `Plex authentication/provisioning` | body [PlexOAuthViewModel](../api/raml/types/Ombi.Models.PlexOAuthViewModel.raml) | 200: body unspecified | Credential-bearing account/OAuth workflow stays outside model tools. |
| 106 | [GET `/api/v1/Plex/WatchlistUsers`](../api/raml/api.raml#L1579) | D | `read_integration / plex:watchlist_users` | none documented | 200: array<[PlexUserWatchlistModel](../api/raml/types/Ombi.Core.Models.PlexUserWatchlistModel.raml)> | — |
| 107 | [POST `/api/v1/Plex/WatchlistUsers/revalidate`](../api/raml/api.raml#L1589) | D | `write_job_run / revalidate_watchlist` | none documented | 200: body unspecified | — |
| 108 | [POST `/api/v1/Radarr/Profiles`](../api/raml/api.raml#L1595) | A | `read_integration / options:radarr/profiles` | body [RadarrSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.RadarrSettings.raml) | 200: body unspecified | Private saved settings only; no connection overrides. |
| 109 | [GET `/api/v1/Radarr/Profiles`](../api/raml/api.raml#L1595) | D | `read_integration / options:radarr/profiles` | none documented | 200: body unspecified | — |
| 110 | [GET `/api/v1/Radarr/enabled`](../api/raml/api.raml#L1620) | D | `read_integration / options:radarr/enabled` | none documented | 200: boolean | — |
| 111 | [POST `/api/v1/Radarr/RootFolders`](../api/raml/api.raml#L1629) | A | `read_integration / options:radarr/root_folders` | body [RadarrSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.RadarrSettings.raml) | 200: array<[RadarrRootFolder](../api/raml/types/Ombi.Api.External.ExternalApis.Radarr.Models.RadarrRootFolder.raml)> | Private saved settings only; no connection overrides. |
| 112 | [GET `/api/v1/Radarr/RootFolders`](../api/raml/api.raml#L1629) | D | `read_integration / options:radarr/root_folders` | none documented | 200: array<[RadarrRootFolder](../api/raml/types/Ombi.Api.External.ExternalApis.Radarr.Models.RadarrRootFolder.raml)> | — |
| 113 | [GET `/api/v1/Radarr/Profiles/4k`](../api/raml/api.raml#L1662) | D | `read_integration / options:radarr/profiles/4k` | none documented | 200: body unspecified | — |
| 114 | [GET `/api/v1/Radarr/RootFolders/4k`](../api/raml/api.raml#L1671) | D | `read_integration / options:radarr/root_folders/4k` | none documented | 200: array<[RadarrRootFolder](../api/raml/types/Ombi.Api.External.ExternalApis.Radarr.Models.RadarrRootFolder.raml)> | — |
| 115 | [POST `/api/v1/Radarr/tags`](../api/raml/api.raml#L1684) | A | `read_integration / options:radarr/tags` | body [SonarrSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.SonarrSettings.raml) | 200: array<[Tag](../api/raml/types/Ombi.Api.External.ExternalApis.Radarr.Models.Tag.raml)> | Private saved settings only; no connection overrides. RAML body unexpectedly references SonarrSettings; verify. |
| 116 | [GET `/api/v1/Radarr/tags`](../api/raml/api.raml#L1684) | D | `read_integration / options:radarr/tags` | none documented | 200: array<[Tag](../api/raml/types/Ombi.Api.External.ExternalApis.Radarr.Models.Tag.raml)> | — |
| 117 | [GET `/api/v1/RecentlyAdded/movies`](../api/raml/api.raml#L1716) | D | `read_library / recent` | none documented | 200: array<[RecentlyAddedMovieModel](../api/raml/types/Ombi.Core.Models.RecentlyAddedMovieModel.raml)> | grouped=true only for tv/grouped. |
| 118 | [GET `/api/v1/RecentlyAdded/tv`](../api/raml/api.raml#L1728) | D | `read_library / recent` | none documented | 200: array<[RecentlyAddedMovieModel](../api/raml/types/Ombi.Core.Models.RecentlyAddedMovieModel.raml)> | grouped=true only for tv/grouped. |
| 119 | [GET `/api/v1/RecentlyAdded/tv/grouped`](../api/raml/api.raml#L1740) | D | `read_library / recent` | none documented | 200: array<[RecentlyAddedMovieModel](../api/raml/types/Ombi.Core.Models.RecentlyAddedMovieModel.raml)> | grouped=true only for tv/grouped. |
| 120 | [GET `/api/v1/Request/movie/{count}/{position}/{orderType}/{statusType}/{availabilityType}`](../api/raml/api.raml#L1752) | 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](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.MovieRequests__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | Legacy parent/array/filter semantics need verified adapter; not equivalent to v2 TV child pages. |
| 121 | [GET `/api/v1/Request/movie/info/{requestId}`](../api/raml/api.raml#L1782) | D | `read_requests / get:movie` | path `requestId`:unspecified required | 200: [MovieRequests](../api/raml/types/Ombi.Store.Entities.Requests.MovieRequests.raml) | — |
| 122 | [GET `/api/v1/Request/movie/total`](../api/raml/api.raml#L1798) | D | `read_request_stats / total` | none documented | 200: integer | — |
| 123 | [GET `/api/v1/Request/movie`](../api/raml/api.raml#L1809) | A | `read_requests / list` | none documented | 200: array<[MovieRequests](../api/raml/types/Ombi.Store.Entities.Requests.MovieRequests.raml)> | Legacy parent/array/filter semantics need verified adapter; not equivalent to v2 TV child pages. |
| 124 | [POST `/api/v1/Request/movie`](../api/raml/api.raml#L1809) | D | `write_request_create / movie` | body [MovieRequestViewModel](../api/raml/types/Ombi.Core.Models.Requests.MovieRequestViewModel.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | — |
| 125 | [PUT `/api/v1/Request/movie`](../api/raml/api.raml#L1809) | X | `full entity replacement` | body [MovieRequests](../api/raml/types/Ombi.Store.Entities.Requests.MovieRequests.raml) | 200: [MovieRequests](../api/raml/types/Ombi.Store.Entities.Requests.MovieRequests.raml) | Use typed options/moderation instead; do not expose recursive server-owned state. |
| 126 | [GET `/api/v1/Request/movie/search/{searchTerm}`](../api/raml/api.raml#L1859) | D | `read_requests / search` | path `searchTerm`:unspecified required | 200: array<[MovieRequests](../api/raml/types/Ombi.Store.Entities.Requests.MovieRequests.raml)> | — |
| 127 | [DELETE `/api/v1/Request/movie/{requestId}`](../api/raml/api.raml#L1876) | D | `write_request_delete` | path `requestId`:unspecified required | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | — |
| 128 | [DELETE `/api/v1/Request/movie/all`](../api/raml/api.raml#L1892) | 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`](../api/raml/api.raml#L1900) | D | `write_request_moderate / approve` | body [MovieUpdateModel](../api/raml/types/Ombi.Core.Models.Requests.MovieUpdateModel.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | — |
| 130 | [POST `/api/v1/Request/movie/available`](../api/raml/api.raml#L1920) | D | `write_request_moderate / mark_available` | body [MovieUpdateModel](../api/raml/types/Ombi.Core.Models.Requests.MovieUpdateModel.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | — |
| 131 | [POST `/api/v1/Request/movie/unavailable`](../api/raml/api.raml#L1940) | D | `write_request_moderate / mark_unavailable` | body [MovieUpdateModel](../api/raml/types/Ombi.Core.Models.Requests.MovieUpdateModel.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | — |
| 132 | [PUT `/api/v1/Request/movie/deny`](../api/raml/api.raml#L1960) | D | `write_request_moderate / deny` | body [DenyMovieModel](../api/raml/types/Ombi.Core.Models.Requests.DenyMovieModel.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | — |
| 133 | [GET `/api/v1/Request/tv/total`](../api/raml/api.raml#L1980) | D | `read_request_stats / total` | none documented | 200: integer | — |
| 134 | [GET `/api/v1/Request/tv/{count}/{position}/{orderType}/{statusFilterType}/{availabilityFilterType}`](../api/raml/api.raml#L1991) | 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](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.TvRequests__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | 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}`](../api/raml/api.raml#L2027) | 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](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.TvRequests__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | Legacy parent/array/filter semantics need verified adapter; not equivalent to v2 TV child pages. |
| 136 | [GET `/api/v1/Request/tv`](../api/raml/api.raml#L2063) | A | `read_requests / list` | none documented | 200: array<[TvRequests](../api/raml/types/Ombi.Store.Entities.Requests.TvRequests.raml)> | Legacy parent/array/filter semantics need verified adapter; not equivalent to v2 TV child pages. |
| 137 | [POST `/api/v1/Request/tv`](../api/raml/api.raml#L2063) | D | `write_request_create / tv:tvdb` | body [TvRequestViewModel](../api/raml/types/Ombi.Core.Models.Requests.TvRequestViewModel.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | — |
| 138 | [PUT `/api/v1/Request/tv`](../api/raml/api.raml#L2063) | X | `full entity replacement` | body [TvRequests](../api/raml/types/Ombi.Store.Entities.Requests.TvRequests.raml) | 200: [TvRequests](../api/raml/types/Ombi.Store.Entities.Requests.TvRequests.raml) | Use typed options/moderation instead; do not expose recursive server-owned state. |
| 139 | [GET `/api/v1/Request/tvlite`](../api/raml/api.raml#L2113) | A | `read_requests / list` | none documented | 200: array<[TvRequests](../api/raml/types/Ombi.Store.Entities.Requests.TvRequests.raml)> | Legacy parent/array/filter semantics need verified adapter; not equivalent to v2 TV child pages. |
| 140 | [GET `/api/v1/Request/tv/{requestId}`](../api/raml/api.raml#L2125) | D | `read_requests / get:tv_parent` | path `requestId`:integer required | 200: [TvRequests](../api/raml/types/Ombi.Store.Entities.Requests.TvRequests.raml) | — |
| 141 | [DELETE `/api/v1/Request/tv/{requestId}`](../api/raml/api.raml#L2125) | D | `write_request_delete` | path `requestId`:unspecified required | 200: body unspecified | — |
| 142 | [GET `/api/v1/Request/tv/search/{searchTerm}`](../api/raml/api.raml#L2152) | D | `read_requests / search` | path `searchTerm`:unspecified required | 200: array<[TvRequests](../api/raml/types/Ombi.Store.Entities.Requests.TvRequests.raml)> | — |
| 143 | [PUT `/api/v1/Request/tv/root/{requestId}/{rootFolderId}`](../api/raml/api.raml#L2169) | 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}`](../api/raml/api.raml#L2187) | D | `write_request_options / tv_quality` | path `requestId`:integer required; path `qualityId`:integer required | 200: boolean | — |
| 145 | [PUT `/api/v1/Request/tv/child`](../api/raml/api.raml#L2205) | X | `full entity replacement` | body [ChildRequests](../api/raml/types/Ombi.Store.Entities.Requests.ChildRequests.raml) | 200: [ChildRequests](../api/raml/types/Ombi.Store.Entities.Requests.ChildRequests.raml) | Use typed options/moderation instead; do not expose recursive server-owned state. |
| 146 | [PUT `/api/v1/Request/tv/deny`](../api/raml/api.raml#L2225) | D | `write_request_moderate / deny` | body [DenyTvModel](../api/raml/types/Ombi.Models.DenyTvModel.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | TV child-ID semantics must be verified. |
| 147 | [POST `/api/v1/Request/tv/available`](../api/raml/api.raml#L2245) | D | `write_request_moderate / mark_available` | body [TvUpdateModel](../api/raml/types/Ombi.Models.TvUpdateModel.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | TV child-ID semantics must be verified. |
| 148 | [POST `/api/v1/Request/tv/unavailable`](../api/raml/api.raml#L2265) | D | `write_request_moderate / mark_unavailable` | body [TvUpdateModel](../api/raml/types/Ombi.Models.TvUpdateModel.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | TV child-ID semantics must be verified. |
| 149 | [POST `/api/v1/Request/tv/approve`](../api/raml/api.raml#L2285) | D | `write_request_moderate / approve` | body [TvUpdateModel](../api/raml/types/Ombi.Models.TvUpdateModel.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | TV child-ID semantics must be verified. |
| 150 | [DELETE `/api/v1/Request/tv/child/{requestId}`](../api/raml/api.raml#L2305) | D | `write_request_delete` | path `requestId`:unspecified required | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | — |
| 151 | [GET `/api/v1/Request/tv/{requestId}/child`](../api/raml/api.raml#L2321) | D | `read_requests / children` | path `requestId`:unspecified required | 200: array<[ChildRequests](../api/raml/types/Ombi.Store.Entities.Requests.ChildRequests.raml)> | — |
| 152 | [GET `/api/v1/Request/count`](../api/raml/api.raml#L2338) | D | `read_request_stats / counts` | none documented | 200: [RequestCountModel](../api/raml/types/Ombi.Core.Models.Requests.RequestCountModel.raml) | — |
| 153 | [GET `/api/v1/Request/userhasrequest`](../api/raml/api.raml#L2349) | D | `read_request_stats / has_requests` | query `userId`:string optional | 200: boolean | — |
| 154 | [POST `/api/v1/Request/movie/subscribe/{requestId}`](../api/raml/api.raml#L2364) | D | `write_request_subscribe / subscribe` | path `requestId`:integer required | 200: boolean | — |
| 155 | [POST `/api/v1/Request/tv/subscribe/{requestId}`](../api/raml/api.raml#L2379) | D | `write_request_subscribe / subscribe` | path `requestId`:integer required | 200: boolean | — |
| 156 | [POST `/api/v1/Request/movie/unsubscribe/{requestId}`](../api/raml/api.raml#L2394) | D | `write_request_subscribe / unsubscribe` | path `requestId`:integer required | 200: boolean | — |
| 157 | [POST `/api/v1/Request/tv/unsubscribe/{requestId}`](../api/raml/api.raml#L2409) | D | `write_request_subscribe / unsubscribe` | path `requestId`:integer required | 200: boolean | — |
| 158 | [GET `/api/v1/Request/movie/remaining`](../api/raml/api.raml#L2424) | D | `read_request_stats / quota` | none documented | 200: [RequestQuotaCountModel](../api/raml/types/Ombi.Core.Models.RequestQuotaCountModel.raml) | — |
| 159 | [GET `/api/v1/Request/tv/remaining`](../api/raml/api.raml#L2435) | D | `read_request_stats / quota` | none documented | 200: [RequestQuotaCountModel](../api/raml/types/Ombi.Core.Models.RequestQuotaCountModel.raml) | — |
| 160 | [GET `/api/v1/RequestRetry`](../api/raml/api.raml#L2446) | D | `read_requests / retry_queue` | none documented | 200: array<[FailedRequestViewModel](../api/raml/types/Ombi.Models.FailedRequestViewModel.raml)> | Privileged queue read. |
| 161 | [DELETE `/api/v1/RequestRetry/{queueId}`](../api/raml/api.raml#L2458) | D | `write_retry_remove` | path `queueId`:integer required | 200: body unspecified | — |
| 162 | [GET `/api/v2/Requests/movie/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2468) | D | `read_requests / list` | path `count`:unspecified required; path `position`:unspecified required; path `sort`:unspecified required; path `sortOrder`:unspecified required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.MovieRequests__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | — |
| 163 | [GET `/api/v2/Requests/movie/availble/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2500) | A | `read_requests / list` | path `count`:integer required; path `position`:integer required; path `sort`:string required; path `sortOrder`:string required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.MovieRequests__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | Misspelled alias; prefer available. |
| 164 | [GET `/api/v2/Requests/movie/available/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2526) | D | `read_requests / list` | path `count`:integer required; path `position`:integer required; path `sort`:string required; path `sortOrder`:string required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.MovieRequests__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | — |
| 165 | [GET `/api/v2/Requests/movie/processing/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2552) | D | `read_requests / list` | path `count`:integer required; path `position`:integer required; path `sort`:string required; path `sortOrder`:string required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.MovieRequests__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | — |
| 166 | [GET `/api/v2/Requests/movie/pending/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2578) | D | `read_requests / list` | path `count`:integer required; path `position`:integer required; path `sort`:string required; path `sortOrder`:string required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.MovieRequests__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | — |
| 167 | [GET `/api/v2/Requests/movie/denied/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2604) | D | `read_requests / list` | path `count`:integer required; path `position`:integer required; path `sort`:string required; path `sortOrder`:string required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.MovieRequests__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | — |
| 168 | [GET `/api/v2/Requests/movie/unavailable/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2630) | D | `read_requests / list` | path `count`:unspecified required; path `position`:unspecified required; path `sort`:unspecified required; path `sortOrder`:unspecified required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.MovieRequests__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | — |
| 169 | [GET `/api/v2/Requests/tv/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2662) | D | `read_requests / list` | path `count`:unspecified required; path `position`:unspecified required; path `sort`:unspecified required; path `sortOrder`:unspecified required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.ChildRequests__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | — |
| 170 | [GET `/api/v2/Requests/tv/pending/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2694) | D | `read_requests / list` | path `count`:integer required; path `position`:integer required; path `sort`:string required; path `sortOrder`:string required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.ChildRequests__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | — |
| 171 | [GET `/api/v2/Requests/tv/processing/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2720) | D | `read_requests / list` | path `count`:integer required; path `position`:integer required; path `sort`:string required; path `sortOrder`:string required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.ChildRequests__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | — |
| 172 | [GET `/api/v2/Requests/tv/available/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2746) | D | `read_requests / list` | path `count`:integer required; path `position`:integer required; path `sort`:string required; path `sortOrder`:string required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.ChildRequests__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | — |
| 173 | [GET `/api/v2/Requests/tv/denied/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2772) | D | `read_requests / list` | path `count`:integer required; path `position`:integer required; path `sort`:string required; path `sortOrder`:string required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.ChildRequests__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | — |
| 174 | [GET `/api/v2/Requests/tv/unavailable/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2798) | D | `read_requests / list` | path `count`:unspecified required; path `position`:unspecified required; path `sort`:unspecified required; path `sortOrder`:unspecified required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.ChildRequests__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | — |
| 175 | [POST `/api/v2/Requests/movie/advancedoptions`](../api/raml/api.raml#L2830) | D | `write_request_options / advanced` | body [MediaAdvancedOptions](../api/raml/types/Ombi.Core.Models.Requests.MediaAdvancedOptions.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | — |
| 176 | [POST `/api/v2/Requests/tv/advancedoptions`](../api/raml/api.raml#L2852) | D | `write_request_options / advanced` | body [MediaAdvancedOptions](../api/raml/types/Ombi.Core.Models.Requests.MediaAdvancedOptions.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | — |
| 177 | [GET `/api/v2/Requests/album/available/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2874) | D | `read_requests / list` | path `count`:integer required; path `position`:integer required; path `sort`:string required; path `sortOrder`:string required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.AlbumRequest__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | — |
| 178 | [GET `/api/v2/Requests/album/processing/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2900) | D | `read_requests / list` | path `count`:integer required; path `position`:integer required; path `sort`:string required; path `sortOrder`:string required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.AlbumRequest__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | — |
| 179 | [GET `/api/v2/Requests/album/pending/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2926) | D | `read_requests / list` | path `count`:integer required; path `position`:integer required; path `sort`:string required; path `sortOrder`:string required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.AlbumRequest__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | — |
| 180 | [GET `/api/v2/Requests/album/denied/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2952) | D | `read_requests / list` | path `count`:integer required; path `position`:integer required; path `sort`:string required; path `sortOrder`:string required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.AlbumRequest__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | — |
| 181 | [GET `/api/v2/Requests/album/{count}/{position}/{sort}/{sortOrder}`](../api/raml/api.raml#L2978) | D | `read_requests / list` | path `count`:integer required; path `position`:integer required; path `sort`:string required; path `sortOrder`:string required | 200: [RequestsViewModel](../api/raml/types/Ombi.Core.Models.UI.RequestsViewModel_1__Ombi.Store.Entities.Requests.AlbumRequest__Ombi.Store__Version_3.0.0.0__Culture_neutral__PublicKeyToken_null__.raml) | — |
| 182 | [POST `/api/v2/Requests/tv`](../api/raml/api.raml#L3004) | D | `write_request_create / tv:tmdb` | body [TvRequestViewModelV2](../api/raml/types/Ombi.Core.Models.Requests.TvRequestViewModelV2.raml) | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | — |
| 183 | [POST `/api/v2/Requests/reprocess/{type}/{requestId}/{is4K}`](../api/raml/api.raml#L3028) | D | `write_request_reprocess` | path `type`:[RequestType](../api/raml/types/Ombi.Store.Entities.RequestType.raml) 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}`](../api/raml/api.raml#L3044) | D | `write_request_create / collection` | path `collectionId`:integer required | 200: [RequestEngineResult](../api/raml/types/Ombi.Core.Engine.RequestEngineResult.raml) | No request body documented; success is RequestEngineResult. |
| 185 | [GET `/api/v2/Requests/recentlyRequested`](../api/raml/api.raml#L3061) | D | `read_requests / recent` | none documented | 200: array<[RecentlyRequestedModel](../api/raml/types/Ombi.Core.Models.Requests.RecentlyRequestedModel.raml)> | — |
| 186 | [POST `/api/v2/Search/multi/{searchTerm}`](../api/raml/api.raml#L3077) | D | `read_search / multi` | path `searchTerm`:unspecified required; body [MultiSearchFilter](../api/raml/types/Ombi.Core.Models.Search.V2.MultiSearchFilter.raml) | 200: array<[MultiSearchResult](../api/raml/types/Ombi.Core.Models.Search.V2.MultiSearchResult.raml)> | — |
| 187 | [GET `/api/v2/Search/Genres/{media}`](../api/raml/api.raml#L3111) | D | `read_reference / genres` | path `media`:unspecified required | 200: array<[Genre](../api/raml/types/Ombi.TheMovieDbApi.Models.Genre.raml)> | — |
| 188 | [GET `/api/v2/Search/Languages`](../api/raml/api.raml#L3134) | D | `read_reference / languages` | none documented | 200: array<[Language](../api/raml/types/Ombi.TheMovieDbApi.Models.Language.raml)> | — |
| 189 | [GET `/api/v2/Search/movie/{movieDbId}`](../api/raml/api.raml#L3150) | D | `read_media / details` | path `movieDbId`:unspecified required | 200: [MovieFullInfoViewModel](../api/raml/types/Ombi.Core.Models.Search.V2.MovieFullInfoViewModel.raml) | — |
| 190 | [GET `/api/v2/Search/movie/imdb/{imdbid}`](../api/raml/api.raml#L3170) | D | `read_media / details` | path `imdbId`:string required | 200: [MovieFullInfoViewModel](../api/raml/types/Ombi.Core.Models.Search.V2.MovieFullInfoViewModel.raml) | — |
| 191 | [GET `/api/v2/Search/movie/request/{requestId}`](../api/raml/api.raml#L3187) | D | `read_media / by_request` | path `requestId`:integer required | 200: [MovieFullInfoViewModel](../api/raml/types/Ombi.Core.Models.Search.V2.MovieFullInfoViewModel.raml) | Request-ID namespace requires verification. |
| 192 | [GET `/api/v2/Search/movie/collection/{collectionId}`](../api/raml/api.raml#L3206) | D | `read_discover / collection` | path `collectionId`:unspecified required | 200: [MovieCollectionsViewModel](../api/raml/types/Ombi.Core.Models.Search.V2.MovieCollectionsViewModel.raml) | — |
| 193 | [GET `/api/v2/Search/tv/{tvdbId}`](../api/raml/api.raml#L3226) | A | `read_media / details` | path `tvdbid`:unspecified required | 200: [SearchFullInfoTvShowViewModel](../api/raml/types/Ombi.Core.Models.Search.V2.SearchFullInfoTvShowViewModel.raml) | TMDB-keyed alias of #195 despite the `{tvdbId}` placeholder; never use for a TVDB lookup. |
| 194 | [GET `/api/v2/Search/tv/request/{requestId}`](../api/raml/api.raml#L3246) | D | `read_media / by_request` | path `requestId`:integer required | 200: [SearchFullInfoTvShowViewModel](../api/raml/types/Ombi.Core.Models.Search.V2.SearchFullInfoTvShowViewModel.raml) | Request-ID namespace requires verification. |
| 195 | [GET `/api/v2/Search/tv/moviedb/{moviedbid}`](../api/raml/api.raml#L3265) | D | `read_media / details` | path `moviedbid`:string required | 200: [SearchFullInfoTvShowViewModel](../api/raml/types/Ombi.Core.Models.Search.V2.SearchFullInfoTvShowViewModel.raml) | — |
| 196 | [POST `/api/v2/Search/movie/similar`](../api/raml/api.raml#L3284) | D | `read_discover / similar` | body [SimilarMoviesRefineModel](../api/raml/types/Ombi.Models.SimilarMoviesRefineModel.raml) | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | — |
| 197 | [GET `/api/v2/Search/movie/popular`](../api/raml/api.raml#L3321) | A | `read_discover / browse` | none documented | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | Nonpaged/legacy alternate only. |
| 198 | [GET `/api/v2/Search/movie/popular/{currentPosition}/{amountToLoad}`](../api/raml/api.raml#L3349) | D | `read_discover / browse` | path `currentPosition`:integer required; path `amountToLoad`:integer required | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | — |
| 199 | [POST `/api/v2/Search/advancedSearch/movie/{currentPosition}/{amountToLoad}`](../api/raml/api.raml#L3384) | D | `read_discover / advanced_movie` | path `currentPosition`:integer required; path `amountToLoad`:integer required; body [DiscoverModel](../api/raml/types/Ombi.Api.External.ExternalApis.TheMovieDb.Models.DiscoverModel.raml) | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | — |
| 200 | [GET `/api/v2/Search/movie/seasonal/{currentPosition}/{amountToLoad}`](../api/raml/api.raml#L3428) | D | `read_discover / browse` | path `currentPosition`:integer required; path `amountToLoad`:integer required | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | — |
| 201 | [GET `/api/v2/Search/movie/requested/{currentPosition}/{amountToLoad}`](../api/raml/api.raml#L3463) | D | `read_discover / browse` | path `currentPosition`:integer required; path `amountToLoad`:integer required | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | — |
| 202 | [GET `/api/v2/Search/tv/requested/{currentPosition}/{amountToLoad}`](../api/raml/api.raml#L3498) | D | `read_discover / browse` | path `currentPosition`:integer required; path `amountToLoad`:integer required | 200: array<[SearchFullInfoTvShowViewModel](../api/raml/types/Ombi.Core.Models.Search.V2.SearchFullInfoTvShowViewModel.raml)> | — |
| 203 | [GET `/api/v2/Search/movie/nowplaying`](../api/raml/api.raml#L3533) | A | `read_discover / browse` | none documented | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | Nonpaged/legacy alternate only. |
| 204 | [GET `/api/v2/Search/movie/nowplaying/{currentPosition}/{amountToLoad}`](../api/raml/api.raml#L3561) | D | `read_discover / browse` | path `currentPosition`:integer required; path `amountToLoad`:integer required | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | — |
| 205 | [GET `/api/v2/Search/movie/toprated`](../api/raml/api.raml#L3596) | A | `read_discover / browse` | none documented | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | Nonpaged/legacy alternate only. |
| 206 | [GET `/api/v2/Search/movie/toprated/{currentPosition}/{amountToLoad}`](../api/raml/api.raml#L3624) | D | `read_discover / browse` | path `currentPosition`:integer required; path `amountToLoad`:integer required | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | — |
| 207 | [GET `/api/v2/Search/movie/upcoming`](../api/raml/api.raml#L3659) | A | `read_discover / browse` | none documented | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | Nonpaged/legacy alternate only. |
| 208 | [GET `/api/v2/Search/movie/upcoming/{currentPosition}/{amountToLoad}`](../api/raml/api.raml#L3687) | D | `read_discover / browse` | path `currentPosition`:integer required; path `amountToLoad`:integer required | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | — |
| 209 | [GET `/api/v2/Search/tv/popular/{currentPosition}/{amountToLoad}`](../api/raml/api.raml#L3722) | D | `read_discover / browse` | path `currentPosition`:integer required; path `amountToLoad`:integer required | 200: array<[SearchTvShowViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchTvShowViewModel.raml)> | — |
| 210 | [GET `/api/v2/Search/tv/anticipated/{currentPosition}/{amountToLoad}`](../api/raml/api.raml#L3757) | D | `read_discover / browse` | path `currentPosition`:integer required; path `amountToLoad`:integer required | 200: array<[SearchTvShowViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchTvShowViewModel.raml)> | — |
| 211 | [GET `/api/v2/Search/tv/mostwatched/{currentPosition}/{amountToLoad}`](../api/raml/api.raml#L3792) | D | `read_discover / browse` | path `currentPosition`:integer required; path `amountToLoad`:integer required | 200: array<[SearchTvShowViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchTvShowViewModel.raml)> | — |
| 212 | [GET `/api/v2/Search/tv/trending/{currentPosition}/{amountToLoad}`](../api/raml/api.raml#L3827) | D | `read_discover / browse` | path `currentPosition`:integer required; path `amountToLoad`:integer required | 200: array<[SearchTvShowViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchTvShowViewModel.raml)> | — |
| 213 | [GET `/api/v2/Search/actor/{actorId}/movie`](../api/raml/api.raml#L3862) | D | `read_discover / credits` | path `actorId`:unspecified required | 200: [ActorCredits](../api/raml/types/Ombi.Api.External.ExternalApis.TheMovieDb.Models.ActorCredits.raml) | — |
| 214 | [GET `/api/v2/Search/actor/{actorId}/tv`](../api/raml/api.raml#L3892) | D | `read_discover / credits` | path `actorId`:unspecified required | 200: [ActorCredits](../api/raml/types/Ombi.Api.External.ExternalApis.TheMovieDb.Models.ActorCredits.raml) | — |
| 215 | [GET `/api/v2/Search/artist/{artistId}`](../api/raml/api.raml#L3922) | D | `read_media / details` | path `artistId`:string required | 200: [ArtistInformation](../api/raml/types/Ombi.Core.Models.Search.V2.Music.ArtistInformation.raml) | — |
| 216 | [GET `/api/v2/Search/artist/request/{requestId}`](../api/raml/api.raml#L3949) | D | `read_media / by_request` | path `requestId`:integer required | 200: [ArtistInformation](../api/raml/types/Ombi.Core.Models.Search.V2.Music.ArtistInformation.raml) | Request-ID namespace requires verification. MCP `media=album` maps to this literal `artist` route segment. |
| 217 | [GET `/api/v2/Search/artist/album/{albumId}`](../api/raml/api.raml#L3976) | D | `read_media / details` | path `albumId`:string required | 200: [ReleaseGroup](../api/raml/types/Ombi.Core.Models.Search.V2.Music.ReleaseGroup.raml) | — |
| 218 | [GET `/api/v2/Search/releasegroupart/{musicBrainzId}`](../api/raml/api.raml#L4003) | D | `read_library / album_art` | path `musicBrainzId`:string required | 200: [AlbumArt](../api/raml/types/Ombi.Core.Models.Search.V2.Music.AlbumArt.raml) | — |
| 219 | [GET `/api/v2/Search/ratings/movie/{name}/{year}`](../api/raml/api.raml#L4030) | D | `read_media / ratings` | path `name`:string required; path `year`:integer required | 200: [MovieRatings](../api/raml/types/Ombi.Api.External.ExternalApis.RottenTomatoes.Models.MovieRatings.raml) | 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}`](../api/raml/api.raml#L4060) | D | `read_media / ratings` | path `name`:string required; path `year`:integer required | 200: [TvRatings](../api/raml/types/Ombi.Api.External.ExternalApis.RottenTomatoes.Models.TvRatings.raml) | 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}`](../api/raml/api.raml#L4090) | D | `read_media / streaming` | path `movieDBId`:integer required | 200: array<[StreamingData](../api/raml/types/Ombi.Core.Models.Search.V2.StreamingData.raml)> | — |
| 222 | [GET `/api/v2/Search/stream/tv/{movieDbId}`](../api/raml/api.raml#L4120) | D | `read_media / streaming` | path `movieDbId`:integer required | 200: array<[StreamingData](../api/raml/types/Ombi.Core.Models.Search.V2.StreamingData.raml)> | — |
| 223 | [GET `/api/v1/Search/movie/{searchTerm}`](../api/raml/api.raml#L4150) | D | `read_search / text` | path `searchTerm`:unspecified required | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | — |
| 224 | [POST `/api/v1/Search/movie/actor`](../api/raml/api.raml#L4173) | D | `read_search / actor` | body [SearchActorModel](../api/raml/types/Ombi.Models.SearchActorModel.raml) | 200: body unspecified | — |
| 225 | [POST `/api/v1/Search/movie`](../api/raml/api.raml#L4202) | D | `read_search / movie_refine` | body [SearchMovieRefineModel](../api/raml/types/Ombi.Models.SearchMovieRefineModel.raml) | 200: body unspecified | — |
| 226 | [GET `/api/v1/Search/movie/info/{theMovieDbId}`](../api/raml/api.raml#L4231) | A | `read_media / details` | path `theMovieDbId`:unspecified required | 200: [SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml) | Legacy details alternative. |
| 227 | [POST `/api/v1/Search/movie/info`](../api/raml/api.raml#L4253) | D | `read_media / movie_localized` | body [SearchMovieExtraInfoRefineModel](../api/raml/types/Ombi.Models.SearchMovieExtraInfoRefineModel.raml) | 200: body unspecified | — |
| 228 | [POST `/api/v1/Search/movie/similar`](../api/raml/api.raml#L4282) | A | `read_discover / similar` | body [SimilarMoviesRefineModel](../api/raml/types/Ombi.Models.SimilarMoviesRefineModel.raml) | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | Preserve language semantics; no automatic fallback. |
| 229 | [GET `/api/v1/Search/movie/{theMovieDbId}/similar`](../api/raml/api.raml#L4309) | A | `read_discover / similar` | path `theMovieDbId`:unspecified required | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | Preserve language semantics; no automatic fallback. |
| 230 | [GET `/api/v1/Search/movie/popular`](../api/raml/api.raml#L4332) | A | `read_discover / browse` | none documented | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | Nonpaged/legacy alternate only. |
| 231 | [GET `/api/v1/Search/movie/nowplaying`](../api/raml/api.raml#L4350) | A | `read_discover / browse` | none documented | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | Nonpaged/legacy alternate only. |
| 232 | [GET `/api/v1/Search/movie/toprated`](../api/raml/api.raml#L4368) | A | `read_discover / browse` | none documented | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | Nonpaged/legacy alternate only. |
| 233 | [GET `/api/v1/Search/movie/upcoming`](../api/raml/api.raml#L4386) | A | `read_discover / browse` | none documented | 200: array<[SearchMovieViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchMovieViewModel.raml)> | Nonpaged/legacy alternate only. |
| 234 | [GET `/api/v1/Search/tv/{searchTerm}`](../api/raml/api.raml#L4404) | D | `read_search / text` | path `searchTerm`:unspecified required | 200: array<[SearchTvShowViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchTvShowViewModel.raml)> | TVMaze-backed; `theMovieDbId` carries the TVDB id (emit `tvdb`), `seriesId` the TVMaze id (emit `tvmaze`). |
| 235 | [GET `/api/v1/Search/tv/info/{tvdbId}`](../api/raml/api.raml#L4427) | D | `read_media / details` | path `tvdbId`:unspecified required | 200: [SearchTvShowViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchTvShowViewModel.raml) | 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`](../api/raml/api.raml#L4449) | A | `read_discover / browse` | none documented | 200: array<[SearchTvShowViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchTvShowViewModel.raml)> | Nonpaged/legacy alternate only. |
| 237 | [GET `/api/v1/Search/tv/anticipated`](../api/raml/api.raml#L4467) | A | `read_discover / browse` | none documented | 200: array<[SearchTvShowViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchTvShowViewModel.raml)> | Nonpaged/legacy alternate only. |
| 238 | [GET `/api/v1/Search/tv/mostwatched`](../api/raml/api.raml#L4485) | A | `read_discover / browse` | none documented | 200: array<[SearchTvShowViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchTvShowViewModel.raml)> | Nonpaged/legacy alternate only. |
| 239 | [GET `/api/v1/Search/tv/trending`](../api/raml/api.raml#L4503) | A | `read_discover / browse` | none documented | 200: array<[SearchTvShowViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchTvShowViewModel.raml)> | Nonpaged/legacy alternate only. |
| 240 | [GET `/api/v1/Search/music/artist/{searchTerm}`](../api/raml/api.raml#L4521) | D | `read_search / text` | path `searchTerm`:string required | 200: array<[SearchArtistViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchArtistViewModel.raml)> | — |
| 241 | [GET `/api/v1/Search/music/album/{searchTerm}`](../api/raml/api.raml#L4543) | D | `read_search / text` | path `searchTerm`:string required | 200: array<[SearchAlbumViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchAlbumViewModel.raml)> | — |
| 242 | [GET `/api/v1/Search/music/album/info/{foreignAlbumId}`](../api/raml/api.raml#L4565) | A | `read_media / details` | path `foreignAlbumId`:string required | 200: [SearchAlbumViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchAlbumViewModel.raml) | Legacy details alternative. |
| 243 | [GET `/api/v1/Search/music/artist/album/{foreignArtistId}`](../api/raml/api.raml#L4586) | D | `read_discover / artist_albums` | path `foreignArtistId`:string required | 200: array<[SearchAlbumViewModel](../api/raml/types/Ombi.Core.Models.Search.SearchAlbumViewModel.raml)> | — |
| 244 | [GET `/api/v1/Settings/ombi`](../api/raml/api.raml#L4608) | D | `read_settings / ombi` | none documented | 200: [OmbiSettings](../api/raml/types/Ombi.Settings.Settings.Models.OmbiSettings.raml) | Allowlisted projection; no raw secrets. |
| 245 | [POST `/api/v1/Settings/ombi`](../api/raml/api.raml#L4608) | P | `write_settings_patch / patch:ombi` | body [OmbiSettings](../api/raml/types/Ombi.Settings.Settings.Models.OmbiSettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 246 | [GET `/api/v1/Settings/baseurl`](../api/raml/api.raml#L4638) | D | `read_settings / base_url` | none documented | 200: string | Allowlisted projection; no raw secrets. |
| 247 | [GET `/api/v1/Settings/about`](../api/raml/api.raml#L4649) | D | `read_server / about` | none documented | 200: [AboutViewModel](../api/raml/types/Ombi.Models.AboutViewModel.raml) | — |
| 248 | [POST `/api/v1/Settings/ombi/resetApi`](../api/raml/api.raml#L4658) | X | `manual administration` | none documented | 200: string | Key rotation would invalidate configured credentials; no tool. |
| 249 | [GET `/api/v1/Settings/plex`](../api/raml/api.raml#L4667) | D | `read_settings / plex` | none documented | 200: [PlexSettings](../api/raml/types/Ombi.Core.Settings.Models.External.PlexSettings.raml) | Allowlisted projection; no raw secrets. |
| 250 | [POST `/api/v1/Settings/plex`](../api/raml/api.raml#L4667) | P | `write_settings_patch / patch:plex` | body [PlexSettings](../api/raml/types/Ombi.Core.Settings.Models.External.PlexSettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 251 | [GET `/api/v1/Settings/clientid`](../api/raml/api.raml#L4697) | D | `read_settings / client_id` | none documented | 200: string | Allowlisted projection; no raw secrets. |
| 252 | [GET `/api/v1/Settings/emby`](../api/raml/api.raml#L4706) | D | `read_settings / emby` | none documented | 200: [EmbySettings](../api/raml/types/Ombi.Core.Settings.Models.External.EmbySettings.raml) | Allowlisted projection; no raw secrets. |
| 253 | [POST `/api/v1/Settings/emby`](../api/raml/api.raml#L4706) | P | `write_settings_patch / patch:emby` | body [EmbySettings](../api/raml/types/Ombi.Core.Settings.Models.External.EmbySettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 254 | [GET `/api/v1/Settings/jellyfin`](../api/raml/api.raml#L4736) | D | `read_settings / jellyfin` | none documented | 200: [JellyfinSettings](../api/raml/types/Ombi.Core.Settings.Models.External.JellyfinSettings.raml) | Allowlisted projection; no raw secrets. |
| 255 | [POST `/api/v1/Settings/jellyfin`](../api/raml/api.raml#L4736) | P | `write_settings_patch / patch:jellyfin` | body [JellyfinSettings](../api/raml/types/Ombi.Core.Settings.Models.External.JellyfinSettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 256 | [GET `/api/v1/Settings/landingpage`](../api/raml/api.raml#L4766) | D | `read_settings / landingpage` | none documented | 200: [LandingPageSettings](../api/raml/types/Ombi.Core.Settings.Models.LandingPageSettings.raml) | Allowlisted projection; no raw secrets. |
| 257 | [POST `/api/v1/Settings/landingpage`](../api/raml/api.raml#L4766) | P | `write_settings_patch / patch:landingpage` | body [LandingPageSettings](../api/raml/types/Ombi.Core.Settings.Models.LandingPageSettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 258 | [GET `/api/v1/Settings/customization`](../api/raml/api.raml#L4796) | D | `read_settings / customization` | none documented | 200: [CustomizationSettings](../api/raml/types/Ombi.Settings.Settings.Models.CustomizationSettings.raml) | Allowlisted projection; no raw secrets. |
| 259 | [POST `/api/v1/Settings/customization`](../api/raml/api.raml#L4796) | P | `write_settings_patch / patch:customization` | body [CustomizationSettings](../api/raml/types/Ombi.Settings.Settings.Models.CustomizationSettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 260 | [GET `/api/v1/Settings/defaultlanguage`](../api/raml/api.raml#L4826) | D | `read_settings / default_language` | none documented | 200: string | Allowlisted projection; no raw secrets. |
| 261 | [GET `/api/v1/Settings/themes`](../api/raml/api.raml#L4837) | D | `read_settings / themes` | none documented | 200: array<[PresetThemeViewModel](../api/raml/types/Ombi.Models.PresetThemeViewModel.raml)> | Allowlisted projection; no raw secrets. |
| 262 | [GET `/api/v1/Settings/sonarr`](../api/raml/api.raml#L4849) | D | `read_settings / sonarr` | none documented | 200: [SonarrSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.SonarrSettings.raml) | Allowlisted projection; no raw secrets. |
| 263 | [POST `/api/v1/Settings/sonarr`](../api/raml/api.raml#L4849) | P | `write_settings_patch / patch:sonarr` | body [SonarrSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.SonarrSettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 264 | [GET `/api/v1/Settings/radarr`](../api/raml/api.raml#L4879) | D | `read_settings / radarr` | none documented | 200: [RadarrCombinedModel](../api/raml/types/Ombi.Settings.Settings.Models.External.RadarrCombinedModel.raml) | Allowlisted projection; no raw secrets. |
| 265 | [POST `/api/v1/Settings/radarr`](../api/raml/api.raml#L4879) | P | `write_settings_patch / patch:radarr` | body [RadarrCombinedModel](../api/raml/types/Ombi.Settings.Settings.Models.External.RadarrCombinedModel.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 266 | [GET `/api/v1/Settings/lidarr`](../api/raml/api.raml#L4909) | D | `read_settings / lidarr` | none documented | 200: [LidarrSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.LidarrSettings.raml) | Allowlisted projection; no raw secrets. |
| 267 | [POST `/api/v1/Settings/lidarr`](../api/raml/api.raml#L4909) | P | `write_settings_patch / patch:lidarr` | body [LidarrSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.LidarrSettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 268 | [GET `/api/v1/Settings/lidarrenabled`](../api/raml/api.raml#L4939) | D | `read_settings / lidarrenabled` | none documented | 200: boolean | Allowlisted projection; no raw secrets. |
| 269 | [POST `/api/v1/Settings/authentication`](../api/raml/api.raml#L4950) | P | `write_settings_patch / patch:authentication` | body [AuthenticationSettings](../api/raml/types/Ombi.Settings.Settings.Models.AuthenticationSettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 270 | [GET `/api/v1/Settings/authentication`](../api/raml/api.raml#L4950) | D | `read_settings / authentication` | none documented | 200: [AuthenticationSettings](../api/raml/types/Ombi.Settings.Settings.Models.AuthenticationSettings.raml) | Allowlisted projection; no raw secrets. |
| 271 | [POST `/api/v1/Settings/Update`](../api/raml/api.raml#L4980) | P | `write_settings_patch / patch:update` | body [UpdateSettings](../api/raml/types/Ombi.Settings.Settings.Models.UpdateSettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 272 | [GET `/api/v1/Settings/Update`](../api/raml/api.raml#L4980) | D | `read_settings / update` | none documented | 200: [UpdateSettings](../api/raml/types/Ombi.Settings.Settings.Models.UpdateSettings.raml) | Allowlisted projection; no raw secrets. |
| 273 | [GET `/api/v1/Settings/UserManagement`](../api/raml/api.raml#L5010) | D | `read_settings / user_management` | none documented | 200: [UserManagementSettings](../api/raml/types/Ombi.Settings.Settings.Models.UserManagementSettings.raml) | Allowlisted projection; no raw secrets. |
| 274 | [POST `/api/v1/Settings/UserManagement`](../api/raml/api.raml#L5010) | P | `write_settings_patch / patch:user_management` | body [UserManagementSettings](../api/raml/types/Ombi.Settings.Settings.Models.UserManagementSettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 275 | [GET `/api/v1/Settings/CouchPotato`](../api/raml/api.raml#L5040) | D | `read_settings / couchpotato` | none documented | 200: [CouchPotatoSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.CouchPotatoSettings.raml) | Allowlisted projection; no raw secrets. |
| 276 | [POST `/api/v1/Settings/CouchPotato`](../api/raml/api.raml#L5040) | P | `write_settings_patch / patch:couchpotato` | body [CouchPotatoSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.CouchPotatoSettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 277 | [GET `/api/v1/Settings/DogNzb`](../api/raml/api.raml#L5070) | D | `read_settings / dognzb` | none documented | 200: [DogNzbSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.DogNzbSettings.raml) | Allowlisted projection; no raw secrets. |
| 278 | [POST `/api/v1/Settings/DogNzb`](../api/raml/api.raml#L5070) | P | `write_settings_patch / patch:dognzb` | body [DogNzbSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.DogNzbSettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 279 | [POST `/api/v1/Settings/SickRage`](../api/raml/api.raml#L5100) | P | `write_settings_patch / patch:sickrage` | body [SickRageSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.SickRageSettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 280 | [GET `/api/v1/Settings/SickRage`](../api/raml/api.raml#L5100) | D | `read_settings / sickrage` | none documented | 200: [SickRageSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.SickRageSettings.raml) | Allowlisted projection; no raw secrets. |
| 281 | [GET `/api/v1/Settings/jobs`](../api/raml/api.raml#L5130) | D | `read_settings / jobs` | none documented | 200: [JobSettings](../api/raml/types/Ombi.Settings.Settings.Models.JobSettings.raml) | Allowlisted projection; no raw secrets. |
| 282 | [POST `/api/v1/Settings/jobs`](../api/raml/api.raml#L5130) | P | `write_settings_patch / patch:jobs` | body [JobSettings](../api/raml/types/Ombi.Settings.Settings.Models.JobSettings.raml) | 200: [JobSettingsViewModel](../api/raml/types/Ombi.Models.JobSettingsViewModel.raml) | Only typed non-secret patch; preserve omitted/private fields. |
| 283 | [POST `/api/v1/Settings/testcron`](../api/raml/api.raml#L5160) | D | `read_server / cron_validate` | body [CronViewModelBody](../api/raml/types/Ombi.Models.CronViewModelBody.raml) | 200: [CronTestModel](../api/raml/types/Ombi.Models.CronTestModel.raml) | Administrator-gated read calculation; Quartz uses 6-7 fields and `?` for the unused day field. |
| 284 | [POST `/api/v1/Settings/Issues`](../api/raml/api.raml#L5178) | P | `write_settings_patch / patch:issues` | body [IssueSettings](../api/raml/types/Ombi.Settings.Settings.Models.IssueSettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 285 | [GET `/api/v1/Settings/Issues`](../api/raml/api.raml#L5178) | D | `read_settings / issues` | none documented | 200: [IssueSettings](../api/raml/types/Ombi.Settings.Settings.Models.IssueSettings.raml) | Allowlisted projection; no raw secrets. |
| 286 | [GET `/api/v1/Settings/issuesenabled`](../api/raml/api.raml#L5208) | D | `read_settings / issuesenabled` | none documented | 200: boolean | Allowlisted projection; no raw secrets. |
| 287 | [POST `/api/v1/Settings/vote`](../api/raml/api.raml#L5217) | P | `write_settings_patch / patch:vote` | body [VoteSettings](../api/raml/types/Ombi.Settings.Settings.Models.VoteSettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 288 | [GET `/api/v1/Settings/vote`](../api/raml/api.raml#L5217) | D | `read_settings / vote` | none documented | 200: [VoteSettings](../api/raml/types/Ombi.Settings.Settings.Models.VoteSettings.raml) | Allowlisted projection; no raw secrets. |
| 289 | [GET `/api/v1/Settings/voteenabled`](../api/raml/api.raml#L5247) | D | `read_settings / voteenabled` | none documented | 200: boolean | Allowlisted projection; no raw secrets. |
| 290 | [POST `/api/v1/Settings/themoviedb`](../api/raml/api.raml#L5256) | P | `write_settings_patch / patch:themoviedb` | body [TheMovieDbSettings](../api/raml/types/Ombi.Core.Settings.Models.External.TheMovieDbSettings.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 291 | [GET `/api/v1/Settings/themoviedb`](../api/raml/api.raml#L5256) | D | `read_settings / themoviedb` | none documented | 200: [TheMovieDbSettings](../api/raml/types/Ombi.Core.Settings.Models.External.TheMovieDbSettings.raml) | Allowlisted projection; no raw secrets. |
| 292 | [POST `/api/v1/Settings/notifications/email`](../api/raml/api.raml#L5286) | P | `write_settings_patch / patch:notifications.email` | body [EmailNotificationsViewModel](../api/raml/types/Ombi.Core.Models.UI.EmailNotificationsViewModel.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 293 | [GET `/api/v1/Settings/notifications/email`](../api/raml/api.raml#L5286) | D | `read_settings / notifications.email` | none documented | 200: [EmailNotificationsViewModel](../api/raml/types/Ombi.Core.Models.UI.EmailNotificationsViewModel.raml) | Allowlisted projection; no raw secrets. |
| 294 | [GET `/api/v1/Settings/notifications/email/enabled`](../api/raml/api.raml#L5316) | D | `read_settings / notifications.email.enabled` | none documented | 200: boolean | Allowlisted projection; no raw secrets. |
| 295 | [POST `/api/v1/Settings/notifications/discord`](../api/raml/api.raml#L5327) | P | `write_settings_patch / patch:notifications.discord` | body [DiscordNotificationsViewModel](../api/raml/types/Ombi.Core.Models.UI.DiscordNotificationsViewModel.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 296 | [GET `/api/v1/Settings/notifications/discord`](../api/raml/api.raml#L5327) | D | `read_settings / notifications.discord` | none documented | 200: [DiscordNotificationsViewModel](../api/raml/types/Ombi.Core.Models.UI.DiscordNotificationsViewModel.raml) | Allowlisted projection; no raw secrets. |
| 297 | [POST `/api/v1/Settings/notifications/telegram`](../api/raml/api.raml#L5357) | P | `write_settings_patch / patch:notifications.telegram` | body [TelegramNotificationsViewModel](../api/raml/types/Ombi.Core.Models.UI.TelegramNotificationsViewModel.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 298 | [GET `/api/v1/Settings/notifications/telegram`](../api/raml/api.raml#L5357) | D | `read_settings / notifications.telegram` | none documented | 200: [TelegramNotificationsViewModel](../api/raml/types/Ombi.Core.Models.UI.TelegramNotificationsViewModel.raml) | Allowlisted projection; no raw secrets. |
| 299 | [POST `/api/v1/Settings/notifications/pushbullet`](../api/raml/api.raml#L5387) | P | `write_settings_patch / patch:notifications.pushbullet` | body [PushbulletNotificationViewModel](../api/raml/types/Ombi.Core.Models.UI.PushbulletNotificationViewModel.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 300 | [GET `/api/v1/Settings/notifications/pushbullet`](../api/raml/api.raml#L5387) | D | `read_settings / notifications.pushbullet` | none documented | 200: [PushbulletNotificationViewModel](../api/raml/types/Ombi.Core.Models.UI.PushbulletNotificationViewModel.raml) | Allowlisted projection; no raw secrets. |
| 301 | [POST `/api/v1/Settings/notifications/pushover`](../api/raml/api.raml#L5417) | P | `write_settings_patch / patch:notifications.pushover` | body [PushoverNotificationViewModel](../api/raml/types/Ombi.Core.Models.UI.PushoverNotificationViewModel.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 302 | [GET `/api/v1/Settings/notifications/pushover`](../api/raml/api.raml#L5417) | D | `read_settings / notifications.pushover` | none documented | 200: [PushoverNotificationViewModel](../api/raml/types/Ombi.Core.Models.UI.PushoverNotificationViewModel.raml) | Allowlisted projection; no raw secrets. |
| 303 | [POST `/api/v1/Settings/notifications/slack`](../api/raml/api.raml#L5447) | P | `write_settings_patch / patch:notifications.slack` | body [SlackNotificationsViewModel](../api/raml/types/Ombi.Core.Models.UI.SlackNotificationsViewModel.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 304 | [GET `/api/v1/Settings/notifications/slack`](../api/raml/api.raml#L5447) | D | `read_settings / notifications.slack` | none documented | 200: [SlackNotificationsViewModel](../api/raml/types/Ombi.Core.Models.UI.SlackNotificationsViewModel.raml) | Allowlisted projection; no raw secrets. |
| 305 | [POST `/api/v1/Settings/notifications/mattermost`](../api/raml/api.raml#L5477) | P | `write_settings_patch / patch:notifications.mattermost` | body [MattermostNotificationsViewModel](../api/raml/types/Ombi.Core.Models.UI.MattermostNotificationsViewModel.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 306 | [GET `/api/v1/Settings/notifications/mattermost`](../api/raml/api.raml#L5477) | D | `read_settings / notifications.mattermost` | none documented | 200: [MattermostNotificationsViewModel](../api/raml/types/Ombi.Core.Models.UI.MattermostNotificationsViewModel.raml) | Allowlisted projection; no raw secrets. |
| 307 | [GET `/api/v1/Settings/notifications/twilio`](../api/raml/api.raml#L5507) | D | `read_settings / notifications.twilio` | none documented | 200: [TwilioSettingsViewModel](../api/raml/types/Ombi.Core.Models.UI.TwilioSettingsViewModel.raml) | Allowlisted projection; no raw secrets. |
| 308 | [POST `/api/v1/Settings/notifications/twilio`](../api/raml/api.raml#L5507) | P | `write_settings_patch / patch:notifications.twilio` | body [TwilioSettingsViewModel](../api/raml/types/Ombi.Core.Models.UI.TwilioSettingsViewModel.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 309 | [POST `/api/v1/Settings/notifications/mobile`](../api/raml/api.raml#L5537) | P | `write_settings_patch / patch:notifications.mobile` | body [MobileNotificationsViewModel](../api/raml/types/Ombi.Core.Models.UI.MobileNotificationsViewModel.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 310 | [GET `/api/v1/Settings/notifications/mobile`](../api/raml/api.raml#L5537) | D | `read_settings / notifications.mobile` | none documented | 200: [MobileNotificationsViewModel](../api/raml/types/Ombi.Core.Models.UI.MobileNotificationsViewModel.raml) | Allowlisted projection; no raw secrets. |
| 311 | [POST `/api/v1/Settings/notifications/gotify`](../api/raml/api.raml#L5567) | P | `write_settings_patch / patch:notifications.gotify` | body [GotifyNotificationViewModel](../api/raml/types/Ombi.Core.Models.UI.GotifyNotificationViewModel.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 312 | [GET `/api/v1/Settings/notifications/gotify`](../api/raml/api.raml#L5567) | D | `read_settings / notifications.gotify` | none documented | 200: [GotifyNotificationViewModel](../api/raml/types/Ombi.Core.Models.UI.GotifyNotificationViewModel.raml) | Allowlisted projection; no raw secrets. |
| 313 | [POST `/api/v1/Settings/notifications/ntfy`](../api/raml/api.raml#L5597) | P | `write_settings_patch / patch:notifications.ntfy` | body [NtfyNotificationViewModel](../api/raml/types/Ombi.Core.Models.UI.NtfyNotificationViewModel.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 314 | [GET `/api/v1/Settings/notifications/ntfy`](../api/raml/api.raml#L5597) | D | `read_settings / notifications.ntfy` | none documented | 200: [NtfyNotificationViewModel](../api/raml/types/Ombi.Core.Models.UI.NtfyNotificationViewModel.raml) | Allowlisted projection; no raw secrets. |
| 315 | [POST `/api/v1/Settings/notifications/webhook`](../api/raml/api.raml#L5627) | P | `write_settings_patch / patch:notifications.webhook` | body [WebhookNotificationViewModel](../api/raml/types/Ombi.Core.Models.UI.WebhookNotificationViewModel.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 316 | [GET `/api/v1/Settings/notifications/webhook`](../api/raml/api.raml#L5627) | D | `read_settings / notifications.webhook` | none documented | 200: [WebhookNotificationViewModel](../api/raml/types/Ombi.Core.Models.UI.WebhookNotificationViewModel.raml) | Allowlisted projection; no raw secrets. |
| 317 | [POST `/api/v1/Settings/notifications/newsletter`](../api/raml/api.raml#L5657) | P | `write_settings_patch / patch:notifications.newsletter` | body [NewsletterNotificationViewModel](../api/raml/types/Ombi.Core.Models.UI.NewsletterNotificationViewModel.raml) | 200: boolean | Only typed non-secret patch; preserve omitted/private fields. |
| 318 | [GET `/api/v1/Settings/notifications/newsletter`](../api/raml/api.raml#L5657) | D | `read_settings / notifications.newsletter` | none documented | 200: [NewsletterNotificationViewModel](../api/raml/types/Ombi.Core.Models.UI.NewsletterNotificationViewModel.raml) | Allowlisted projection; no raw secrets. |
| 319 | [POST `/api/v1/Sonarr/Profiles`](../api/raml/api.raml#L5687) | A | `read_integration / options:sonarr/profiles` | body [SonarrSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.SonarrSettings.raml) | 200: array<[SonarrProfile](../api/raml/types/Ombi.Api.External.ExternalApis.Sonarr.Models.SonarrProfile.raml)> | Private saved settings only; no connection overrides. |
| 320 | [GET `/api/v1/Sonarr/Profiles`](../api/raml/api.raml#L5687) | D | `read_integration / options:sonarr/profiles` | none documented | 200: array<[SonarrProfile](../api/raml/types/Ombi.Api.External.ExternalApis.Sonarr.Models.SonarrProfile.raml)> | — |
| 321 | [POST `/api/v1/Sonarr/RootFolders`](../api/raml/api.raml#L5719) | A | `read_integration / options:sonarr/root_folders` | body [SonarrSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.SonarrSettings.raml) | 200: array<[SonarrRootFolder](../api/raml/types/Ombi.Api.External.ExternalApis.Sonarr.Models.SonarrRootFolder.raml)> | Private saved settings only; no connection overrides. |
| 322 | [GET `/api/v1/Sonarr/RootFolders`](../api/raml/api.raml#L5719) | D | `read_integration / options:sonarr/root_folders` | none documented | 200: array<[SonarrRootFolder](../api/raml/types/Ombi.Api.External.ExternalApis.Sonarr.Models.SonarrRootFolder.raml)> | — |
| 323 | [GET `/api/v1/Sonarr/v3/LanguageProfiles`](../api/raml/api.raml#L5751) | D | `read_integration / options:sonarr/language_profiles` | none documented | 200: array<[LanguageProfiles](../api/raml/types/Ombi.Api.External.ExternalApis.Sonarr.Models.V3.LanguageProfiles.raml)> | — |
| 324 | [POST `/api/v1/Sonarr/v3/LanguageProfiles`](../api/raml/api.raml#L5751) | A | `read_integration / options:sonarr/language_profiles` | body [SonarrSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.SonarrSettings.raml) | 200: array<[LanguageProfiles](../api/raml/types/Ombi.Api.External.ExternalApis.Sonarr.Models.V3.LanguageProfiles.raml)> | Private saved settings only; no connection overrides. |
| 325 | [POST `/api/v1/Sonarr/tags`](../api/raml/api.raml#L5783) | A | `read_integration / options:sonarr/tags` | body [SonarrSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.SonarrSettings.raml) | 200: array<[Tag](../api/raml/types/Ombi.Api.External.ExternalApis.Sonarr.Models.Tag.raml)> | Private saved settings only; no connection overrides. |
| 326 | [GET `/api/v1/Sonarr/tags`](../api/raml/api.raml#L5783) | D | `read_integration / options:sonarr/tags` | none documented | 200: array<[Tag](../api/raml/types/Ombi.Api.External.ExternalApis.Sonarr.Models.Tag.raml)> | — |
| 327 | [GET `/api/v1/Sonarr/enabled`](../api/raml/api.raml#L5815) | D | `read_integration / options:sonarr/enabled` | none documented | 200: boolean | — |
| 328 | [GET `/api/v1/Sonarr/version`](../api/raml/api.raml#L5824) | D | `read_integration / options:sonarr/version` | none documented | 200: string | — |
| 329 | [GET `/api/v1/Stats`](../api/raml/api.raml#L5833) | D | `read_server / stats` | query `from`:string required; query `to`:string required | 200: [UserStatsSummary](../api/raml/types/Ombi.Core.Engine.UserStatsSummary.raml) | from/to are required at the MCP layer; bare calls cause an upstream NRE. |
| 330 | [GET `/api/v1/Status`](../api/raml/api.raml#L5849) | D | `read_server / status` | none documented | 200: [HttpStatusCode](../api/raml/types/System.Net.HttpStatusCode.raml) | — |
| 331 | [GET `/api/v1/Status/info`](../api/raml/api.raml#L5860) | D | `read_server / status_info` | none documented | 200: string | — |
| 332 | [GET `/api/v2/System/news`](../api/raml/api.raml#L5871) | X | action removed | none documented | 200: Markdig HTML text | Not structured data; action removed (#13). |
| 333 | [GET `/api/v2/System/logs`](../api/raml/api.raml#L5877) | D | `read_logs / list` | none documented | 200: string array of file names | Verified on 4.53.10. |
| 334 | [GET `/api/v2/System/logs/{logFileName}`](../api/raml/api.raml#L5883) | 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}`](../api/raml/api.raml#L5893) | 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`](../api/raml/api.raml#L5903) | P | `write_integration_test / discord` | body [DiscordNotificationSettings](../api/raml/types/Ombi.Settings.Settings.Models.Notifications.DiscordNotificationSettings.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 337 | [POST `/api/v1/Tester/pushbullet`](../api/raml/api.raml#L5923) | P | `write_integration_test / pushbullet` | body [PushbulletSettings](../api/raml/types/Ombi.Settings.Settings.Models.Notifications.PushbulletSettings.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 338 | [POST `/api/v1/Tester/pushover`](../api/raml/api.raml#L5943) | P | `write_integration_test / pushover` | body [PushoverSettings](../api/raml/types/Ombi.Settings.Settings.Models.Notifications.PushoverSettings.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 339 | [POST `/api/v1/Tester/gotify`](../api/raml/api.raml#L5963) | P | `write_integration_test / gotify` | body [GotifySettings](../api/raml/types/Ombi.Settings.Settings.Models.Notifications.GotifySettings.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 340 | [POST `/api/v1/Tester/ntfy`](../api/raml/api.raml#L5983) | P | `write_integration_test / ntfy` | body [NtfySettings](../api/raml/types/Ombi.Settings.Settings.Models.Notifications.NtfySettings.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 341 | [POST `/api/v1/Tester/webhook`](../api/raml/api.raml#L6003) | P | `write_integration_test / webhook` | body [WebhookSettings](../api/raml/types/Ombi.Settings.Settings.Models.Notifications.WebhookSettings.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 342 | [POST `/api/v1/Tester/mattermost`](../api/raml/api.raml#L6023) | P | `write_integration_test / mattermost` | body [MattermostNotificationSettings](../api/raml/types/Ombi.Settings.Settings.Models.Notifications.MattermostNotificationSettings.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 343 | [POST `/api/v1/Tester/slack`](../api/raml/api.raml#L6043) | P | `write_integration_test / slack` | body [SlackNotificationSettings](../api/raml/types/Ombi.Settings.Settings.Models.Notifications.SlackNotificationSettings.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 344 | [POST `/api/v1/Tester/email`](../api/raml/api.raml#L6063) | P | `write_integration_test / email` | body [EmailNotificationSettings](../api/raml/types/Ombi.Settings.Settings.Models.Notifications.EmailNotificationSettings.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 345 | [POST `/api/v1/Tester/plex`](../api/raml/api.raml#L6083) | P | `write_integration_test / plex` | body [PlexServers](../api/raml/types/Ombi.Core.Settings.Models.External.PlexServers.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 346 | [POST `/api/v1/Tester/emby`](../api/raml/api.raml#L6103) | P | `write_integration_test / emby` | body [EmbyServers](../api/raml/types/Ombi.Core.Settings.Models.External.EmbyServers.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 347 | [POST `/api/v1/Tester/jellyfin`](../api/raml/api.raml#L6123) | P | `write_integration_test / jellyfin` | body [JellyfinServers](../api/raml/types/Ombi.Core.Settings.Models.External.JellyfinServers.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 348 | [POST `/api/v1/Tester/radarr`](../api/raml/api.raml#L6143) | P | `write_integration_test / radarr` | body [RadarrSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.RadarrSettings.raml) | 200: [TesterResultModel](../api/raml/types/Ombi.Core.Models.TesterResultModel.raml) | Saved authorized profile only; exact tester body differs by service. |
| 349 | [POST `/api/v1/Tester/sonarr`](../api/raml/api.raml#L6163) | P | `write_integration_test / sonarr` | body [SonarrSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.SonarrSettings.raml) | 200: [TesterResultModel](../api/raml/types/Ombi.Core.Models.TesterResultModel.raml) | Saved authorized profile only; exact tester body differs by service. |
| 350 | [POST `/api/v1/Tester/couchpotato`](../api/raml/api.raml#L6183) | P | `write_integration_test / couchpotato` | body [CouchPotatoSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.CouchPotatoSettings.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 351 | [POST `/api/v1/Tester/telegram`](../api/raml/api.raml#L6203) | P | `write_integration_test / telegram` | body [TelegramSettings](../api/raml/types/Ombi.Settings.Settings.Models.Notifications.TelegramSettings.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 352 | [POST `/api/v1/Tester/sickrage`](../api/raml/api.raml#L6223) | P | `write_integration_test / sickrage` | body [SickRageSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.SickRageSettings.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 353 | [POST `/api/v1/Tester/newsletter`](../api/raml/api.raml#L6243) | P | `write_integration_test / newsletter` | body [NewsletterNotificationViewModel](../api/raml/types/Ombi.Core.Models.UI.NewsletterNotificationViewModel.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 354 | [POST `/api/v1/Tester/mobile`](../api/raml/api.raml#L6261) | P | `write_integration_test / mobile` | body [MobileNotificationTestViewModel](../api/raml/types/Ombi.Models.MobileNotificationTestViewModel.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 355 | [POST `/api/v1/Tester/lidarr`](../api/raml/api.raml#L6279) | P | `write_integration_test / lidarr` | body [LidarrSettings](../api/raml/types/Ombi.Settings.Settings.Models.External.LidarrSettings.raml) | 200: [TesterResultModel](../api/raml/types/Ombi.Core.Models.TesterResultModel.raml) | Saved authorized profile only; exact tester body differs by service. |
| 356 | [POST `/api/v1/Tester/whatsapp`](../api/raml/api.raml#L6297) | P | `write_integration_test / whatsapp` | body [WhatsAppSettingsViewModel](../api/raml/types/Ombi.Core.Models.UI.WhatsAppSettingsViewModel.raml) | 200: boolean | Saved authorized profile only; exact tester body differs by service. |
| 357 | [GET `/api/v1/TheMovieDb/Keywords`](../api/raml/api.raml#L6315) | D | `read_reference / keywords` | query `searchTerm`:unspecified optional | 200: array<[TheMovidDbKeyValue](../api/raml/types/Ombi.Api.External.ExternalApis.TheMovieDb.Models.TheMovidDbKeyValue.raml)> | — |
| 358 | [GET `/api/v1/TheMovieDb/Keywords/{keywordId}`](../api/raml/api.raml#L6332) | D | `read_reference / keyword` | path `keywordId`:unspecified required | 200: body unspecified | — |
| 359 | [GET `/api/v1/TheMovieDb/WatchProviders/movie`](../api/raml/api.raml#L6345) | D | `read_reference / watch_providers` | query `searchTerm`:unspecified optional | 200: array<[WatchProvidersResults](../api/raml/types/Ombi.Api.External.ExternalApis.TheMovieDb.Models.WatchProvidersResults.raml)> | — |
| 360 | [GET `/api/v1/TheMovieDb/WatchProviders/tv`](../api/raml/api.raml#L6362) | D | `read_reference / watch_providers` | query `searchTerm`:unspecified optional | 200: array<[WatchProvidersResults](../api/raml/types/Ombi.Api.External.ExternalApis.TheMovieDb.Models.WatchProvidersResults.raml)> | — |
| 361 | [POST `/api/v1/Token`](../api/raml/api.raml#L6379) | I | `upstream authentication adapter` | body [UserAuthModel](../api/raml/types/Ombi.Models.UserAuthModel.raml) | 200: [Token](../api/raml/types/Ombi.Controllers.V1.Token.raml) | 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`](../api/raml/api.raml#L6405) | I | `upstream authentication adapter` | body [PlexTokenAuthentication](../api/raml/types/Ombi.Models.External.PlexTokenAuthentication.raml) | 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}`](../api/raml/api.raml#L6431) | 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`](../api/raml/api.raml#L6444) | I | `upstream authentication adapter` | body [TokenController_TokenRefresh](../api/raml/types/Ombi.Controllers.V1.TokenController_TokenRefresh.raml) | 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`](../api/raml/api.raml#L6464) | I | `upstream authentication adapter` | body [UserAuthModel](../api/raml/types/Ombi.Models.UserAuthModel.raml) | 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`](../api/raml/api.raml#L6482) | 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`](../api/raml/api.raml#L6494) | D | `read_server / update_info` | none documented | 200: [UpdateModel](../api/raml/types/Ombi.Core.Processor.UpdateModel.raml) | — |
| 368 | [GET `/api/v1/Vote`](../api/raml/api.raml#L6503) | D | `read_votes / list` | none documented | 200: array<[VoteViewModel](../api/raml/types/Ombi.Core.Models.UI.VoteViewModel.raml)> | 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}`](../api/raml/api.raml#L6515) | D | `write_vote` | path `requestId`:integer required | 200: [VoteEngineResult](../api/raml/types/Ombi.Core.Models.VoteEngineResult.raml) | — |
| 370 | [POST `/api/v1/Vote/up/tv/{requestId}`](../api/raml/api.raml#L6530) | D | `write_vote` | path `requestId`:integer required | 200: [VoteEngineResult](../api/raml/types/Ombi.Core.Models.VoteEngineResult.raml) | — |
| 371 | [POST `/api/v1/Vote/up/album/{requestId}`](../api/raml/api.raml#L6545) | D | `write_vote` | path `requestId`:integer required | 200: [VoteEngineResult](../api/raml/types/Ombi.Core.Models.VoteEngineResult.raml) | — |
| 372 | [POST `/api/v1/Vote/down/movie/{requestId}`](../api/raml/api.raml#L6560) | D | `write_vote` | path `requestId`:integer required | 200: [VoteEngineResult](../api/raml/types/Ombi.Core.Models.VoteEngineResult.raml) | — |
| 373 | [POST `/api/v1/Vote/down/tv/{requestId}`](../api/raml/api.raml#L6575) | D | `write_vote` | path `requestId`:integer required | 200: [VoteEngineResult](../api/raml/types/Ombi.Core.Models.VoteEngineResult.raml) | — |
| 374 | [POST `/api/v1/Vote/down/album/{requestId}`](../api/raml/api.raml#L6590) | D | `write_vote` | path `requestId`:integer required | 200: [VoteEngineResult](../api/raml/types/Ombi.Core.Models.VoteEngineResult.raml) | — |
| 375 | [GET `/api/v1/Vote/movie/{requestId}`](../api/raml/api.raml#L6605) | D | `read_votes / get` | path `requestId`:integer required | 200: array<[Votes](../api/raml/types/Ombi.Store.Entities.Votes.raml)> | 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}`](../api/raml/api.raml#L6621) | D | `read_votes / get` | path `requestId`:integer required | 200: array<[Votes](../api/raml/types/Ombi.Store.Entities.Votes.raml)> | — |
| 377 | [GET `/api/v1/Vote/tv/{requestId}`](../api/raml/api.raml#L6637) | D | `read_votes / get` | path `requestId`:integer required | 200: array<[Votes](../api/raml/types/Ombi.Store.Entities.Votes.raml)> | — |