web/openapi.snapshot.json
Rama dev · réplica de lectura del repositorio original.
{
"components": {
"schemas": {
"AccountPrivacyOut": {
"additionalProperties": true,
"description": "One Plex account's share filter, as plex.tv reports it RIGHT NOW.",
"properties": {
"account_id": {
"title": "Account Id",
"type": "integer"
},
"display_name": {
"title": "Display Name",
"type": "string"
},
"hides": {
"items": {
"type": "string"
},
"title": "Hides",
"type": "array"
},
"manage_sharing": {
"title": "Manage Sharing",
"type": "boolean"
},
"missing": {
"items": {
"type": "string"
},
"title": "Missing",
"type": "array"
},
"other_conditions": {
"items": {
"type": "string"
},
"title": "Other Conditions",
"type": "array"
},
"restriction_profile": {
"title": "Restriction Profile",
"type": "string"
},
"should_hide": {
"items": {
"type": "string"
},
"title": "Should Hide",
"type": "array"
},
"slug": {
"title": "Slug",
"type": "string"
},
"state": {
"title": "State",
"type": "string"
},
"user": {
"title": "User",
"type": "string"
},
"user_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "User Id"
},
"user_type": {
"title": "User Type",
"type": "string"
}
},
"required": [
"user",
"display_name",
"slug",
"account_id",
"user_id",
"user_type",
"restriction_profile",
"manage_sharing",
"state",
"hides",
"should_hide",
"missing",
"other_conditions"
],
"title": "AccountPrivacyOut",
"type": "object"
},
"AcquisitionReleaseIn": {
"additionalProperties": false,
"description": "One owner-confirmed decision on an exact terminal acquisition record.",
"properties": {
"checked_destination": {
"const": true,
"title": "Checked Destination",
"type": "boolean"
},
"expected_status": {
"enum": [
"outcome_unknown",
"succeeded"
],
"title": "Expected Status",
"type": "string"
},
"review_token": {
"maxLength": 64,
"minLength": 64,
"pattern": "^[a-f0-9]{64}$",
"title": "Review Token",
"type": "string"
}
},
"required": [
"review_token",
"expected_status",
"checked_destination"
],
"title": "AcquisitionReleaseIn",
"type": "object"
},
"AiInstructionsIn": {
"additionalProperties": false,
"description": "What AI web search should look for on this row (#138). ``default`` uses the built-in wording\nplus the server-wide instructions; ``add`` appends ``text`` to them; ``own`` replaces them.",
"properties": {
"mode": {
"default": "default",
"description": "AI instructions must be default, add or own",
"enum": [
"add",
"default",
"own"
],
"title": "Mode",
"type": "string"
},
"text": {
"default": "",
"maxLength": 2000,
"title": "Text",
"type": "string"
}
},
"title": "AiInstructionsIn",
"type": "object"
},
"AiInstructionsOut": {
"additionalProperties": true,
"description": "A row's AI web search instructions as the editor reads them.",
"properties": {
"mode": {
"description": "default, add or own",
"enum": [
"add",
"default",
"own"
],
"title": "Mode",
"type": "string"
},
"text": {
"title": "Text",
"type": "string"
}
},
"required": [
"mode",
"text"
],
"title": "AiInstructionsOut",
"type": "object"
},
"AiPauseRequest": {
"additionalProperties": false,
"properties": {
"paused": {
"title": "Paused",
"type": "boolean"
}
},
"required": [
"paused"
],
"title": "AiPauseRequest",
"type": "object"
},
"ApiTokenCreatedOut": {
"additionalProperties": true,
"properties": {
"created_at": {
"title": "Created At",
"type": "string"
},
"token": {
"title": "Token",
"type": "string"
}
},
"required": [
"token",
"created_at"
],
"title": "ApiTokenCreatedOut",
"type": "object"
},
"ApiTokenRevokedOut": {
"additionalProperties": true,
"properties": {
"enabled": {
"title": "Enabled",
"type": "boolean"
}
},
"required": [
"enabled"
],
"title": "ApiTokenRevokedOut",
"type": "object"
},
"ApiTokenStatusOut": {
"additionalProperties": true,
"description": "`GET /api-token`. No example or default is declared on `token` \u2014 a schema is documentation\nthat ships to the browser, and a credential has no business in one (plex-safety rule 9).",
"properties": {
"created_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Created At"
},
"enabled": {
"title": "Enabled",
"type": "boolean"
},
"token": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Token"
}
},
"required": [
"enabled",
"created_at",
"token"
],
"title": "ApiTokenStatusOut",
"type": "object"
},
"ArrOptionsOut": {
"additionalProperties": true,
"properties": {
"quality_profiles": {
"items": {
"$ref": "#/components/schemas/QualityProfileOut"
},
"title": "Quality Profiles",
"type": "array"
},
"root_folders": {
"items": {
"$ref": "#/components/schemas/RootFolderOut"
},
"title": "Root Folders",
"type": "array"
}
},
"required": [
"quality_profiles",
"root_folders"
],
"title": "ArrOptionsOut",
"type": "object"
},
"ArrStatusOut": {
"additionalProperties": true,
"description": "Per-row download status, plus whether each app actually answered.\n\n``reach`` is the half this used to omit. A failed Arr lookup is swallowed on purpose (one app\nbeing down must not blank the other), so an unreachable Radarr produced an all-``null`` map \u2014\nbyte-identical to \"Radarr is fine and tracks none of these\". The inbox therefore showed no\nbadges, for ever, with nothing anywhere saying why.",
"properties": {
"overseerr": {
"default": "off",
"enum": [
"ok",
"unreachable",
"off"
],
"title": "Overseerr",
"type": "string"
},
"radarr": {
"enum": [
"ok",
"unreachable",
"off"
],
"title": "Radarr",
"type": "string"
},
"sonarr": {
"enum": [
"ok",
"unreachable",
"off"
],
"title": "Sonarr",
"type": "string"
},
"statuses": {
"additionalProperties": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
]
},
"title": "Statuses",
"type": "object"
}
},
"required": [
"statuses",
"radarr",
"sonarr"
],
"title": "ArrStatusOut",
"type": "object"
},
"BackupCreatedOut": {
"additionalProperties": true,
"description": "A manual backup carries no `created_at`: it was just taken, which is the answer.",
"properties": {
"name": {
"title": "Name",
"type": "string"
},
"size_bytes": {
"title": "Size Bytes",
"type": "integer"
}
},
"required": [
"name",
"size_bytes"
],
"title": "BackupCreatedOut",
"type": "object"
},
"BackupOut": {
"additionalProperties": true,
"properties": {
"created_at": {
"title": "Created At",
"type": "string"
},
"name": {
"title": "Name",
"type": "string"
},
"size_bytes": {
"title": "Size Bytes",
"type": "integer"
}
},
"required": [
"name",
"size_bytes",
"created_at"
],
"title": "BackupOut",
"type": "object"
},
"BackupRestoredOut": {
"additionalProperties": true,
"properties": {
"message": {
"title": "Message",
"type": "string"
},
"privacy_note": {
"title": "Privacy Note",
"type": "string"
},
"restored": {
"title": "Restored",
"type": "string"
}
},
"required": [
"restored",
"message",
"privacy_note"
],
"title": "BackupRestoredOut",
"type": "object"
},
"BlockSeedBody": {
"properties": {
"media_type": {
"default": "",
"title": "Media Type",
"type": "string"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"tmdb_id": {
"title": "Tmdb Id",
"type": "integer"
},
"year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year"
}
},
"required": [
"tmdb_id"
],
"title": "BlockSeedBody",
"type": "object"
},
"BlockedSeedOut": {
"additionalProperties": true,
"description": "One blocked seed, always as a RECORD.\n\nThe bare-int list an old install stores is normalised by `blocked_entries` before it reaches here,\nso this shape is what both endpoints return whichever way the prefs are stored \u2014 see\n`shortlist/server/prefs.py`.",
"properties": {
"media_type": {
"title": "Media Type",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
},
"tmdb_id": {
"title": "Tmdb Id",
"type": "integer"
},
"year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year"
}
},
"required": [
"tmdb_id",
"title",
"media_type",
"year"
],
"title": "BlockedSeedOut",
"type": "object"
},
"BlockedSeedsOut": {
"additionalProperties": true,
"properties": {
"blocked_seeds": {
"items": {
"$ref": "#/components/schemas/BlockedSeedOut"
},
"title": "Blocked Seeds",
"type": "array"
}
},
"required": [
"blocked_seeds"
],
"title": "BlockedSeedsOut",
"type": "object"
},
"Body_upload_poster_image_api_collections__collection_id__poster_upload_post": {
"properties": {
"file": {
"contentMediaType": "application/octet-stream",
"title": "File",
"type": "string"
}
},
"required": [
"file"
],
"title": "Body_upload_poster_image_api_collections__collection_id__poster_upload_post",
"type": "object"
},
"BulkEnabled": {
"properties": {
"enabled": {
"title": "Enabled",
"type": "boolean"
}
},
"required": [
"enabled"
],
"title": "BulkEnabled",
"type": "object"
},
"BulkEnabledOut": {
"additionalProperties": true,
"description": "What `POST /users/set-enabled` did: how many were touched, and how many had rows removed.",
"properties": {
"cleaned": {
"title": "Cleaned",
"type": "integer"
},
"enabled": {
"title": "Enabled",
"type": "boolean"
},
"updated": {
"title": "Updated",
"type": "integer"
}
},
"required": [
"updated",
"cleaned",
"enabled"
],
"title": "BulkEnabledOut",
"type": "object"
},
"CapabilitiesOut": {
"additionalProperties": true,
"properties": {
"ai": {
"title": "Ai",
"type": "boolean"
}
},
"required": [
"ai"
],
"title": "CapabilitiesOut",
"type": "object"
},
"Capability": {
"description": "One independently enforceable assistant permission.",
"enum": [
"instance.read",
"config.read",
"catalog.read",
"people.read",
"activity.read",
"changes.prepare",
"history.use",
"history.providers",
"history.export",
"rows.create",
"rows.update",
"rows.activate",
"rows.delete",
"audiences.write",
"themes.write",
"seasons.write",
"config.write",
"people.write",
"schedules.write",
"connections.manage",
"runs.preview",
"runs.execute",
"jobs.cancel",
"ai.generate",
"requests.read",
"requests.manage",
"requests.send",
"maintenance.execute",
"secrets.read",
"grants.manage"
],
"title": "Capability",
"type": "string"
},
"CleanupOut": {
"additionalProperties": true,
"description": "What `POST /collections/{id}/cleanup` removed (or would remove, on a dry run).",
"properties": {
"dry_run": {
"title": "Dry Run",
"type": "boolean"
},
"message": {
"title": "Message",
"type": "string"
},
"removed": {
"items": {
"type": "string"
},
"title": "Removed",
"type": "array"
}
},
"required": [
"removed",
"dry_run",
"message"
],
"title": "CleanupOut",
"type": "object"
},
"CleanupRequest": {
"properties": {
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
}
},
"title": "CleanupRequest",
"type": "object"
},
"ClearedDeletedRowsOut": {
"additionalProperties": true,
"properties": {
"cleared": {
"title": "Cleared",
"type": "integer"
},
"picks": {
"title": "Picks",
"type": "integer"
},
"slugs": {
"items": {
"type": "string"
},
"title": "Slugs",
"type": "array"
}
},
"required": [
"cleared",
"picks",
"slugs"
],
"title": "ClearedDeletedRowsOut",
"type": "object"
},
"ClearedOut": {
"additionalProperties": true,
"properties": {
"cleared": {
"title": "Cleared",
"type": "integer"
}
},
"required": [
"cleared"
],
"title": "ClearedOut",
"type": "object"
},
"CollectionCountOut": {
"additionalProperties": true,
"properties": {
"found": {
"title": "Found",
"type": "boolean"
},
"in_library": {
"title": "In Library",
"type": "integer"
},
"section_key": {
"title": "Section Key",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
}
},
"required": [
"title",
"section_key",
"found",
"in_library"
],
"title": "CollectionCountOut",
"type": "object"
},
"CollectionIO": {
"additionalProperties": true,
"description": "A Plex collection, by library and title \u2014 never ratingKey: Kometa recreates its seasonal ones each year.",
"properties": {
"section_key": {
"title": "Section Key",
"type": "string"
},
"section_title": {
"title": "Section Title",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
}
},
"required": [
"section_key",
"section_title",
"title"
],
"title": "CollectionIO",
"type": "object"
},
"CollectionIn": {
"additionalProperties": false,
"properties": {
"ai_instructions": {
"$ref": "#/components/schemas/AiInstructionsIn"
},
"audience": {
"default": "everyone",
"description": "Everyone, or the subset named by audience_user_ids.",
"enum": [
"everyone",
"subset"
],
"title": "Audience",
"type": "string"
},
"audience_user_ids": {
"items": {
"type": "integer"
},
"title": "Audience User Ids",
"type": "array"
},
"avoid_rows": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"description": "Slugs of other per-person rows whose titles this row keeps out; null is none.",
"title": "Avoid Rows"
},
"build": {
"default": "per_person",
"description": "Who the row is built for: one per person, or one shared row.",
"enum": [
"per_person",
"shared"
],
"title": "Build",
"type": "string"
},
"candidate_sources": {
"items": {
"type": "string"
},
"title": "Candidate Sources",
"type": "array"
},
"cold_start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "What this row does for someone with too little watch history; null inherits the global setting.",
"enum": [
"popular",
"skip",
null
],
"title": "Cold Start"
},
"defer_rename": {
"default": false,
"title": "Defer Rename",
"type": "boolean"
},
"description": {
"default": "",
"description": "The collection's Plex summary; takes {user}, {library_name} and {top_seed}. Empty leaves the summary on Plex alone.",
"maxLength": 2000,
"title": "Description",
"type": "string"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
},
"enabled": {
"default": true,
"title": "Enabled",
"type": "boolean"
},
"explore_brief": {
"default": "",
"description": "What kind of themes Explore should look for; blank lets the AI choose.",
"maxLength": 500,
"title": "Explore Brief",
"type": "string"
},
"fallback_name": {
"default": "",
"maxLength": 255,
"title": "Fallback Name",
"type": "string"
},
"favourite_count": {
"anyOf": [
{
"maximum": 10.0,
"minimum": 0.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Favourite Count"
},
"hub_anchor": {
"additionalProperties": {
"$ref": "#/components/schemas/HubAnchorIn"
},
"title": "Hub Anchor",
"type": "object"
},
"idle_hold_days": {
"anyOf": [
{
"maximum": 365.0,
"minimum": 0.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Idle Hold Days"
},
"library_keys": {
"items": {
"type": "string"
},
"title": "Library Keys",
"type": "array"
},
"max_runtime": {
"anyOf": [
{
"maximum": 600.0,
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Runtime"
},
"max_seeds": {
"anyOf": [
{
"maximum": 100.0,
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Seeds"
},
"max_year": {
"anyOf": [
{
"maximum": 2100.0,
"minimum": 1870.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Year"
},
"media": {
"default": "both",
"description": "Which library types this row builds in.",
"enum": [
"both",
"movie",
"show"
],
"title": "Media",
"type": "string"
},
"min_rating": {
"anyOf": [
{
"maximum": 10.0,
"minimum": 0.0,
"type": "number"
},
{
"type": "null"
}
],
"title": "Min Rating"
},
"min_watchers": {
"default": 2,
"minimum": 2.0,
"title": "Min Watchers",
"type": "integer"
},
"min_year": {
"anyOf": [
{
"maximum": 2100.0,
"minimum": 1870.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Min Year"
},
"name": {
"maxLength": 255,
"minLength": 1,
"title": "Name",
"type": "string"
},
"name_template": {
"default": "",
"title": "Name Template",
"type": "string"
},
"older_count": {
"anyOf": [
{
"maximum": 10.0,
"minimum": 0.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Older Count"
},
"pick_order": {
"default": "best",
"description": "How the delivered collection is ordered.",
"enum": [
"best",
"new_first",
"newest",
"rating",
"rotate",
"shuffle"
],
"title": "Pick Order",
"type": "string"
},
"pin_top": {
"default": false,
"title": "Pin Top",
"type": "boolean"
},
"placement": {
"default": "both",
"description": "Where the OWNER's own collection appears.",
"enum": [
"both",
"home",
"library",
"off"
],
"title": "Placement",
"type": "string"
},
"placement_friends": {
"default": "both",
"description": "Where each FRIEND's own collection appears.",
"enum": [
"both",
"home",
"library",
"off"
],
"title": "Placement Friends",
"type": "string"
},
"poster": {
"$ref": "#/components/schemas/PosterIn"
},
"recency": {
"anyOf": [
{
"maximum": 1.0,
"minimum": -1.0,
"type": "number"
},
{
"type": "null"
}
],
"title": "Recency"
},
"recent_count": {
"anyOf": [
{
"maximum": 25.0,
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Recent Count"
},
"refresh_days": {
"anyOf": [
{
"maximum": 365.0,
"minimum": 0.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Refresh Days"
},
"refresh_share": {
"anyOf": [
{
"exclusiveMinimum": 0.0,
"maximum": 1.0,
"type": "number"
},
{
"type": "null"
}
],
"description": "The share of picks swapped on a refresh night; null keeps two thirds.",
"title": "Refresh Share"
},
"repeat_cooldown_days": {
"anyOf": [
{
"maximum": 365.0,
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"description": "Don't pick a title again within this many days; null is off.",
"title": "Repeat Cooldown Days"
},
"req_auto_min_demand": {
"anyOf": [
{
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Req Auto Min Demand"
},
"req_auto_min_rating": {
"anyOf": [
{
"maximum": 10.0,
"minimum": 0.0,
"type": "number"
},
{
"type": "null"
}
],
"title": "Req Auto Min Rating"
},
"req_auto_send": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Req Auto Send"
},
"req_auto_user_tag": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Req Auto User Tag"
},
"req_language_mode": {
"anyOf": [
{
"maxLength": 16,
"type": "string"
},
{
"type": "null"
}
],
"enum": [
"any",
"prefer",
"only",
null
],
"title": "Req Language Mode"
},
"req_max_per_row": {
"anyOf": [
{
"maximum": 100.0,
"minimum": 0.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Req Max Per Row"
},
"req_max_year": {
"anyOf": [
{
"maximum": 2999.0,
"minimum": 0.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Req Max Year"
},
"req_min_demand": {
"anyOf": [
{
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Req Min Demand"
},
"req_min_rating": {
"anyOf": [
{
"maximum": 10.0,
"minimum": 0.0,
"type": "number"
},
{
"type": "null"
}
],
"title": "Req Min Rating"
},
"req_min_rating_other": {
"anyOf": [
{
"maximum": 10.0,
"minimum": 0.0,
"type": "number"
},
{
"type": "null"
}
],
"title": "Req Min Rating Other"
},
"req_min_votes": {
"anyOf": [
{
"minimum": 0.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Req Min Votes"
},
"req_min_year": {
"anyOf": [
{
"maximum": 2999.0,
"minimum": 0.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Req Min Year"
},
"req_preferred_languages": {
"anyOf": [
{
"items": {
"type": "string"
},
"maxItems": 50,
"type": "array"
},
{
"type": "null"
}
],
"title": "Req Preferred Languages"
},
"req_radarr_quality_profile_id": {
"anyOf": [
{
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Req Radarr Quality Profile Id"
},
"req_radarr_root_folder": {
"anyOf": [
{
"maxLength": 512,
"type": "string"
},
{
"type": "null"
}
],
"title": "Req Radarr Root Folder"
},
"req_season_count": {
"anyOf": [
{
"maximum": 99.0,
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Req Season Count"
},
"req_skip_library_keys": {
"anyOf": [
{
"items": {
"type": "string"
},
"maxItems": 100,
"type": "array"
},
{
"type": "null"
}
],
"title": "Req Skip Library Keys"
},
"req_sonarr_monitor": {
"anyOf": [
{
"maxLength": 32,
"type": "string"
},
{
"type": "null"
}
],
"enum": [
"all",
"firstSeason",
"lastSeason",
"pilot",
"none",
null
],
"title": "Req Sonarr Monitor"
},
"req_sonarr_quality_profile_id": {
"anyOf": [
{
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Req Sonarr Quality Profile Id"
},
"req_sonarr_root_folder": {
"anyOf": [
{
"maxLength": 512,
"type": "string"
},
{
"type": "null"
}
],
"title": "Req Sonarr Root Folder"
},
"request_tag": {
"default": "",
"maxLength": 64,
"title": "Request Tag",
"type": "string"
},
"requests_row": {
"default": false,
"title": "Requests Row",
"type": "boolean"
},
"requests_tag_pattern": {
"default": "",
"maxLength": 128,
"title": "Requests Tag Pattern",
"type": "string"
},
"requests_window_days": {
"default": 90,
"maximum": 3650.0,
"minimum": 0.0,
"title": "Requests Window Days",
"type": "integer"
},
"rewatch": {
"default": false,
"title": "Rewatch",
"type": "boolean"
},
"rewatch_cooldown_days": {
"default": 30,
"maximum": 365.0,
"minimum": 0.0,
"title": "Rewatch Cooldown Days",
"type": "integer"
},
"schedule": {
"default": "30 3 * * *",
"maxLength": 64,
"title": "Schedule",
"type": "string"
},
"season_after_days": {
"default": 0,
"description": "How many days after each season's day the row stays up.",
"maximum": 30.0,
"minimum": 0.0,
"title": "Season After Days",
"type": "integer"
},
"season_lead_days": {
"default": 30,
"description": "How many days before each season's day the row starts showing.",
"maximum": 90.0,
"minimum": 0.0,
"title": "Season Lead Days",
"type": "integer"
},
"seasons": {
"description": "Seasons this row follows (see GET /api/seasons). Empty means it is not seasonal.",
"items": {
"type": "string"
},
"title": "Seasons",
"type": "array"
},
"seed_window": {
"default": 1,
"maximum": 20.0,
"minimum": 1.0,
"title": "Seed Window",
"type": "integer"
},
"show_days": {
"description": "Days this row appears, as ISO weekdays (1=Monday .. 7=Sunday). Empty means every day.",
"items": {
"type": "integer"
},
"title": "Show Days",
"type": "array"
},
"size": {
"default": 15,
"maximum": 40.0,
"minimum": 5.0,
"title": "Size",
"type": "integer"
},
"sort_order": {
"default": 0,
"title": "Sort Order",
"type": "integer"
},
"sort_title_prefix": {
"default": "",
"description": "Put before the row's name to make its Plex sort title, e.g. '!010_'. Orders the row in the library's Collections tab, not on Home. Empty leaves the sort title alone.",
"maxLength": 64,
"title": "Sort Title Prefix",
"type": "string"
},
"theme_days": {
"anyOf": [
{
"maximum": 90.0,
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"description": "How many days a theme lasts in Explore; null is 7.",
"title": "Theme Days"
},
"theme_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "The theme this AI row follows (see POST /api/themes). Null for an ordinary row.",
"title": "Theme Id"
},
"theme_mode": {
"default": "fixed",
"description": "fixed keeps one theme; explore picks a new one for each person on a schedule.",
"enum": [
"fixed",
"explore"
],
"title": "Theme Mode",
"type": "string"
},
"unstarted_only": {
"default": false,
"title": "Unstarted Only",
"type": "boolean"
},
"watched_pct": {
"anyOf": [
{
"maximum": 1.0,
"minimum": 0.0,
"type": "number"
},
{
"type": "null"
}
],
"title": "Watched Pct"
}
},
"required": [
"name"
],
"title": "CollectionIn",
"type": "object"
},
"CollectionOut": {
"additionalProperties": true,
"description": "A curated-row definition \u2014 the response shape of :func:`serialize_row` (``services/row_editing.py``).",
"properties": {
"ai_instructions": {
"$ref": "#/components/schemas/AiInstructionsOut"
},
"ai_paused": {
"description": "Whether the row's AI is paused: it keeps its theme but spends no tokens.",
"title": "Ai Paused",
"type": "boolean"
},
"ai_tokens": {
"description": "Tokens the AI has spent writing this row's themes.",
"title": "Ai Tokens",
"type": "integer"
},
"audience": {
"description": "Everyone, or the subset named by audience_user_ids.",
"enum": [
"everyone",
"subset"
],
"title": "Audience",
"type": "string"
},
"audience_user_ids": {
"items": {
"type": "integer"
},
"title": "Audience User Ids",
"type": "array"
},
"avoid_rows": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"description": "Slugs of rows whose titles this row keeps out; null is none.",
"title": "Avoid Rows"
},
"build": {
"description": "Who the row is built for: one per person, or one shared row.",
"enum": [
"per_person",
"shared"
],
"title": "Build",
"type": "string"
},
"candidate_sources": {
"items": {
"type": "string"
},
"title": "Candidate Sources",
"type": "array"
},
"cold_start": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "What this row does for someone with too little watch history; null inherits the global setting.",
"enum": [
"popular",
"skip",
null
],
"title": "Cold Start"
},
"description": {
"title": "Description",
"type": "string"
},
"dry_run": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Dry Run"
},
"enabled": {
"title": "Enabled",
"type": "boolean"
},
"explore_brief": {
"description": "What Explore is asked to look for; blank lets the AI choose.",
"title": "Explore Brief",
"type": "string"
},
"fallback_name": {
"title": "Fallback Name",
"type": "string"
},
"favourite_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Favourite Count"
},
"hub_anchor": {
"additionalProperties": {
"$ref": "#/components/schemas/HubAnchorOut"
},
"title": "Hub Anchor",
"type": "object"
},
"id": {
"title": "Id",
"type": "integer"
},
"idle_hold_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Idle Hold Days"
},
"last_run_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Last Run Id"
},
"library_keys": {
"items": {
"type": "string"
},
"title": "Library Keys",
"type": "array"
},
"max_runtime": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Runtime"
},
"max_seeds": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Seeds"
},
"max_year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Year"
},
"media": {
"description": "Which library types this row builds in.",
"enum": [
"both",
"movie",
"show"
],
"title": "Media",
"type": "string"
},
"min_rating": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Min Rating"
},
"min_watchers": {
"title": "Min Watchers",
"type": "integer"
},
"min_year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Min Year"
},
"name": {
"title": "Name",
"type": "string"
},
"name_template": {
"title": "Name Template",
"type": "string"
},
"older_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Older Count"
},
"pick_order": {
"description": "How the delivered collection is ordered.",
"enum": [
"best",
"new_first",
"newest",
"rating",
"rotate",
"shuffle"
],
"title": "Pick Order",
"type": "string"
},
"pin_top": {
"title": "Pin Top",
"type": "boolean"
},
"placement": {
"description": "Where the OWNER's own collection appears.",
"enum": [
"both",
"home",
"library",
"off"
],
"title": "Placement",
"type": "string"
},
"placement_friends": {
"description": "Where each FRIEND's own collection appears.",
"enum": [
"both",
"home",
"library",
"off"
],
"title": "Placement Friends",
"type": "string"
},
"plan": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/PlanEntryOut"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Plan"
},
"poster": {
"$ref": "#/components/schemas/PosterOut"
},
"preview_incomplete": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Preview Incomplete"
},
"preview_titles": {
"items": {
"$ref": "#/components/schemas/PreviewTitleOut"
},
"title": "Preview Titles",
"type": "array"
},
"recency": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Recency"
},
"recent_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Recent Count"
},
"refresh_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Refresh Days"
},
"refresh_share": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Share of picks swapped on a refresh night; null keeps two thirds.",
"title": "Refresh Share"
},
"repeat_cooldown_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "No repeats within this many days; null is off.",
"title": "Repeat Cooldown Days"
},
"req_auto_min_demand": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Req Auto Min Demand"
},
"req_auto_min_rating": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Req Auto Min Rating"
},
"req_auto_send": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Req Auto Send"
},
"req_auto_user_tag": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"description": "Tag this row's Sonarr/Radarr requests with the wanting person's slug; null inherits the global requests.auto_user_tag.",
"title": "Req Auto User Tag"
},
"req_language_mode": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "How this row treats a title's original language when requesting: 'any' (one bar for everything), 'prefer' (other languages need a higher rating to auto-send), or 'only' (never request another language); null inherits the global requests.language_mode.",
"enum": [
"any",
"prefer",
"only",
null
],
"title": "Req Language Mode"
},
"req_max_per_row": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Req Max Per Row"
},
"req_max_year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Req Max Year"
},
"req_min_demand": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Req Min Demand"
},
"req_min_rating": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Req Min Rating"
},
"req_min_rating_other": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Rating another language must reach for this row to auto-send it. Null inherits the global requests.min_rating_other, which may itself be unset \u2014 in which case this row derives from its own req_min_rating plus 1.5.",
"title": "Req Min Rating Other"
},
"req_min_votes": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Req Min Votes"
},
"req_min_year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Req Min Year"
},
"req_preferred_languages": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"description": "ISO 639-1 codes this row treats as preferred; null inherits the global requests.preferred_languages. An empty list is a row that cleared its languages.",
"title": "Req Preferred Languages"
},
"req_radarr_quality_profile_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Req Radarr Quality Profile Id"
},
"req_radarr_root_folder": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Req Radarr Root Folder"
},
"req_season_count": {
"anyOf": [
{
"maximum": 99.0,
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"description": "How many seasons 'firstSeason'/'lastSeason' take for this row's requests; null inherits the global requests.season_count.",
"title": "Req Season Count"
},
"req_skip_library_keys": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"description": "Keys of this row's libraries it does not request titles for; null or empty requests for all of them. A library added to Plex later is on by default.",
"title": "Req Skip Library Keys"
},
"req_sonarr_monitor": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "How much of a show Sonarr monitors for this row's requests (Sonarr's Add Series 'Monitor' choice); null inherits the global requests.sonarr.monitor.",
"enum": [
"all",
"firstSeason",
"lastSeason",
"pilot",
"none",
null
],
"title": "Req Sonarr Monitor"
},
"req_sonarr_quality_profile_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Req Sonarr Quality Profile Id"
},
"req_sonarr_root_folder": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Req Sonarr Root Folder"
},
"request_tag": {
"title": "Request Tag",
"type": "string"
},
"requests_row": {
"title": "Requests Row",
"type": "boolean"
},
"requests_tag_pattern": {
"title": "Requests Tag Pattern",
"type": "string"
},
"requests_window_days": {
"title": "Requests Window Days",
"type": "integer"
},
"rewatch": {
"title": "Rewatch",
"type": "boolean"
},
"rewatch_cooldown_days": {
"title": "Rewatch Cooldown Days",
"type": "integer"
},
"schedule": {
"title": "Schedule",
"type": "string"
},
"season_after_days": {
"description": "How many days after each season's day the row stays up.",
"title": "Season After Days",
"type": "integer"
},
"season_lead_days": {
"description": "How many days before each season's day the row starts showing.",
"title": "Season Lead Days",
"type": "integer"
},
"season_status": {
"anyOf": [
{
"$ref": "#/components/schemas/SeasonStatusOut"
},
{
"type": "null"
}
],
"description": "Where the row is in its calendar today; null for a row that follows no season."
},
"seasons": {
"description": "Seasons this row follows, in calendar order. Empty means not seasonal.",
"items": {
"type": "string"
},
"title": "Seasons",
"type": "array"
},
"seed_window": {
"title": "Seed Window",
"type": "integer"
},
"show_days": {
"description": "Days this row appears, as ISO weekdays (1=Monday .. 7=Sunday). Empty means every day.",
"items": {
"type": "integer"
},
"title": "Show Days",
"type": "array"
},
"shown_today": {
"description": "Whether this row is on its surfaces today, judged on the SERVER's clock \u2014 which is the clock the midnight schedule and Plex follow, not the viewer's.",
"title": "Shown Today",
"type": "boolean"
},
"size": {
"title": "Size",
"type": "integer"
},
"slug": {
"title": "Slug",
"type": "string"
},
"sort_order": {
"title": "Sort Order",
"type": "integer"
},
"sort_title_prefix": {
"title": "Sort Title Prefix",
"type": "string"
},
"theme_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "Days a theme lasts in Explore; null is 7.",
"title": "Theme Days"
},
"theme_emoji": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The fixed theme's emoji; null when it has none, or for Explore.",
"title": "Theme Emoji"
},
"theme_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "The theme an AI row follows; null for an ordinary row.",
"title": "Theme Id"
},
"theme_mode": {
"description": "Whether an AI row keeps one theme or explores.",
"enum": [
"fixed",
"explore"
],
"title": "Theme Mode",
"type": "string"
},
"theme_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "The fixed theme's name; null for an ordinary row or an Explore row.",
"title": "Theme Name"
},
"unstarted_only": {
"title": "Unstarted Only",
"type": "boolean"
},
"watched_pct": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Watched Pct"
}
},
"required": [
"id",
"slug",
"name",
"last_run_id",
"preview_titles",
"build",
"audience",
"audience_user_ids",
"enabled",
"schedule",
"size",
"media",
"sort_order",
"name_template",
"fallback_name",
"description",
"sort_title_prefix",
"min_watchers",
"request_tag",
"candidate_sources",
"watched_pct",
"rewatch",
"rewatch_cooldown_days",
"requests_row",
"requests_window_days",
"requests_tag_pattern",
"unstarted_only",
"refresh_days",
"idle_hold_days",
"recency",
"recent_count",
"favourite_count",
"older_count",
"max_seeds",
"max_runtime",
"min_year",
"max_year",
"min_rating",
"cold_start",
"seed_window",
"req_min_rating",
"req_min_votes",
"req_min_demand",
"req_min_year",
"req_max_year",
"req_auto_send",
"req_auto_min_demand",
"req_auto_min_rating",
"req_max_per_row",
"req_radarr_quality_profile_id",
"req_radarr_root_folder",
"req_sonarr_quality_profile_id",
"req_sonarr_root_folder",
"req_sonarr_monitor",
"req_season_count",
"req_language_mode",
"req_preferred_languages",
"req_skip_library_keys",
"req_min_rating_other",
"pick_order",
"placement",
"placement_friends",
"show_days",
"shown_today",
"seasons",
"season_lead_days",
"season_after_days",
"season_status",
"pin_top",
"hub_anchor",
"library_keys",
"poster",
"ai_instructions",
"theme_id",
"theme_name",
"theme_emoji",
"ai_paused",
"ai_tokens",
"theme_mode",
"explore_brief",
"theme_days",
"refresh_share",
"repeat_cooldown_days",
"avoid_rows"
],
"title": "CollectionOut",
"type": "object"
},
"ConfiguredDestination": {
"additionalProperties": true,
"description": "A credential-free, currently configured service endpoint.",
"properties": {
"destination_id": {
"title": "Destination Id",
"type": "string"
},
"host": {
"title": "Host",
"type": "string"
},
"label": {
"title": "Label",
"type": "string"
},
"purposes": {
"items": {
"type": "string"
},
"title": "Purposes",
"type": "array"
},
"service_id": {
"title": "Service Id",
"type": "string"
}
},
"required": [
"service_id",
"label",
"purposes",
"destination_id",
"host"
],
"title": "ConfiguredDestination",
"type": "object"
},
"ConnectionTestOut": {
"additionalProperties": true,
"description": "`message` is plain English either way \u2014 the success line, or a redacted failure (rule 9).",
"properties": {
"message": {
"title": "Message",
"type": "string"
},
"ok": {
"title": "Ok",
"type": "boolean"
}
},
"required": [
"ok",
"message"
],
"title": "ConnectionTestOut",
"type": "object"
},
"ConsentDecisionIn": {
"additionalProperties": false,
"description": "One exact browser consent decision protected by an independent CSRF token.",
"properties": {
"approved": {
"title": "Approved",
"type": "boolean"
},
"csrf_token": {
"title": "Csrf Token",
"type": "string"
},
"flow_id": {
"title": "Flow Id",
"type": "string"
},
"grant_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Grant Id"
}
},
"required": [
"flow_id",
"csrf_token",
"approved"
],
"title": "ConsentDecisionIn",
"type": "object"
},
"ConstraintsIn": {
"additionalProperties": false,
"description": "Strict owner-selected resource bounds for a grant.",
"properties": {
"destination_ids": {
"items": {
"type": "string"
},
"title": "Destination Ids",
"type": "array",
"uniqueItems": true
},
"include_future_libraries": {
"default": true,
"title": "Include Future Libraries",
"type": "boolean"
},
"include_future_rows": {
"default": true,
"title": "Include Future Rows",
"type": "boolean"
},
"library_keys": {
"items": {
"type": "string"
},
"title": "Library Keys",
"type": "array",
"uniqueItems": true
},
"max_batch_size": {
"anyOf": [
{
"maximum": 1000.0,
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"default": 25,
"title": "Max Batch Size"
},
"max_provider_calls": {
"default": 0,
"maximum": 100.0,
"minimum": 0.0,
"title": "Max Provider Calls",
"type": "integer"
},
"max_work_per_operation": {
"anyOf": [
{
"maximum": 100000.0,
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Work Per Operation"
},
"row_ids": {
"items": {
"type": "integer"
},
"title": "Row Ids",
"type": "array",
"uniqueItems": true
},
"setting_groups": {
"items": {
"type": "string"
},
"title": "Setting Groups",
"type": "array",
"uniqueItems": true
}
},
"title": "ConstraintsIn",
"type": "object"
},
"ConstraintsPatchIn": {
"additionalProperties": false,
"description": "Sparse owner-selected changes to a grant's resource bounds.",
"properties": {
"destination_ids": {
"items": {
"type": "string"
},
"title": "Destination Ids",
"type": "array",
"uniqueItems": true
},
"include_future_libraries": {
"default": false,
"title": "Include Future Libraries",
"type": "boolean"
},
"include_future_rows": {
"default": false,
"title": "Include Future Rows",
"type": "boolean"
},
"library_keys": {
"items": {
"type": "string"
},
"title": "Library Keys",
"type": "array",
"uniqueItems": true
},
"max_batch_size": {
"anyOf": [
{
"maximum": 1000.0,
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Batch Size"
},
"max_provider_calls": {
"default": 0,
"maximum": 100.0,
"minimum": 0.0,
"title": "Max Provider Calls",
"type": "integer"
},
"max_work_per_operation": {
"anyOf": [
{
"maximum": 100000.0,
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Work Per Operation"
},
"row_ids": {
"items": {
"type": "integer"
},
"title": "Row Ids",
"type": "array",
"uniqueItems": true
},
"setting_groups": {
"items": {
"type": "string"
},
"title": "Setting Groups",
"type": "array",
"uniqueItems": true
}
},
"title": "ConstraintsPatchIn",
"type": "object"
},
"CoverageOut": {
"additionalProperties": true,
"description": "Who is actually covered. `users_enabled`/`rows_enabled` describe the server as it is NOW and\nare deliberately not windowed.",
"properties": {
"rows_enabled": {
"title": "Rows Enabled",
"type": "integer"
},
"users_enabled": {
"title": "Users Enabled",
"type": "integer"
},
"users_idle": {
"title": "Users Idle",
"type": "integer"
},
"users_total": {
"title": "Users Total",
"type": "integer"
},
"users_watched": {
"title": "Users Watched",
"type": "integer"
},
"users_watched_delta": {
"anyOf": [
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Users Watched Delta"
},
"users_with_picks": {
"title": "Users With Picks",
"type": "integer"
}
},
"required": [
"users_enabled",
"users_total",
"users_with_picks",
"users_idle",
"users_watched",
"users_watched_delta",
"rows_enabled"
],
"title": "CoverageOut",
"type": "object"
},
"CuratorModelsOut": {
"additionalProperties": true,
"description": "The provider the listing was made for (so a stale reply can be told apart from a live one),\nand its model ids. Best-effort: `models` is empty when the provider cannot be asked.",
"properties": {
"models": {
"items": {
"type": "string"
},
"title": "Models",
"type": "array"
},
"provider": {
"title": "Provider",
"type": "string"
}
},
"required": [
"provider",
"models"
],
"title": "CuratorModelsOut",
"type": "object"
},
"CuratorModelsRequest": {
"description": "Optional live overrides from the settings form so the model picker can list the provider being\nedited BEFORE it's saved. Any blank field falls back to the saved setting; a redacted api key\n('\u2022\u2022\u2022\u2022\u2022') means 'use the saved key'. The key is used only to build the client in memory \u2014 never\nlogged (only the exception class is).",
"properties": {
"api_key": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Api Key"
},
"ollama_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ollama Url"
},
"provider": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Provider"
}
},
"title": "CuratorModelsRequest",
"type": "object"
},
"DateRuleIO": {
"additionalProperties": true,
"description": "When a season falls: see `seasons.DateRule`. ``weekday`` is Monday=0; ``nth`` is 1-4, or -1 for the last.",
"properties": {
"day": {
"default": 1,
"title": "Day",
"type": "integer"
},
"kind": {
"enum": [
"fixed",
"nth",
"easter",
"month"
],
"title": "Kind",
"type": "string"
},
"month": {
"default": 1,
"title": "Month",
"type": "integer"
},
"nth": {
"default": 1,
"title": "Nth",
"type": "integer"
},
"offset": {
"default": 0,
"title": "Offset",
"type": "integer"
},
"weekday": {
"default": 0,
"title": "Weekday",
"type": "integer"
}
},
"required": [
"kind"
],
"title": "DateRuleIO",
"type": "object"
},
"DeletedOut": {
"additionalProperties": true,
"properties": {
"deleted": {
"title": "Deleted",
"type": "integer"
}
},
"required": [
"deleted"
],
"title": "DeletedOut",
"type": "object"
},
"DeletedRowOut": {
"additionalProperties": true,
"description": "History belonging to a row that no longer exists.",
"properties": {
"first_seen": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "First Seen"
},
"last_seen": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Last Seen"
},
"picks": {
"title": "Picks",
"type": "integer"
},
"slug": {
"title": "Slug",
"type": "string"
}
},
"required": [
"slug",
"picks",
"first_seen",
"last_seen"
],
"title": "DeletedRowOut",
"type": "object"
},
"DestinationSelection": {
"additionalProperties": false,
"description": "The exact catalog choice the owner saw before saving.",
"properties": {
"destination_id": {
"title": "Destination Id",
"type": "string"
},
"service_id": {
"title": "Service Id",
"type": "string"
}
},
"required": [
"service_id",
"destination_id"
],
"title": "DestinationSelection",
"type": "object"
},
"Dismiss": {
"properties": {
"id": {
"title": "Id",
"type": "string"
}
},
"required": [
"id"
],
"title": "Dismiss",
"type": "object"
},
"DismissedOut": {
"additionalProperties": true,
"properties": {
"ok": {
"title": "Ok",
"type": "boolean"
}
},
"required": [
"ok"
],
"title": "DismissedOut",
"type": "object"
},
"DynamicClientRegistrationIn": {
"description": "RFC 7591 subset for public authorization-code clients.",
"properties": {
"client_name": {
"maxLength": 255,
"minLength": 1,
"title": "Client Name",
"type": "string"
},
"grant_types": {
"items": {
"type": "string"
},
"title": "Grant Types",
"type": "array"
},
"redirect_uris": {
"items": {
"maxLength": 2048,
"minLength": 1,
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"title": "Redirect Uris",
"type": "array"
},
"response_types": {
"items": {
"type": "string"
},
"title": "Response Types",
"type": "array"
},
"token_endpoint_auth_method": {
"default": "none",
"title": "Token Endpoint Auth Method",
"type": "string"
}
},
"required": [
"client_name",
"redirect_uris"
],
"title": "DynamicClientRegistrationIn",
"type": "object"
},
"Effect": {
"description": "Observable consequence classes used by planning and authorization.",
"enum": [
"local_config",
"local_state",
"scheduler_change",
"external_read",
"provider_spend",
"plex_read",
"plex_write",
"plex_privacy_write",
"acquisition_write",
"notification_send",
"credential_change",
"personal_data_disclosure"
],
"title": "Effect",
"type": "string"
},
"EffectReferenceOut": {
"additionalProperties": true,
"description": "Public consequence description.",
"properties": {
"description": {
"title": "Description",
"type": "string"
},
"kind": {
"$ref": "#/components/schemas/Effect"
},
"timing": {
"$ref": "#/components/schemas/EffectTiming"
}
},
"required": [
"kind",
"timing",
"description"
],
"title": "EffectReferenceOut",
"type": "object"
},
"EffectTiming": {
"description": "When an effect can occur after a catalog-backed change.",
"enum": [
"immediate",
"queued",
"future_run",
"recurring"
],
"title": "EffectTiming",
"type": "string"
},
"EffectivenessReportOut": {
"additionalProperties": true,
"description": "The dashboard tracking report for one window.",
"properties": {
"coverage": {
"$ref": "#/components/schemas/CoverageOut"
},
"first_pick": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "First Pick"
},
"overall": {
"$ref": "#/components/schemas/OverallOut"
},
"per_row": {
"items": {
"$ref": "#/components/schemas/PerRowOut"
},
"title": "Per Row",
"type": "array"
},
"per_user": {
"items": {
"$ref": "#/components/schemas/PerUserOut"
},
"title": "Per User",
"type": "array"
},
"recent": {
"items": {
"$ref": "#/components/schemas/RecentWatchOut"
},
"title": "Recent",
"type": "array"
},
"requests": {
"$ref": "#/components/schemas/ReportRequestsOut"
},
"runs": {
"$ref": "#/components/schemas/ReportRunsOut"
},
"since": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Since"
},
"top_titles": {
"items": {
"$ref": "#/components/schemas/TopTitleOut"
},
"title": "Top Titles",
"type": "array"
},
"trend": {
"items": {
"$ref": "#/components/schemas/TrendPointOut"
},
"title": "Trend",
"type": "array"
},
"watch_sync": {
"$ref": "#/components/schemas/WatchSyncOut"
},
"window": {
"enum": [
"7",
"30",
"90",
"all"
],
"title": "Window",
"type": "string"
},
"window_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Window Days"
}
},
"required": [
"window",
"window_days",
"since",
"first_pick",
"overall",
"watch_sync",
"coverage",
"runs",
"requests",
"trend",
"per_user",
"per_row",
"top_titles",
"recent"
],
"title": "EffectivenessReportOut",
"type": "object"
},
"EnforcementOut": {
"additionalProperties": true,
"description": "The last time a run looked through a real account's eyes at their Home screen.\n\n`measured` is the whole point. An empty `not_enforced` on an unmeasured run is not \"all clear\" \u2014\nit is \"nobody looked\", and rendering the two the same is how a live alert gets cleared.",
"properties": {
"measured": {
"title": "Measured",
"type": "boolean"
},
"measured_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Measured At"
},
"not_enforced": {
"additionalProperties": {
"items": {
"type": "integer"
},
"type": "array"
},
"title": "Not Enforced",
"type": "object"
},
"run_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Run Id"
},
"unhideable": {
"additionalProperties": {
"items": {
"type": "integer"
},
"type": "array"
},
"title": "Unhideable",
"type": "object"
},
"unhideable_measured": {
"title": "Unhideable Measured",
"type": "boolean"
},
"unhideable_measured_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Unhideable Measured At"
},
"unhideable_run_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Unhideable Run Id"
}
},
"required": [
"measured",
"run_id",
"measured_at",
"not_enforced",
"unhideable",
"unhideable_measured",
"unhideable_run_id",
"unhideable_measured_at"
],
"title": "EnforcementOut",
"type": "object"
},
"EngagementOut": {
"additionalProperties": true,
"properties": {
"people": {
"items": {
"$ref": "#/components/schemas/EngagementPersonOut"
},
"title": "People",
"type": "array"
},
"window": {
"title": "Window",
"type": "string"
}
},
"required": [
"window",
"people"
],
"title": "EngagementOut",
"type": "object"
},
"EngagementPersonOut": {
"additionalProperties": true,
"properties": {
"display_name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Display Name"
},
"picks": {
"items": {
"$ref": "#/components/schemas/EngagementPickOut"
},
"title": "Picks",
"type": "array"
},
"total": {
"title": "Total",
"type": "integer"
},
"username": {
"title": "Username",
"type": "string"
}
},
"required": [
"username",
"display_name",
"picks",
"total"
],
"title": "EngagementPersonOut",
"type": "object"
},
"EngagementPickOut": {
"additionalProperties": true,
"description": "One pick and what became of it.\n\n`percent` is NULL where no live session ever observed the play \u2014 which is not 0%. Plex's watched\nflag cannot see a partial play at all, so \"we never watched this happen\" and \"they bailed at the\nstart\" are genuinely different states and are not collapsed.",
"properties": {
"finished_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Finished At"
},
"media_type": {
"title": "Media Type",
"type": "string"
},
"observed_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Observed At"
},
"outcome": {
"title": "Outcome",
"type": "string"
},
"percent": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Percent"
},
"row": {
"title": "Row",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
},
"watched_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Watched At"
}
},
"required": [
"title",
"row",
"media_type",
"outcome",
"percent",
"watched_at",
"finished_at",
"observed_at"
],
"title": "EngagementPickOut",
"type": "object"
},
"EventOut": {
"additionalProperties": true,
"description": "One audit row. `message` is the writer's structured diff, and its keys depend on `scope`.",
"properties": {
"id": {
"title": "Id",
"type": "integer"
},
"level": {
"title": "Level",
"type": "string"
},
"message": {
"additionalProperties": true,
"title": "Message",
"type": "object"
},
"scope": {
"title": "Scope",
"type": "string"
},
"ts": {
"title": "Ts",
"type": "string"
}
},
"required": [
"id",
"ts",
"level",
"scope",
"message"
],
"title": "EventOut",
"type": "object"
},
"GrantConstraintsOut": {
"additionalProperties": true,
"description": "Publicly effective resource and work bounds.",
"properties": {
"destination_ids": {
"items": {
"type": "string"
},
"title": "Destination Ids",
"type": "array"
},
"include_future_libraries": {
"title": "Include Future Libraries",
"type": "boolean"
},
"include_future_rows": {
"title": "Include Future Rows",
"type": "boolean"
},
"library_keys": {
"items": {
"type": "string"
},
"title": "Library Keys",
"type": "array"
},
"max_batch_size": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Batch Size"
},
"max_provider_calls": {
"title": "Max Provider Calls",
"type": "integer"
},
"max_work_per_operation": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Work Per Operation"
},
"owner_managed": {
"title": "Owner Managed",
"type": "boolean"
},
"row_ids": {
"items": {
"type": "integer"
},
"title": "Row Ids",
"type": "array"
},
"setting_groups": {
"items": {
"type": "string"
},
"title": "Setting Groups",
"type": "array"
}
},
"required": [
"row_ids",
"library_keys",
"setting_groups",
"destination_ids",
"include_future_rows",
"include_future_libraries",
"max_batch_size",
"max_work_per_operation",
"max_provider_calls",
"owner_managed"
],
"title": "GrantConstraintsOut",
"type": "object"
},
"GrantConstraintsPatchIn": {
"additionalProperties": false,
"description": "Revision-guarded owner change to one grant's authority.",
"properties": {
"access_role": {
"anyOf": [
{
"enum": [
"view",
"manage"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Access Role"
},
"approve_updated_access": {
"default": false,
"title": "Approve Updated Access",
"type": "boolean"
},
"capabilities": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/Capability"
},
"type": "array",
"uniqueItems": true
},
{
"type": "null"
}
],
"title": "Capabilities"
},
"constraints": {
"anyOf": [
{
"$ref": "#/components/schemas/ConstraintsPatchIn"
},
{
"type": "null"
}
]
},
"expected_revision": {
"exclusiveMinimum": 0.0,
"title": "Expected Revision",
"type": "integer"
},
"max_provider_calls": {
"anyOf": [
{
"maximum": 100.0,
"minimum": 0.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Provider Calls"
},
"paid_enabled": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Paid Enabled"
},
"selected_destinations": {
"items": {
"$ref": "#/components/schemas/DestinationSelection"
},
"title": "Selected Destinations",
"type": "array"
},
"upgrade_owner_managed": {
"default": false,
"title": "Upgrade Owner Managed",
"type": "boolean"
}
},
"required": [
"expected_revision"
],
"title": "GrantConstraintsPatchIn",
"type": "object"
},
"GrantCreateIn": {
"additionalProperties": false,
"description": "Owner-approved named assistant grant.",
"properties": {
"access_role": {
"anyOf": [
{
"enum": [
"view",
"manage"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Access Role"
},
"capabilities": {
"anyOf": [
{
"items": {
"$ref": "#/components/schemas/Capability"
},
"type": "array",
"uniqueItems": true
},
{
"type": "null"
}
],
"title": "Capabilities"
},
"client_id": {
"maxLength": 255,
"minLength": 1,
"title": "Client Id",
"type": "string"
},
"constraints": {
"$ref": "#/components/schemas/ConstraintsIn"
},
"expires_in_days": {
"anyOf": [
{
"maximum": 365.0,
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"default": 90,
"title": "Expires In Days"
},
"name": {
"maxLength": 255,
"minLength": 1,
"title": "Name",
"type": "string"
},
"owner_managed": {
"default": false,
"title": "Owner Managed",
"type": "boolean"
},
"preset": {
"$ref": "#/components/schemas/GrantPreset"
},
"selected_destinations": {
"items": {
"$ref": "#/components/schemas/DestinationSelection"
},
"title": "Selected Destinations",
"type": "array"
}
},
"required": [
"client_id",
"name",
"preset"
],
"title": "GrantCreateIn",
"type": "object"
},
"GrantOut": {
"additionalProperties": true,
"description": "Safe browser-facing named grant authority.",
"properties": {
"access_role": {
"anyOf": [
{
"enum": [
"view",
"manage"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Access Role"
},
"capabilities": {
"items": {
"$ref": "#/components/schemas/Capability"
},
"title": "Capabilities",
"type": "array"
},
"client_id": {
"title": "Client Id",
"type": "string"
},
"constraints": {
"$ref": "#/components/schemas/GrantConstraintsOut"
},
"expires_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"title": "Expires At"
},
"full_management": {
"title": "Full Management",
"type": "boolean"
},
"id": {
"title": "Id",
"type": "string"
},
"name": {
"title": "Name",
"type": "string"
},
"owner_account_id": {
"title": "Owner Account Id",
"type": "integer"
},
"preset": {
"$ref": "#/components/schemas/GrantPreset"
},
"requires_access_approval": {
"title": "Requires Access Approval",
"type": "boolean"
},
"revision": {
"title": "Revision",
"type": "integer"
}
},
"required": [
"id",
"owner_account_id",
"client_id",
"name",
"preset",
"capabilities",
"constraints",
"requires_access_approval",
"full_management",
"access_role",
"revision",
"expires_at"
],
"title": "GrantOut",
"type": "object"
},
"GrantPreset": {
"description": "Owner-facing starting points for a named assistant connection.",
"enum": [
"inspect",
"manage_selected_rows",
"owner_automation"
],
"title": "GrantPreset",
"type": "string"
},
"GrantSummaryOut": {
"additionalProperties": true,
"description": "Grant authority plus owner-visible activity and call accounting.",
"properties": {
"access_role": {
"anyOf": [
{
"enum": [
"view",
"manage"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Access Role"
},
"capabilities": {
"items": {
"$ref": "#/components/schemas/Capability"
},
"title": "Capabilities",
"type": "array"
},
"client_id": {
"title": "Client Id",
"type": "string"
},
"constraints": {
"$ref": "#/components/schemas/GrantConstraintsOut"
},
"created_at": {
"format": "date-time",
"title": "Created At",
"type": "string"
},
"expires_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"title": "Expires At"
},
"full_management": {
"title": "Full Management",
"type": "boolean"
},
"id": {
"title": "Id",
"type": "string"
},
"last_used_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"title": "Last Used At"
},
"local_credential_count": {
"title": "Local Credential Count",
"type": "integer"
},
"name": {
"title": "Name",
"type": "string"
},
"owner_account_id": {
"title": "Owner Account Id",
"type": "integer"
},
"preset": {
"$ref": "#/components/schemas/GrantPreset"
},
"provider_call_quota": {
"$ref": "#/components/schemas/ProviderCallQuotaOut"
},
"requires_access_approval": {
"title": "Requires Access Approval",
"type": "boolean"
},
"revision": {
"title": "Revision",
"type": "integer"
},
"revoked_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"title": "Revoked At"
},
"updated_at": {
"format": "date-time",
"title": "Updated At",
"type": "string"
}
},
"required": [
"id",
"owner_account_id",
"client_id",
"name",
"preset",
"capabilities",
"constraints",
"requires_access_approval",
"full_management",
"access_role",
"revision",
"expires_at",
"created_at",
"updated_at",
"revoked_at",
"last_used_at",
"local_credential_count",
"provider_call_quota"
],
"title": "GrantSummaryOut",
"type": "object"
},
"HTTPValidationError": {
"properties": {
"detail": {
"items": {
"$ref": "#/components/schemas/ValidationError"
},
"title": "Detail",
"type": "array"
}
},
"title": "HTTPValidationError",
"type": "object"
},
"HealthOut": {
"additionalProperties": true,
"properties": {
"status": {
"title": "Status",
"type": "string"
}
},
"required": [
"status"
],
"title": "HealthOut",
"type": "object"
},
"HeldTitleOut": {
"additionalProperties": true,
"properties": {
"reason": {
"title": "Reason",
"type": "string"
},
"story": {
"title": "Story",
"type": "boolean"
},
"title": {
"title": "Title",
"type": "string"
},
"tmdb_id": {
"title": "Tmdb Id",
"type": "integer"
},
"year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year"
}
},
"required": [
"tmdb_id",
"title",
"year",
"reason",
"story"
],
"title": "HeldTitleOut",
"type": "object"
},
"HistoryMixItemOut": {
"additionalProperties": true,
"description": "One title in a person's history mix.",
"properties": {
"media_type": {
"title": "Media Type",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
},
"tmdb_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Tmdb Id"
},
"year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year"
}
},
"required": [
"title",
"year",
"media_type",
"tmdb_id"
],
"title": "HistoryMixItemOut",
"type": "object"
},
"HistoryMixOut": {
"additionalProperties": true,
"description": "The titles one row's AI web search draws from a person's history this week, in their three groups.",
"properties": {
"favourite_count": {
"title": "Favourite Count",
"type": "integer"
},
"favourites": {
"items": {
"$ref": "#/components/schemas/HistoryMixItemOut"
},
"title": "Favourites",
"type": "array"
},
"older": {
"items": {
"$ref": "#/components/schemas/HistoryMixItemOut"
},
"title": "Older",
"type": "array"
},
"older_count": {
"title": "Older Count",
"type": "integer"
},
"recent": {
"items": {
"$ref": "#/components/schemas/HistoryMixItemOut"
},
"title": "Recent",
"type": "array"
}
},
"required": [
"recent",
"favourites",
"older",
"favourite_count",
"older_count"
],
"title": "HistoryMixOut",
"type": "object"
},
"HoldPreviewIn": {
"description": "Genres and tags the owner is considering, before they are saved.",
"properties": {
"genres": {
"items": {
"type": "integer"
},
"maxItems": 30,
"title": "Genres",
"type": "array"
},
"tags": {
"items": {
"type": "integer"
},
"maxItems": 60,
"title": "Tags",
"type": "array"
}
},
"title": "HoldPreviewIn",
"type": "object"
},
"HoldPreviewOut": {
"additionalProperties": true,
"properties": {
"checked": {
"title": "Checked",
"type": "integer"
},
"held": {
"items": {
"$ref": "#/components/schemas/HeldTitleOut"
},
"title": "Held",
"type": "array"
},
"unread": {
"title": "Unread",
"type": "integer"
}
},
"required": [
"checked",
"held",
"unread"
],
"title": "HoldPreviewOut",
"type": "object"
},
"HomeUserOut": {
"additionalProperties": true,
"description": "A Home user that could become the owner's watching account.",
"properties": {
"already_a_shortlist_user": {
"title": "Already A Shortlist User",
"type": "boolean"
},
"plex_account_id": {
"title": "Plex Account Id",
"type": "integer"
},
"protected": {
"title": "Protected",
"type": "boolean"
},
"title": {
"title": "Title",
"type": "string"
}
},
"required": [
"plex_account_id",
"title",
"protected",
"already_a_shortlist_user"
],
"title": "HomeUserOut",
"type": "object"
},
"HubAnchorIn": {
"description": "A per-library shelf placement for one row: the very TOP (``top``), or after/before either\nanother Shortlist ROW (``row``, a row slug) or a foreign collection (``anchor``, a title).\n``top`` needs neither; otherwise exactly one of ``row``/``anchor`` must be set. ``enabled``\nfalse is a placement in its own right \u2014 \"never position this row\" \u2014 and needs neither.\n\n``row`` is a slug rather than a title because a per-person row is one Plex collection PER PERSON:\na title names one account's copy and is meaningless for everyone else, which is what made the\npicker offer forty identical-looking options and place none of them (issue #81).",
"properties": {
"anchor": {
"default": "",
"maxLength": 255,
"title": "Anchor",
"type": "string"
},
"before": {
"default": false,
"title": "Before",
"type": "boolean"
},
"enabled": {
"default": true,
"title": "Enabled",
"type": "boolean"
},
"row": {
"default": "",
"maxLength": 255,
"title": "Row",
"type": "string"
},
"top": {
"default": false,
"title": "Top",
"type": "boolean"
}
},
"title": "HubAnchorIn",
"type": "object"
},
"HubAnchorOut": {
"additionalProperties": true,
"description": "A stored shelf placement. Defaulted, unlike the rest of these response fields: rows saved\nbefore ``top`` existed have only ``anchor``/``before``, and filling in the same default\n`HubAnchorIn` would have written is what those rows already mean.",
"properties": {
"anchor": {
"default": "",
"title": "Anchor",
"type": "string"
},
"before": {
"default": false,
"title": "Before",
"type": "boolean"
},
"row": {
"default": "",
"title": "Row",
"type": "string"
},
"top": {
"default": false,
"title": "Top",
"type": "boolean"
}
},
"title": "HubAnchorOut",
"type": "object"
},
"ImageProviderOut": {
"additionalProperties": true,
"properties": {
"capable": {
"title": "Capable",
"type": "boolean"
},
"provider": {
"title": "Provider",
"type": "string"
},
"reason": {
"title": "Reason",
"type": "string"
}
},
"required": [
"capable",
"provider",
"reason"
],
"title": "ImageProviderOut",
"type": "object"
},
"JobCatalogEntryOut": {
"additionalProperties": true,
"description": "One card on the Jobs page: what the kind does, when it next runs, and how it went last time.",
"properties": {
"description": {
"title": "Description",
"type": "string"
},
"failed": {
"title": "Failed",
"type": "integer"
},
"kind": {
"title": "Kind",
"type": "string"
},
"label": {
"title": "Label",
"type": "string"
},
"last": {
"anyOf": [
{
"$ref": "#/components/schemas/JobOut"
},
{
"type": "null"
}
]
},
"manual": {
"title": "Manual",
"type": "boolean"
},
"next_run": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Next Run"
},
"queued": {
"title": "Queued",
"type": "integer"
},
"running": {
"title": "Running",
"type": "integer"
},
"schedule_optional": {
"title": "Schedule Optional",
"type": "boolean"
},
"schedule_setting": {
"title": "Schedule Setting",
"type": "string"
},
"scheduled": {
"title": "Scheduled",
"type": "boolean"
},
"total": {
"title": "Total",
"type": "integer"
},
"trigger": {
"title": "Trigger",
"type": "string"
}
},
"required": [
"kind",
"label",
"description",
"manual",
"trigger",
"scheduled",
"schedule_optional",
"schedule_setting",
"next_run",
"last",
"total",
"queued",
"running",
"failed"
],
"title": "JobCatalogEntryOut",
"type": "object"
},
"JobOut": {
"additionalProperties": true,
"description": "One background job row \u2014 the shape `_job_dict` builds, on both `/jobs` and `/jobs/catalog`.",
"properties": {
"attempts": {
"title": "Attempts",
"type": "integer"
},
"created_at": {
"title": "Created At",
"type": "string"
},
"detail": {
"title": "Detail",
"type": "string"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Error"
},
"finished_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Finished At"
},
"id": {
"title": "Id",
"type": "integer"
},
"kind": {
"title": "Kind",
"type": "string"
},
"max_attempts": {
"title": "Max Attempts",
"type": "integer"
},
"payload": {
"additionalProperties": true,
"title": "Payload",
"type": "object"
},
"result": {
"additionalProperties": true,
"title": "Result",
"type": "object"
},
"started_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Started At"
},
"status": {
"enum": [
"queued",
"running",
"done",
"failed"
],
"title": "Status",
"type": "string"
}
},
"required": [
"id",
"kind",
"status",
"attempts",
"max_attempts",
"detail",
"error",
"payload",
"result",
"created_at",
"started_at",
"finished_at"
],
"title": "JobOut",
"type": "object"
},
"JobRunOut": {
"additionalProperties": true,
"description": "The receipt for `POST /jobs` \u2014 a subset of `JobOut` plus the sync-check preview lists.",
"properties": {
"detail": {
"title": "Detail",
"type": "string"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Error"
},
"fixed": {
"items": {
"type": "string"
},
"title": "Fixed",
"type": "array"
},
"id": {
"title": "Id",
"type": "integer"
},
"kind": {
"title": "Kind",
"type": "string"
},
"orphans": {
"items": {
"type": "string"
},
"title": "Orphans",
"type": "array"
},
"status": {
"enum": [
"queued",
"running",
"done",
"failed"
],
"title": "Status",
"type": "string"
}
},
"required": [
"id",
"kind",
"status",
"detail",
"error",
"fixed",
"orphans"
],
"title": "JobRunOut",
"type": "object"
},
"JsonValue": {},
"LandingOut": {
"additionalProperties": true,
"description": "The landing rate over a matured cohort \u2014 picks old enough to have had their chance.",
"properties": {
"cohort_from": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Cohort From"
},
"cohort_to": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Cohort To"
},
"delivered": {
"title": "Delivered",
"type": "integer"
},
"finished": {
"title": "Finished",
"type": "integer"
},
"finished_rate": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Finished Rate"
},
"matured_days": {
"title": "Matured Days",
"type": "integer"
},
"rate": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Rate"
},
"watched": {
"title": "Watched",
"type": "integer"
}
},
"required": [
"delivered",
"watched",
"finished",
"finished_rate",
"rate",
"cohort_from",
"cohort_to",
"matured_days"
],
"title": "LandingOut",
"type": "object"
},
"LibraryCollectionOut": {
"additionalProperties": true,
"description": "A candidate anchor. Title, because the shelf is ordered by title, not by rating key \u2014 plus\nwhether it has a position on a Plex shelf at all, which decides if it can anchor anything.",
"properties": {
"on_shelf": {
"title": "On Shelf",
"type": "boolean"
},
"title": {
"title": "Title",
"type": "string"
}
},
"required": [
"title",
"on_shelf"
],
"title": "LibraryCollectionOut",
"type": "object"
},
"LibraryOut": {
"additionalProperties": true,
"properties": {
"key": {
"title": "Key",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
},
"type": {
"enum": [
"movie",
"show"
],
"title": "Type",
"type": "string"
}
},
"required": [
"key",
"title",
"type"
],
"title": "LibraryOut",
"type": "object"
},
"LibrarySectionOut": {
"additionalProperties": true,
"description": "One movie/show library the probe found.",
"properties": {
"count": {
"title": "Count",
"type": "integer"
},
"key": {
"title": "Key",
"type": "integer"
},
"title": {
"title": "Title",
"type": "string"
},
"type": {
"enum": [
"movie",
"show"
],
"title": "Type",
"type": "string"
}
},
"required": [
"key",
"title",
"type",
"count"
],
"title": "LibrarySectionOut",
"type": "object"
},
"LibraryTitleOut": {
"additionalProperties": true,
"properties": {
"media_type": {
"enum": [
"movie",
"show"
],
"title": "Media Type",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
},
"tmdb_id": {
"title": "Tmdb Id",
"type": "integer"
},
"year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year"
}
},
"required": [
"tmdb_id",
"media_type",
"title",
"year"
],
"title": "LibraryTitleOut",
"type": "object"
},
"LinkRequest": {
"properties": {
"machine_id": {
"title": "Machine Id",
"type": "string"
},
"owner_account_id": {
"title": "Owner Account Id",
"type": "integer"
},
"plex_pass": {
"default": false,
"title": "Plex Pass",
"type": "boolean"
},
"plex_url": {
"title": "Plex Url",
"type": "string"
},
"server_name": {
"default": "",
"title": "Server Name",
"type": "string"
},
"version": {
"default": "",
"title": "Version",
"type": "string"
}
},
"required": [
"plex_url",
"machine_id",
"owner_account_id"
],
"title": "LinkRequest",
"type": "object"
},
"LinkedOut": {
"additionalProperties": true,
"properties": {
"linked": {
"title": "Linked",
"type": "boolean"
},
"server_name": {
"title": "Server Name",
"type": "string"
}
},
"required": [
"linked",
"server_name"
],
"title": "LinkedOut",
"type": "object"
},
"LocalCredentialIn": {
"additionalProperties": false,
"description": "Lifetime for a one-time local credential handoff.",
"properties": {
"expires_in_days": {
"default": 90,
"maximum": 365.0,
"minimum": 1.0,
"title": "Expires In Days",
"type": "integer"
}
},
"title": "LocalCredentialIn",
"type": "object"
},
"LogLineOut": {
"additionalProperties": true,
"description": "One parsed log entry. `ts` is None for a line the parser could not date (a raw traceback).",
"properties": {
"level": {
"title": "Level",
"type": "string"
},
"message": {
"title": "Message",
"type": "string"
},
"source": {
"title": "Source",
"type": "string"
},
"ts": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts"
}
},
"required": [
"ts",
"level",
"source",
"message"
],
"title": "LogLineOut",
"type": "object"
},
"LogoutOut": {
"additionalProperties": true,
"properties": {
"ok": {
"title": "Ok",
"type": "boolean"
}
},
"required": [
"ok"
],
"title": "LogoutOut",
"type": "object"
},
"LogsOut": {
"additionalProperties": true,
"properties": {
"file": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "File"
},
"lines": {
"items": {
"$ref": "#/components/schemas/LogLineOut"
},
"title": "Lines",
"type": "array"
},
"total_matched": {
"title": "Total Matched",
"type": "integer"
},
"truncated": {
"title": "Truncated",
"type": "boolean"
}
},
"required": [
"lines",
"total_matched",
"truncated",
"file"
],
"title": "LogsOut",
"type": "object"
},
"NotificationOut": {
"additionalProperties": true,
"description": "One alert as the React bell renders it \u2014 plain text throughout, no HTML.\n\n``extra=\"allow\"`` (here and on the wrapper) is not optional: a strict Pydantic response model\nsilently DROPS any key it does not declare, so a field missed here would vanish from the payload\ninstead of failing loudly.",
"properties": {
"action_label": {
"title": "Action Label",
"type": "string"
},
"action_url": {
"title": "Action Url",
"type": "string"
},
"body": {
"title": "Body",
"type": "string"
},
"dismissable": {
"title": "Dismissable",
"type": "boolean"
},
"id": {
"title": "Id",
"type": "string"
},
"severity": {
"enum": [
"info",
"warning",
"error"
],
"title": "Severity",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
}
},
"required": [
"id",
"severity",
"title",
"body",
"action_url",
"action_label",
"dismissable"
],
"title": "NotificationOut",
"type": "object"
},
"NotificationsOut": {
"additionalProperties": true,
"properties": {
"dismissed": {
"items": {
"type": "string"
},
"title": "Dismissed",
"type": "array"
},
"notifications": {
"items": {
"$ref": "#/components/schemas/NotificationOut"
},
"title": "Notifications",
"type": "array"
}
},
"required": [
"notifications",
"dismissed"
],
"title": "NotificationsOut",
"type": "object"
},
"NumericRangeOut": {
"additionalProperties": true,
"description": "Public numeric bounds.",
"properties": {
"maximum": {
"anyOf": [
{
"type": "number"
},
{
"type": "integer"
}
],
"title": "Maximum"
},
"minimum": {
"anyOf": [
{
"type": "number"
},
{
"type": "integer"
}
],
"title": "Minimum"
},
"unit": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Unit"
}
},
"required": [
"minimum",
"maximum"
],
"title": "NumericRangeOut",
"type": "object"
},
"OAuthAuthorizeIn": {
"additionalProperties": false,
"description": "Bounded authorization request copied from the browser URL by the SPA.",
"properties": {
"client_id": {
"maxLength": 255,
"minLength": 1,
"title": "Client Id",
"type": "string"
},
"code_challenge": {
"maxLength": 128,
"minLength": 43,
"title": "Code Challenge",
"type": "string"
},
"code_challenge_method": {
"default": "S256",
"title": "Code Challenge Method",
"type": "string"
},
"redirect_uri": {
"maxLength": 2048,
"minLength": 1,
"title": "Redirect Uri",
"type": "string"
},
"resource": {
"maxLength": 2048,
"minLength": 1,
"title": "Resource",
"type": "string"
},
"response_type": {
"default": "code",
"title": "Response Type",
"type": "string"
},
"scope": {
"default": "instance.read",
"maxLength": 2048,
"title": "Scope",
"type": "string"
},
"state": {
"maxLength": 2048,
"minLength": 1,
"title": "State",
"type": "string"
}
},
"required": [
"client_id",
"redirect_uri",
"resource",
"state",
"code_challenge"
],
"title": "OAuthAuthorizeIn",
"type": "object"
},
"OverallOut": {
"additionalProperties": true,
"description": "Headline counts for the window, with the change vs the previous equal period.",
"properties": {
"avg_days_to_watch": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Avg Days To Watch"
},
"avg_days_to_watch_delta": {
"anyOf": [
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Avg Days To Watch Delta"
},
"bounced": {
"title": "Bounced",
"type": "integer"
},
"delivered": {
"title": "Delivered",
"type": "integer"
},
"dropped": {
"title": "Dropped",
"type": "integer"
},
"finished": {
"title": "Finished",
"type": "integer"
},
"landing": {
"$ref": "#/components/schemas/LandingOut"
},
"viewing_share": {
"$ref": "#/components/schemas/ViewingShareOut"
},
"watched": {
"title": "Watched",
"type": "integer"
},
"watched_delta": {
"anyOf": [
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Watched Delta"
},
"watched_prev": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Watched Prev"
}
},
"required": [
"delivered",
"watched",
"watched_prev",
"watched_delta",
"finished",
"bounced",
"dropped",
"avg_days_to_watch",
"avg_days_to_watch_delta",
"landing",
"viewing_share"
],
"title": "OverallOut",
"type": "object"
},
"OwnedCollectionOut": {
"additionalProperties": true,
"properties": {
"kind": {
"enum": [
"user",
"shared"
],
"title": "Kind",
"type": "string"
},
"label": {
"title": "Label",
"type": "string"
},
"library": {
"title": "Library",
"type": "string"
},
"orphan": {
"title": "Orphan",
"type": "boolean"
},
"rating_key": {
"title": "Rating Key",
"type": "integer"
},
"slug": {
"title": "Slug",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
}
},
"required": [
"library",
"title",
"label",
"rating_key",
"kind",
"slug",
"orphan"
],
"title": "OwnedCollectionOut",
"type": "object"
},
"OwnedCollectionsOut": {
"additionalProperties": true,
"properties": {
"collections": {
"items": {
"$ref": "#/components/schemas/OwnedCollectionOut"
},
"title": "Collections",
"type": "array"
},
"orphans": {
"title": "Orphans",
"type": "integer"
},
"total": {
"title": "Total",
"type": "integer"
}
},
"required": [
"collections",
"total",
"orphans"
],
"title": "OwnedCollectionsOut",
"type": "object"
},
"PendingRestore": {
"additionalProperties": true,
"properties": {
"backup": {
"title": "Backup",
"type": "string"
},
"requested_at": {
"title": "Requested At",
"type": "string"
}
},
"required": [
"backup",
"requested_at"
],
"title": "PendingRestore",
"type": "object"
},
"PendingRestoreOut": {
"additionalProperties": true,
"description": "The restore waiting for a restart, if any.",
"properties": {
"pending": {
"anyOf": [
{
"$ref": "#/components/schemas/PendingRestore"
},
{
"type": "null"
}
]
}
},
"required": [
"pending"
],
"title": "PendingRestoreOut",
"type": "object"
},
"PerRowOut": {
"additionalProperties": true,
"description": "One (row, library) line. A row targeting >1 library is one Plex collection per library.",
"properties": {
"deleted": {
"title": "Deleted",
"type": "boolean"
},
"delivered": {
"title": "Delivered",
"type": "integer"
},
"finished": {
"title": "Finished",
"type": "integer"
},
"library": {
"title": "Library",
"type": "string"
},
"name": {
"title": "Name",
"type": "string"
},
"section_key": {
"title": "Section Key",
"type": "string"
},
"slug": {
"title": "Slug",
"type": "string"
},
"watched": {
"title": "Watched",
"type": "integer"
}
},
"required": [
"slug",
"section_key",
"library",
"name",
"deleted",
"delivered",
"watched",
"finished"
],
"title": "PerRowOut",
"type": "object"
},
"PerUserOut": {
"additionalProperties": true,
"properties": {
"delivered": {
"title": "Delivered",
"type": "integer"
},
"display_name": {
"title": "Display Name",
"type": "string"
},
"enabled": {
"title": "Enabled",
"type": "boolean"
},
"finished": {
"title": "Finished",
"type": "integer"
},
"id": {
"title": "Id",
"type": "integer"
},
"slug": {
"title": "Slug",
"type": "string"
},
"username": {
"title": "Username",
"type": "string"
},
"watched": {
"title": "Watched",
"type": "integer"
}
},
"required": [
"id",
"username",
"display_name",
"slug",
"enabled",
"delivered",
"watched",
"finished"
],
"title": "PerUserOut",
"type": "object"
},
"PersonReadyOut": {
"additionalProperties": true,
"properties": {
"display_name": {
"title": "Display Name",
"type": "string"
},
"linked": {
"title": "Linked",
"type": "boolean"
},
"ready": {
"title": "Ready",
"type": "integer"
},
"user_id": {
"title": "User Id",
"type": "integer"
}
},
"required": [
"user_id",
"display_name",
"linked",
"ready"
],
"title": "PersonReadyOut",
"type": "object"
},
"PickIO": {
"additionalProperties": true,
"description": "A title the owner picked by hand.",
"properties": {
"media_type": {
"enum": [
"movie",
"show"
],
"title": "Media Type",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
},
"tmdb_id": {
"title": "Tmdb Id",
"type": "integer"
},
"year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year"
}
},
"required": [
"tmdb_id",
"media_type",
"title"
],
"title": "PickIO",
"type": "object"
},
"PickOut": {
"additionalProperties": true,
"description": "One delivered recommendation, as the run detail lists it.",
"properties": {
"affinity": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Affinity"
},
"order_rating": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Order Rating"
},
"order_rating_source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Order Rating Source"
},
"rank": {
"title": "Rank",
"type": "integer"
},
"rating": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Rating"
},
"rating_key": {
"default": 0,
"title": "Rating Key",
"type": "integer"
},
"rating_source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Rating Source"
},
"reason": {
"title": "Reason",
"type": "string"
},
"seed_title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Seed Title"
},
"sources": {
"items": {
"type": "string"
},
"title": "Sources",
"type": "array"
},
"title": {
"title": "Title",
"type": "string"
},
"year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year"
}
},
"required": [
"rank",
"title",
"reason",
"seed_title",
"sources",
"affinity"
],
"title": "PickOut",
"type": "object"
},
"PinOut": {
"additionalProperties": true,
"description": "A freshly created plex.tv PIN. The `code` is what the owner types into plex.tv/link \u2014 it is\nshort-lived and useless without the same `client_id`, and it is not a Shortlist credential.\n\n``extra=\"allow\"`` is on every response model in this file: a strict Pydantic response model\nsilently DROPS any key it does not declare, so a field missed here would vanish from the payload\nrather than fail loudly. The model documents the shape; it never filters it.",
"properties": {
"client_id": {
"title": "Client Id",
"type": "string"
},
"code": {
"title": "Code",
"type": "string"
},
"id": {
"title": "Id",
"type": "integer"
}
},
"required": [
"id",
"code",
"client_id"
],
"title": "PinOut",
"type": "object"
},
"PinStatusOut": {
"additionalProperties": true,
"description": "The poll result. Until the owner approves in Plex it is `linked: false` and the identity\nfields are null; the Plex auth token is NEVER part of this payload (it is held server-side,\nkeyed to the session, so an XSS in the SPA cannot steal it).",
"properties": {
"account_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Account Id"
},
"linked": {
"title": "Linked",
"type": "boolean"
},
"username": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Username"
}
},
"required": [
"linked"
],
"title": "PinStatusOut",
"type": "object"
},
"PlanEntryOut": {
"additionalProperties": true,
"description": "One unit of Plex work an edit would cause.",
"properties": {
"collections": {
"items": {
"type": "string"
},
"title": "Collections",
"type": "array"
},
"in_sections": {
"items": {
"type": "string"
},
"title": "In Sections",
"type": "array"
},
"kind": {
"description": "What this step would do.",
"enum": [
"poster_reset",
"privacy_sync",
"reconcile",
"rename",
"visibility"
],
"title": "Kind",
"type": "string"
},
"only_user_ids": {
"items": {
"type": "integer"
},
"title": "Only User Ids",
"type": "array"
},
"reason": {
"title": "Reason",
"type": "string"
}
},
"required": [
"kind",
"reason",
"collections",
"only_user_ids",
"in_sections"
],
"title": "PlanEntryOut",
"type": "object"
},
"PlexCollectionOut": {
"additionalProperties": true,
"properties": {
"count": {
"title": "Count",
"type": "integer"
},
"media_type": {
"enum": [
"movie",
"show"
],
"title": "Media Type",
"type": "string"
},
"section_key": {
"title": "Section Key",
"type": "string"
},
"section_title": {
"title": "Section Title",
"type": "string"
},
"smart": {
"title": "Smart",
"type": "boolean"
},
"title": {
"title": "Title",
"type": "string"
}
},
"required": [
"section_key",
"section_title",
"title",
"count",
"smart",
"media_type"
],
"title": "PlexCollectionOut",
"type": "object"
},
"PlexServerOut": {
"additionalProperties": true,
"description": "A server plex.tv says this account can reach, with every advertised address already tried.",
"properties": {
"connections": {
"items": {
"$ref": "#/components/schemas/ServerConnectionOut"
},
"title": "Connections",
"type": "array"
},
"machine_id": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Machine Id"
},
"name": {
"title": "Name",
"type": "string"
},
"owned": {
"title": "Owned",
"type": "boolean"
},
"version": {
"title": "Version",
"type": "string"
}
},
"required": [
"name",
"machine_id",
"owned",
"version",
"connections"
],
"title": "PlexServerOut",
"type": "object"
},
"PosterIn": {
"description": "A row's custom-poster config. ``mode`` \"\" leaves Plex artwork alone; \"upload\" uses the image\nstored via the upload endpoint; \"text\" renders ``title``/``subtitle`` with the built-in Pillow\nengine (no AI); \"ai\" renders them with the curator provider's image model. The text fields share\nthe row-name placeholders ({user}/{library_name}/{top_seed}).",
"properties": {
"mode": {
"default": "",
"description": "Poster source; \"\" leaves Plex artwork alone.",
"enum": [
"",
"ai",
"generate",
"text",
"upload"
],
"title": "Mode",
"type": "string"
},
"style": {
"default": "",
"maxLength": 400,
"title": "Style",
"type": "string"
},
"subtitle": {
"default": "",
"maxLength": 120,
"title": "Subtitle",
"type": "string"
},
"title": {
"default": "",
"maxLength": 120,
"title": "Title",
"type": "string"
}
},
"title": "PosterIn",
"type": "object"
},
"PosterOut": {
"additionalProperties": true,
"description": "A row's poster config as the editor reads it \u2014 never the image bytes.",
"properties": {
"has_image": {
"title": "Has Image",
"type": "boolean"
},
"mode": {
"description": "Poster source; \"\" leaves Plex artwork alone.",
"enum": [
"",
"ai",
"generate",
"text",
"upload"
],
"title": "Mode",
"type": "string"
},
"style": {
"title": "Style",
"type": "string"
},
"subtitle": {
"title": "Subtitle",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
}
},
"required": [
"mode",
"title",
"subtitle",
"style",
"has_image"
],
"title": "PosterOut",
"type": "object"
},
"PosterUploadOut": {
"additionalProperties": true,
"properties": {
"mode": {
"title": "Mode",
"type": "string"
},
"ok": {
"title": "Ok",
"type": "boolean"
}
},
"required": [
"ok",
"mode"
],
"title": "PosterUploadOut",
"type": "object"
},
"PresetOut": {
"additionalProperties": true,
"description": "A ready-made season's save fields plus catalogue metadata. ``preset`` is ``key``.",
"properties": {
"after_days": {
"default": 0,
"maximum": 30.0,
"minimum": 0.0,
"title": "After Days",
"type": "integer"
},
"category": {
"default": "holidays",
"enum": [
"holidays",
"film_days",
"spotlights"
],
"title": "Category",
"type": "string"
},
"collections": {
"items": {
"$ref": "#/components/schemas/CollectionIO"
},
"maxItems": 10,
"title": "Collections",
"type": "array"
},
"description": {
"default": "",
"title": "Description",
"type": "string"
},
"emoji": {
"maxLength": 8,
"minLength": 1,
"title": "Emoji",
"type": "string"
},
"excluded_genres": {
"items": {
"type": "integer"
},
"maxItems": 5,
"title": "Excluded Genres",
"type": "array"
},
"genre": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Genre"
},
"key": {
"title": "Key",
"type": "string"
},
"label": {
"title": "Label",
"type": "string"
},
"lead_days": {
"default": 7,
"maximum": 90.0,
"minimum": 0.0,
"title": "Lead Days",
"type": "integer"
},
"name": {
"maxLength": 40,
"minLength": 1,
"title": "Name",
"type": "string"
},
"note": {
"title": "Note",
"type": "string"
},
"picks": {
"items": {
"$ref": "#/components/schemas/PickIO"
},
"maxItems": 200,
"title": "Picks",
"type": "array"
},
"preset": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Preset"
},
"rule": {
"$ref": "#/components/schemas/DateRuleIO"
},
"tags": {
"items": {
"$ref": "#/components/schemas/TagIO"
},
"maxItems": 20,
"title": "Tags",
"type": "array"
}
},
"required": [
"name",
"emoji",
"rule",
"key",
"label",
"note"
],
"title": "PresetOut",
"type": "object"
},
"PreviewIn": {
"properties": {
"brief": {
"default": "",
"maxLength": 1000,
"title": "Brief",
"type": "string"
},
"change": {
"default": "",
"maxLength": 1000,
"title": "Change",
"type": "string"
},
"collection_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Collection Id"
},
"current_draft": {
"anyOf": [
{
"$ref": "#/components/schemas/ThemeIn"
},
{
"type": "null"
}
]
},
"current_theme_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Current Theme Id"
},
"guidance": {
"default": "",
"maxLength": 4000,
"title": "Guidance",
"type": "string"
},
"media": {
"default": "both",
"enum": [
"movie",
"show",
"both"
],
"title": "Media",
"type": "string"
}
},
"title": "PreviewIn",
"type": "object"
},
"PreviewOut": {
"additionalProperties": true,
"properties": {
"diff": {
"anyOf": [
{
"$ref": "#/components/schemas/ThemeDiffOut"
},
{
"type": "null"
}
]
},
"draft": {
"$ref": "#/components/schemas/ThemeOut"
},
"stats": {
"$ref": "#/components/schemas/ThemeStatsOut"
},
"tokens": {
"title": "Tokens",
"type": "integer"
}
},
"required": [
"draft",
"stats",
"diff",
"tokens"
],
"title": "PreviewOut",
"type": "object"
},
"PreviewTitleOut": {
"additionalProperties": true,
"description": "One title from a row's latest delivery, for the Rows list's poster collage.",
"properties": {
"rating_key": {
"title": "Rating Key",
"type": "integer"
},
"title": {
"title": "Title",
"type": "string"
}
},
"required": [
"rating_key",
"title"
],
"title": "PreviewTitleOut",
"type": "object"
},
"PrivacyStatusOut": {
"additionalProperties": true,
"description": "One live reading of the whole server's sharing state.",
"properties": {
"accounts": {
"items": {
"$ref": "#/components/schemas/AccountPrivacyOut"
},
"title": "Accounts",
"type": "array"
},
"enforcement": {
"$ref": "#/components/schemas/EnforcementOut"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Error"
},
"read_at": {
"title": "Read At",
"type": "string"
},
"rows_error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Rows Error"
},
"rows_on_plex": {
"items": {
"type": "string"
},
"title": "Rows On Plex",
"type": "array"
},
"snapshots_kept": {
"title": "Snapshots Kept",
"type": "integer"
},
"summary": {
"title": "Summary",
"type": "string"
}
},
"required": [
"read_at",
"summary",
"accounts",
"rows_on_plex",
"rows_error",
"error",
"enforcement",
"snapshots_kept"
],
"title": "PrivacyStatusOut",
"type": "object"
},
"ProbeCheckOut": {
"additionalProperties": true,
"description": "One line of the wizard's step-1 checklist: did it pass, and what to say about it.\n\nThis is the one shape here with an OPTIONAL field, which is why its route sets\n``response_model_exclude_unset``. `extra=\"allow\"` stops a model dropping a key, but nothing stops\nit INVENTING one: without that flag every check the probe sends without a `value` \u2014 and the whole\n`tautulli` entry on a server that has none \u2014 would arrive as an explicit `null` the handler never\nwrote. The flag makes the payload byte-identical to the dict, which is the entire contract these\nmodels are meant to keep.",
"properties": {
"message": {
"title": "Message",
"type": "string"
},
"ok": {
"title": "Ok",
"type": "boolean"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Value"
}
},
"required": [
"ok",
"message"
],
"title": "ProbeCheckOut",
"type": "object"
},
"ProbeChecksOut": {
"additionalProperties": true,
"description": "The checklist itself.\n\n`tautulli` runs only when the form supplied a Tautulli URL, so it is the one check that can be\nabsent \u2014 and it therefore needs the default. Without one it would be REQUIRED, and every probe of\na server with no Tautulli would fail response validation with a 500 instead of rendering.",
"properties": {
"libraries": {
"$ref": "#/components/schemas/ProbeCheckOut"
},
"plex_pass": {
"$ref": "#/components/schemas/ProbeCheckOut"
},
"pms_version": {
"$ref": "#/components/schemas/ProbeCheckOut"
},
"tautulli": {
"anyOf": [
{
"$ref": "#/components/schemas/ProbeCheckOut"
},
{
"type": "null"
}
]
}
},
"required": [
"pms_version",
"plex_pass",
"libraries"
],
"title": "ProbeChecksOut",
"type": "object"
},
"ProbeRequest": {
"properties": {
"plex_url": {
"title": "Plex Url",
"type": "string"
},
"tautulli_apikey": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tautulli Apikey"
},
"tautulli_url": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Tautulli Url"
}
},
"required": [
"plex_url"
],
"title": "ProbeRequest",
"type": "object"
},
"ProbeResultOut": {
"additionalProperties": true,
"description": "What `POST /setup/probe` answers: the checklist plus what it learned about the server.",
"properties": {
"checks": {
"$ref": "#/components/schemas/ProbeChecksOut"
},
"libraries": {
"items": {
"$ref": "#/components/schemas/LibrarySectionOut"
},
"title": "Libraries",
"type": "array"
},
"machine_id": {
"title": "Machine Id",
"type": "string"
},
"owner_account_id": {
"title": "Owner Account Id",
"type": "integer"
},
"server_name": {
"title": "Server Name",
"type": "string"
}
},
"required": [
"checks",
"machine_id",
"server_name",
"owner_account_id",
"libraries"
],
"title": "ProbeResultOut",
"type": "object"
},
"PromptsOut": {
"additionalProperties": true,
"properties": {
"guidance": {
"title": "Guidance",
"type": "string"
},
"mechanics": {
"title": "Mechanics",
"type": "string"
}
},
"required": [
"guidance",
"mechanics"
],
"title": "PromptsOut",
"type": "object"
},
"ProviderCallQuotaOut": {
"additionalProperties": true,
"description": "Current conservative lifetime call accounting.",
"properties": {
"lifetime_limit": {
"title": "Lifetime Limit",
"type": "integer"
},
"remaining": {
"title": "Remaining",
"type": "integer"
},
"reserved": {
"title": "Reserved",
"type": "integer"
}
},
"required": [
"lifetime_limit",
"reserved",
"remaining"
],
"title": "ProviderCallQuotaOut",
"type": "object"
},
"QualityProfileOut": {
"additionalProperties": true,
"properties": {
"id": {
"title": "Id",
"type": "integer"
},
"name": {
"title": "Name",
"type": "string"
}
},
"required": [
"id",
"name"
],
"title": "QualityProfileOut",
"type": "object"
},
"RecentWatchOut": {
"additionalProperties": true,
"properties": {
"display_name": {
"title": "Display Name",
"type": "string"
},
"finished_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Finished At"
},
"library": {
"title": "Library",
"type": "string"
},
"media_type": {
"title": "Media Type",
"type": "string"
},
"rating_key": {
"title": "Rating Key",
"type": "integer"
},
"row": {
"title": "Row",
"type": "string"
},
"seed_title": {
"title": "Seed Title",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
},
"tmdb_id": {
"title": "Tmdb Id",
"type": "integer"
},
"user_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "User Id"
},
"username": {
"title": "Username",
"type": "string"
},
"watched_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Watched At"
},
"year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year"
}
},
"required": [
"user_id",
"username",
"display_name",
"title",
"media_type",
"tmdb_id",
"rating_key",
"year",
"row",
"library",
"seed_title",
"watched_at",
"finished_at"
],
"title": "RecentWatchOut",
"type": "object"
},
"RegenerateRequest": {
"additionalProperties": false,
"properties": {
"user_id": {
"title": "User Id",
"type": "integer"
}
},
"required": [
"user_id"
],
"title": "RegenerateRequest",
"type": "object"
},
"RejectedOut": {
"additionalProperties": true,
"description": "How many rows the action actually touched \u2014 not how many ids were sent. Each of the four\ninbox actions skips the statuses it does not own, so the count is the only honest receipt.\n\n``extra=\"allow\"`` is on every response model here (and every nested one): a strict model would\nsilently DROP any key the handler returns but the model has not declared, so a field missed\nhere would vanish from the payload rather than fail loudly.",
"properties": {
"rejected": {
"title": "Rejected",
"type": "integer"
}
},
"required": [
"rejected"
],
"title": "RejectedOut",
"type": "object"
},
"ReleaseNotesOut": {
"additionalProperties": true,
"properties": {
"notes": {
"title": "Notes",
"type": "string"
},
"published_at": {
"title": "Published At",
"type": "string"
},
"url": {
"title": "Url",
"type": "string"
},
"version": {
"title": "Version",
"type": "string"
}
},
"required": [
"version",
"url",
"published_at",
"notes"
],
"title": "ReleaseNotesOut",
"type": "object"
},
"RemovedOut": {
"additionalProperties": true,
"description": "What `DELETE /users/{id}` dropped. `user_id` is still valid \u2014 the row is archived, not deleted.",
"properties": {
"picks_deleted": {
"title": "Picks Deleted",
"type": "integer"
},
"runs_deleted": {
"title": "Runs Deleted",
"type": "integer"
},
"user_id": {
"title": "User Id",
"type": "integer"
}
},
"required": [
"user_id",
"picks_deleted",
"runs_deleted"
],
"title": "RemovedOut",
"type": "object"
},
"RenameRequest": {
"properties": {
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
},
"name_template": {
"default": "",
"title": "Name Template",
"type": "string"
},
"old_template": {
"default": "",
"title": "Old Template",
"type": "string"
}
},
"title": "RenameRequest",
"type": "object"
},
"ReportRequestsOut": {
"additionalProperties": true,
"properties": {
"pending": {
"title": "Pending",
"type": "integer"
},
"sent": {
"title": "Sent",
"type": "integer"
},
"watched_after_sent": {
"title": "Watched After Sent",
"type": "integer"
}
},
"required": [
"sent",
"pending",
"watched_after_sent"
],
"title": "ReportRequestsOut",
"type": "object"
},
"ReportRunsOut": {
"additionalProperties": true,
"properties": {
"errors_last": {
"title": "Errors Last",
"type": "integer"
},
"in_window": {
"title": "In Window",
"type": "integer"
},
"in_window_delta": {
"anyOf": [
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "null"
}
],
"title": "In Window Delta"
},
"last_finished": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Last Finished"
},
"last_status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Last Status"
},
"total": {
"title": "Total",
"type": "integer"
}
},
"required": [
"total",
"in_window",
"in_window_delta",
"last_finished",
"last_status",
"errors_last"
],
"title": "ReportRunsOut",
"type": "object"
},
"RequestAction": {
"properties": {
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
},
"ids": {
"items": {
"type": "integer"
},
"maxItems": 1000,
"title": "Ids",
"type": "array"
}
},
"required": [
"ids"
],
"title": "RequestAction",
"type": "object"
},
"RequestCandidateOut": {
"additionalProperties": true,
"properties": {
"arr_slug": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Arr Slug"
},
"demand": {
"title": "Demand",
"type": "integer"
},
"detail": {
"title": "Detail",
"type": "string"
},
"excluded": {
"default": false,
"title": "Excluded",
"type": "boolean"
},
"id": {
"title": "Id",
"type": "integer"
},
"imdb_id": {
"default": "",
"title": "Imdb Id",
"type": "string"
},
"language": {
"default": "",
"title": "Language",
"type": "string"
},
"media_type": {
"title": "Media Type",
"type": "string"
},
"overview": {
"default": "",
"title": "Overview",
"type": "string"
},
"poster_path": {
"default": "",
"title": "Poster Path",
"type": "string"
},
"rating": {
"title": "Rating",
"type": "number"
},
"row_slug": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Row Slug"
},
"status": {
"title": "Status",
"type": "string"
},
"tags": {
"items": {
"type": "string"
},
"title": "Tags",
"type": "array"
},
"title": {
"title": "Title",
"type": "string"
},
"tmdb_id": {
"title": "Tmdb Id",
"type": "integer"
},
"updated_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Updated At"
},
"vote_count": {
"title": "Vote Count",
"type": "integer"
},
"wanters": {
"items": {
"type": "string"
},
"title": "Wanters",
"type": "array"
},
"why": {
"items": {
"$ref": "#/components/schemas/RequestWhyOut"
},
"title": "Why",
"type": "array"
},
"year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year"
}
},
"required": [
"id",
"tmdb_id",
"media_type",
"title",
"year",
"rating",
"vote_count",
"demand",
"tags",
"wanters",
"why",
"status",
"detail",
"updated_at"
],
"title": "RequestCandidateOut",
"type": "object"
},
"RequestWhyOut": {
"additionalProperties": true,
"properties": {
"row": {
"title": "Row",
"type": "string"
},
"seed": {
"title": "Seed",
"type": "string"
},
"source": {
"title": "Source",
"type": "string"
},
"user": {
"title": "User",
"type": "string"
}
},
"required": [
"user",
"row",
"seed",
"source"
],
"title": "RequestWhyOut",
"type": "object"
},
"ResetBehavior": {
"description": "How a caller expresses the absence of a stored setting value.",
"enum": [
"restore_default",
"literal_null",
"unavailable"
],
"title": "ResetBehavior",
"type": "string"
},
"RestoreRequest": {
"properties": {
"name": {
"title": "Name",
"type": "string"
}
},
"required": [
"name"
],
"title": "RestoreRequest",
"type": "object"
},
"RestoredOut": {
"additionalProperties": true,
"properties": {
"restored": {
"title": "Restored",
"type": "integer"
}
},
"required": [
"restored"
],
"title": "RestoredOut",
"type": "object"
},
"RootFolderOut": {
"additionalProperties": true,
"properties": {
"id": {
"title": "Id",
"type": "integer"
},
"path": {
"title": "Path",
"type": "string"
}
},
"required": [
"id",
"path"
],
"title": "RootFolderOut",
"type": "object"
},
"RotationTargetOut": {
"additionalProperties": true,
"properties": {
"current": {
"anyOf": [
{
"$ref": "#/components/schemas/ThemeRefOut"
},
{
"type": "null"
}
]
},
"history": {
"description": "Their earlier themes on this row, newest first.",
"items": {
"$ref": "#/components/schemas/ThemeRefOut"
},
"title": "History",
"type": "array"
},
"name": {
"title": "Name",
"type": "string"
},
"next": {
"anyOf": [
{
"$ref": "#/components/schemas/ThemeRefOut"
},
{
"type": "null"
}
],
"description": "The theme queued to start when the current one ends."
},
"next_due_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "When the current theme ends and the next one starts.",
"title": "Next Due At"
},
"started_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "When the current theme started.",
"title": "Started At"
},
"user_id": {
"title": "User Id",
"type": "integer"
}
},
"required": [
"user_id",
"name",
"current",
"next",
"started_at",
"next_due_at",
"history"
],
"title": "RotationTargetOut",
"type": "object"
},
"RowDeletePreviewOut": {
"additionalProperties": true,
"description": "What `DELETE /collections/{id}?dry_run=true` WOULD do. Nothing is written.",
"properties": {
"anchors_cleared": {
"items": {
"type": "string"
},
"title": "Anchors Cleared",
"type": "array"
},
"collections": {
"items": {
"type": "string"
},
"title": "Collections",
"type": "array"
},
"dry_run": {
"title": "Dry Run",
"type": "boolean"
},
"message": {
"title": "Message",
"type": "string"
},
"preview_incomplete": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Preview Incomplete"
},
"privacy_sync": {
"title": "Privacy Sync",
"type": "boolean"
},
"schedule_cleared": {
"title": "Schedule Cleared",
"type": "boolean"
}
},
"required": [
"dry_run",
"collections",
"anchors_cleared",
"privacy_sync",
"schedule_cleared",
"preview_incomplete",
"message"
],
"title": "RowDeletePreviewOut",
"type": "object"
},
"RowEffectivenessOut": {
"additionalProperties": true,
"description": "Whether one row is working, for the panel beside its settings.",
"properties": {
"delivered": {
"title": "Delivered",
"type": "integer"
},
"finished": {
"title": "Finished",
"type": "integer"
},
"first_delivered_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "First Delivered At"
},
"last_delivered_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Last Delivered At"
},
"matured": {
"anyOf": [
{
"$ref": "#/components/schemas/RowMaturedCohort"
},
{
"type": "null"
}
]
},
"matured_days": {
"title": "Matured Days",
"type": "integer"
},
"per_library": {
"items": {
"$ref": "#/components/schemas/RowLibraryEffectiveness"
},
"title": "Per Library",
"type": "array"
},
"runs": {
"title": "Runs",
"type": "integer"
},
"shared_titles": {
"anyOf": [
{
"additionalProperties": {
"type": "integer"
},
"type": "object"
},
{
"type": "null"
}
],
"title": "Shared Titles"
},
"watched": {
"title": "Watched",
"type": "integer"
}
},
"required": [
"delivered",
"watched",
"finished",
"runs",
"first_delivered_at",
"last_delivered_at",
"matured_days",
"shared_titles",
"matured",
"per_library"
],
"title": "RowEffectivenessOut",
"type": "object"
},
"RowLibraryEffectiveness": {
"additionalProperties": true,
"description": "One library's share of a row's matured cohort. A row that builds in two libraries is two Plex\ncollections and genuinely performs differently in each, so they are never merged into one line.",
"properties": {
"delivered": {
"title": "Delivered",
"type": "integer"
},
"finished": {
"title": "Finished",
"type": "integer"
},
"library": {
"title": "Library",
"type": "string"
},
"rate": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Rate"
},
"watched": {
"title": "Watched",
"type": "integer"
}
},
"required": [
"library",
"delivered",
"watched",
"finished",
"rate"
],
"title": "RowLibraryEffectiveness",
"type": "object"
},
"RowMaturedCohort": {
"additionalProperties": true,
"description": "The picks old enough to be judged: delivered at least `matured_days` ago, so every one of them\nhas had its full window to be watched.",
"properties": {
"cohort_to": {
"title": "Cohort To",
"type": "string"
},
"delivered": {
"title": "Delivered",
"type": "integer"
},
"finished": {
"title": "Finished",
"type": "integer"
},
"rate": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Rate"
},
"watched": {
"title": "Watched",
"type": "integer"
}
},
"required": [
"delivered",
"watched",
"finished",
"rate",
"cohort_to"
],
"title": "RowMaturedCohort",
"type": "object"
},
"RowOverrideOut": {
"additionalProperties": true,
"description": "This person's stored tweaks for one row. `None` on either field means \"use the row's own\".",
"properties": {
"favourite_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Favourite Count"
},
"older_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Older Count"
},
"recent_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Recent Count"
},
"row_size": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Row Size"
}
},
"required": [
"row_size",
"recent_count",
"favourite_count",
"older_count"
],
"title": "RowOverrideOut",
"type": "object"
},
"RowOverridePatch": {
"additionalProperties": false,
"description": "PATCH-shaped stored preference values shared by REST and assistant planning.",
"properties": {
"favourite_count": {
"anyOf": [
{
"maximum": 10.0,
"minimum": 0.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Favourite Count"
},
"muted": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Muted"
},
"older_count": {
"anyOf": [
{
"maximum": 10.0,
"minimum": 0.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Older Count"
},
"recent_count": {
"anyOf": [
{
"maximum": 25.0,
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Recent Count"
},
"row_size": {
"anyOf": [
{
"maximum": 40.0,
"minimum": 5.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Row Size"
}
},
"title": "RowOverridePatch",
"type": "object"
},
"RowOverrideSavedOut": {
"additionalProperties": true,
"description": "The override as stored, echoed back by the PUT.",
"properties": {
"collection_id": {
"title": "Collection Id",
"type": "integer"
},
"favourite_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Favourite Count"
},
"muted": {
"title": "Muted",
"type": "boolean"
},
"older_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Older Count"
},
"recent_count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Recent Count"
},
"row_size": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Row Size"
}
},
"required": [
"collection_id",
"muted",
"row_size",
"recent_count",
"favourite_count",
"older_count"
],
"title": "RowOverrideSavedOut",
"type": "object"
},
"RowSourceServerOut": {
"additionalProperties": true,
"description": "One Radarr/Sonarr server Overseerr sends to, and whether it stamps the requester's tag.",
"properties": {
"is4k": {
"title": "Is4K",
"type": "boolean"
},
"kind": {
"title": "Kind",
"type": "string"
},
"name": {
"title": "Name",
"type": "string"
},
"tag_requests": {
"title": "Tag Requests",
"type": "boolean"
}
},
"required": [
"kind",
"name",
"is4k",
"tag_requests"
],
"title": "RowSourceServerOut",
"type": "object"
},
"RowSourcesOut": {
"additionalProperties": true,
"description": "The requests-row setup check: can the row know who asked for what, and for whom?",
"properties": {
"complete": {
"title": "Complete",
"type": "boolean"
},
"overseerr": {
"enum": [
"connected",
"unreachable",
"off"
],
"title": "Overseerr",
"type": "string"
},
"people": {
"items": {
"$ref": "#/components/schemas/PersonReadyOut"
},
"title": "People",
"type": "array"
},
"problems": {
"items": {
"type": "string"
},
"title": "Problems",
"type": "array"
},
"radarr": {
"enum": [
"connected",
"unreachable",
"off"
],
"title": "Radarr",
"type": "string"
},
"seerr_linked": {
"title": "Seerr Linked",
"type": "integer"
},
"seerr_requesters": {
"title": "Seerr Requesters",
"type": "integer"
},
"seerr_requests": {
"title": "Seerr Requests",
"type": "integer"
},
"servers": {
"items": {
"$ref": "#/components/schemas/RowSourceServerOut"
},
"title": "Servers",
"type": "array"
},
"sonarr": {
"enum": [
"connected",
"unreachable",
"off"
],
"title": "Sonarr",
"type": "string"
},
"tagged_movies": {
"title": "Tagged Movies",
"type": "integer"
},
"tagged_shows": {
"title": "Tagged Shows",
"type": "integer"
},
"tags": {
"items": {
"$ref": "#/components/schemas/TagMatchOut"
},
"title": "Tags",
"type": "array"
}
},
"required": [
"overseerr",
"radarr",
"sonarr",
"complete",
"problems",
"seerr_requests",
"seerr_requesters",
"seerr_linked",
"servers",
"tagged_movies",
"tagged_shows",
"people",
"tags"
],
"title": "RowSourcesOut",
"type": "object"
},
"RowTemplateDefinitionOut": {
"additionalProperties": true,
"description": "Public row template metadata and creation defaults.",
"properties": {
"audience_behavior": {
"title": "Audience Behavior",
"type": "string"
},
"changed_fields": {
"items": {
"type": "string"
},
"title": "Changed Fields",
"type": "array"
},
"description": {
"title": "Description",
"type": "string"
},
"editable_fields": {
"items": {
"type": "string"
},
"title": "Editable Fields",
"type": "array"
},
"effective_values": {
"additionalProperties": {
"$ref": "#/components/schemas/JsonValue"
},
"title": "Effective Values",
"type": "object"
},
"effects": {
"default": [
"local_config"
],
"items": {
"$ref": "#/components/schemas/Effect"
},
"title": "Effects",
"type": "array"
},
"emoji": {
"title": "Emoji",
"type": "string"
},
"highlights": {
"items": {
"type": "string"
},
"title": "Highlights",
"type": "array"
},
"id": {
"title": "Id",
"type": "string"
},
"kind": {
"title": "Kind",
"type": "string"
},
"prerequisites": {
"default": [],
"items": {
"type": "string"
},
"title": "Prerequisites",
"type": "array"
},
"required_capabilities": {
"default": [
"rows.create"
],
"items": {
"$ref": "#/components/schemas/Capability"
},
"title": "Required Capabilities",
"type": "array"
},
"required_services": {
"default": [],
"items": {
"type": "string"
},
"title": "Required Services",
"type": "array"
},
"summary": {
"title": "Summary",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
},
"values": {
"additionalProperties": {
"$ref": "#/components/schemas/JsonValue"
},
"title": "Values",
"type": "object"
}
},
"required": [
"id",
"kind",
"emoji",
"title",
"summary",
"description",
"highlights",
"values",
"effective_values",
"changed_fields",
"editable_fields",
"audience_behavior"
],
"title": "RowTemplateDefinitionOut",
"type": "object"
},
"RulesIO": {
"additionalProperties": true,
"description": "A theme's hard limits. A missing or null one is no limit.",
"properties": {
"max_runtime": {
"anyOf": [
{
"minimum": 1.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Runtime"
},
"max_year": {
"anyOf": [
{
"maximum": 2200.0,
"minimum": 1850.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Max Year"
},
"min_rating": {
"anyOf": [
{
"maximum": 10.0,
"minimum": 0.0,
"type": "number"
},
{
"type": "null"
}
],
"title": "Min Rating"
},
"min_votes": {
"anyOf": [
{
"minimum": 0.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Min Votes"
},
"min_year": {
"anyOf": [
{
"maximum": 2200.0,
"minimum": 1850.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Min Year"
}
},
"title": "RulesIO",
"type": "object"
},
"RunCancelledOut": {
"additionalProperties": true,
"properties": {
"cancelling": {
"title": "Cancelling",
"type": "boolean"
}
},
"required": [
"cancelling"
],
"title": "RunCancelledOut",
"type": "object"
},
"RunCreatedOut": {
"additionalProperties": true,
"properties": {
"run_id": {
"title": "Run Id",
"type": "integer"
}
},
"required": [
"run_id"
],
"title": "RunCreatedOut",
"type": "object"
},
"RunDetailOut": {
"additionalProperties": true,
"description": "A run plus every person in it, and every shared row it built.",
"properties": {
"began_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Began At"
},
"dry_run": {
"title": "Dry Run",
"type": "boolean"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Error"
},
"finished_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Finished At"
},
"id": {
"title": "Id",
"type": "integer"
},
"privacy": {
"anyOf": [
{
"$ref": "#/components/schemas/RunPrivacyOut"
},
{
"type": "null"
}
]
},
"promotion_blockers": {
"items": {
"type": "string"
},
"title": "Promotion Blockers",
"type": "array"
},
"shared_rows": {
"items": {
"$ref": "#/components/schemas/RunSharedRowOut"
},
"title": "Shared Rows",
"type": "array"
},
"started_at": {
"title": "Started At",
"type": "string"
},
"stats": {
"additionalProperties": true,
"title": "Stats",
"type": "object"
},
"status": {
"title": "Status",
"type": "string"
},
"trigger": {
"enum": [
"schedule",
"manual",
"wizard",
"resume",
"assistant"
],
"title": "Trigger",
"type": "string"
},
"users": {
"items": {
"$ref": "#/components/schemas/RunUserOut"
},
"title": "Users",
"type": "array"
},
"web_share": {
"anyOf": [
{
"$ref": "#/components/schemas/WebShareOut"
},
{
"type": "null"
}
]
}
},
"required": [
"id",
"trigger",
"started_at",
"began_at",
"finished_at",
"status",
"dry_run",
"stats",
"error",
"promotion_blockers",
"privacy",
"users",
"shared_rows"
],
"title": "RunDetailOut",
"type": "object"
},
"RunFinishedEvent": {
"additionalProperties": true,
"description": "Event ``run.finished`` \u2014 a run reached a terminal state.\n\n`aborted` is a cancel that still completed its privacy merge and promotion, so it is an outcome\nrather than a failure; the UI distinguishes the three.",
"properties": {
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Error"
},
"run_id": {
"title": "Run Id",
"type": "integer"
},
"status": {
"enum": [
"ok",
"error",
"aborted"
],
"title": "Status",
"type": "string"
}
},
"required": [
"run_id",
"status"
],
"title": "RunFinishedEvent",
"type": "object"
},
"RunJobRequest": {
"properties": {
"background": {
"default": false,
"title": "Background",
"type": "boolean"
},
"kind": {
"title": "Kind",
"type": "string"
},
"payload": {
"additionalProperties": true,
"default": {},
"title": "Payload",
"type": "object"
}
},
"required": [
"kind"
],
"title": "RunJobRequest",
"type": "object"
},
"RunLogLineOut": {
"additionalProperties": true,
"description": "One line of a run's activity log.\n\nEverything but `seq` is optional because the live in-memory tail hands back exactly what the\nprogress hook pushed, key for key \u2014 only the durable `run_log_lines` read fills every field in.\n`seq` is the exception: the buffer's sink stamps it on the way in, so it is always there.",
"properties": {
"counts": {
"additionalProperties": true,
"title": "Counts",
"type": "object"
},
"level": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Level"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Reason"
},
"run_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Run Id"
},
"seq": {
"title": "Seq",
"type": "integer"
},
"stage": {
"default": "",
"title": "Stage",
"type": "string"
},
"ts": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Ts"
},
"user": {
"default": "",
"title": "User",
"type": "string"
}
},
"required": [
"seq"
],
"title": "RunLogLineOut",
"type": "object"
},
"RunPrivacyOut": {
"additionalProperties": true,
"description": "What this run measured about who can see whose rows. Reporting only.",
"properties": {
"can_see_others": {
"items": {
"type": "string"
},
"title": "Can See Others",
"type": "array"
},
"filters_not_enforced": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Filters Not Enforced"
},
"left_alone": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Left Alone"
},
"unchecked": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Unchecked"
},
"unreadable_filters": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Unreadable Filters"
},
"write_failed": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Write Failed"
}
},
"required": [
"can_see_others",
"unreadable_filters",
"filters_not_enforced",
"unchecked",
"write_failed",
"left_alone"
],
"title": "RunPrivacyOut",
"type": "object"
},
"RunProgressEvent": {
"additionalProperties": true,
"description": "Event ``run.progress`` \u2014 a run entered a non-terminal state. `cancelling` is published the\nmoment /cancel is accepted; the run keeps going until the person it is on finishes.",
"properties": {
"run_id": {
"title": "Run Id",
"type": "integer"
},
"status": {
"enum": [
"running",
"cancelling"
],
"title": "Status",
"type": "string"
}
},
"required": [
"run_id",
"status"
],
"title": "RunProgressEvent",
"type": "object"
},
"RunRequest": {
"properties": {
"collection_ids": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "Collection Ids"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
},
"user_ids": {
"anyOf": [
{
"items": {
"type": "integer"
},
"type": "array"
},
{
"type": "null"
}
],
"title": "User Ids"
}
},
"title": "RunRequest",
"type": "object"
},
"RunSharedRowOut": {
"additionalProperties": true,
"description": "One SHARED row's outcome in a run \u2014 the per-row twin of `RunUserOut`.\n\nA shared row is built once for the whole server from pooled history, so it belongs to nobody and\nnever appears in `users`. Before it had a record of its own, a run whose only work was a shared\nrow rendered as a wall of skipped people with its actual output nowhere on screen.",
"properties": {
"breakdown": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Breakdown",
"type": "array"
},
"collection_slug": {
"title": "Collection Slug",
"type": "string"
},
"diff": {
"additionalProperties": true,
"title": "Diff",
"type": "object"
},
"duration_ms": {
"title": "Duration Ms",
"type": "integer"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Error"
},
"exa_searches": {
"title": "Exa Searches",
"type": "integer"
},
"has_trace": {
"title": "Has Trace",
"type": "boolean"
},
"llm_tokens": {
"title": "Llm Tokens",
"type": "integer"
},
"llm_tokens_by_step": {
"additionalProperties": {
"type": "integer"
},
"title": "Llm Tokens By Step",
"type": "object"
},
"picks": {
"items": {
"$ref": "#/components/schemas/PickOut"
},
"title": "Picks",
"type": "array"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Reason"
},
"row_title": {
"title": "Row Title",
"type": "string"
},
"status": {
"title": "Status",
"type": "string"
}
},
"required": [
"collection_slug",
"row_title",
"status",
"error",
"reason",
"duration_ms",
"llm_tokens",
"llm_tokens_by_step",
"exa_searches",
"diff",
"picks",
"breakdown",
"has_trace"
],
"title": "RunSharedRowOut",
"type": "object"
},
"RunSummaryOut": {
"additionalProperties": true,
"description": "One run, as the Runs list shows it.",
"properties": {
"began_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Began At"
},
"dry_run": {
"title": "Dry Run",
"type": "boolean"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Error"
},
"finished_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Finished At"
},
"id": {
"title": "Id",
"type": "integer"
},
"privacy": {
"anyOf": [
{
"$ref": "#/components/schemas/RunPrivacyOut"
},
{
"type": "null"
}
]
},
"promotion_blockers": {
"items": {
"type": "string"
},
"title": "Promotion Blockers",
"type": "array"
},
"started_at": {
"title": "Started At",
"type": "string"
},
"stats": {
"additionalProperties": true,
"title": "Stats",
"type": "object"
},
"status": {
"title": "Status",
"type": "string"
},
"trigger": {
"enum": [
"schedule",
"manual",
"wizard",
"resume",
"assistant"
],
"title": "Trigger",
"type": "string"
}
},
"required": [
"id",
"trigger",
"started_at",
"began_at",
"finished_at",
"status",
"dry_run",
"stats",
"error",
"promotion_blockers",
"privacy"
],
"title": "RunSummaryOut",
"type": "object"
},
"RunUserOut": {
"additionalProperties": true,
"description": "One person's outcome in a run. Users who haven't finished yet appear with the same keys and\n`status: \"pending\"`, so the shape does not change mid-run.",
"properties": {
"breakdown": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Breakdown",
"type": "array"
},
"cost": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"title": "Cost"
},
"diff": {
"additionalProperties": true,
"title": "Diff",
"type": "object"
},
"display_name": {
"title": "Display Name",
"type": "string"
},
"duration_ms": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Duration Ms"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Error"
},
"exa_searches": {
"title": "Exa Searches",
"type": "integer"
},
"has_trace": {
"title": "Has Trace",
"type": "boolean"
},
"llm_tokens": {
"title": "Llm Tokens",
"type": "integer"
},
"llm_tokens_by_step": {
"additionalProperties": {
"type": "integer"
},
"title": "Llm Tokens By Step",
"type": "object"
},
"picks": {
"items": {
"$ref": "#/components/schemas/PickOut"
},
"title": "Picks",
"type": "array"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Reason"
},
"rows_considered": {
"additionalProperties": {
"type": "string"
},
"title": "Rows Considered",
"type": "object"
},
"slug": {
"title": "Slug",
"type": "string"
},
"status": {
"title": "Status",
"type": "string"
},
"username": {
"title": "Username",
"type": "string"
}
},
"required": [
"username",
"display_name",
"slug",
"status",
"error",
"reason",
"duration_ms",
"llm_tokens",
"llm_tokens_by_step",
"exa_searches",
"diff",
"picks",
"breakdown",
"has_trace",
"rows_considered",
"cost"
],
"title": "RunUserOut",
"type": "object"
},
"RunUserTraceOut": {
"additionalProperties": true,
"description": "The full pipeline trace for one user in one run.\n\nAlso serves a SHARED row's trace, which has the same stages minus `history` \u2014 a shared row is\nbuilt from pooled watching, so it records `gathers` and no per-person history. `username` and\n`display_name` carry the row's title there, so one trace view renders both without a fork.",
"properties": {
"breakdown": {
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Breakdown",
"type": "array"
},
"display_name": {
"title": "Display Name",
"type": "string"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Error"
},
"reason": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Reason"
},
"requests": {
"additionalProperties": {
"$ref": "#/components/schemas/TraceRequestOut"
},
"title": "Requests",
"type": "object"
},
"status": {
"title": "Status",
"type": "string"
},
"trace": {
"additionalProperties": true,
"title": "Trace",
"type": "object"
},
"username": {
"title": "Username",
"type": "string"
}
},
"required": [
"username",
"display_name",
"status",
"error",
"reason",
"trace",
"breakdown",
"requests"
],
"title": "RunUserTraceOut",
"type": "object"
},
"RunsDeletedOut": {
"additionalProperties": true,
"properties": {
"deleted": {
"title": "Deleted",
"type": "integer"
}
},
"required": [
"deleted"
],
"title": "RunsDeletedOut",
"type": "object"
},
"RunsSummaryOut": {
"additionalProperties": true,
"description": "Totals for the Runs page header.",
"properties": {
"error": {
"title": "Error",
"type": "integer"
},
"last_finished": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Last Finished"
},
"last_status": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Last Status"
},
"ok": {
"title": "Ok",
"type": "integer"
},
"total": {
"title": "Total",
"type": "integer"
}
},
"required": [
"total",
"ok",
"error",
"last_finished",
"last_status"
],
"title": "RunsSummaryOut",
"type": "object"
},
"ScheduleJobOut": {
"additionalProperties": true,
"description": "One scheduled job.\n\n``extra=\"allow\"`` is on every model in this file, nested ones included: a strict Pydantic\nresponse model silently DROPS undeclared keys from the payload, so a field missed here would\ndisappear from the response instead of failing loudly. The model documents; it never filters.",
"properties": {
"cron": {
"title": "Cron",
"type": "string"
},
"default_cron": {
"title": "Default Cron",
"type": "string"
},
"description": {
"title": "Description",
"type": "string"
},
"kind": {
"title": "Kind",
"type": "string"
},
"label": {
"title": "Label",
"type": "string"
},
"next_run": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Next Run"
},
"optional": {
"title": "Optional",
"type": "boolean"
},
"setting": {
"title": "Setting",
"type": "string"
},
"type": {
"title": "Type",
"type": "string"
},
"using_default": {
"title": "Using Default",
"type": "boolean"
},
"writes_plex": {
"title": "Writes Plex",
"type": "boolean"
}
},
"required": [
"type",
"kind",
"label",
"description",
"setting",
"cron",
"using_default",
"default_cron",
"optional",
"writes_plex",
"next_run"
],
"title": "ScheduleJobOut",
"type": "object"
},
"ScheduleOut": {
"additionalProperties": true,
"properties": {
"jobs": {
"items": {
"$ref": "#/components/schemas/ScheduleJobOut"
},
"title": "Jobs",
"type": "array"
},
"rows": {
"items": {
"$ref": "#/components/schemas/ScheduleRowsOut"
},
"title": "Rows",
"type": "array"
}
},
"required": [
"jobs",
"rows"
],
"title": "ScheduleOut",
"type": "object"
},
"ScheduleRowOut": {
"additionalProperties": true,
"properties": {
"id": {
"title": "Id",
"type": "integer"
},
"name": {
"title": "Name",
"type": "string"
},
"slug": {
"title": "Slug",
"type": "string"
}
},
"required": [
"id",
"slug",
"name"
],
"title": "ScheduleRowOut",
"type": "object"
},
"ScheduleRowsOut": {
"additionalProperties": true,
"description": "The rows sharing one cron \u2014 ONE trigger that builds all of them, not one entry each.",
"properties": {
"cron": {
"title": "Cron",
"type": "string"
},
"next_run": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Next Run"
},
"rows": {
"items": {
"$ref": "#/components/schemas/ScheduleRowOut"
},
"title": "Rows",
"type": "array"
},
"type": {
"title": "Type",
"type": "string"
}
},
"required": [
"type",
"cron",
"rows",
"next_run"
],
"title": "ScheduleRowsOut",
"type": "object"
},
"SeasonDateOut": {
"additionalProperties": true,
"description": "When a date rule next falls (ISO), or, with ``next_date`` None, why the rule can't be used.",
"properties": {
"next_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Next Date"
},
"next_windows": {
"items": {
"$ref": "#/components/schemas/shortlist__server__api__seasons__SeasonWindowOut"
},
"title": "Next Windows",
"type": "array"
},
"rule_error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Rule Error"
}
},
"required": [
"next_date",
"rule_error"
],
"title": "SeasonDateOut",
"type": "object"
},
"SeasonIn": {
"additionalProperties": false,
"description": "A custom season, to create or replace.",
"properties": {
"after_days": {
"default": 0,
"maximum": 30.0,
"minimum": 0.0,
"title": "After Days",
"type": "integer"
},
"collections": {
"items": {
"$ref": "#/components/schemas/CollectionIO"
},
"maxItems": 10,
"title": "Collections",
"type": "array"
},
"emoji": {
"maxLength": 8,
"minLength": 1,
"title": "Emoji",
"type": "string"
},
"excluded_genres": {
"items": {
"type": "integer"
},
"maxItems": 5,
"title": "Excluded Genres",
"type": "array"
},
"genre": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Genre"
},
"lead_days": {
"default": 7,
"maximum": 90.0,
"minimum": 0.0,
"title": "Lead Days",
"type": "integer"
},
"name": {
"maxLength": 40,
"minLength": 1,
"title": "Name",
"type": "string"
},
"picks": {
"items": {
"$ref": "#/components/schemas/PickIO"
},
"maxItems": 200,
"title": "Picks",
"type": "array"
},
"preset": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Preset"
},
"rule": {
"$ref": "#/components/schemas/DateRuleIO"
},
"tags": {
"items": {
"$ref": "#/components/schemas/TagIO"
},
"maxItems": 20,
"title": "Tags",
"type": "array"
}
},
"required": [
"name",
"emoji",
"rule"
],
"title": "SeasonIn",
"type": "object"
},
"SeasonOut": {
"additionalProperties": true,
"description": "A season a row can follow. A built-in's sources live in code and are not listed.",
"properties": {
"after_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "After Days"
},
"builtin": {
"title": "Builtin",
"type": "boolean"
},
"collections": {
"items": {
"$ref": "#/components/schemas/CollectionIO"
},
"maxItems": 10,
"title": "Collections",
"type": "array"
},
"description": {
"title": "Description",
"type": "string"
},
"emoji": {
"title": "Emoji",
"type": "string"
},
"excluded_genres": {
"items": {
"type": "integer"
},
"maxItems": 5,
"title": "Excluded Genres",
"type": "array"
},
"genre": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Genre"
},
"lead_days": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Lead Days"
},
"name": {
"title": "Name",
"type": "string"
},
"next_dates": {
"items": {
"type": "string"
},
"title": "Next Dates",
"type": "array"
},
"next_windows": {
"items": {
"$ref": "#/components/schemas/shortlist__server__api__seasons__SeasonWindowOut"
},
"title": "Next Windows",
"type": "array"
},
"picks": {
"items": {
"$ref": "#/components/schemas/PickIO"
},
"maxItems": 200,
"title": "Picks",
"type": "array"
},
"preset": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Preset"
},
"rule": {
"$ref": "#/components/schemas/DateRuleIO"
},
"rule_label": {
"title": "Rule Label",
"type": "string"
},
"slug": {
"title": "Slug",
"type": "string"
},
"tags": {
"items": {
"$ref": "#/components/schemas/TagIO"
},
"maxItems": 20,
"title": "Tags",
"type": "array"
},
"used_by": {
"items": {
"$ref": "#/components/schemas/UsedByOut"
},
"title": "Used By",
"type": "array"
}
},
"required": [
"slug",
"name",
"emoji",
"description",
"builtin",
"rule",
"rule_label",
"next_dates",
"lead_days",
"after_days",
"preset",
"used_by"
],
"title": "SeasonOut",
"type": "object"
},
"SeasonPreviewIn": {
"additionalProperties": true,
"description": "A draft season to count, for the row the editor was opened from. Undeclared fields are let through, not\nrefused: the editor posts its whole draft, and a preview stores nothing that a misspelt field could\nsilently fail to set.",
"properties": {
"collections": {
"items": {
"$ref": "#/components/schemas/CollectionIO"
},
"maxItems": 10,
"title": "Collections",
"type": "array"
},
"excluded_genres": {
"items": {
"type": "integer"
},
"maxItems": 5,
"title": "Excluded Genres",
"type": "array"
},
"genre": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Genre"
},
"library_keys": {
"items": {
"type": "string"
},
"title": "Library Keys",
"type": "array"
},
"media": {
"default": "both",
"enum": [
"movie",
"show",
"both"
],
"title": "Media",
"type": "string"
},
"picks": {
"items": {
"$ref": "#/components/schemas/PickIO"
},
"maxItems": 200,
"title": "Picks",
"type": "array"
},
"rule": {
"$ref": "#/components/schemas/DateRuleIO"
},
"tags": {
"items": {
"$ref": "#/components/schemas/TagIO"
},
"maxItems": 20,
"title": "Tags",
"type": "array"
}
},
"required": [
"rule"
],
"title": "SeasonPreviewIn",
"type": "object"
},
"SeasonPreviewOut": {
"additionalProperties": true,
"description": "What the editor's summary shows. Every count is of titles in the libraries.",
"properties": {
"from_collections": {
"title": "From Collections",
"type": "integer"
},
"from_genre": {
"title": "From Genre",
"type": "integer"
},
"from_picks": {
"title": "From Picks",
"type": "integer"
},
"from_tags": {
"title": "From Tags",
"type": "integer"
},
"movies": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Movies"
},
"next_date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Next Date"
},
"per_collection": {
"items": {
"$ref": "#/components/schemas/CollectionCountOut"
},
"title": "Per Collection",
"type": "array"
},
"per_tag": {
"additionalProperties": {
"type": "integer"
},
"title": "Per Tag",
"type": "object"
},
"rule_error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Rule Error"
},
"sample": {
"items": {
"type": "string"
},
"title": "Sample",
"type": "array"
},
"shows": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Shows"
},
"total": {
"title": "Total",
"type": "integer"
}
},
"required": [
"next_date",
"rule_error",
"total",
"movies",
"shows",
"from_tags",
"from_genre",
"from_collections",
"from_picks",
"per_tag",
"per_collection",
"sample"
],
"title": "SeasonPreviewOut",
"type": "object"
},
"SeasonStatusOut": {
"additionalProperties": true,
"description": "Where a seasonal row is in its calendar today, judged on the SERVER's clock.",
"properties": {
"next": {
"anyOf": [
{
"$ref": "#/components/schemas/shortlist__server__api__collections__SeasonWindowOut"
},
{
"type": "null"
}
]
},
"showing": {
"anyOf": [
{
"$ref": "#/components/schemas/shortlist__server__api__collections__SeasonWindowOut"
},
{
"type": "null"
}
]
}
},
"required": [
"showing",
"next"
],
"title": "SeasonStatusOut",
"type": "object"
},
"SeenRelease": {
"properties": {
"version": {
"title": "Version",
"type": "string"
}
},
"required": [
"version"
],
"title": "SeenRelease",
"type": "object"
},
"SeerrOptionsOut": {
"additionalProperties": true,
"properties": {
"default_user_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Default User Id"
},
"users": {
"items": {
"$ref": "#/components/schemas/SeerrUserOut"
},
"title": "Users",
"type": "array"
}
},
"required": [
"users"
],
"title": "SeerrOptionsOut",
"type": "object"
},
"SeerrUserOut": {
"additionalProperties": true,
"properties": {
"auto_approve_movies": {
"default": false,
"title": "Auto Approve Movies",
"type": "boolean"
},
"auto_approve_tv": {
"default": false,
"title": "Auto Approve Tv",
"type": "boolean"
},
"id": {
"title": "Id",
"type": "integer"
},
"is_plex_user": {
"default": false,
"title": "Is Plex User",
"type": "boolean"
},
"name": {
"title": "Name",
"type": "string"
},
"plex_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Plex Id"
}
},
"required": [
"id",
"name"
],
"title": "SeerrUserOut",
"type": "object"
},
"SendOut": {
"additionalProperties": true,
"properties": {
"dry_run": {
"title": "Dry Run",
"type": "boolean"
},
"outcomes": {
"items": {
"$ref": "#/components/schemas/SendOutcomeOut"
},
"title": "Outcomes",
"type": "array"
},
"sent": {
"title": "Sent",
"type": "integer"
}
},
"required": [
"sent",
"dry_run",
"outcomes"
],
"title": "SendOut",
"type": "object"
},
"SendOutcomeOut": {
"additionalProperties": true,
"description": "What the Arr said about one title. `status` is the engine's outcome \u2014 \"requested\",\n\"would_request\" on a dry run, or a skip/error reason the owner can act on.",
"properties": {
"detail": {
"title": "Detail",
"type": "string"
},
"id": {
"title": "Id",
"type": "integer"
},
"status": {
"title": "Status",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
}
},
"required": [
"id",
"title",
"status",
"detail"
],
"title": "SendOutcomeOut",
"type": "object"
},
"ServerConnectionOut": {
"additionalProperties": true,
"description": "One advertised address, with the answer to \"does it work from inside the container?\".",
"properties": {
"local": {
"title": "Local",
"type": "boolean"
},
"ok": {
"title": "Ok",
"type": "boolean"
},
"relay": {
"title": "Relay",
"type": "boolean"
},
"uri": {
"title": "Uri",
"type": "string"
}
},
"required": [
"uri",
"local",
"relay",
"ok"
],
"title": "ServerConnectionOut",
"type": "object"
},
"SessionOut": {
"additionalProperties": true,
"description": "Who the caller is, and whether this instance demands a sign-in at all.\n\nThe signed cookie's contents are spread into the response, so `account_id`/`username` are\npresent only once signed in \u2014 they are declared optional rather than left to `extra`, so the\nSPA gets real types for the two fields it actually reads.",
"properties": {
"account_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Account Id"
},
"authenticated": {
"title": "Authenticated",
"type": "boolean"
},
"login_required": {
"title": "Login Required",
"type": "boolean"
},
"username": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Username"
}
},
"required": [
"authenticated",
"login_required"
],
"title": "SessionOut",
"type": "object"
},
"SettingDefinitionOut": {
"additionalProperties": true,
"description": "Document every current setting field while preserving nested additions.",
"properties": {
"assistant_writable": {
"default": true,
"title": "Assistant Writable",
"type": "boolean"
},
"default": {
"$ref": "#/components/schemas/JsonValue"
},
"description": {
"title": "Description",
"type": "string"
},
"effects": {
"items": {
"$ref": "#/components/schemas/EffectReferenceOut"
},
"title": "Effects",
"type": "array"
},
"group": {
"$ref": "#/components/schemas/SettingGroup"
},
"has_default": {
"title": "Has Default",
"type": "boolean"
},
"key": {
"title": "Key",
"type": "string"
},
"label": {
"title": "Label",
"type": "string"
},
"nullable": {
"default": false,
"title": "Nullable",
"type": "boolean"
},
"options": {
"default": [],
"items": {
"$ref": "#/components/schemas/SettingOptionOut"
},
"title": "Options",
"type": "array"
},
"prerequisites": {
"default": [],
"items": {
"$ref": "#/components/schemas/SettingPrerequisiteOut"
},
"title": "Prerequisites",
"type": "array"
},
"range": {
"anyOf": [
{
"$ref": "#/components/schemas/NumericRangeOut"
},
{
"type": "null"
}
]
},
"required_capabilities": {
"items": {
"$ref": "#/components/schemas/Capability"
},
"title": "Required Capabilities",
"type": "array"
},
"reset_behavior": {
"$ref": "#/components/schemas/ResetBehavior",
"default": "restore_default"
},
"secret": {
"default": false,
"title": "Secret",
"type": "boolean"
},
"value_type": {
"$ref": "#/components/schemas/ValueType"
}
},
"required": [
"key",
"label",
"description",
"value_type",
"group",
"has_default",
"effects",
"required_capabilities"
],
"title": "SettingDefinitionOut",
"type": "object"
},
"SettingGroup": {
"description": "Stable groups used by settings discovery and grant constraints.",
"enum": [
"plex",
"metadata",
"recommendations",
"row_defaults",
"requests",
"notifications",
"schedules",
"system",
"setup"
],
"title": "SettingGroup",
"type": "string"
},
"SettingOptionOut": {
"additionalProperties": true,
"description": "Public named option.",
"properties": {
"description": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Description"
},
"label": {
"title": "Label",
"type": "string"
},
"value": {
"$ref": "#/components/schemas/JsonValue"
}
},
"required": [
"value",
"label"
],
"title": "SettingOptionOut",
"type": "object"
},
"SettingPrerequisiteOut": {
"additionalProperties": true,
"description": "Public applicability condition.",
"properties": {
"description": {
"title": "Description",
"type": "string"
},
"key": {
"title": "Key",
"type": "string"
},
"values": {
"items": {
"$ref": "#/components/schemas/JsonValue"
},
"title": "Values",
"type": "array"
}
},
"required": [
"key",
"values",
"description"
],
"title": "SettingPrerequisiteOut",
"type": "object"
},
"SettingsOut": {
"additionalProperties": true,
"description": "The whole settings store, flat: `{\"row.size\": 15, \"plex.url\": \"\u2026\", \u2026}`.\n\nDeliberately declares NO fields. The key set is genuinely dynamic \u2014 `settings_store.DEFAULTS`\nplus whatever rows the database holds, minus `PRIVATE_KEYS` \u2014 so enumerating it here would be a\nsecond copy of `DEFAULTS` that silently goes stale, and a strict model would DROP every key it\nhad not caught up with. ``extra=\"allow\"`` passes all of them through untouched, which is the\nhonest description of this endpoint: an open map, with secrets already redacted to \"\u2022\u2022\u2022\u2022\u2022\" by\n`all_public()`.",
"properties": {},
"title": "SettingsOut",
"type": "object"
},
"SettingsUpdate": {
"properties": {
"values": {
"additionalProperties": true,
"title": "Values",
"type": "object"
}
},
"required": [
"values"
],
"title": "SettingsUpdate",
"type": "object"
},
"SnapshotOut": {
"additionalProperties": true,
"description": "One un-restored snapshot \u2014 an undo that is still available.",
"properties": {
"complete": {
"title": "Complete",
"type": "boolean"
},
"entries": {
"title": "Entries",
"type": "integer"
},
"id": {
"title": "Id",
"type": "integer"
},
"taken_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Taken At"
},
"user_id": {
"title": "User Id",
"type": "integer"
},
"username": {
"title": "Username",
"type": "string"
}
},
"required": [
"id",
"user_id",
"username",
"taken_at",
"entries",
"complete"
],
"title": "SnapshotOut",
"type": "object"
},
"StatusOut": {
"additionalProperties": true,
"properties": {
"enabled": {
"title": "Enabled",
"type": "boolean"
},
"expires_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Expires At"
},
"seconds_remaining": {
"title": "Seconds Remaining",
"type": "integer"
}
},
"required": [
"enabled",
"expires_at",
"seconds_remaining"
],
"title": "StatusOut",
"type": "object"
},
"SyncFinishedEvent": {
"additionalProperties": true,
"description": "Event ``sync.finished`` \u2014 a Tools-page sync ended.\n\nThe two syncs report different things because they did different work, so most fields belong to\none of them: `count` to the watched sync, `added`/`updated`/`total` to the users sync.",
"properties": {
"added": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Added"
},
"count": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Count"
},
"error": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Error"
},
"kind": {
"enum": [
"watched",
"users",
"credited"
],
"title": "Kind",
"type": "string"
},
"ok": {
"title": "Ok",
"type": "boolean"
},
"total": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Total"
},
"updated": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Updated"
}
},
"required": [
"kind",
"ok"
],
"title": "SyncFinishedEvent",
"type": "object"
},
"SyncProgressEvent": {
"additionalProperties": true,
"description": "Event ``sync.progress`` \u2014 a Tools-page sync moved.\n\nThe watched sync is one determinate `done`/`total` loop over users. The users sync has two\nphases: an indeterminate `fetch` (one opaque plex.tv + Tautulli round-trip), then a determinate\n`save` bar over the roster upsert.",
"properties": {
"done": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Done"
},
"kind": {
"enum": [
"watched",
"users",
"credited"
],
"title": "Kind",
"type": "string"
},
"phase": {
"anyOf": [
{
"enum": [
"fetch",
"save"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Phase"
},
"total": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Total"
}
},
"required": [
"kind"
],
"title": "SyncProgressEvent",
"type": "object"
},
"SyncStartedOut": {
"additionalProperties": true,
"properties": {
"job_id": {
"title": "Job Id",
"type": "integer"
},
"started": {
"title": "Started",
"type": "boolean"
}
},
"required": [
"started",
"job_id"
],
"title": "SyncStartedOut",
"type": "object"
},
"TagIO": {
"additionalProperties": true,
"description": "A TMDB tag (keyword), with its name so the editor can show it without asking TMDB.",
"properties": {
"id": {
"title": "Id",
"type": "integer"
},
"name": {
"title": "Name",
"type": "string"
}
},
"required": [
"id",
"name"
],
"title": "TagIO",
"type": "object"
},
"TagMatchOut": {
"additionalProperties": true,
"description": "How one requester tag on Radarr/Sonarr resolved \u2014 the preview under \"Use my own tags\".",
"properties": {
"ambiguous": {
"title": "Ambiguous",
"type": "boolean"
},
"display_name": {
"title": "Display Name",
"type": "string"
},
"label": {
"title": "Label",
"type": "string"
},
"source": {
"enum": [
"overseerr",
"pattern",
"override"
],
"title": "Source",
"type": "string"
},
"titles": {
"title": "Titles",
"type": "integer"
},
"user_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "User Id"
}
},
"required": [
"label",
"source",
"user_id",
"display_name",
"titles",
"ambiguous"
],
"title": "TagMatchOut",
"type": "object"
},
"TagOut": {
"additionalProperties": true,
"properties": {
"id": {
"title": "Id",
"type": "integer"
},
"movies": {
"title": "Movies",
"type": "integer"
},
"name": {
"title": "Name",
"type": "string"
}
},
"required": [
"id",
"name",
"movies"
],
"title": "TagOut",
"type": "object"
},
"ThemeDiffOut": {
"additionalProperties": true,
"properties": {
"added": {
"items": {
"type": "string"
},
"title": "Added",
"type": "array"
},
"added_count": {
"title": "Added Count",
"type": "integer"
},
"after_count": {
"title": "After Count",
"type": "integer"
},
"before_count": {
"title": "Before Count",
"type": "integer"
},
"genres_added": {
"items": {
"type": "string"
},
"title": "Genres Added",
"type": "array"
},
"genres_removed": {
"items": {
"type": "string"
},
"title": "Genres Removed",
"type": "array"
},
"removed": {
"items": {
"type": "string"
},
"title": "Removed",
"type": "array"
},
"removed_count": {
"title": "Removed Count",
"type": "integer"
},
"rules_changed": {
"title": "Rules Changed",
"type": "boolean"
},
"tags_added": {
"items": {
"type": "string"
},
"title": "Tags Added",
"type": "array"
},
"tags_removed": {
"items": {
"type": "string"
},
"title": "Tags Removed",
"type": "array"
},
"unchanged": {
"items": {
"type": "string"
},
"title": "Unchanged",
"type": "array"
}
},
"required": [
"rules_changed",
"added",
"removed",
"unchanged",
"added_count",
"removed_count",
"tags_added",
"tags_removed",
"genres_added",
"genres_removed",
"before_count",
"after_count"
],
"title": "ThemeDiffOut",
"type": "object"
},
"ThemeIn": {
"description": "A theme to store. Undeclared fields (a hash echoed back from a preview) are ignored, never stored.",
"properties": {
"brief": {
"default": "",
"maxLength": 1000,
"title": "Brief",
"type": "string"
},
"collections": {
"items": {
"$ref": "#/components/schemas/CollectionIO"
},
"maxItems": 10,
"title": "Collections",
"type": "array"
},
"emoji": {
"anyOf": [
{
"maxLength": 8,
"type": "string"
},
{
"type": "null"
}
],
"title": "Emoji"
},
"excluded_genres": {
"items": {
"type": "string"
},
"maxItems": 10,
"title": "Excluded Genres",
"type": "array"
},
"genres": {
"items": {
"type": "string"
},
"maxItems": 10,
"title": "Genres",
"type": "array"
},
"media": {
"items": {
"enum": [
"movie",
"show"
],
"type": "string"
},
"maxItems": 2,
"minItems": 1,
"title": "Media",
"type": "array"
},
"name": {
"maxLength": 60,
"minLength": 1,
"title": "Name",
"type": "string"
},
"origin": {
"default": "manual",
"enum": [
"ai",
"manual"
],
"title": "Origin",
"type": "string"
},
"picks": {
"items": {
"$ref": "#/components/schemas/ThemePickIO"
},
"maxItems": 200,
"title": "Picks",
"type": "array"
},
"rules": {
"$ref": "#/components/schemas/RulesIO"
},
"tags": {
"items": {
"$ref": "#/components/schemas/TagIO"
},
"maxItems": 20,
"title": "Tags",
"type": "array"
}
},
"required": [
"name",
"media"
],
"title": "ThemeIn",
"type": "object"
},
"ThemeOut": {
"additionalProperties": true,
"properties": {
"ai_tokens": {
"title": "Ai Tokens",
"type": "integer"
},
"brief": {
"title": "Brief",
"type": "string"
},
"collections": {
"items": {
"$ref": "#/components/schemas/CollectionIO"
},
"title": "Collections",
"type": "array"
},
"content_hash": {
"title": "Content Hash",
"type": "string"
},
"emoji": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Emoji"
},
"excluded_genres": {
"items": {
"type": "string"
},
"title": "Excluded Genres",
"type": "array"
},
"genres": {
"items": {
"type": "string"
},
"title": "Genres",
"type": "array"
},
"id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Id"
},
"media": {
"items": {
"type": "string"
},
"title": "Media",
"type": "array"
},
"name": {
"title": "Name",
"type": "string"
},
"origin": {
"title": "Origin",
"type": "string"
},
"picks": {
"items": {
"$ref": "#/components/schemas/ThemePickIO"
},
"title": "Picks",
"type": "array"
},
"rules": {
"$ref": "#/components/schemas/RulesIO"
},
"slug": {
"title": "Slug",
"type": "string"
},
"stats": {
"additionalProperties": {
"type": "integer"
},
"title": "Stats",
"type": "object"
},
"tags": {
"items": {
"$ref": "#/components/schemas/TagIO"
},
"title": "Tags",
"type": "array"
},
"topped_up_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"title": "Topped Up At"
}
},
"required": [
"id",
"slug",
"name",
"emoji",
"brief",
"origin",
"media",
"tags",
"genres",
"excluded_genres",
"collections",
"picks",
"rules",
"content_hash",
"ai_tokens",
"stats"
],
"title": "ThemeOut",
"type": "object"
},
"ThemePickIO": {
"additionalProperties": true,
"description": "A title a theme names by TMDB id; ``origin`` says whether the AI or the owner chose it.",
"properties": {
"media": {
"enum": [
"movie",
"show"
],
"title": "Media",
"type": "string"
},
"origin": {
"default": "owner",
"enum": [
"ai",
"owner"
],
"title": "Origin",
"type": "string"
},
"reason": {
"anyOf": [
{
"maxLength": 160,
"type": "string"
},
{
"type": "null"
}
],
"title": "Reason"
},
"title": {
"default": "",
"title": "Title",
"type": "string"
},
"tmdb_id": {
"title": "Tmdb Id",
"type": "integer"
},
"year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year"
}
},
"required": [
"tmdb_id",
"media"
],
"title": "ThemePickIO",
"type": "object"
},
"ThemeRefOut": {
"additionalProperties": true,
"description": "A theme as one person's rotation holds it: which one, when it started, and when it hands over.",
"properties": {
"due_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Due At"
},
"emoji": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Emoji"
},
"name": {
"title": "Name",
"type": "string"
},
"started_at": {
"title": "Started At",
"type": "string"
},
"theme_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"description": "The stored theme; null once it has been deleted.",
"title": "Theme Id"
}
},
"required": [
"theme_id",
"name",
"emoji",
"started_at",
"due_at"
],
"title": "ThemeRefOut",
"type": "object"
},
"ThemeRotationOut": {
"additionalProperties": true,
"properties": {
"days": {
"description": "How many days a theme lasts.",
"title": "Days",
"type": "integer"
},
"mode": {
"enum": [
"fixed",
"explore"
],
"title": "Mode",
"type": "string"
},
"targets": {
"items": {
"$ref": "#/components/schemas/RotationTargetOut"
},
"title": "Targets",
"type": "array"
}
},
"required": [
"mode",
"days",
"targets"
],
"title": "ThemeRotationOut",
"type": "object"
},
"ThemeSaveIn": {
"description": "A save: the theme, what the AI call that wrote it cost, and the row it was written for.",
"properties": {
"collection_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Collection Id"
},
"draft": {
"$ref": "#/components/schemas/ThemeIn"
},
"stats": {
"additionalProperties": {
"type": "integer"
},
"title": "Stats",
"type": "object"
},
"tokens": {
"default": 0,
"minimum": 0.0,
"title": "Tokens",
"type": "integer"
}
},
"required": [
"draft"
],
"title": "ThemeSaveIn",
"type": "object"
},
"ThemeStatsOut": {
"additionalProperties": true,
"properties": {
"after_rules": {
"title": "After Rules",
"type": "integer"
},
"ai_kept": {
"default": 0,
"title": "Ai Kept",
"type": "integer"
},
"in_library": {
"title": "In Library",
"type": "integer"
},
"named": {
"title": "Named",
"type": "integer"
},
"resolved": {
"title": "Resolved",
"type": "integer"
},
"runtime_checked": {
"default": 0,
"title": "Runtime Checked",
"type": "integer"
},
"runtime_total": {
"default": 0,
"title": "Runtime Total",
"type": "integer"
},
"truncated": {
"default": false,
"title": "Truncated",
"type": "boolean"
},
"unwatched_median": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Unwatched Median"
}
},
"required": [
"named",
"resolved",
"in_library",
"after_rules",
"unwatched_median"
],
"title": "ThemeStatsOut",
"type": "object"
},
"TitleMatchOut": {
"additionalProperties": true,
"description": "TMDB's own best guess for a title search, for the \"block a seed\" picker.",
"properties": {
"media_type": {
"title": "Media Type",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
},
"tmdb_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Tmdb Id"
},
"year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year"
}
},
"required": [
"tmdb_id",
"title",
"media_type",
"year"
],
"title": "TitleMatchOut",
"type": "object"
},
"TopTitleOut": {
"additionalProperties": true,
"properties": {
"media_type": {
"title": "Media Type",
"type": "string"
},
"rating_key": {
"title": "Rating Key",
"type": "integer"
},
"title": {
"title": "Title",
"type": "string"
},
"tmdb_id": {
"title": "Tmdb Id",
"type": "integer"
},
"watcher_sample": {
"items": {
"$ref": "#/components/schemas/WatcherOut"
},
"title": "Watcher Sample",
"type": "array"
},
"watchers": {
"title": "Watchers",
"type": "integer"
},
"year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year"
}
},
"required": [
"tmdb_id",
"media_type",
"title",
"watchers",
"rating_key",
"year",
"watcher_sample"
],
"title": "TopTitleOut",
"type": "object"
},
"TraceRequestOut": {
"additionalProperties": true,
"description": "What became of one wanted-but-missing title, keyed `\"<tmdb_id>:<media_type>\"` on the trace.",
"properties": {
"arr_slug": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Arr Slug"
},
"detail": {
"title": "Detail",
"type": "string"
},
"excluded": {
"title": "Excluded",
"type": "boolean"
},
"status": {
"enum": [
"pending",
"sent",
"rejected"
],
"title": "Status",
"type": "string"
}
},
"required": [
"status",
"detail",
"arr_slug",
"excluded"
],
"title": "TraceRequestOut",
"type": "object"
},
"TransferIn": {
"properties": {
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
},
"from_user_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "From User Id"
},
"to_user_id": {
"title": "To User Id",
"type": "integer"
}
},
"required": [
"to_user_id"
],
"title": "TransferIn",
"type": "object"
},
"TransferOut": {
"additionalProperties": true,
"description": "The result of one replication.\n\n`unmarks` and `offsets_cleared` are the destructive half and are reported separately from\n`applied` on purpose: \"wrote 11,000 things\" and \"removed 412 watches from that account\" are not\nthe same sentence, and only the second needs anybody's consent.",
"properties": {
"applied": {
"title": "Applied",
"type": "integer"
},
"dry_run": {
"title": "Dry Run",
"type": "boolean"
},
"errors": {
"items": {
"type": "string"
},
"title": "Errors",
"type": "array"
},
"events_copied": {
"title": "Events Copied",
"type": "integer"
},
"failed": {
"title": "Failed",
"type": "integer"
},
"marks": {
"title": "Marks",
"type": "integer"
},
"offsets_cleared": {
"title": "Offsets Cleared",
"type": "integer"
},
"offsets_set": {
"title": "Offsets Set",
"type": "integer"
},
"planned": {
"title": "Planned",
"type": "integer"
},
"removals_preview": {
"items": {
"type": "string"
},
"title": "Removals Preview",
"type": "array"
},
"shows_cleared": {
"title": "Shows Cleared",
"type": "integer"
},
"snapshot_id": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Snapshot Id"
},
"source_empty": {
"title": "Source Empty",
"type": "boolean"
},
"target_unreadable": {
"items": {
"type": "string"
},
"title": "Target Unreadable",
"type": "array"
},
"titles_cached": {
"title": "Titles Cached",
"type": "integer"
},
"unmarks": {
"title": "Unmarks",
"type": "integer"
},
"unreachable": {
"title": "Unreachable",
"type": "integer"
},
"verify_checked": {
"title": "Verify Checked",
"type": "integer"
},
"verify_mismatched": {
"title": "Verify Mismatched",
"type": "integer"
}
},
"required": [
"planned",
"applied",
"unreachable",
"failed",
"marks",
"unmarks",
"offsets_set",
"offsets_cleared",
"removals_preview",
"verify_mismatched",
"verify_checked",
"shows_cleared",
"target_unreadable",
"events_copied",
"titles_cached",
"snapshot_id",
"dry_run",
"source_empty",
"errors"
],
"title": "TransferOut",
"type": "object"
},
"TrendPointOut": {
"additionalProperties": true,
"properties": {
"finished": {
"title": "Finished",
"type": "integer"
},
"watched": {
"title": "Watched",
"type": "integer"
},
"week": {
"title": "Week",
"type": "string"
}
},
"required": [
"week",
"watched",
"finished"
],
"title": "TrendPointOut",
"type": "object"
},
"UndoIn": {
"properties": {
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
},
"snapshot_id": {
"title": "Snapshot Id",
"type": "integer"
}
},
"required": [
"snapshot_id"
],
"title": "UndoIn",
"type": "object"
},
"UninstallCollectionOut": {
"additionalProperties": true,
"description": "One Shortlist collection the uninstall deletes, by where it lives and whose it is.",
"properties": {
"library": {
"title": "Library",
"type": "string"
},
"person": {
"title": "Person",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
}
},
"required": [
"library",
"person",
"title"
],
"title": "UninstallCollectionOut",
"type": "object"
},
"UninstallFailedOut": {
"additionalProperties": true,
"description": "An account plex.tv refused. The rest of the uninstall still ran (issue #96).",
"properties": {
"error": {
"title": "Error",
"type": "string"
},
"user": {
"title": "User",
"type": "string"
}
},
"required": [
"user",
"error"
],
"title": "UninstallFailedOut",
"type": "object"
},
"UninstallOut": {
"additionalProperties": true,
"properties": {
"collections_deleted": {
"items": {
"type": "string"
},
"title": "Collections Deleted",
"type": "array"
},
"collections_detail": {
"items": {
"$ref": "#/components/schemas/UninstallCollectionOut"
},
"title": "Collections Detail",
"type": "array"
},
"dry_run": {
"title": "Dry Run",
"type": "boolean"
},
"filters_failed": {
"items": {
"$ref": "#/components/schemas/UninstallFailedOut"
},
"title": "Filters Failed",
"type": "array"
},
"filters_restored": {
"title": "Filters Restored",
"type": "integer"
},
"filters_skipped": {
"items": {
"$ref": "#/components/schemas/UninstallSkippedOut"
},
"title": "Filters Skipped",
"type": "array"
},
"filters_unreachable": {
"items": {
"$ref": "#/components/schemas/UninstallUnreachableOut"
},
"title": "Filters Unreachable",
"type": "array"
},
"message": {
"title": "Message",
"type": "string"
},
"rows_disabled": {
"title": "Rows Disabled",
"type": "integer"
}
},
"required": [
"filters_restored",
"filters_skipped",
"filters_unreachable",
"filters_failed",
"collections_deleted",
"rows_disabled",
"dry_run",
"message"
],
"title": "UninstallOut",
"type": "object"
},
"UninstallProgressEvent": {
"additionalProperties": true,
"description": "Event ``uninstall.progress`` \u2014 one live step of a REAL uninstall (the dry-run preview is\ninstant and streams nothing).",
"properties": {
"done": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Done"
},
"label": {
"title": "Label",
"type": "string"
},
"total": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Total"
}
},
"required": [
"label"
],
"title": "UninstallProgressEvent",
"type": "object"
},
"UninstallRequest": {
"properties": {
"confirm": {
"default": "",
"title": "Confirm",
"type": "string"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
}
},
"title": "UninstallRequest",
"type": "object"
},
"UninstallSkippedOut": {
"additionalProperties": true,
"description": "An account that has left this Plex server, so its snapshot can never be restored.",
"properties": {
"plex_account_id": {
"title": "Plex Account Id",
"type": "integer"
},
"reason": {
"title": "Reason",
"type": "string"
},
"user": {
"title": "User",
"type": "string"
}
},
"required": [
"user",
"plex_account_id",
"reason"
],
"title": "UninstallSkippedOut",
"type": "object"
},
"UninstallUnreachableOut": {
"additionalProperties": true,
"description": "An account plex.tv's roster did not list, but that our own records say IS on this server.\n\nIts own field rather than folded into `filters_failed`, because the two need different things\nfrom the operator \u2014 a refused write is worth retrying, an absent roster entry means plex.tv gave\nan answer we don't believe \u2014 and a consumer should never have to match on an error string to\ntell them apart.",
"properties": {
"plex_account_id": {
"title": "Plex Account Id",
"type": "integer"
},
"reason": {
"title": "Reason",
"type": "string"
},
"user": {
"title": "User",
"type": "string"
}
},
"required": [
"user",
"plex_account_id",
"reason"
],
"title": "UninstallUnreachableOut",
"type": "object"
},
"UpNextRequest": {
"additionalProperties": false,
"properties": {
"theme_id": {
"title": "Theme Id",
"type": "integer"
},
"user_id": {
"title": "User Id",
"type": "integer"
}
},
"required": [
"user_id",
"theme_id"
],
"title": "UpNextRequest",
"type": "object"
},
"UsedByOut": {
"additionalProperties": true,
"description": "A row that follows the season.",
"properties": {
"id": {
"title": "Id",
"type": "integer"
},
"name": {
"title": "Name",
"type": "string"
}
},
"required": [
"id",
"name"
],
"title": "UsedByOut",
"type": "object"
},
"UserOut": {
"additionalProperties": true,
"description": "One person \u2014 the response shape of :func:`user_dict`.",
"properties": {
"avatar_url": {
"title": "Avatar Url",
"type": "string"
},
"cold_start": {
"title": "Cold Start",
"type": "boolean"
},
"departed": {
"title": "Departed",
"type": "boolean"
},
"display_name": {
"title": "Display Name",
"type": "string"
},
"enabled": {
"title": "Enabled",
"type": "boolean"
},
"friendly_name": {
"title": "Friendly Name",
"type": "string"
},
"history_depth": {
"title": "History Depth",
"type": "integer"
},
"id": {
"title": "Id",
"type": "integer"
},
"last_pick_watched_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Last Pick Watched At"
},
"last_run_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Last Run At"
},
"manage_sharing": {
"title": "Manage Sharing",
"type": "boolean"
},
"nickname": {
"title": "Nickname",
"type": "string"
},
"picks_watched_30d": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Picks Watched 30D"
},
"plex_account_id": {
"title": "Plex Account Id",
"type": "integer"
},
"prefs": {
"additionalProperties": true,
"title": "Prefs",
"type": "object"
},
"preview_titles": {
"items": {
"type": "string"
},
"title": "Preview Titles",
"type": "array"
},
"request_tag": {
"title": "Request Tag",
"type": "string"
},
"requested_by_tag": {
"title": "Requested By Tag",
"type": "string"
},
"restricted": {
"title": "Restricted",
"type": "boolean"
},
"restriction_profile": {
"title": "Restriction Profile",
"type": "string"
},
"seerr_user_id": {
"title": "Seerr User Id",
"type": "integer"
},
"slug": {
"title": "Slug",
"type": "string"
},
"unhidden_rows": {
"title": "Unhidden Rows",
"type": "integer"
},
"user_type": {
"$ref": "#/components/schemas/UserType"
},
"username": {
"title": "Username",
"type": "string"
}
},
"required": [
"id",
"plex_account_id",
"username",
"slug",
"nickname",
"friendly_name",
"display_name",
"avatar_url",
"user_type",
"restricted",
"restriction_profile",
"enabled",
"manage_sharing",
"cold_start",
"request_tag",
"requested_by_tag",
"seerr_user_id",
"prefs",
"history_depth",
"last_run_at",
"picks_watched_30d",
"last_pick_watched_at",
"preview_titles",
"unhidden_rows",
"departed"
],
"title": "UserOut",
"type": "object"
},
"UserPatch": {
"properties": {
"enabled": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Enabled"
},
"manage_sharing": {
"anyOf": [
{
"type": "boolean"
},
{
"type": "null"
}
],
"title": "Manage Sharing"
},
"nickname": {
"anyOf": [
{
"maxLength": 255,
"type": "string"
},
{
"type": "null"
}
],
"title": "Nickname"
},
"prefs": {
"anyOf": [
{
"$ref": "#/components/schemas/UserPrefs"
},
{
"type": "null"
}
]
},
"request_tag": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
],
"title": "Request Tag"
},
"requested_by_tag": {
"anyOf": [
{
"maxLength": 64,
"type": "string"
},
{
"type": "null"
}
],
"title": "Requested By Tag"
},
"seerr_user_id": {
"anyOf": [
{
"minimum": 0.0,
"type": "integer"
},
{
"type": "null"
}
],
"title": "Seerr User Id"
}
},
"title": "UserPatch",
"type": "object"
},
"UserPickOut": {
"additionalProperties": true,
"description": "One delivered pick as the USER pages render it \u2014 the response shape of :func:`pick_dict`.\n\nNot ``PickOut``: the run detail publishes its own, narrower pick shape under that name\n(``api/schemas_runs.py``), and two models sharing a name make FastAPI fall back to\nfully-qualified schema names for both \u2014 which the SPA then generates as\n``shortlist__server__api__serializers__PickOut``.",
"properties": {
"affinity": {
"title": "Affinity",
"type": "number"
},
"collection_slug": {
"title": "Collection Slug",
"type": "string"
},
"library": {
"title": "Library",
"type": "string"
},
"media_type": {
"title": "Media Type",
"type": "string"
},
"rank": {
"title": "Rank",
"type": "integer"
},
"rating": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"title": "Rating"
},
"rating_key": {
"title": "Rating Key",
"type": "integer"
},
"reason": {
"title": "Reason",
"type": "string"
},
"section_key": {
"title": "Section Key",
"type": "string"
},
"seed_title": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Seed Title"
},
"sources": {
"items": {
"type": "string"
},
"title": "Sources",
"type": "array"
},
"title": {
"title": "Title",
"type": "string"
},
"year": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Year"
}
},
"required": [
"rank",
"title",
"reason",
"rating_key",
"media_type",
"collection_slug",
"library",
"section_key",
"seed_title",
"sources",
"affinity",
"year",
"rating"
],
"title": "UserPickOut",
"type": "object"
},
"UserPickOutcomeOut": {
"additionalProperties": true,
"description": "One title this person was recommended and then played.",
"properties": {
"finished_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Finished At"
},
"media_type": {
"title": "Media Type",
"type": "string"
},
"outcome": {
"title": "Outcome",
"type": "string"
},
"percent": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Percent"
},
"row": {
"title": "Row",
"type": "string"
},
"title": {
"title": "Title",
"type": "string"
},
"tmdb_id": {
"title": "Tmdb Id",
"type": "integer"
},
"watched_at": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Watched At"
}
},
"required": [
"tmdb_id",
"media_type",
"title",
"row",
"outcome",
"percent",
"watched_at",
"finished_at"
],
"title": "UserPickOutcomeOut",
"type": "object"
},
"UserPrefs": {
"properties": {
"blocked_seeds": {
"anyOf": [
{
"items": {
"anyOf": [
{
"type": "integer"
},
{
"$ref": "#/components/schemas/BlockSeedBody"
}