# phlix-server OpenAPI description (S65). # # ⚠ THIS FILE IS HAND-MAINTAINED AND MACHINE-CHECKED. # # `paths` must be an EXACT bijection with the composed route registry the # server actually serves — the routes `Application` registers PLUS the routes # the container-composed `WebPortalRouter` registers, with `Application` winning # any method+path both routers expose (HttpHandler dispatches `Application` first # and only falls through to `WebPortalRouter` on its 404). That is enforced by # tests/Unit/Server/Contracts/OpenapiSpecCurrencyTest.php, which drives the REAL # production container, recomposes both routers, and fails on any tuple present in # one artefact and not the other, or on any middleware-chain mismatch. Adding, # moving or re-gating a route therefore requires editing this file in the same # commit. This file is never regenerated in CI — a self-adjusting spec cannot go # red, which is exactly the S204 defect this guard exists to prevent. # # Machine-checked extension: # x-phlix-middleware the route-level middleware chain, in order, by class # short name. `[]` means no route-level middleware is # registered — NOT proof a handler is ungated (a controller # may gate as its first statement; see the S272 note in # ApplicationRouterWirePathGuardTest). # # info.version is intentionally pinned to Phlix\Common\Version::STRING by # OpenapiSpecCurrencyTest — a release bump that leaves the contract version stale # turns the suite red rather than drifting silently (the whole point of this file). # # SPEC_TOKEN: CS65OPENAPISPECX9G openapi: 3.1.0 info: title: "Phlix Media Server API" version: "1.2.3" summary: "REST surface of the Phlix media server" description: |- The HTTP API a Phlix server exposes: library and media browsing, playback sessions and progress, authentication (password, WebAuthn, OAuth providers, account linking), profiles and parental controls, casting (Chromecast, AirPlay, Roku, DLNA), Live TV, SyncPlay, transcoding/HLS/DASH, music/books/photos, plugins, webhooks, backup, the OPDS catalog, and the full `/api/v1/admin/*` control plane. license: name: "MIT" identifier: "MIT" contact: name: "Phlix" servers: - url: "http://localhost:8096" description: |- The plain-HTTP address the Workerman HTTP worker `start.php` binds directly (the only served entry). The daemon itself terminates no TLS; this entry is the local/unproxied form. - url: "https://{host}" description: |- Production form of the identical surface: reached over HTTPS through the deployment's TLS-terminating reverse proxy. Always prefer this scheme for real traffic — the JWT bearer credential below is only safe over TLS. variables: host: default: "phlix.example.com" description: "The deployment's HTTPS hostname." tags: - name: "Administration" description: "Operator control-plane routes under /api/v1/admin/* (settings, users, plugins, maintenance, backups, webhooks)." - name: "Authentication" description: "Sign-in, token refresh, logout, and WebAuthn / OAuth provider flows." - name: "Casting" description: "Chromecast, AirPlay, Roku and DLNA device discovery and control." - name: "Collections" description: "User playlists and custom collections." - name: "General" description: "Cross-cutting routes that fit no single domain (search, health, misc utilities)." - name: "Integrations" description: "Third-party metadata and service integrations (Trakt and similar)." - name: "Libraries" description: "Media library CRUD and scanning." - name: "Live TV" description: "Live TV tuners, the channel guide and recording." - name: "Media" description: "Media item browsing, metadata, posters and playback info." - name: "Music & Books" description: "Music, audiobook and e-book library endpoints." - name: "OPDS Catalog" description: "OPDS catalog feeds for e-readers." - name: "Photos" description: "Photo library and album endpoints." - name: "Profiles" description: "User profiles and parental-control settings." - name: "Sessions" description: "Device sessions and playback / continue-watching state." - name: "SyncPlay" description: "Watch-together SyncPlay group and time-sync endpoints." - name: "System" description: "Server-level system and status endpoints." - name: "Telemetry" description: "Consent-gated client telemetry (S518/AD-27) — opt-in device heartbeats and the admin fleet census." - name: "Theming" description: "Appearance and theme endpoints." - name: "Transcoding" description: "HLS/DASH transcode job control and ABR ladder endpoints." - name: "Users" description: "Account and profile-scoped user data (favorites, ratings, watch history)." paths: "/.well-known/jwks.json": get: operationId: "get_well_known_jwks_json" tags: ["System"] summary: "Jwks.json" description: "Jwks.json (get /.well-known/jwks.json)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "429": $ref: "#/components/responses/TooManyRequests" "/admin/health/jobs": get: operationId: "get_admin_health_jobs" tags: ["Administration"] summary: "Jobs" description: "Jobs (get /admin/health/jobs)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1": get: operationId: "get_api_v1" tags: ["General"] summary: "V1" description: "V1 (get /api/v1)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/auth-providers": get: operationId: "get_api_v1_admin_auth_providers" tags: ["Administration"] summary: "List providers" description: "List providers (get /api/v1/admin/auth-providers)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/auth-providers/github/config": get: operationId: "get_api_v1_admin_auth_providers_github_config" tags: ["Administration"] summary: "Get settings" description: "Get settings (get /api/v1/admin/auth-providers/github/config)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_admin_auth_providers_github_config" tags: ["Administration"] summary: "Save settings" description: "Save settings (post /api/v1/admin/auth-providers/github/config)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/auth-providers/github/schema": get: operationId: "get_api_v1_admin_auth_providers_github_schema" tags: ["Administration"] summary: "Get schema" description: "Get schema (get /api/v1/admin/auth-providers/github/schema)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/auth-providers/ldap/config": get: operationId: "get_api_v1_admin_auth_providers_ldap_config" tags: ["Administration"] summary: "Get settings" description: "Get settings (get /api/v1/admin/auth-providers/ldap/config)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_admin_auth_providers_ldap_config" tags: ["Administration"] summary: "Save settings" description: "Save settings (post /api/v1/admin/auth-providers/ldap/config)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/auth-providers/ldap/schema": get: operationId: "get_api_v1_admin_auth_providers_ldap_schema" tags: ["Administration"] summary: "Get schema" description: "Get schema (get /api/v1/admin/auth-providers/ldap/schema)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/auth-providers/ldap/test": post: operationId: "post_api_v1_admin_auth_providers_ldap_test" tags: ["Administration"] summary: "Test connection" description: "Test connection (post /api/v1/admin/auth-providers/ldap/test)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/auth-providers/oidc/config": get: operationId: "get_api_v1_admin_auth_providers_oidc_config" tags: ["Administration"] summary: "Get settings" description: "Get settings (get /api/v1/admin/auth-providers/oidc/config)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_admin_auth_providers_oidc_config" tags: ["Administration"] summary: "Save settings" description: "Save settings (post /api/v1/admin/auth-providers/oidc/config)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/auth-providers/oidc/schema": get: operationId: "get_api_v1_admin_auth_providers_oidc_schema" tags: ["Administration"] summary: "Get schema" description: "Get schema (get /api/v1/admin/auth-providers/oidc/schema)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/auth-providers/{name}/config-schema": get: operationId: "get_api_v1_admin_auth_providers_name_config_schema" tags: ["Administration"] summary: "Get config schema" description: "Get config schema (get /api/v1/admin/auth-providers/{name}/config-schema)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "name" in: path required: true description: "Plugin name." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/auth-providers/{name}/disable": post: operationId: "post_api_v1_admin_auth_providers_name_disable" tags: ["Administration"] summary: "Disable provider" description: "Disable provider (post /api/v1/admin/auth-providers/{name}/disable)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "name" in: path required: true description: "Plugin name." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/auth-providers/{name}/enable": post: operationId: "post_api_v1_admin_auth_providers_name_enable" tags: ["Administration"] summary: "Enable provider" description: "Enable provider (post /api/v1/admin/auth-providers/{name}/enable)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "name" in: path required: true description: "Plugin name." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/backup/create": post: operationId: "post_api_v1_admin_backup_create" tags: ["Administration"] summary: "Create" description: "Create (post /api/v1/admin/backup/create)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/backup/list": get: operationId: "get_api_v1_admin_backup_list" tags: ["Administration"] summary: "List" description: "List (get /api/v1/admin/backup/list)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/backup/schedule": get: operationId: "get_api_v1_admin_backup_schedule" tags: ["Administration"] summary: "Get schedule" description: "Get schedule (get /api/v1/admin/backup/schedule)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_admin_backup_schedule" tags: ["Administration"] summary: "Update schedule" description: "Update schedule (put /api/v1/admin/backup/schedule)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/backup/{id}": delete: operationId: "delete_api_v1_admin_backup_id" tags: ["Administration"] summary: "Delete" description: "Delete (delete /api/v1/admin/backup/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/backup/{id}/restore": post: operationId: "post_api_v1_admin_backup_id_restore" tags: ["Administration"] summary: "Restore" description: "Restore (post /api/v1/admin/backup/{id}/restore)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/backup/{id}/upload-s3": post: operationId: "post_api_v1_admin_backup_id_upload_s3" tags: ["Administration"] summary: "Upload s3" description: "Upload s3 (post /api/v1/admin/backup/{id}/upload-s3)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/dashboard/activity": get: operationId: "get_api_v1_admin_dashboard_activity" tags: ["Administration"] summary: "Activity" description: "Activity (get /api/v1/admin/dashboard/activity)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/dashboard/now-playing": get: operationId: "get_api_v1_admin_dashboard_now_playing" tags: ["Administration"] summary: "Now playing" description: "Now playing (get /api/v1/admin/dashboard/now-playing)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/dashboard/storage": get: operationId: "get_api_v1_admin_dashboard_storage" tags: ["Administration"] summary: "Storage" description: "Storage (get /api/v1/admin/dashboard/storage)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/dashboard/top-media": get: operationId: "get_api_v1_admin_dashboard_top_media" tags: ["Administration"] summary: "Top media" description: "Top media (get /api/v1/admin/dashboard/top-media)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/dashboard/top-users": get: operationId: "get_api_v1_admin_dashboard_top_users" tags: ["Administration"] summary: "Top users" description: "Top users (get /api/v1/admin/dashboard/top-users)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/dlna/start": post: operationId: "post_api_v1_admin_dlna_start" tags: ["Administration"] summary: "Start" description: "Start (post /api/v1/admin/dlna/start)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/dlna/status": get: operationId: "get_api_v1_admin_dlna_status" tags: ["Administration"] summary: "Status" description: "Status (get /api/v1/admin/dlna/status)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/dlna/stop": post: operationId: "post_api_v1_admin_dlna_stop" tags: ["Administration"] summary: "Stop" description: "Stop (post /api/v1/admin/dlna/stop)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/fs/browse": get: operationId: "get_api_v1_admin_fs_browse" tags: ["Administration"] summary: "Browse" description: "Browse (get /api/v1/admin/fs/browse)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/libraries/{id}/duplicates": get: operationId: "get_api_v1_admin_libraries_id_duplicates" tags: ["Administration"] summary: "Duplicates" description: "Duplicates (get /api/v1/admin/libraries/{id}/duplicates)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/livetv/channels": get: operationId: "get_api_v1_admin_livetv_channels" tags: ["Administration"] summary: "List channels" description: "List channels (get /api/v1/admin/livetv/channels)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/livetv/channels/{id}": get: operationId: "get_api_v1_admin_livetv_channels_id" tags: ["Administration"] summary: "Get channel" description: "Get channel (get /api/v1/admin/livetv/channels/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_admin_livetv_channels_id" tags: ["Administration"] summary: "Update channel" description: "Update channel (put /api/v1/admin/livetv/channels/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/livetv/channels/{id}/stream": get: operationId: "get_api_v1_admin_livetv_channels_id_stream" tags: ["Administration"] summary: "Stream channel" description: "Stream channel (get /api/v1/admin/livetv/channels/{id}/stream)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/livetv/guide": get: operationId: "get_api_v1_admin_livetv_guide" tags: ["Administration"] summary: "List guide" description: "List guide (get /api/v1/admin/livetv/guide)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/livetv/guide/programs/{id}": get: operationId: "get_api_v1_admin_livetv_guide_programs_id" tags: ["Administration"] summary: "Get program" description: "Get program (get /api/v1/admin/livetv/guide/programs/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/livetv/guide/refresh": post: operationId: "post_api_v1_admin_livetv_guide_refresh" tags: ["Administration"] summary: "Refresh guide" description: "Refresh guide (post /api/v1/admin/livetv/guide/refresh)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/livetv/recordings": get: operationId: "get_api_v1_admin_livetv_recordings" tags: ["Administration"] summary: "List recordings" description: "List recordings (get /api/v1/admin/livetv/recordings)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_admin_livetv_recordings" tags: ["Administration"] summary: "Create recording" description: "Create recording (post /api/v1/admin/livetv/recordings)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/livetv/recordings/series/{seriesId}": get: operationId: "get_api_v1_admin_livetv_recordings_series_seriesId" tags: ["Administration"] summary: "List by series" description: "List by series (get /api/v1/admin/livetv/recordings/series/{seriesId})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "seriesId" in: path required: true description: "Series id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/livetv/recordings/upcoming": get: operationId: "get_api_v1_admin_livetv_recordings_upcoming" tags: ["Administration"] summary: "List upcoming recordings" description: "List upcoming recordings (get /api/v1/admin/livetv/recordings/upcoming)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/livetv/recordings/{id}": get: operationId: "get_api_v1_admin_livetv_recordings_id" tags: ["Administration"] summary: "Get recording" description: "Get recording (get /api/v1/admin/livetv/recordings/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_admin_livetv_recordings_id" tags: ["Administration"] summary: "Delete recording" description: "Delete recording (delete /api/v1/admin/livetv/recordings/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/livetv/series-rules": get: operationId: "get_api_v1_admin_livetv_series_rules" tags: ["Administration"] summary: "List series rules" description: "List series rules (get /api/v1/admin/livetv/series-rules)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_admin_livetv_series_rules" tags: ["Administration"] summary: "Create series rule" description: "Create series rule (post /api/v1/admin/livetv/series-rules)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/livetv/series-rules/{id}": get: operationId: "get_api_v1_admin_livetv_series_rules_id" tags: ["Administration"] summary: "Get series rule" description: "Get series rule (get /api/v1/admin/livetv/series-rules/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_admin_livetv_series_rules_id" tags: ["Administration"] summary: "Update series rule" description: "Update series rule (put /api/v1/admin/livetv/series-rules/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_admin_livetv_series_rules_id" tags: ["Administration"] summary: "Delete series rule" description: "Delete series rule (delete /api/v1/admin/livetv/series-rules/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/livetv/tuners": get: operationId: "get_api_v1_admin_livetv_tuners" tags: ["Administration"] summary: "List tuners" description: "List tuners (get /api/v1/admin/livetv/tuners)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/livetv/tuners/scan": get: operationId: "get_api_v1_admin_livetv_tuners_scan" tags: ["Administration"] summary: "Scan tuners" description: "Scan tuners (get /api/v1/admin/livetv/tuners/scan)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/livetv/tuners/{id}": get: operationId: "get_api_v1_admin_livetv_tuners_id" tags: ["Administration"] summary: "Get tuner" description: "Get tuner (get /api/v1/admin/livetv/tuners/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_admin_livetv_tuners_id" tags: ["Administration"] summary: "Update tuner" description: "Update tuner (put /api/v1/admin/livetv/tuners/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_admin_livetv_tuners_id" tags: ["Administration"] summary: "Delete tuner" description: "Delete tuner (delete /api/v1/admin/livetv/tuners/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/logs": get: operationId: "get_api_v1_admin_logs" tags: ["Administration"] summary: "Index" description: "Index (get /api/v1/admin/logs)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/logs/tail": get: operationId: "get_api_v1_admin_logs_tail" tags: ["Administration"] summary: "Tail" description: "Tail (get /api/v1/admin/logs/tail)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/logs/tail-all": get: operationId: "get_api_v1_admin_logs_tail_all" tags: ["Administration"] summary: "Tail all" description: "Tail all (get /api/v1/admin/logs/tail-all)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/maintenance/cleanup-orphaned-stats": post: operationId: "post_api_v1_admin_maintenance_cleanup_orphaned_stats" tags: ["Administration"] summary: "Cleanup orphaned stats" description: "Cleanup orphaned stats (post /api/v1/admin/maintenance/cleanup-orphaned-stats)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/maintenance/dedupe-paths": post: operationId: "post_api_v1_admin_maintenance_dedupe_paths" tags: ["Administration"] summary: "Dedupe paths" description: "Dedupe paths (post /api/v1/admin/maintenance/dedupe-paths)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/maintenance/jobs": get: operationId: "get_api_v1_admin_maintenance_jobs" tags: ["Administration"] summary: "Jobs" description: "Jobs (get /api/v1/admin/maintenance/jobs)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/maintenance/jobs/{id}": get: operationId: "get_api_v1_admin_maintenance_jobs_id" tags: ["Administration"] summary: "Job" description: "Job (get /api/v1/admin/maintenance/jobs/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/maintenance/reap-scan-jobs": post: operationId: "post_api_v1_admin_maintenance_reap_scan_jobs" tags: ["Administration"] summary: "Reap scan jobs" description: "Reap scan jobs (post /api/v1/admin/maintenance/reap-scan-jobs)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/maintenance/reap-transcode-jobs": post: operationId: "post_api_v1_admin_maintenance_reap_transcode_jobs" tags: ["Administration"] summary: "Reap transcode jobs" description: "Reap transcode jobs (post /api/v1/admin/maintenance/reap-transcode-jobs)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/maintenance/storage-snapshot": post: operationId: "post_api_v1_admin_maintenance_storage_snapshot" tags: ["Administration"] summary: "Storage snapshot" description: "Storage snapshot (post /api/v1/admin/maintenance/storage-snapshot)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/maintenance/tasks": get: operationId: "get_api_v1_admin_maintenance_tasks" tags: ["Administration"] summary: "Tasks" description: "Tasks (get /api/v1/admin/maintenance/tasks)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/media/merge": post: operationId: "post_api_v1_admin_media_merge" tags: ["Administration"] summary: "Merge" description: "Merge (post /api/v1/admin/media/merge)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/metadata/sources": get: operationId: "get_api_v1_admin_metadata_sources" tags: ["Administration"] summary: "Index" description: "Index (get /api/v1/admin/metadata/sources)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/metrics/connections": get: operationId: "get_api_v1_admin_metrics_connections" tags: ["Administration"] summary: "Connections" description: "Connections (get /api/v1/admin/metrics/connections)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/metrics/history": get: operationId: "get_api_v1_admin_metrics_history" tags: ["Administration"] summary: "History" description: "History (get /api/v1/admin/metrics/history)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/metrics/routes": get: operationId: "get_api_v1_admin_metrics_routes" tags: ["Administration"] summary: "Routes" description: "Routes (get /api/v1/admin/metrics/routes)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/metrics/snapshot": get: operationId: "get_api_v1_admin_metrics_snapshot" tags: ["Administration"] summary: "Snapshot" description: "Snapshot (get /api/v1/admin/metrics/snapshot)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/plugins": get: operationId: "get_api_v1_admin_plugins" tags: ["Administration"] summary: "Index" description: "Index (get /api/v1/admin/plugins)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/plugins/auto-update": get: operationId: "get_api_v1_admin_plugins_auto_update" tags: ["Administration"] summary: "Auto update" description: "Auto update (get /api/v1/admin/plugins/auto-update)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_admin_plugins_auto_update" tags: ["Administration"] summary: "Auto update" description: "Auto update (put /api/v1/admin/plugins/auto-update)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/plugins/catalog": get: operationId: "get_api_v1_admin_plugins_catalog" tags: ["Administration"] summary: "Index" description: "Index (get /api/v1/admin/plugins/catalog)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/plugins/catalog/channel": get: operationId: "get_api_v1_admin_plugins_catalog_channel" tags: ["Administration"] summary: "Channel" description: "Channel (get /api/v1/admin/plugins/catalog/channel)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_admin_plugins_catalog_channel" tags: ["Administration"] summary: "Channel" description: "Channel (put /api/v1/admin/plugins/catalog/channel)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/plugins/catalog/sources": post: operationId: "post_api_v1_admin_plugins_catalog_sources" tags: ["Administration"] summary: "Add source" description: "Add source (post /api/v1/admin/plugins/catalog/sources)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_admin_plugins_catalog_sources" tags: ["Administration"] summary: "Remove source" description: "Remove source (delete /api/v1/admin/plugins/catalog/sources)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/plugins/install": post: operationId: "post_api_v1_admin_plugins_install" tags: ["Administration"] summary: "Install" description: "Install (post /api/v1/admin/plugins/install)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "201": description: "Created." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/plugins/updates": get: operationId: "get_api_v1_admin_plugins_updates" tags: ["Administration"] summary: "Updates" description: "Updates (get /api/v1/admin/plugins/updates)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/plugins/updates/apply": post: operationId: "post_api_v1_admin_plugins_updates_apply" tags: ["Administration"] summary: "Apply updates" description: "Apply updates (post /api/v1/admin/plugins/updates/apply)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/plugins/{name}": get: operationId: "get_api_v1_admin_plugins_name" tags: ["Administration"] summary: "Show" description: "Show (get /api/v1/admin/plugins/{name})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "name" in: path required: true description: "Plugin name." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_admin_plugins_name" tags: ["Administration"] summary: "Uninstall" description: "Uninstall (delete /api/v1/admin/plugins/{name})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "name" in: path required: true description: "Plugin name." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/plugins/{name}/disable": post: operationId: "post_api_v1_admin_plugins_name_disable" tags: ["Administration"] summary: "Disable" description: "Disable (post /api/v1/admin/plugins/{name}/disable)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "name" in: path required: true description: "Plugin name." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/plugins/{name}/enable": post: operationId: "post_api_v1_admin_plugins_name_enable" tags: ["Administration"] summary: "Enable" description: "Enable (post /api/v1/admin/plugins/{name}/enable)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "name" in: path required: true description: "Plugin name." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/plugins/{name}/settings": put: operationId: "put_api_v1_admin_plugins_name_settings" tags: ["Administration"] summary: "Update settings" description: "Update settings (put /api/v1/admin/plugins/{name}/settings)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "name" in: path required: true description: "Plugin name." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/plugins/{name}/test": post: operationId: "post_api_v1_admin_plugins_name_test" tags: ["Administration"] summary: "Test credentials" description: "Test credentials (post /api/v1/admin/plugins/{name}/test)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "name" in: path required: true description: "Plugin name." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/plugins/{name}/update": post: operationId: "post_api_v1_admin_plugins_name_update" tags: ["Administration"] summary: "Update plugin" description: "Update plugin (post /api/v1/admin/plugins/{name}/update)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "name" in: path required: true description: "Plugin name." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/profiles/{id}": get: operationId: "get_api_v1_admin_profiles_id" tags: ["Administration"] summary: "Get" description: "Get (get /api/v1/admin/profiles/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_admin_profiles_id" tags: ["Administration"] summary: "Update" description: "Update (put /api/v1/admin/profiles/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_admin_profiles_id" tags: ["Administration"] summary: "Delete" description: "Delete (delete /api/v1/admin/profiles/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/profiles/{id}/pin": post: operationId: "post_api_v1_admin_profiles_id_pin" tags: ["Administration"] summary: "Set pin" description: "Set pin (post /api/v1/admin/profiles/{id}/pin)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_admin_profiles_id_pin" tags: ["Administration"] summary: "Delete pin" description: "Delete pin (delete /api/v1/admin/profiles/{id}/pin)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/profiles/{profileId}/active-streams": get: operationId: "get_api_v1_admin_profiles_profileId_active_streams" tags: ["Administration"] summary: "Get active streams" description: "Get active streams (get /api/v1/admin/profiles/{profileId}/active-streams)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/profiles/{profileId}/schedules": get: operationId: "get_api_v1_admin_profiles_profileId_schedules" tags: ["Administration"] summary: "List for profile" description: "List for profile (get /api/v1/admin/profiles/{profileId}/schedules)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_admin_profiles_profileId_schedules" tags: ["Administration"] summary: "Create for profile" description: "Create for profile (post /api/v1/admin/profiles/{profileId}/schedules)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "201": description: "Created." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/profiles/{profileId}/schedules/{scheduleId}": get: operationId: "get_api_v1_admin_profiles_profileId_schedules_scheduleId" tags: ["Administration"] summary: "Get schedule" description: "Get schedule (get /api/v1/admin/profiles/{profileId}/schedules/{scheduleId})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string - name: "scheduleId" in: path required: true description: "Access schedule id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_admin_profiles_profileId_schedules_scheduleId" tags: ["Administration"] summary: "Update schedule" description: "Update schedule (put /api/v1/admin/profiles/{profileId}/schedules/{scheduleId})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string - name: "scheduleId" in: path required: true description: "Access schedule id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_admin_profiles_profileId_schedules_scheduleId" tags: ["Administration"] summary: "Delete schedule" description: "Delete schedule (delete /api/v1/admin/profiles/{profileId}/schedules/{scheduleId})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string - name: "scheduleId" in: path required: true description: "Access schedule id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/profiles/{profileId}/stream-limits": get: operationId: "get_api_v1_admin_profiles_profileId_stream_limits" tags: ["Administration"] summary: "Get stream limits" description: "Get stream limits (get /api/v1/admin/profiles/{profileId}/stream-limits)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_admin_profiles_profileId_stream_limits" tags: ["Administration"] summary: "Update stream limits" description: "Update stream limits (put /api/v1/admin/profiles/{profileId}/stream-limits)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/profiles/{profileId}/tags": get: operationId: "get_api_v1_admin_profiles_profileId_tags" tags: ["Administration"] summary: "List for profile" description: "List for profile (get /api/v1/admin/profiles/{profileId}/tags)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_admin_profiles_profileId_tags" tags: ["Administration"] summary: "Create for profile" description: "Create for profile (post /api/v1/admin/profiles/{profileId}/tags)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "201": description: "Created." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/profiles/{profileId}/tags/{tagId}": delete: operationId: "delete_api_v1_admin_profiles_profileId_tags_tagId" tags: ["Administration"] summary: "Delete tag" description: "Delete tag (delete /api/v1/admin/profiles/{profileId}/tags/{tagId})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string - name: "tagId" in: path required: true description: "Tag id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/remote/hub/complete": post: operationId: "post_api_v1_admin_remote_hub_complete" tags: ["Administration"] summary: "Hub complete" description: "Hub complete (post /api/v1/admin/remote/hub/complete)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/remote/hub/heartbeat": post: operationId: "post_api_v1_admin_remote_hub_heartbeat" tags: ["Administration"] summary: "Hub heartbeat" description: "Hub heartbeat (post /api/v1/admin/remote/hub/heartbeat)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/remote/hub/pair": post: operationId: "post_api_v1_admin_remote_hub_pair" tags: ["Administration"] summary: "Hub pair" description: "Hub pair (post /api/v1/admin/remote/hub/pair)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/remote/hub/poll": post: operationId: "post_api_v1_admin_remote_hub_poll" tags: ["Administration"] summary: "Hub poll" description: "Hub poll (post /api/v1/admin/remote/hub/poll)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/remote/hub/status": get: operationId: "get_api_v1_admin_remote_hub_status" tags: ["Administration"] summary: "Hub status" description: "Hub status (get /api/v1/admin/remote/hub/status)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/remote/hub/unenroll": post: operationId: "post_api_v1_admin_remote_hub_unenroll" tags: ["Administration"] summary: "Hub unenroll" description: "Hub unenroll (post /api/v1/admin/remote/hub/unenroll)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/remote/portforward/candidates": get: operationId: "get_api_v1_admin_remote_portforward_candidates" tags: ["Administration"] summary: "Port forward candidates" description: "Port forward candidates (get /api/v1/admin/remote/portforward/candidates)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/remote/portforward/disable": post: operationId: "post_api_v1_admin_remote_portforward_disable" tags: ["Administration"] summary: "Port forward disable" description: "Port forward disable (post /api/v1/admin/remote/portforward/disable)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/remote/portforward/enable": post: operationId: "post_api_v1_admin_remote_portforward_enable" tags: ["Administration"] summary: "Port forward enable" description: "Port forward enable (post /api/v1/admin/remote/portforward/enable)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/remote/portforward/status": get: operationId: "get_api_v1_admin_remote_portforward_status" tags: ["Administration"] summary: "Port forward status" description: "Port forward status (get /api/v1/admin/remote/portforward/status)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/remote/relay/disable": post: operationId: "post_api_v1_admin_remote_relay_disable" tags: ["Administration"] summary: "Relay disable" description: "Relay disable (post /api/v1/admin/remote/relay/disable)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/remote/relay/enable": post: operationId: "post_api_v1_admin_remote_relay_enable" tags: ["Administration"] summary: "Relay enable" description: "Relay enable (post /api/v1/admin/remote/relay/enable)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/remote/relay/ping": post: operationId: "post_api_v1_admin_remote_relay_ping" tags: ["Administration"] summary: "Relay ping" description: "Relay ping (post /api/v1/admin/remote/relay/ping)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/remote/relay/status": get: operationId: "get_api_v1_admin_remote_relay_status" tags: ["Administration"] summary: "Relay status" description: "Relay status (get /api/v1/admin/remote/relay/status)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/remote/subdomain/claim": post: operationId: "post_api_v1_admin_remote_subdomain_claim" tags: ["Administration"] summary: "Subdomain claim" description: "Subdomain claim (post /api/v1/admin/remote/subdomain/claim)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/remote/subdomain/release": post: operationId: "post_api_v1_admin_remote_subdomain_release" tags: ["Administration"] summary: "Subdomain release" description: "Subdomain release (post /api/v1/admin/remote/subdomain/release)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/remote/subdomain/status": get: operationId: "get_api_v1_admin_remote_subdomain_status" tags: ["Administration"] summary: "Subdomain status" description: "Subdomain status (get /api/v1/admin/remote/subdomain/status)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/restart": post: operationId: "post_api_v1_admin_restart" tags: ["Administration"] summary: "Restart" description: "Restart (post /api/v1/admin/restart)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/services/lastfm/disconnect": post: operationId: "post_api_v1_admin_services_lastfm_disconnect" tags: ["Administration"] summary: "Api disconnect" description: "Api disconnect (post /api/v1/admin/services/lastfm/disconnect)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/services/lastfm/status": get: operationId: "get_api_v1_admin_services_lastfm_status" tags: ["Administration"] summary: "Status" description: "Status (get /api/v1/admin/services/lastfm/status)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/services/trakt/disconnect": post: operationId: "post_api_v1_admin_services_trakt_disconnect" tags: ["Administration"] summary: "Disconnect" description: "Disconnect (post /api/v1/admin/services/trakt/disconnect)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/services/trakt/status": get: operationId: "get_api_v1_admin_services_trakt_status" tags: ["Administration"] summary: "Status" description: "Status (get /api/v1/admin/services/trakt/status)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/settings": get: operationId: "get_api_v1_admin_settings" tags: ["Administration"] summary: "Index" description: "Index (get /api/v1/admin/settings)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_admin_settings" tags: ["Administration"] summary: "Update" description: "Update (put /api/v1/admin/settings)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/stats/playback": get: operationId: "get_api_v1_admin_stats_playback" tags: ["Administration"] summary: "Playback" description: "Playback (get /api/v1/admin/stats/playback)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/stats/storage": get: operationId: "get_api_v1_admin_stats_storage" tags: ["Administration"] summary: "Storage" description: "Storage (get /api/v1/admin/stats/storage)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/stats/top-media": get: operationId: "get_api_v1_admin_stats_top_media" tags: ["Administration"] summary: "Top media" description: "Top media (get /api/v1/admin/stats/top-media)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/stats/top-users": get: operationId: "get_api_v1_admin_stats_top_users" tags: ["Administration"] summary: "Top users" description: "Top users (get /api/v1/admin/stats/top-users)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/sync/enable": put: operationId: "put_api_v1_admin_sync_enable" tags: ["Administration"] summary: "Set enabled" description: "Set enabled (put /api/v1/admin/sync/enable)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/sync/status": get: operationId: "get_api_v1_admin_sync_status" tags: ["Administration"] summary: "Get sync status" description: "Get sync status (get /api/v1/admin/sync/status)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/sync/trash-guides": post: operationId: "post_api_v1_admin_sync_trash_guides" tags: ["Administration"] summary: "Trigger sync" description: "Trigger sync (post /api/v1/admin/sync/trash-guides)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/telemetry/clients": get: operationId: "get_api_v1_admin_telemetry_clients" tags: ["Administration"] summary: "List consenting client heartbeats" description: "List consenting client heartbeats (get /api/v1/admin/telemetry/clients)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/transcoding/accelerators": get: operationId: "get_api_v1_admin_transcoding_accelerators" tags: ["Administration"] summary: "Accelerators" description: "Accelerators (get /api/v1/admin/transcoding/accelerators)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/transcoding/tone-mapping": get: operationId: "get_api_v1_admin_transcoding_tone_mapping" tags: ["Administration"] summary: "Tone mapping" description: "Tone mapping (get /api/v1/admin/transcoding/tone-mapping)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_admin_transcoding_tone_mapping" tags: ["Administration"] summary: "Set tone mapping" description: "Set tone mapping (put /api/v1/admin/transcoding/tone-mapping)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/updates/check": post: operationId: "post_api_v1_admin_updates_check" tags: ["Administration"] summary: "Check" description: "Check (post /api/v1/admin/updates/check)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "202": description: "Accepted - asynchronous job queued (body: job_id, status)." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/updates/settings": put: operationId: "put_api_v1_admin_updates_settings" tags: ["Administration"] summary: "Update settings" description: "Update settings (put /api/v1/admin/updates/settings)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/updates/status": get: operationId: "get_api_v1_admin_updates_status" tags: ["Administration"] summary: "Status" description: "Status (get /api/v1/admin/updates/status)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/users": get: operationId: "get_api_v1_admin_users" tags: ["Administration"] summary: "List" description: "List (get /api/v1/admin/users)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_admin_users" tags: ["Administration"] summary: "Create" description: "Create (post /api/v1/admin/users)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "201": description: "Created." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/users/{id}": get: operationId: "get_api_v1_admin_users_id" tags: ["Administration"] summary: "Get" description: "Get (get /api/v1/admin/users/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_admin_users_id" tags: ["Administration"] summary: "Update" description: "Update (put /api/v1/admin/users/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_admin_users_id" tags: ["Administration"] summary: "Delete" description: "Delete (delete /api/v1/admin/users/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/users/{id}/approve": post: operationId: "post_api_v1_admin_users_id_approve" tags: ["Administration"] summary: "Approve" description: "Approve (post /api/v1/admin/users/{id}/approve)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/users/{id}/disable": post: operationId: "post_api_v1_admin_users_id_disable" tags: ["Administration"] summary: "Disable" description: "Disable (post /api/v1/admin/users/{id}/disable)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/users/{id}/reject": post: operationId: "post_api_v1_admin_users_id_reject" tags: ["Administration"] summary: "Reject" description: "Reject (post /api/v1/admin/users/{id}/reject)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/users/{id}/reset-password": post: operationId: "post_api_v1_admin_users_id_reset_password" tags: ["Administration"] summary: "Reset password" description: "Reset password (post /api/v1/admin/users/{id}/reset-password)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/users/{id}/set-admin": post: operationId: "post_api_v1_admin_users_id_set_admin" tags: ["Administration"] summary: "Set admin" description: "Set admin (post /api/v1/admin/users/{id}/set-admin)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/users/{userId}/profiles": get: operationId: "get_api_v1_admin_users_userId_profiles" tags: ["Administration"] summary: "List for user" description: "List for user (get /api/v1/admin/users/{userId}/profiles)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "userId" in: path required: true description: "User id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_admin_users_userId_profiles" tags: ["Administration"] summary: "Create for user" description: "Create for user (post /api/v1/admin/users/{userId}/profiles)." x-phlix-middleware: [AdminMiddleware] parameters: - name: "userId" in: path required: true description: "User id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "201": description: "Created." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/watch-history": get: operationId: "get_api_v1_admin_watch_history" tags: ["Administration"] summary: "Index" description: "Index (get /api/v1/admin/watch-history)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/webhooks": get: operationId: "get_api_v1_admin_webhooks" tags: ["Administration"] summary: "Index" description: "Index (get /api/v1/admin/webhooks)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_admin_webhooks" tags: ["Administration"] summary: "Create" description: "Create (post /api/v1/admin/webhooks)." x-phlix-middleware: [] security: [] responses: "201": description: "Created." content: application/json: schema: type: object additionalProperties: true "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/webhooks/deliveries": get: operationId: "get_api_v1_admin_webhooks_deliveries" tags: ["Administration"] summary: "Get deliveries" description: "Get deliveries (get /api/v1/admin/webhooks/deliveries)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/webhooks/subscriptions": get: operationId: "get_api_v1_admin_webhooks_subscriptions" tags: ["Administration"] summary: "List subscriptions" description: "List subscriptions (get /api/v1/admin/webhooks/subscriptions)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_admin_webhooks_subscriptions" tags: ["Administration"] summary: "Create subscription" description: "Create subscription (post /api/v1/admin/webhooks/subscriptions)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "201": description: "Created." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/webhooks/subscriptions/{id}": delete: operationId: "delete_api_v1_admin_webhooks_subscriptions_id" tags: ["Administration"] summary: "Delete subscription" description: "Delete subscription (delete /api/v1/admin/webhooks/subscriptions/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "204": description: "No Content - resource deleted; response body is empty." "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/webhooks/{id}": put: operationId: "put_api_v1_admin_webhooks_id" tags: ["Administration"] summary: "Update" description: "Update (put /api/v1/admin/webhooks/{id})." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_admin_webhooks_id" tags: ["Administration"] summary: "Delete" description: "Delete (delete /api/v1/admin/webhooks/{id})." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "204": description: "No Content - resource deleted; response body is empty." "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/admin/webhooks/{id}/test": post: operationId: "post_api_v1_admin_webhooks_id_test" tags: ["Administration"] summary: "Test" description: "Test (post /api/v1/admin/webhooks/{id}/test)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/airplay/devices": get: operationId: "get_api_v1_airplay_devices" tags: ["Casting"] summary: "List devices" description: "List devices (get /api/v1/airplay/devices)." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/airplay/devices/{id}/pause": post: operationId: "post_api_v1_airplay_devices_id_pause" tags: ["Casting"] summary: "Pause" description: "Pause (post /api/v1/airplay/devices/{id}/pause)." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/airplay/devices/{id}/resume": post: operationId: "post_api_v1_airplay_devices_id_resume" tags: ["Casting"] summary: "Resume" description: "Resume (post /api/v1/airplay/devices/{id}/resume)." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/airplay/devices/{id}/status": get: operationId: "get_api_v1_airplay_devices_id_status" tags: ["Casting"] summary: "Get status" description: "Get status (get /api/v1/airplay/devices/{id}/status)." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/airplay/devices/{id}/stop": post: operationId: "post_api_v1_airplay_devices_id_stop" tags: ["Casting"] summary: "Stop" description: "Stop (post /api/v1/airplay/devices/{id}/stop)." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/airplay/devices/{id}/stream": post: operationId: "post_api_v1_airplay_devices_id_stream" tags: ["Casting"] summary: "Stream" description: "Stream (post /api/v1/airplay/devices/{id}/stream)." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/audiobooks": get: operationId: "get_api_v1_audiobooks" tags: ["Music & Books"] summary: "List audiobooks" description: "List audiobooks (get /api/v1/audiobooks)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/audiobooks/{id}": get: operationId: "get_api_v1_audiobooks_id" tags: ["Music & Books"] summary: "Get audiobook" description: "Get audiobook (get /api/v1/audiobooks/{id})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/audiobooks/{id}/chapters": get: operationId: "get_api_v1_audiobooks_id_chapters" tags: ["Music & Books"] summary: "Get chapters" description: "Get chapters (get /api/v1/audiobooks/{id}/chapters)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/audiobooks/{id}/progress": get: operationId: "get_api_v1_audiobooks_id_progress" tags: ["Music & Books"] summary: "Get progress" description: "Get progress (get /api/v1/audiobooks/{id}/progress)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_audiobooks_id_progress" tags: ["Music & Books"] summary: "Save progress" description: "Save progress (post /api/v1/audiobooks/{id}/progress)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/audiobooks/{id}/read": get: operationId: "get_api_v1_audiobooks_id_read" tags: ["Music & Books"] summary: "Read audiobook" description: "Read audiobook (get /api/v1/audiobooks/{id}/read)." x-phlix-middleware: [SignedUrlMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/audiobooks/{id}/stream": get: operationId: "get_api_v1_audiobooks_id_stream" tags: ["Music & Books"] summary: "Stream audiobook" description: "Stream audiobook (get /api/v1/audiobooks/{id}/stream)." x-phlix-middleware: [SignedUrlMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/auth/hub-token": post: operationId: "post_api_v1_auth_hub_token" tags: ["Authentication"] summary: "Hub token" description: "Hub token (post /api/v1/auth/hub-token)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "400": $ref: "#/components/responses/BadRequest" "401": $ref: "#/components/responses/Unauthorized" "429": $ref: "#/components/responses/TooManyRequests" "503": description: "Server not enrolled with a hub (hub.not_enrolled)." content: application/json: schema: $ref: "#/components/schemas/Error" "/api/v1/auth/login": post: operationId: "post_api_v1_auth_login" tags: ["Authentication"] summary: "Login" description: "Login (post /api/v1/auth/login)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/auth/me": get: operationId: "get_api_v1_auth_me" tags: ["Authentication"] summary: "Me" description: "Me (get /api/v1/auth/me)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/auth/quick-connect/initiate": post: operationId: "post_api_v1_auth_quick_connect_initiate" tags: ["Authentication"] summary: "Start a quick-connect pairing" description: "Start a quick-connect pairing (post /api/v1/auth/quick-connect/initiate)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/auth/quick-connect/{code}/approve": post: operationId: "post_api_v1_auth_quick_connect_code_approve" tags: ["Authentication"] summary: "Approve a quick-connect pairing" description: "Approve a quick-connect pairing (post /api/v1/auth/quick-connect/{code}/approve)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "code" in: path required: true description: "Quick-connect pairing code (6 unambiguous uppercase letters)." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "400": $ref: "#/components/responses/BadRequest" "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "409": description: "Pairing is not pending." content: application/json: schema: type: object additionalProperties: true "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/auth/quick-connect/{code}/status": get: operationId: "get_api_v1_auth_quick_connect_code_status" tags: ["Authentication"] summary: "Poll quick-connect pairing state" description: "Poll quick-connect pairing state (get /api/v1/auth/quick-connect/{code}/status)." x-phlix-middleware: [] parameters: - name: "code" in: path required: true description: "Quick-connect pairing code (6 unambiguous uppercase letters)." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/auth/quick-connect/{code}/token": post: operationId: "post_api_v1_auth_quick_connect_code_token" tags: ["Authentication"] summary: "Redeem an approved quick-connect pairing" description: "Redeem an approved quick-connect pairing (post /api/v1/auth/quick-connect/{code}/token)." x-phlix-middleware: [] parameters: - name: "code" in: path required: true description: "Quick-connect pairing code (6 unambiguous uppercase letters)." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "400": $ref: "#/components/responses/BadRequest" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/auth/logout": post: operationId: "post_api_v1_auth_logout" tags: ["Authentication"] summary: "Logout" description: >- Logout (post /api/v1/auth/logout). JSON companion of the form-path /auth/logout, answered 204 with no body. Every accepted call clears the phlix_session and phlix_refresh cookies via expiry Set-Cookie headers, gated by nothing else; a call attached to a user additionally bumps the server-side token watermark, invalidating every issued token. A cookie-bearing call whose Origin/Referer fails the same-site law (including the Sec-Fetch-Site cross-site belt) is refused by the CSRF gate with 403 and no side effects; bearer calls never ride that gate. x-phlix-middleware: [] security: [] responses: "204": description: "Logged out; the cookie jar is cleared; no body." "403": $ref: "#/components/responses/Forbidden" "/api/v1/auth/sessions": get: operationId: "get_api_v1_auth_sessions" tags: ["Authentication"] summary: "List login families" description: >- List this account's live login families (get /api/v1/auth/sessions). CP-029 / D-1a: one row per login ceremony whose token lineage is still alive, each carrying id, created_at, last_used_at, device_type, device_name (NULL where the minting surface knew no device) and a server-computed current flag for the family the caller authenticated with. Not the legacy playback-device /api/v1/me/sessions registry. x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "/api/v1/auth/sessions/{id}": delete: operationId: "delete_api_v1_auth_sessions_id" tags: ["Authentication"] summary: "End one login family" description: >- End exactly one login family (delete /api/v1/auth/sessions/{id}). Per-device sign-out: every other device keeps its session and the account-wide watermark is NOT bumped. Unknown and foreign-owned ids answer the identical 404 (no probe oracle); revoking one's own already-revoked family is idempotent and answers 204. x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Family id (the sid claim)." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "204": description: "Family ended (or was already ended); no body." "401": $ref: "#/components/responses/Unauthorized" "404": $ref: "#/components/responses/NotFound" "/api/v1/auth/refresh": post: operationId: "post_api_v1_auth_refresh" tags: ["Authentication"] summary: "Refresh" description: "Refresh (post /api/v1/auth/refresh)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/auth/register": post: operationId: "post_api_v1_auth_register" tags: ["Authentication"] summary: "Register" description: >- Register (post /api/v1/auth/register). JSON client: 201 with the token pair when the account is created active (open mode or the first-user admin bootstrap); 202 with {status:pending} and NO tokens when the signup gate is 'approval'; 400 on validation failure (duplicate username/email, policy); 403 code=signup_disabled when the gate is 'disabled' (first user still bootstraps regardless of mode). Browser form posts get 302 redirects instead (see /auth/register). x-phlix-middleware: [] security: [] responses: "201": description: "Account created active; token pair returned." content: application/json: schema: type: object additionalProperties: true "202": description: "Account created pending administrator approval; no tokens." content: application/json: schema: type: object additionalProperties: true "400": $ref: "#/components/responses/BadRequest" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/auth/webauthn/login/options": post: operationId: "post_api_v1_auth_webauthn_login_options" tags: ["Authentication"] summary: "Start authentication" description: "Start authentication (post /api/v1/auth/webauthn/login/options)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/auth/webauthn/login/verify": post: operationId: "post_api_v1_auth_webauthn_login_verify" tags: ["Authentication"] summary: "Finish authentication" description: >- Finish authentication (post /api/v1/auth/webauthn/login/verify). Verifies the assertion cryptographically (challenge/origin/rpId/UV flags plus the COSE signature and a monotonic counter) against the DB-stored single-use challenge and the stored credential; the identity in the returned token pair is the OWNER OF THE STORED CREDENTIAL, not anything the client asserts. Success mints the full JWT pair; any verification failure (bad signature, expired/consumed challenge, origin/rpId mismatch, counter rollback, credential/user mismatch) answers 401. x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "400": $ref: "#/components/responses/BadRequest" "401": $ref: "#/components/responses/Unauthorized" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/auth/webauthn/register/options": post: operationId: "post_api_v1_auth_webauthn_register_options" tags: ["Authentication"] summary: "Start registration" description: "Start registration (post /api/v1/auth/webauthn/register/options)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/auth/webauthn/register/verify": post: operationId: "post_api_v1_auth_webauthn_register_verify" tags: ["Authentication"] summary: "Finish registration" description: "Finish registration (post /api/v1/auth/webauthn/register/verify)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/books": get: operationId: "get_api_v1_books" tags: ["Music & Books"] summary: "List books" description: "List books (get /api/v1/books)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/books/{id}": get: operationId: "get_api_v1_books_id" tags: ["Music & Books"] summary: "Get book" description: "Get book (get /api/v1/books/{id})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/books/{id}/cover": get: operationId: "get_api_v1_books_id_cover" tags: ["Music & Books"] summary: "Get cover" description: "Get cover (get /api/v1/books/{id}/cover)." x-phlix-middleware: [SignedUrlMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/books/{id}/download": get: operationId: "get_api_v1_books_id_download" tags: ["Music & Books"] summary: "Download book" description: "Download book (get /api/v1/books/{id}/download)." x-phlix-middleware: [SignedUrlMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/books/{id}/progress": get: operationId: "get_api_v1_books_id_progress" tags: ["Music & Books"] summary: "Get progress" description: "Get progress (get /api/v1/books/{id}/progress)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_books_id_progress" tags: ["Music & Books"] summary: "Save progress" description: "Save progress (post /api/v1/books/{id}/progress)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/books/{id}/read": get: operationId: "get_api_v1_books_id_read" tags: ["Music & Books"] summary: "Read book" description: "Read book (get /api/v1/books/{id}/read)." x-phlix-middleware: [SignedUrlMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/cast/devices": get: operationId: "get_api_v1_cast_devices" tags: ["Casting"] summary: "List devices" description: "List devices (get /api/v1/cast/devices)." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/cast/devices/{id}/cast": post: operationId: "post_api_v1_cast_devices_id_cast" tags: ["Casting"] summary: "Cast" description: "Cast (post /api/v1/cast/devices/{id}/cast)." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/cast/devices/{id}/pause": post: operationId: "post_api_v1_cast_devices_id_pause" tags: ["Casting"] summary: "Pause" description: "Pause (post /api/v1/cast/devices/{id}/pause)." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/cast/devices/{id}/play": post: operationId: "post_api_v1_cast_devices_id_play" tags: ["Casting"] summary: "Play" description: "Play (post /api/v1/cast/devices/{id}/play)." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/cast/devices/{id}/seek": post: operationId: "post_api_v1_cast_devices_id_seek" tags: ["Casting"] summary: "Seek" description: "Seek (post /api/v1/cast/devices/{id}/seek)." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/cast/devices/{id}/status": get: operationId: "get_api_v1_cast_devices_id_status" tags: ["Casting"] summary: "Get status" description: "Get status (get /api/v1/cast/devices/{id}/status)." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/cast/devices/{id}/stop": post: operationId: "post_api_v1_cast_devices_id_stop" tags: ["Casting"] summary: "Stop" description: "Stop (post /api/v1/cast/devices/{id}/stop)." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/collections": get: operationId: "get_api_v1_collections" tags: ["Collections"] summary: "Index" description: "Index (get /api/v1/collections)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_collections" tags: ["Collections"] summary: "Create" description: "Create (post /api/v1/collections)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "201": description: "Created." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/collections/{id}": get: operationId: "get_api_v1_collections_id" tags: ["Collections"] summary: "Show" description: "Show (get /api/v1/collections/{id})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_collections_id" tags: ["Collections"] summary: "Update" description: "Update (put /api/v1/collections/{id})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_collections_id" tags: ["Collections"] summary: "Delete" description: "Delete (delete /api/v1/collections/{id})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/collections/{id}/bulk-add": post: operationId: "post_api_v1_collections_id_bulk_add" tags: ["Collections"] summary: "Bulk add" description: "Bulk add (post /api/v1/collections/{id}/bulk-add)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/collections/{id}/items/{mediaItemId}": post: operationId: "post_api_v1_collections_id_items_mediaItemId" tags: ["Collections"] summary: "Add item" description: "Add item (post /api/v1/collections/{id}/items/{mediaItemId})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string - name: "mediaItemId" in: path required: true description: "Media item id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_collections_id_items_mediaItemId" tags: ["Collections"] summary: "Remove item" description: "Remove item (delete /api/v1/collections/{id}/items/{mediaItemId})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string - name: "mediaItemId" in: path required: true description: "Media item id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/collections/{id}/refresh": post: operationId: "post_api_v1_collections_id_refresh" tags: ["Collections"] summary: "Refresh" description: "Refresh (post /api/v1/collections/{id}/refresh)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "409": description: "Smart collection references a smart playlist that does not exist (SRV-M19)." content: application/json: schema: type: object additionalProperties: true "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/dlna/renderers": get: operationId: "get_api_v1_dlna_renderers" tags: ["Casting"] summary: "List renderers" description: "List renderers (get /api/v1/dlna/renderers)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/dlna/renderers/{id}/pause": post: operationId: "post_api_v1_dlna_renderers_id_pause" tags: ["Casting"] summary: "Pause" description: "Pause (post /api/v1/dlna/renderers/{id}/pause)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/dlna/renderers/{id}/play": post: operationId: "post_api_v1_dlna_renderers_id_play" tags: ["Casting"] summary: "Play to" description: "Play to (post /api/v1/dlna/renderers/{id}/play)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/dlna/renderers/{id}/seek": post: operationId: "post_api_v1_dlna_renderers_id_seek" tags: ["Casting"] summary: "Seek" description: "Seek (post /api/v1/dlna/renderers/{id}/seek)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/dlna/renderers/{id}/status": get: operationId: "get_api_v1_dlna_renderers_id_status" tags: ["Casting"] summary: "Get status" description: "Get status (get /api/v1/dlna/renderers/{id}/status)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/dlna/renderers/{id}/stop": post: operationId: "post_api_v1_dlna_renderers_id_stop" tags: ["Casting"] summary: "Stop" description: "Stop (post /api/v1/dlna/renderers/{id}/stop)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/health/network": get: operationId: "get_api_v1_health_network" tags: ["System"] summary: "Network" description: "Network (get /api/v1/health/network)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/health/relay": get: operationId: "get_api_v1_health_relay" tags: ["System"] summary: "Relay" description: "Relay (get /api/v1/health/relay)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/libraries": get: operationId: "get_api_v1_libraries" tags: ["Libraries"] summary: "Index" description: "Index (get /api/v1/libraries)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_libraries" tags: ["Libraries"] summary: "Create" description: "Create (post /api/v1/libraries)." x-phlix-middleware: [] security: [] responses: "201": description: "Created." content: application/json: schema: type: object additionalProperties: true "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/libraries/{id}": get: operationId: "get_api_v1_libraries_id" tags: ["Libraries"] summary: "Show" description: "Show (get /api/v1/libraries/{id})." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_libraries_id" tags: ["Libraries"] summary: "Update" description: "Update (put /api/v1/libraries/{id})." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_libraries_id" tags: ["Libraries"] summary: "Delete" description: "Delete (delete /api/v1/libraries/{id})." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/libraries/{id}/clear-artwork": post: operationId: "post_api_v1_libraries_id_clear_artwork" tags: ["Libraries"] summary: "Clear artwork" description: "Clear artwork (post /api/v1/libraries/{id}/clear-artwork)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "202": description: "Accepted - asynchronous job queued (body: job_id, status)." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/libraries/{id}/clear-metadata": post: operationId: "post_api_v1_libraries_id_clear_metadata" tags: ["Libraries"] summary: "Clear metadata" description: "Clear metadata (post /api/v1/libraries/{id}/clear-metadata)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "202": description: "Accepted - asynchronous job queued (body: job_id, status)." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/libraries/{id}/delete-all": post: operationId: "post_api_v1_libraries_id_delete_all" tags: ["Libraries"] summary: "Delete all" description: "Delete all (post /api/v1/libraries/{id}/delete-all)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "202": description: "Accepted - asynchronous job queued (body: job_id, status)." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/libraries/{id}/items": get: operationId: "get_api_v1_libraries_id_items" tags: ["Libraries"] summary: "Get library items" description: "Get library items (get /api/v1/libraries/{id}/items)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/libraries/{id}/match-metadata": post: operationId: "post_api_v1_libraries_id_match_metadata" tags: ["Libraries"] summary: "Match metadata" description: "Match metadata (post /api/v1/libraries/{id}/match-metadata)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "202": description: "Accepted - asynchronous job queued (body: job_id, status)." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/libraries/{id}/prune": post: operationId: "post_api_v1_libraries_id_prune" tags: ["Libraries"] summary: "Prune" description: "Prune (post /api/v1/libraries/{id}/prune)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "202": description: "Accepted - asynchronous job queued (body: job_id, status)." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/libraries/{id}/refresh-metadata": post: operationId: "post_api_v1_libraries_id_refresh_metadata" tags: ["Libraries"] summary: "Refresh metadata" description: "Refresh metadata (post /api/v1/libraries/{id}/refresh-metadata)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "202": description: "Accepted - asynchronous job queued (body: job_id, status)." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/libraries/{id}/regenerate-assets": post: operationId: "post_api_v1_libraries_id_regenerate_assets" tags: ["Libraries"] summary: "Regenerate assets" description: "Regenerate assets (post /api/v1/libraries/{id}/regenerate-assets)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "202": description: "Accepted - asynchronous job queued (body: job_id, status)." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/libraries/{id}/rescan": post: operationId: "post_api_v1_libraries_id_rescan" tags: ["Libraries"] summary: "Rescan" description: "Rescan (post /api/v1/libraries/{id}/rescan)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "202": description: "Accepted - asynchronous job queued (body: job_id, status)." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/libraries/{id}/scan": post: operationId: "post_api_v1_libraries_id_scan" tags: ["Libraries"] summary: "Scan" description: "Scan (post /api/v1/libraries/{id}/scan)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "202": description: "Accepted - asynchronous job queued (body: job_id, status)." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/libraries/{id}/scan-history": get: operationId: "get_api_v1_libraries_id_scan_history" tags: ["Libraries"] summary: "Scan history" description: "Scan history (get /api/v1/libraries/{id}/scan-history)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/libraries/{id}/scan-status": get: operationId: "get_api_v1_libraries_id_scan_status" tags: ["Libraries"] summary: "Scan status" description: "Scan status (get /api/v1/libraries/{id}/scan-status)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/libraries/{id}/theme-media": get: operationId: "get_api_v1_libraries_id_theme_media" tags: ["Libraries"] summary: "Get theme media" description: "Get theme media (get /api/v1/libraries/{id}/theme-media)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_libraries_id_theme_media" tags: ["Libraries"] summary: "Delete theme media" description: "Delete theme media (delete /api/v1/libraries/{id}/theme-media)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/libraries/{id}/theme-media/scan": post: operationId: "post_api_v1_libraries_id_theme_media_scan" tags: ["Libraries"] summary: "Scan theme media" description: "Scan theme media (post /api/v1/libraries/{id}/theme-media/scan)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/libraries/{libraryId}/collections": get: operationId: "get_api_v1_libraries_libraryId_collections" tags: ["Libraries"] summary: "For library" description: "For library (get /api/v1/libraries/{libraryId}/collections)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "libraryId" in: path required: true description: "Library id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/me/continue-watching": get: operationId: "get_api_v1_me_continue_watching" tags: ["Sessions"] summary: "Get continue watching" description: "Get continue watching (get /api/v1/me/continue-watching)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/me/playback/preferences": get: operationId: "get_api_v1_me_playback_preferences" tags: ["Sessions"] summary: "Get playback preferences" description: "Get playback preferences (get /api/v1/me/playback/preferences)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_me_playback_preferences" tags: ["Sessions"] summary: "Update playback preferences" description: "Update playback preferences (put /api/v1/me/playback/preferences)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/me/history": get: operationId: "get_api_v1_me_history" tags: ["Users"] summary: "Get watch history" description: "Get watch history (get /api/v1/me/history)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/me/recommendations": get: operationId: "get_api_v1_me_recommendations" tags: ["Sessions"] summary: "Get recommendations" description: "Get recommendations (get /api/v1/me/recommendations)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/me/recommendations/{mediaItemId}": delete: operationId: "delete_api_v1_me_recommendations_mediaItemId" tags: ["Sessions"] summary: "Dismiss recommendation" description: "Dismiss recommendation (delete /api/v1/me/recommendations/{mediaItemId})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "mediaItemId" in: path required: true description: "Media item id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/me/sessions": get: operationId: "get_api_v1_me_sessions" tags: ["Sessions"] summary: "List sessions" description: "List sessions (get /api/v1/me/sessions)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/me/webauthn/credentials": get: operationId: "get_api_v1_me_webauthn_credentials" tags: ["Sessions"] summary: "List credentials" description: "List credentials (get /api/v1/me/webauthn/credentials)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/me/webauthn/credentials/{id}": delete: operationId: "delete_api_v1_me_webauthn_credentials_id" tags: ["Sessions"] summary: "Delete credential" description: "Delete credential (delete /api/v1/me/webauthn/credentials/{id})." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media": get: operationId: "get_api_v1_media" tags: ["Media"] summary: "Get media" description: "Get media (get /api/v1/media)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/facets": get: operationId: "get_api_v1_media_facets" tags: ["Media"] summary: "Get media facets" description: "Get media facets (get /api/v1/media/facets)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/index": get: operationId: "get_api_v1_media_index" tags: ["Media"] summary: "Index" description: "Index (get /api/v1/media/index)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/letter-index": get: operationId: "get_api_v1_media_letter_index" tags: ["Media"] summary: "Get letter index" description: "Get letter index (get /api/v1/media/letter-index)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/most-watched": get: operationId: "get_api_v1_media_most_watched" tags: ["Media"] summary: "Most watched" description: "Most watched (get /api/v1/media/most-watched)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/search": get: operationId: "get_api_v1_media_search" tags: ["Media"] summary: "Search media" description: "Search media (get /api/v1/media/search)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/search/by-marker": get: operationId: "get_api_v1_media_search_by_marker" tags: ["Media"] summary: "Search by marker" description: "Search by marker (get /api/v1/media/search/by-marker)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}": get: operationId: "get_api_v1_media_id" tags: ["Media"] summary: "Get media item" description: "Get media item (get /api/v1/media/{id})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_media_id" tags: ["Media"] summary: "Delete" description: "Delete (delete /api/v1/media/{id})." x-phlix-middleware: [AdminMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/chapters": get: operationId: "get_api_v1_media_id_chapters" tags: ["Media"] summary: "Get media chapters" description: "Get media chapters (get /api/v1/media/{id}/chapters)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/chapters/{index}/thumbnail": get: operationId: "get_api_v1_media_id_chapters_index_thumbnail" tags: ["Media"] summary: "Get chapter thumbnail" description: "Get chapter thumbnail (get /api/v1/media/{id}/chapters/{index}/thumbnail)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string - name: "index" in: path required: true description: "Zero-based index." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/collection": get: operationId: "get_api_v1_media_id_collection" tags: ["Media"] summary: "Get media item collection" description: "Get media item collection (get /api/v1/media/{id}/collection)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/download": get: operationId: "get_api_v1_media_id_download" tags: ["Media"] summary: "Get download" description: "Get download (get /api/v1/media/{id}/download)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/extras": get: operationId: "get_api_v1_media_id_extras" tags: ["Media"] summary: "Get extras" description: "Get extras (get /api/v1/media/{id}/extras)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/extras/other": get: operationId: "get_api_v1_media_id_extras_other" tags: ["Media"] summary: "Get other extras" description: "Get other extras (get /api/v1/media/{id}/extras/other)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/favorite": post: operationId: "post_api_v1_media_id_favorite" tags: ["Media"] summary: "Add favorite" description: "Add favorite (post /api/v1/media/{id}/favorite)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_media_id_favorite" tags: ["Media"] summary: "Remove favorite" description: "Remove favorite (delete /api/v1/media/{id}/favorite)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/like": put: operationId: "put_api_v1_media_id_like" tags: ["Media"] summary: "Set like level" description: "Set like level (put /api/v1/media/{id}/like)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/markers": get: operationId: "get_api_v1_media_id_markers" tags: ["Media"] summary: "Get markers" description: "Get markers (get /api/v1/media/{id}/markers)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_media_id_markers" tags: ["Media"] summary: "Create marker" description: "Create marker (post /api/v1/media/{id}/markers)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/markers/intro": get: operationId: "get_api_v1_media_id_markers_intro" tags: ["Media"] summary: "Get intro marker" description: "Get intro marker (get /api/v1/media/{id}/markers/intro)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/markers/outro": get: operationId: "get_api_v1_media_id_markers_outro" tags: ["Media"] summary: "Get outro marker" description: "Get outro marker (get /api/v1/media/{id}/markers/outro)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/markers/search": get: operationId: "get_api_v1_media_id_markers_search" tags: ["Media"] summary: "Search media markers" description: "Search media markers (get /api/v1/media/{id}/markers/search)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/markers/{markerId}": delete: operationId: "delete_api_v1_media_id_markers_markerId" tags: ["Media"] summary: "Delete marker" description: "Delete marker (delete /api/v1/media/{id}/markers/{markerId})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string - name: "markerId" in: path required: true description: "Marker id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/match/apply": post: operationId: "post_api_v1_media_id_match_apply" tags: ["Media"] summary: "Apply" description: "Apply (post /api/v1/media/{id}/match/apply)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/match/search": get: operationId: "get_api_v1_media_id_match_search" tags: ["Media"] summary: "Search" description: "Search (get /api/v1/media/{id}/match/search)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/metadata": patch: operationId: "patch_api_v1_media_id_metadata" tags: ["Media"] summary: "Update metadata" description: "Update metadata (patch /api/v1/media/{id}/metadata)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/missing-episodes": get: operationId: "get_api_v1_media_id_missing_episodes" tags: ["Media"] summary: "Get missing episodes" description: "Get missing episodes (get /api/v1/media/{id}/missing-episodes)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/playback": get: operationId: "get_api_v1_media_id_playback" tags: ["Media"] summary: "Get playback info" description: "Get playback info (get /api/v1/media/{id}/playback)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/playback-info": get: operationId: "get_api_v1_media_id_playback_info" tags: ["Media"] summary: "Get playback info" description: "Get playback info (get /api/v1/media/{id}/playback-info)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/poster": put: operationId: "put_api_v1_media_id_poster" tags: ["Media"] summary: "Set poster" description: "Set poster (put /api/v1/media/{id}/poster)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/posters": get: operationId: "get_api_v1_media_id_posters" tags: ["Media"] summary: "List posters" description: "List posters (get /api/v1/media/{id}/posters)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/rating": put: operationId: "put_api_v1_media_id_rating" tags: ["Media"] summary: "Set rating" description: "Set rating (put /api/v1/media/{id}/rating)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_media_id_rating" tags: ["Media"] summary: "Clear rating" description: "Clear rating (delete /api/v1/media/{id}/rating)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/ratings": get: operationId: "get_api_v1_media_id_ratings" tags: ["Media"] summary: "Get ratings" description: "Get ratings (get /api/v1/media/{id}/ratings)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_media_id_ratings" tags: ["Media"] summary: "Create rating" description: "Create rating (post /api/v1/media/{id}/ratings)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/similar": get: operationId: "get_api_v1_media_id_similar" tags: ["Media"] summary: "Get similar items" description: "Get similar items (get /api/v1/media/{id}/similar)." x-phlix-middleware: [AuthMiddleware, AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/subtitles": get: operationId: "get_api_v1_media_id_subtitles" tags: ["Media"] summary: "List tracks" description: "List tracks (get /api/v1/media/{id}/subtitles)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/subtitles/download": post: operationId: "post_api_v1_media_id_subtitles_download" tags: ["Media"] summary: "Download" description: "Download (post /api/v1/media/{id}/subtitles/download)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/subtitles/external/{streamId}": get: operationId: "get_api_v1_media_id_subtitles_external_streamId" tags: ["Media"] summary: "Serve external" description: "Serve external (get /api/v1/media/{id}/subtitles/external/{streamId})." x-phlix-middleware: [SignedUrlMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string - name: "streamId" in: path required: true description: "Audio/subtitle stream index." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/subtitles/search": get: operationId: "get_api_v1_media_id_subtitles_search" tags: ["Media"] summary: "Search" description: "Search (get /api/v1/media/{id}/subtitles/search)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/subtitles/{index}": get: operationId: "get_api_v1_media_id_subtitles_index" tags: ["Media"] summary: "Get track" description: "Get track (get /api/v1/media/{id}/subtitles/{index})." x-phlix-middleware: [SignedUrlMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string - name: "index" in: path required: true description: "Zero-based index." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/trailers": get: operationId: "get_api_v1_media_id_trailers" tags: ["Media"] summary: "Get trailers" description: "Get trailers (get /api/v1/media/{id}/trailers)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/transcode": post: operationId: "post_api_v1_media_id_transcode" tags: ["Media"] summary: "Start" description: "Start (post /api/v1/media/{id}/transcode)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/trickplay": get: operationId: "get_api_v1_media_id_trickplay" tags: ["Media"] summary: "Get trickplay" description: "Get trickplay (get /api/v1/media/{id}/trickplay)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/unwatched": post: operationId: "post_api_v1_media_id_unwatched" tags: ["Media"] summary: "Mark unwatched" description: "Mark unwatched (post /api/v1/media/{id}/unwatched)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/media/{id}/watched": post: operationId: "post_api_v1_media_id_watched" tags: ["Media"] summary: "Mark watched" description: "Mark watched (post /api/v1/media/{id}/watched)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/music/album": get: operationId: "get_api_v1_music_album" tags: ["Music & Books"] summary: "Get album by name query param" description: "Get album (get /api/v1/music/album). The album TITLE rides the required `name` query parameter, percent-encoded on the wire and decoded once by the request layer; the only spelling whose name can contain `/`, since the relay path guard rejects encoded slashes in the path segment. `artist` optionally disambiguates shared titles." x-phlix-middleware: [AuthMiddleware] parameters: - name: "name" in: query required: true description: "Album title." schema: type: string - name: "artist" in: query required: false description: "Artist name." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/music/albums": get: operationId: "get_api_v1_music_albums" tags: ["Music & Books"] summary: "List albums" description: "List albums (get /api/v1/music/albums)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/music/albums/{mbid}": get: operationId: "get_api_v1_music_albums_mbid" tags: ["Music & Books"] summary: "Get album" description: "Get album (get /api/v1/music/albums/{mbid})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "mbid" in: path required: true description: "MusicBrainz id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/music/artist": get: operationId: "get_api_v1_music_artist" tags: ["Music & Books"] summary: "Get artist by name query param" description: "Get artist (get /api/v1/music/artist). The artist NAME rides the required `name` query parameter, percent-encoded on the wire and decoded once by the request layer; the only spelling whose name can contain `/`, since the relay path guard rejects encoded slashes in the path segment." x-phlix-middleware: [AuthMiddleware] parameters: - name: "name" in: query required: true description: "Artist name." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/music/artists": get: operationId: "get_api_v1_music_artists" tags: ["Music & Books"] summary: "List artists" description: "List artists (get /api/v1/music/artists)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/music/artists/{mbid}": get: operationId: "get_api_v1_music_artists_mbid" tags: ["Music & Books"] summary: "Get artist" description: "Get artist (get /api/v1/music/artists/{mbid})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "mbid" in: path required: true description: "MusicBrainz id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/music/now-playing": get: operationId: "get_api_v1_music_now_playing" tags: ["Music & Books"] summary: "Now playing" description: "Now playing (get /api/v1/music/now-playing)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/music/scan": post: operationId: "post_api_v1_music_scan" tags: ["Music & Books"] summary: "Scan music directory" description: "Scan music directory (post /api/v1/music/scan)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/music/tracks": get: operationId: "get_api_v1_music_tracks" tags: ["Music & Books"] summary: "List tracks" description: "List tracks (get /api/v1/music/tracks)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/music/tracks/{id}": get: operationId: "get_api_v1_music_tracks_id" tags: ["Music & Books"] summary: "Get track" description: "Get track (get /api/v1/music/tracks/{id})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/oauth/lastfm": get: operationId: "get_api_v1_oauth_lastfm" tags: ["Integrations"] summary: "Api authorize" description: "Api authorize (get /api/v1/oauth/lastfm)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "302": description: "Found - browser redirect to the provider authorization URL. No JSON body." headers: Location: description: "Provider authorization URL." schema: type: string "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/oauth/lastfm/callback": get: operationId: "get_api_v1_oauth_lastfm_callback" tags: ["Integrations"] summary: "Api callback" description: "Api callback (get /api/v1/oauth/lastfm/callback)." x-phlix-middleware: [AdminMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "302": description: "Found - browser redirect to the application continuation route. No JSON body." headers: Location: description: "Application route carrying the handshake outcome." schema: type: string "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/oauth/trakt": get: operationId: "get_api_v1_oauth_trakt" tags: ["Integrations"] summary: "Authorize" description: "Authorize (get /api/v1/oauth/trakt)." x-phlix-middleware: [] security: [] responses: "302": description: "Found - browser redirect to the provider authorization URL. No JSON body." headers: Location: description: "Provider authorization URL." schema: type: string "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/oauth/trakt/callback": get: operationId: "get_api_v1_oauth_trakt_callback" tags: ["Integrations"] summary: "Callback" description: "Callback (get /api/v1/oauth/trakt/callback)." x-phlix-middleware: [] security: [] responses: "302": description: "Found - browser redirect to the application continuation route. No JSON body." headers: Location: description: "Application route carrying the handshake outcome." schema: type: string "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/photo/albums": get: operationId: "get_api_v1_photo_albums" tags: ["Photos"] summary: "List albums" description: "List albums (get /api/v1/photo/albums)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/photo/albums/{id}": get: operationId: "get_api_v1_photo_albums_id" tags: ["Photos"] summary: "Get album" description: "Get album (get /api/v1/photo/albums/{id})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/photo/photos": get: operationId: "get_api_v1_photo_photos" tags: ["Photos"] summary: "List photos" description: "List photos (get /api/v1/photo/photos)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/photo/photos/{id}": get: operationId: "get_api_v1_photo_photos_id" tags: ["Photos"] summary: "Get photo" description: "Get photo (get /api/v1/photo/photos/{id})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" # S73: person-photo bytes from S72's flat `people-{tmdbPersonId}` artwork cache. # Registered OUTSIDE the auth group (route-level middleware []), but gated # handler-side by ArtworkByteResponder::rejectUnlessSigned (session user OR a # valid signed-URL) — so `[]` is not proof of ungated (S272): a missing/invalid # `w` width yields 400 BEFORE auth, an unauthenticated request yields 401, a # variant miss yields 404, a conditional-GET hit yields 304, and success is the # image/jpeg (or image/png for the logo width) byte stream. Mirrors # tests/Unit/Server/WebPortal/WebPortalRouterWirePathGuardTest MANIFEST. "/api/v1/people/{personId}/photo": get: operationId: "get_api_v1_people_person_photo" tags: ["Media"] summary: "Get person photo" description: "Get person photo (get /api/v1/people/{personId}/photo)." x-phlix-middleware: [] parameters: - name: "personId" in: path required: true description: "TMDB person id — the flat artwork cache key suffix S72 writes." schema: type: string security: [] responses: "200": description: "Success. Streams the person-photo image (image/jpeg, or image/png for the logo width)." content: '*/*': schema: {} "304": description: "Not Modified — conditional GET matching the resource validators." "400": $ref: "#/components/responses/BadRequest" "401": $ref: "#/components/responses/Unauthorized" "404": $ref: "#/components/responses/NotFound" "/api/v1/photo/photos/{id}/full": get: operationId: "get_api_v1_photo_photos_id_full" tags: ["Photos"] summary: "Get full" description: "Get full (get /api/v1/photo/photos/{id}/full)." x-phlix-middleware: [SignedUrlMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/photo/photos/{id}/thumbnail": get: operationId: "get_api_v1_photo_photos_id_thumbnail" tags: ["Photos"] summary: "Get thumbnail" description: "Get thumbnail (get /api/v1/photo/photos/{id}/thumbnail)." x-phlix-middleware: [SignedUrlMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/photo/slideshow": get: operationId: "get_api_v1_photo_slideshow" tags: ["Photos"] summary: "Slideshow" description: "Slideshow (get /api/v1/photo/slideshow)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/playlists": post: operationId: "post_api_v1_playlists" tags: ["Collections"] summary: "Create" description: "Create (post /api/v1/playlists)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "201": description: "Created." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/profiles": get: operationId: "get_api_v1_profiles" tags: ["Profiles"] summary: "List" description: "List (get /api/v1/profiles)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_profiles" tags: ["Profiles"] summary: "Create" description: "Create (post /api/v1/profiles)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "201": description: "Created." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/profiles/{profileId}": get: operationId: "get_api_v1_profiles_profileId" tags: ["Profiles"] summary: "Get" description: "Get (get /api/v1/profiles/{profileId})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_profiles_profileId" tags: ["Profiles"] summary: "Update" description: "Update (put /api/v1/profiles/{profileId})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_profiles_profileId" tags: ["Profiles"] summary: "Delete" description: "Delete (delete /api/v1/profiles/{profileId})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/profiles/{profileId}/active-streams": get: operationId: "get_api_v1_profiles_profileId_active_streams" tags: ["Profiles"] summary: "Get active streams" description: "Get active streams (get /api/v1/profiles/{profileId}/active-streams)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/profiles/{profileId}/avatar": post: operationId: "post_api_v1_profiles_profileId_avatar" tags: ["Profiles"] summary: "Upload avatar" description: "Upload avatar (post /api/v1/profiles/{profileId}/avatar)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/profiles/{profileId}/pin": post: operationId: "post_api_v1_profiles_profileId_pin" tags: ["Profiles"] summary: "Set pin" description: "Set pin (post /api/v1/profiles/{profileId}/pin)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_profiles_profileId_pin" tags: ["Profiles"] summary: "Remove pin" description: "Remove pin (delete /api/v1/profiles/{profileId}/pin)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/profiles/{profileId}/pin/verify": post: operationId: "post_api_v1_profiles_profileId_pin_verify" tags: ["Profiles"] summary: "Verify pin" description: "Verify pin (post /api/v1/profiles/{profileId}/pin/verify)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/profiles/{profileId}/schedules": get: operationId: "get_api_v1_profiles_profileId_schedules" tags: ["Profiles"] summary: "List for profile" description: "List for profile (get /api/v1/profiles/{profileId}/schedules)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_profiles_profileId_schedules" tags: ["Profiles"] summary: "Create for profile" description: "Create for profile (post /api/v1/profiles/{profileId}/schedules)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "201": description: "Created." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/profiles/{profileId}/schedules/{scheduleId}": get: operationId: "get_api_v1_profiles_profileId_schedules_scheduleId" tags: ["Profiles"] summary: "Get schedule" description: "Get schedule (get /api/v1/profiles/{profileId}/schedules/{scheduleId})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string - name: "scheduleId" in: path required: true description: "Access schedule id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_profiles_profileId_schedules_scheduleId" tags: ["Profiles"] summary: "Update schedule" description: "Update schedule (put /api/v1/profiles/{profileId}/schedules/{scheduleId})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string - name: "scheduleId" in: path required: true description: "Access schedule id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_profiles_profileId_schedules_scheduleId" tags: ["Profiles"] summary: "Delete schedule" description: "Delete schedule (delete /api/v1/profiles/{profileId}/schedules/{scheduleId})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string - name: "scheduleId" in: path required: true description: "Access schedule id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/profiles/{profileId}/stream-limits": get: operationId: "get_api_v1_profiles_profileId_stream_limits" tags: ["Profiles"] summary: "Get stream limits" description: "Get stream limits (get /api/v1/profiles/{profileId}/stream-limits)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_profiles_profileId_stream_limits" tags: ["Profiles"] summary: "Update stream limits" description: "Update stream limits (put /api/v1/profiles/{profileId}/stream-limits)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/profiles/{profileId}/switch": post: operationId: "post_api_v1_profiles_profileId_switch" tags: ["Profiles"] summary: "Switch profile" description: "Switch profile (post /api/v1/profiles/{profileId}/switch)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/profiles/{profileId}/tags": get: operationId: "get_api_v1_profiles_profileId_tags" tags: ["Profiles"] summary: "List for profile" description: "List for profile (get /api/v1/profiles/{profileId}/tags)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_profiles_profileId_tags" tags: ["Profiles"] summary: "Create for profile" description: "Create for profile (post /api/v1/profiles/{profileId}/tags)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "201": description: "Created." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/profiles/{profileId}/tags/{tagId}": delete: operationId: "delete_api_v1_profiles_profileId_tags_tagId" tags: ["Profiles"] summary: "Delete tag" description: "Delete tag (delete /api/v1/profiles/{profileId}/tags/{tagId})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "profileId" in: path required: true description: "User profile id." schema: type: string - name: "tagId" in: path required: true description: "Tag id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/roku/devices": get: operationId: "get_api_v1_roku_devices" tags: ["Casting"] summary: "List devices" description: "List devices (get /api/v1/roku/devices)." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/roku/devices/{id}/key/{keyName}": post: operationId: "post_api_v1_roku_devices_id_key_keyName" tags: ["Casting"] summary: "Send key" description: "Send key (post /api/v1/roku/devices/{id}/key/{keyName})." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string - name: "keyName" in: path required: true description: "Remote key name." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/roku/devices/{id}/launch/{channelId}": post: operationId: "post_api_v1_roku_devices_id_launch_channelId" tags: ["Casting"] summary: "Launch channel" description: "Launch channel (post /api/v1/roku/devices/{id}/launch/{channelId})." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string - name: "channelId" in: path required: true description: "Channel id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/roku/devices/{id}/send": post: operationId: "post_api_v1_roku_devices_id_send" tags: ["Casting"] summary: "Send media" description: "Send media (post /api/v1/roku/devices/{id}/send)." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/roku/devices/{id}/status": get: operationId: "get_api_v1_roku_devices_id_status" tags: ["Casting"] summary: "Get status" description: "Get status (get /api/v1/roku/devices/{id}/status)." x-phlix-middleware: [AuthMiddleware, CastingEnabledMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/servers": get: operationId: "get_api_v1_servers" tags: ["System"] summary: "Servers" description: "Servers (get /api/v1/servers)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/servers/{id}": get: operationId: "get_api_v1_servers_id" tags: ["System"] summary: "Show" description: "Show (get /api/v1/servers/{id})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/sessions": post: operationId: "post_api_v1_sessions" tags: ["Sessions"] summary: "Create session" description: "Create session (post /api/v1/sessions)." x-phlix-middleware: [] security: [] responses: "201": description: "Created." content: application/json: schema: type: object additionalProperties: true "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/sessions/{id}": delete: operationId: "delete_api_v1_sessions_id" tags: ["Sessions"] summary: "End session" description: "End session (delete /api/v1/sessions/{id})." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/sessions/{id}/complete": post: operationId: "post_api_v1_sessions_id_complete" tags: ["Sessions"] summary: "Complete playback" description: "Complete playback (post /api/v1/sessions/{id}/complete)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/sessions/{id}/progress": get: operationId: "get_api_v1_sessions_id_progress" tags: ["Sessions"] summary: "Get progress" description: "Get progress (get /api/v1/sessions/{id}/progress)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_sessions_id_progress" tags: ["Sessions"] summary: "Report progress" description: "Report progress (post /api/v1/sessions/{id}/progress)." x-phlix-middleware: [] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/shows/{id}/markers/bulk": get: operationId: "get_api_v1_shows_id_markers_bulk" tags: ["General"] summary: "Get show markers" description: "Get show markers (get /api/v1/shows/{id}/markers/bulk)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/shuffle": post: operationId: "post_api_v1_shuffle" tags: ["Media"] summary: "Shuffle play" description: "Shuffle play (post /api/v1/shuffle)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/syncplay/groups": get: operationId: "get_api_v1_syncplay_groups" tags: ["SyncPlay"] summary: "List groups" description: "List groups (get /api/v1/syncplay/groups)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_api_v1_syncplay_groups" tags: ["SyncPlay"] summary: "Create group" description: "Create group (post /api/v1/syncplay/groups)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/syncplay/groups/{id}": get: operationId: "get_api_v1_syncplay_groups_id" tags: ["SyncPlay"] summary: "Get group" description: "Get group (get /api/v1/syncplay/groups/{id})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/syncplay/groups/{id}/join": post: operationId: "post_api_v1_syncplay_groups_id_join" tags: ["SyncPlay"] summary: "Join group" description: "Join group (post /api/v1/syncplay/groups/{id}/join)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/syncplay/groups/{id}/leave": post: operationId: "post_api_v1_syncplay_groups_id_leave" tags: ["SyncPlay"] summary: "Leave group" description: "Leave group (post /api/v1/syncplay/groups/{id}/leave)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/themes": get: operationId: "get_api_v1_themes" tags: ["Theming"] summary: "List themes" description: "List themes (get /api/v1/themes)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/themes/{id}": get: operationId: "get_api_v1_themes_id" tags: ["Theming"] summary: "Get theme" description: "Get theme (get /api/v1/themes/{id})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/telemetry/heartbeat": post: operationId: "post_api_v1_telemetry_heartbeat" tags: ["Telemetry"] summary: "Record a consented client heartbeat" description: "Record a consented client heartbeat (post /api/v1/telemetry/heartbeat). Opt-in: body consent MUST be true; storage failures are swallowed into a 200 with recorded=false." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/transcode/{jobId}/status": get: operationId: "get_api_v1_transcode_jobId_status" tags: ["Transcoding"] summary: "Status" description: "Status (get /api/v1/transcode/{jobId}/status)." x-phlix-middleware: [AuthMiddleware] parameters: - name: "jobId" in: path required: true description: "Transcode job id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/users/me/avatar": post: operationId: "post_api_v1_users_me_avatar" tags: ["Users"] summary: "Upload avatar" description: "Upload avatar (post /api/v1/users/me/avatar)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_users_me_avatar" tags: ["Users"] summary: "Delete avatar" description: "Delete avatar (delete /api/v1/users/me/avatar)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/users/me/continue-watching": get: operationId: "get_api_v1_users_me_continue_watching" tags: ["Users"] summary: "Get continue watching" description: "Get continue watching (get /api/v1/users/me/continue-watching)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/users/me/favorites": get: operationId: "get_api_v1_users_me_favorites" tags: ["Users"] summary: "List favorites" description: "List favorites (get /api/v1/users/me/favorites)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/users/me/history": get: operationId: "get_api_v1_users_me_history" tags: ["Users"] summary: "Get watch history" description: "Get watch history (get /api/v1/users/me/history)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" delete: operationId: "delete_api_v1_users_me_history" tags: ["Users"] summary: "Clear history" description: "Clear history (delete /api/v1/users/me/history)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/users/me/history/{mediaItemId}": delete: operationId: "delete_api_v1_users_me_history_mediaItemId" tags: ["Users"] summary: "Remove from history" description: "Remove from history (delete /api/v1/users/me/history/{mediaItemId})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "mediaItemId" in: path required: true description: "Media item id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/users/me/next-up": get: operationId: "get_api_v1_users_me_next_up" tags: ["Users"] summary: "Get next up" description: "Get next up (get /api/v1/users/me/next-up)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/users/me/recently-watched": get: operationId: "get_api_v1_users_me_recently_watched" tags: ["Users"] summary: "Get recently watched" description: "Get recently watched (get /api/v1/users/me/recently-watched)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/api/v1/users/me/settings": get: operationId: "get_api_v1_users_me_settings" tags: ["Users"] summary: "Get user settings" description: "Get user settings (get /api/v1/users/me/settings)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" put: operationId: "put_api_v1_users_me_settings" tags: ["Users"] summary: "Update user settings" description: "Update user settings (put /api/v1/users/me/settings)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/auth/github/authorize": get: operationId: "get_auth_github_authorize" tags: ["Authentication"] summary: "Authorize" description: "Authorize (get /auth/github/authorize)." x-phlix-middleware: [] security: [] responses: "302": description: "Found - browser redirect to the provider authorization URL. No JSON body." headers: Location: description: "Provider authorization URL." schema: type: string "429": $ref: "#/components/responses/TooManyRequests" "/auth/github/callback": get: operationId: "get_auth_github_callback" tags: ["Authentication"] summary: "Callback" description: "Callback (get /auth/github/callback)." x-phlix-middleware: [] security: [] responses: "302": description: "Found - browser redirect to the application continuation route. No JSON body." headers: Location: description: "Application route carrying the handshake outcome." schema: type: string "429": $ref: "#/components/responses/TooManyRequests" "/auth/identities": get: operationId: "get_auth_identities" tags: ["Authentication"] summary: "List identities" description: "List identities (get /auth/identities)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/auth/identities/link/github": get: operationId: "get_auth_identities_link_github" tags: ["Authentication"] summary: "Authorize link" description: "Authorize link (get /auth/identities/link/github)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/auth/identities/link/hub": post: operationId: "post_auth_identities_link_hub" tags: ["Authentication"] summary: "Link hub" description: "Link hub (post /auth/identities/link/hub)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "503": description: "Server not enrolled with a hub (hub.not_enrolled)." content: application/json: schema: $ref: "#/components/schemas/Error" "/auth/identities/link/ldap": post: operationId: "post_auth_identities_link_ldap" tags: ["Authentication"] summary: "Link ldap" description: "Link ldap (post /auth/identities/link/ldap)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/auth/identities/link/oidc": get: operationId: "get_auth_identities_link_oidc" tags: ["Authentication"] summary: "Authorize link" description: "Authorize link (get /auth/identities/link/oidc)." x-phlix-middleware: [AuthMiddleware] security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "429": $ref: "#/components/responses/TooManyRequests" "/auth/identities/{id}": delete: operationId: "delete_auth_identities_id" tags: ["Authentication"] summary: "Unlink" description: "Unlink (delete /auth/identities/{id})." x-phlix-middleware: [AuthMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: - bearerAuth: [] - sessionCookie: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "401": $ref: "#/components/responses/Unauthorized" "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/auth/login": post: operationId: "post_auth_login" tags: ["Authentication"] summary: "Login" description: >- Login (post /auth/login). Browser form alias of /api/v1/auth/login: any request on this path (or a form Content-Type on the API path) gets the REDIRECT contract instead of JSON — 302 to `/` with HttpOnly `phlix_session`/`phlix_refresh` cookies on success, 302 to `/login?error=…` on bad credentials, inactive account, or the signup-disabled / validation failures. The JSON contract (200 with the token pair, 400/403 errors) lives on /api/v1/auth/login. x-phlix-middleware: [] security: [] responses: "302": description: "Redirect to / (success, cookies set) or /login?error=… (failure)." headers: Set-Cookie: description: "HttpOnly auth cookies on success only." schema: type: string "429": $ref: "#/components/responses/TooManyRequests" "/auth/logout": get: operationId: "get_auth_logout" tags: ["Authentication"] summary: "Logout" description: >- Logout (get /auth/logout). Browser alias; POST /auth/logout is the same handler. When the request carries a resolvable identity (bearer access token or session cookie), this is a REAL server-side logout: the per-user token revocation watermark is bumped (every JWT minted up to now dies on both the access and refresh paths within the documented 5s cache ceiling) and all device session rows are ended (M-1). Always answers 302 to /login after clearing the auth cookies — including for already-anonymous requests (idempotent; no JSON body). x-phlix-middleware: [] security: [] responses: "302": description: "Redirect to /login; auth cookies cleared." headers: Set-Cookie: description: "phlix_session and phlix_refresh cookies cleared." schema: type: string "429": $ref: "#/components/responses/TooManyRequests" post: operationId: "post_auth_logout" tags: ["Authentication"] summary: "Logout" description: >- Logout (post /auth/logout). See the GET alias: same handler, same server-side JWT + device-session revocation (M-1), always 302 to /login. API clients authenticating with a bearer token should call THIS route (POST is the semantically correct verb for a state change) to kill their token lineage server-side instead of only discarding it client-side. x-phlix-middleware: [] security: [] responses: "302": description: "Redirect to /login; auth cookies cleared." headers: Set-Cookie: description: "phlix_session and phlix_refresh cookies cleared." schema: type: string "429": $ref: "#/components/responses/TooManyRequests" "/auth/oidc/authorize": get: operationId: "get_auth_oidc_authorize" tags: ["Authentication"] summary: "Authorize" description: "Authorize (get /auth/oidc/authorize)." x-phlix-middleware: [] security: [] responses: "302": description: "Found - browser redirect to the provider authorization URL. No JSON body." headers: Location: description: "Provider authorization URL." schema: type: string "429": $ref: "#/components/responses/TooManyRequests" "/auth/oidc/callback": get: operationId: "get_auth_oidc_callback" tags: ["Authentication"] summary: "Callback" description: "Callback (get /auth/oidc/callback)." x-phlix-middleware: [] security: [] responses: "302": description: "Found - browser redirect to the application continuation route. No JSON body." headers: Location: description: "Application route carrying the handshake outcome." schema: type: string "429": $ref: "#/components/responses/TooManyRequests" "/auth/refresh": post: operationId: "post_auth_refresh" tags: ["Authentication"] summary: "Refresh" description: "Refresh (post /auth/refresh)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "400": $ref: "#/components/responses/BadRequest" "429": $ref: "#/components/responses/TooManyRequests" "/auth/register": post: operationId: "post_auth_register" tags: ["Authentication"] summary: "Register" description: >- Register (post /auth/register). Browser form alias of /api/v1/auth/register (which owns the 201/202/400/403 JSON contract): this path always answers 302 — success → `/` with auth cookies (open mode / first user) or `/login?notice=…` (pending approval); validation or signup-disabled failures → `/auth/register?error=…`. x-phlix-middleware: [] security: [] responses: "302": description: "Redirect: / on active signup, /login?notice= when pending, /auth/register?error= on failure." headers: Set-Cookie: description: "HttpOnly auth cookies on active signup only." schema: type: string "429": $ref: "#/components/responses/TooManyRequests" "/dash/{job_id}/manifest": get: operationId: "get_dash_job_id_manifest" tags: ["Transcoding"] summary: "Get manifest" description: "Get manifest (get /dash/{job_id}/manifest)." x-phlix-middleware: [SignedUrlMiddleware, StreamLimitMiddleware] parameters: - name: "job_id" in: path required: true description: "Transcode job id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "/dash/{job_id}/{file}": get: operationId: "get_dash_job_id_file" tags: ["Transcoding"] summary: "Serve file" description: "Serve file (get /dash/{job_id}/{file})." x-phlix-middleware: [SignedUrlMiddleware, StreamLimitMiddleware] parameters: - name: "job_id" in: path required: true description: "Transcode job id." schema: type: string - name: "file" in: path required: true description: "Requested file name within the job output directory." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "/health": get: operationId: "get_health" tags: ["System"] summary: "Health" description: "Health (get /health)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "/hls/{job_id}/playlist": get: operationId: "get_hls_job_id_playlist" tags: ["Transcoding"] summary: "Get playlist" description: "Get playlist (get /hls/{job_id}/playlist)." x-phlix-middleware: [SignedUrlMiddleware, StreamLimitMiddleware] parameters: - name: "job_id" in: path required: true description: "Transcode job id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "/hls/{job_id}/{file}": get: operationId: "get_hls_job_id_file" tags: ["Transcoding"] summary: "Serve file" description: "Serve file (get /hls/{job_id}/{file})." x-phlix-middleware: [SignedUrlMiddleware, StreamLimitMiddleware] parameters: - name: "job_id" in: path required: true description: "Transcode job id." schema: type: string - name: "file" in: path required: true description: "Requested file name within the job output directory." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "/livetv/recording/{id}/stream": get: operationId: "get_livetv_recording_id_stream" tags: ["Live TV"] summary: "Stream recording" description: "Stream recording (get /livetv/recording/{id}/stream)." x-phlix-middleware: [SignedUrlMiddleware, StreamLimitMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "/livetv/timeshift/{sessionId}/stream": get: operationId: "get_livetv_timeshift_sessionId_stream" tags: ["Live TV"] summary: "Stream time shift" description: "Stream time shift (get /livetv/timeshift/{sessionId}/stream)." x-phlix-middleware: [SignedUrlMiddleware, StreamLimitMiddleware] parameters: - name: "sessionId" in: path required: true description: "Playback session id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "/livetv/timeshift/{sessionId}/{segment}": get: operationId: "get_livetv_timeshift_sessionId_segment" tags: ["Live TV"] summary: "Stream time shift segment" description: "Stream time shift segment (get /livetv/timeshift/{sessionId}/{segment})." x-phlix-middleware: [SignedUrlMiddleware, StreamLimitMiddleware] parameters: - name: "sessionId" in: path required: true description: "Playback session id." schema: type: string - name: "segment" in: path required: true description: "Segment file name." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "/opds/v1.2": get: operationId: "get_opds_v1_2" tags: ["OPDS Catalog"] summary: "Opds root" description: "Opds root (get /opds/v1.2)." x-phlix-middleware: [SignedUrlMiddleware] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "403": $ref: "#/components/responses/Forbidden" "/opds/v1.2/books/{id}/cover": get: operationId: "get_opds_v1_2_books_id_cover" tags: ["OPDS Catalog"] summary: "Opds book cover" description: "Opds book cover (get /opds/v1.2/books/{id}/cover)." x-phlix-middleware: [SignedUrlMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "/opds/v1.2/books/{id}/download": get: operationId: "get_opds_v1_2_books_id_download" tags: ["OPDS Catalog"] summary: "Download book" description: "Download book (get /opds/v1.2/books/{id}/download)." x-phlix-middleware: [SignedUrlMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "/opds/v1.2/libraries": get: operationId: "get_opds_v1_2_libraries" tags: ["OPDS Catalog"] summary: "Opds libraries" description: "Opds libraries (get /opds/v1.2/libraries)." x-phlix-middleware: [SignedUrlMiddleware] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "403": $ref: "#/components/responses/Forbidden" "/opds/v1.2/libraries/{id}": get: operationId: "get_opds_v1_2_libraries_id" tags: ["OPDS Catalog"] summary: "Opds library books" description: "Opds library books (get /opds/v1.2/libraries/{id})." x-phlix-middleware: [SignedUrlMiddleware] parameters: - name: "id" in: path required: true description: "Resource id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "403": $ref: "#/components/responses/Forbidden" "404": $ref: "#/components/responses/NotFound" "/stream/theme-media/item/{mediaItemId}": get: operationId: "get_stream_theme_media_item_mediaItemId" tags: ["Theming"] summary: "Stream item theme" description: "Stream item theme (get /stream/theme-media/item/{mediaItemId})." x-phlix-middleware: [] parameters: - name: "mediaItemId" in: path required: true description: "Media item id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "404": $ref: "#/components/responses/NotFound" "/stream/theme-media/{libraryId}/audio": get: operationId: "get_stream_theme_media_libraryId_audio" tags: ["Theming"] summary: "Stream audio" description: "Stream audio (get /stream/theme-media/{libraryId}/audio)." x-phlix-middleware: [] parameters: - name: "libraryId" in: path required: true description: "Library id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "404": $ref: "#/components/responses/NotFound" "/stream/theme-media/{libraryId}/video": get: operationId: "get_stream_theme_media_libraryId_video" tags: ["Theming"] summary: "Stream video" description: "Stream video (get /stream/theme-media/{libraryId}/video)." x-phlix-middleware: [] parameters: - name: "libraryId" in: path required: true description: "Library id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "404": $ref: "#/components/responses/NotFound" "/system/info": get: operationId: "get_system_info" tags: ["System"] summary: "Info" description: "Info (get /system/info)." x-phlix-middleware: [] security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "/trickplay/{jobId}/sprite.jpg": get: operationId: "get_trickplay_jobId_sprite_jpg" tags: ["Media"] summary: "Get sprite" description: "Get sprite (get /trickplay/{jobId}/sprite.jpg)." x-phlix-middleware: [] parameters: - name: "jobId" in: path required: true description: "Transcode job id." schema: type: string security: [] responses: "200": description: "Success. Streams the media/binary resource." content: '*/*': schema: {} "404": $ref: "#/components/responses/NotFound" "/trickplay/{jobId}/thumbs.bif": get: operationId: "get_trickplay_jobId_thumbs_bif" tags: ["Media"] summary: "Get bif" description: "Get bif (get /trickplay/{jobId}/thumbs.bif)." x-phlix-middleware: [] parameters: - name: "jobId" in: path required: true description: "Transcode job id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" "/trickplay/{jobId}/timeline.json": get: operationId: "get_trickplay_jobId_timeline_json" tags: ["Media"] summary: "Get timeline" description: "Get timeline (get /trickplay/{jobId}/timeline.json)." x-phlix-middleware: [] parameters: - name: "jobId" in: path required: true description: "Transcode job id." schema: type: string security: [] responses: "200": description: "Success." content: application/json: schema: type: object additionalProperties: true "404": $ref: "#/components/responses/NotFound" components: securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT description: |- HS256 access JWT minted by `AuthController::login`/`refresh` (iss=phlix, 1h). Enforced by `AuthMiddleware`; `AdminMiddleware` additionally requires an admin account. sessionCookie: type: apiKey in: cookie name: phlix_session description: |- HttpOnly `phlix_session` access-JWT cookie (COOKIE-DESIGN.md carrier pair with `phlix_refresh`), set by `AuthController` on browser-class login/register/refresh and accepted wherever `bearerAuth` is — `RequestAuthenticator` checks the bearer header first, then this cookie. Device-class clients (`X-Phlix-Device-Type` header or a non-browser Origin) never receive or send it; the scheme-gate (https-or-localhost, §2.4) governs issuance. responses: Unauthorized: description: "No credentials, or credentials the middleware rejected." content: application/json: schema: $ref: "#/components/schemas/Error" Forbidden: description: "Authenticated but not permitted (non-admin, rating or schedule gate)." content: application/json: schema: $ref: "#/components/schemas/Error" NotFound: description: "No route matched, or the addressed resource does not exist." content: application/json: schema: $ref: "#/components/schemas/Error" BadRequest: description: "The request body or query was missing or invalid." content: application/json: schema: $ref: "#/components/schemas/Error" TooManyRequests: description: "Rate limit exceeded for this limiter profile." content: application/json: schema: $ref: "#/components/schemas/Error" schemas: Error: type: object description: "The server's flat error envelope." required: ["error"] properties: error: type: string description: "Human-readable error message." code: type: string description: "Machine-readable dotted error code (e.g. auth.not_admin)." enum: # W2 error-code doctrine: pinned by tests/Unit/Contracts/ErrorCodesOpenApiEnumContractTest # to the set of codes src/ can actually place on this field (@phlix/contracts v0.5.5 order). # The registry grew three codes since v0.5.1 and none is REST-emittable from src/: the # v0.5.3 pair (leaf_hub_id_already_bound is hub-federation, syncplay.queue_limit_exceeded # rides the WS error_code channel) and v0.5.5's common.not_found (RESERVED for the hub's # 404 fallback flips), so the exact-equality law correctly keeps all three out of this enum. - "auth.required" - "auth.not_admin" - "auth.signups_disabled" - "auth.account_pending" - "auth.account_disabled" - "auth.password_change_required" - "hub.not_enrolled" - "hub.token_required" - "hub.jwt_invalid" - "stream.limit_exceeded" - "access.scheduled" - "csrf.invalid_origin" - "plugin.name.required" - "plugin.not_found" - "plugin.url.required" - "plugin.url.invalid_scheme" - "plugin.url.blocked" - "plugin.install.failed" - "plugin.enable.failed" - "plugin.settings.invalid" - "plugin.settings.validation_failed" - "plugin.test_not_supported" - "plugin.update.failed" - "plugin.update.no_source" - "plugin.catalog.url.required" - "plugin.catalog.url.duplicate" - "plugin.catalog.url.invalid" - "plugin.auto_update.invalid" - "plugin.catalog.channel.invalid" - "library.delete_all.confirm_required" - "metadata.tmdb_unconfigured" - "metadata.tmdb_unreachable" - "metadata.no_query" - "metadata.bad_tmdb_id" - "metadata.no_match" - "poster.missing_url" - "poster.poster_not_candidate" - "profile.use_switch" - "profile.last_profile" - "profile.no_pin" - "profile.pin_mismatch" - "profile.not_found" - "dlna.forbidden" - "casting.disabled" - "unauthorized" - "invalid_secret" - "pairing_not_pending" - "consent_required" - "pairing_not_found" - "storage_unavailable" - "rate_limited" - "provider_unavailable" - "invalid_request" - "invalid_payload" - "update_check_dispatch_failed"