CtrlK
BlogDocsLog inGet started
Tessl Logo

moviepilot-api

Use this skill when you need to call MoviePilot REST API endpoints directly with the bundled Python client. Covers MoviePilot HTTP endpoints across media search, downloads, subscriptions, library management, site management, system administration, plugins, workflows, and more. Prefer `moviepilot-cli` for normal local MCP tool workflows; use this skill when the user explicitly asks for HTTP API access, when an endpoint is not exposed as an MCP tool, or when running in an environment where direct REST calls are the appropriate bridge.

71

Quality

88%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Medium

Suggest reviewing before use

SKILL.md
Quality
Evals
Security

MoviePilot REST API

All script paths are relative to this skill file.

Use scripts/mp-api.py to call any MoviePilot REST API endpoint directly.

Scope And Boundaries

This skill is the REST API bridge. It is implemented as a Python script and is useful when the agent needs endpoint-level coverage beyond the local moviepilot tool MCP CLI.

Choose other skills first when they match more precisely:

RequestPreferred skill
Normal local MoviePilot product operation exposed as an MCP toolmoviepilot-cli
Direct SQL query or database updatedatabase-operation
Restart, version check, or upgrademoviepilot-update
Slash commands or plugin/system command dispatchcommand-dispatch
Browser-only state, site login pages, screenshots, cookiesbrowser-use

Do not use this skill just because MoviePilot is mentioned. Use it when the task specifically needs a REST endpoint, token-query endpoint, or API behavior that the CLI/MCP tools do not expose.

Setup

When the script runs inside the MoviePilot project, it imports app.core.config.settings and reads settings.HOST, settings.PORT, and settings.API_TOKEN directly. Do not ask the user for API_TOKEN, and do not copy API keys into the prompt.

Configuration priority:

  1. CLI flags: --host, --apikey
  2. Environment variables: MP_HOST, MP_API_KEY
  3. Local MoviePilot settings
  4. Legacy config file: ~/.config/moviepilot_api/config

Use configure only as a legacy fallback outside the MoviePilot project, and avoid it in normal agent workflows because it persists a long-lived API key to disk.

How to Call APIs

General syntax

python scripts/mp-api.py <METHOD> <PATH> [key=value ...] [--json '<body>']

Authentication

  • By default, the script auto-loads the local key and sends it via the X-API-KEY header.
  • For endpoints suffixed with 2 (e.g. /api/v1/dashboard/statistic2), use --token-param to send the key as ?token=.
  • Both methods validate against the same API_TOKEN value.
  • Never print, summarize, or ask the user to paste the API key unless the script is being used outside the local project and no safer configuration source is available.

Examples

# GET with query params
python scripts/mp-api.py GET /api/v1/media/search title="Avatar" type="movie"

# POST with JSON body
python scripts/mp-api.py POST /api/v1/download/add --json '{"torrent_url":"abc1234:1"}'

# DELETE
python scripts/mp-api.py DELETE /api/v1/subscribe/123

# Endpoints that require ?token= auth
python scripts/mp-api.py GET /api/v1/dashboard/statistic2 --token-param

Complete API Reference

All endpoints are under the base URL {MP_HOST}. Path parameters are shown as {param}.


Media Search (13 endpoints)

MethodPathDescription
GET/api/v1/media/searchSearch media, collections, or people by title. Params: title (required), type, page, count, optional source. Supported sources: media = themoviedb, douban, bangumi, anilist; collection = themoviedb; person = themoviedb, douban
GET/api/v1/media/recognizeRecognize media from torrent title. Params: title (required), subtitle, custom_words, optional source
GET/api/v1/media/recognize2Recognize media (API_TOKEN auth, use --token-param). Params: title, subtitle, custom_words, optional source
GET/api/v1/media/recognize_fileRecognize media from file path. Params: path (required), optional source
GET/api/v1/media/recognize_file2Recognize file (API_TOKEN auth). Params: path, optional source
POST/api/v1/media/scrape/{storage}Scrape media metadata. Body: FileItem JSON. Optional params: media_source, media_id, type_name (电影/电视剧)
GET/api/v1/media/category/configGet category strategy config
POST/api/v1/media/category/configSave category strategy config. Body: CategoryConfig
GET/api/v1/media/categoryGet auto-categorization config
GET/api/v1/media/group/seasons/{episode_group}Get episode group seasons
GET/api/v1/media/groups/{tmdbid}Get media episode groups
GET/api/v1/media/seasonsGet media season info. Params: mediaid, title, year, season
GET/api/v1/media/{mediaid}Get media detail. mediaid supports tmdb:, douban:, bangumi:, anilist:, and plugin-defined source prefixes. Params: type_name (required: movie/tv), title, year

TMDB (8 endpoints)

MethodPathDescription
GET/api/v1/tmdb/seasons/{tmdbid}All seasons for a TMDB title
GET/api/v1/tmdb/similar/{tmdbid}/{type_name}Similar movies/TV shows
GET/api/v1/tmdb/recommend/{tmdbid}/{type_name}Recommended movies/TV shows
GET/api/v1/tmdb/collection/{collection_id}Collection details. Params: page, count
GET/api/v1/tmdb/credits/{tmdbid}/{type_name}Cast and crew. Params: page
GET/api/v1/tmdb/person/{person_id}Person details
GET/api/v1/tmdb/person/credits/{person_id}Person's filmography. Params: page
GET/api/v1/tmdb/{tmdbid}/{season}All episodes of a season. Params: episode_group

Douban (5 endpoints)

MethodPathDescription
GET/api/v1/douban/{doubanid}Douban media detail
GET/api/v1/douban/person/{person_id}Person detail
GET/api/v1/douban/person/credits/{person_id}Person filmography. Params: page
GET/api/v1/douban/credits/{doubanid}/{type_name}Cast info (type_name: movie/tv)
GET/api/v1/douban/recommend/{doubanid}/{type_name}Recommendations

Bangumi (5 endpoints)

MethodPathDescription
GET/api/v1/bangumi/{bangumiid}Bangumi detail
GET/api/v1/bangumi/credits/{bangumiid}Cast. Params: page, count
GET/api/v1/bangumi/recommend/{bangumiid}Recommendations. Params: page, count
GET/api/v1/bangumi/person/{person_id}Person detail
GET/api/v1/bangumi/person/credits/{person_id}Person filmography. Params: page, count

AniList (8 endpoints)

AniList endpoints prefer the anilist-chinese proxy and fall back to official AniList GraphQL plus the project's daily translation dataset when the public proxy is unavailable. Media titles prefer the provided Chinese title and fall back to the native-language title.

MethodPathDescription
GET/api/v1/anilist/trendingTRENDING NOW. Params: page, count
GET/api/v1/anilist/popular-this-seasonPOPULAR THIS SEASON. Params: page, count
GET/api/v1/anilist/discoverExplore anime. Params: search, genre, format, season, season_year, status, country, sort, page, count
GET/api/v1/anilist/{anilist_id}AniList media detail
GET/api/v1/anilist/credits/{anilist_id}Japanese voice cast. Params: page, count
GET/api/v1/anilist/recommend/{anilist_id}Recommendations. Params: page, count
GET/api/v1/anilist/person/{person_id}Staff detail
GET/api/v1/anilist/person/credits/{person_id}Staff anime credits. Params: page, count

Search / Torrents / Subtitles (11 endpoints)

MethodPathDescription
GET/api/v1/search/media/{mediaid}Search torrents by media ID (four built-in prefixes or a plugin-defined source prefix). Params: mtype, area, title, year, season, sites
GET/api/v1/search/media/{mediaid}/streamStream torrent search by media ID with SSE. Params: mtype, area, title, year, season, sites
GET/api/v1/search/titleFuzzy search torrents by keyword. Params: keyword, page, sites
GET/api/v1/search/title/streamStream fuzzy torrent search with SSE. Params: keyword, page, sites
GET/api/v1/search/subtitle/titleFuzzy search site subtitles by keyword. Params: keyword, page, sites
GET/api/v1/search/subtitle/title/streamStream fuzzy site subtitle search with SSE. Params: keyword, page, sites
GET/api/v1/search/subtitle/media/{mediaid}Exact subtitle search by media ID (four built-in prefixes or a plugin-defined source prefix). Params: mtype, title, year, season, episode, sites
GET/api/v1/search/subtitle/media/{mediaid}/streamStream exact subtitle search by media ID with SSE. Params: mtype, title, year, season, episode, sites
GET/api/v1/search/lastGet latest search results
GET/api/v1/search/last/contextGet latest search results with replayable params. params.result_type is torrent or subtitle
POST/api/v1/search/recommendAI recommended resources. Body: filtered_indices, check_only, force

Download (8 endpoints)

MethodPathDescription
GET/api/v1/download/List active downloads. Params: name (downloader name)
POST/api/v1/download/Add download (with media info). Body: JSON
POST/api/v1/download/addAdd download without media info. Body: torrent_in, optional media_source + media_id (all four dedicated IDs remain supported), downloader, save_path
POST/api/v1/download/subtitleDownload subtitle file to the recognized media download directory. Body: subtitle_in, optional media_source + media_id (all four dedicated IDs remain supported), save_path
GET/api/v1/download/start/{hashString}Resume download task
GET/api/v1/download/stop/{hashString}Pause download task
GET/api/v1/download/clientsList available download clients
DELETE/api/v1/download/{hashString}Delete download task. Params: name

Subscribe (28 endpoints)

MethodPathDescription
GET/api/v1/subscribe/List all subscriptions
POST/api/v1/subscribe/Add subscription. Body accepts media_source + media_id and compatible tmdbid, doubanid, bangumiid, anilistid fields
PUT/api/v1/subscribe/Update subscription. Body: Subscribe JSON
GET/api/v1/subscribe/listList subscriptions (API_TOKEN auth, use --token-param)
GET/api/v1/subscribe/{subscribe_id}Subscription detail
DELETE/api/v1/subscribe/{subscribe_id}Delete subscription
PUT/api/v1/subscribe/status/{subid}Update subscription status. Params: state (required)
GET/api/v1/subscribe/media/{mediaid}Query subscription by a built-in or plugin-prefixed media ID. Params: season, title
DELETE/api/v1/subscribe/media/{mediaid}Delete subscription by a built-in or plugin-prefixed media ID. Params: season
GET/api/v1/subscribe/refreshRefresh all subscriptions
GET/api/v1/subscribe/reset/{subid}Reset subscription
GET/api/v1/subscribe/checkRefresh subscription TMDB info
GET/api/v1/subscribe/searchSearch all subscriptions
GET/api/v1/subscribe/search/{subscribe_id}Search specific subscription
POST/api/v1/subscribe/seerrOverseerr/Jellyseerr notification subscription
GET/api/v1/subscribe/history/{mtype}Subscription history. Params: page, count
DELETE/api/v1/subscribe/history/{history_id}Delete subscription history
GET/api/v1/subscribe/popularPopular subscriptions. Params: stype (required), page, count, min_sub, genre_id, min_rating, max_rating, sort_type
GET/api/v1/subscribe/user/{username}User's subscriptions
GET/api/v1/subscribe/files/{subscribe_id}Subscription related files
POST/api/v1/subscribe/shareShare subscription. Body: SubscribeShare JSON
DELETE/api/v1/subscribe/share/{share_id}Delete shared subscription
POST/api/v1/subscribe/forkFork shared subscription. Body: SubscribeShare JSON
GET/api/v1/subscribe/followList followed share users
POST/api/v1/subscribe/followFollow a share user. Params: share_uid
DELETE/api/v1/subscribe/followUnfollow a share user. Params: share_uid
GET/api/v1/subscribe/sharesList shared subscriptions. Params: name, page, count, genre_id, min_rating, max_rating, sort_type
GET/api/v1/subscribe/share/statisticsShare statistics

Site (25 endpoints)

MethodPathDescription
GET/api/v1/site/List all sites
POST/api/v1/site/Add site. Body: Site JSON
PUT/api/v1/site/Update site. Body: Site JSON
GET/api/v1/site/{site_id}Site detail by ID
DELETE/api/v1/site/{site_id}Delete site
GET/api/v1/site/domain/{site_url}Site detail by domain
GET/api/v1/site/cookiecloudSync CookieCloud
GET/api/v1/site/resetReset sites
POST/api/v1/site/prioritiesBatch update site priorities. Body: array
POST/api/v1/site/cookie/{site_id}Update site cookie & UA. Body: SiteCookieUpdate JSON
GET/api/v1/site/cookie/{site_id}Legacy update site cookie & UA. Params: username, password, code
POST/api/v1/site/userdata/{site_id}Refresh site user data
GET/api/v1/site/userdata/{site_id}Get site user data. Params: workdate
GET/api/v1/site/userdata/latestAll sites latest user data
GET/api/v1/site/test/{site_id}Test site connection
GET/api/v1/site/icon/{site_id}Site icon
GET/api/v1/site/category/{site_id}Site categories
GET/api/v1/site/resource/{site_id}Site resources. Params: keyword, cat, page
GET/api/v1/site/statistic/{site_url}Specific site statistics
GET/api/v1/site/statisticAll site statistics
GET/api/v1/site/rssRSS subscription sites
GET/api/v1/site/authCheck authenticated sites
POST/api/v1/site/authAuthenticate a site. Body: SiteAuth
GET/api/v1/site/mappingSite domain-to-name mapping
GET/api/v1/site/supportingSupported site list

History (5 endpoints)

MethodPathDescription
GET/api/v1/history/downloadDownload history. Params: page, count
DELETE/api/v1/history/downloadDelete download history. Body: DownloadHistory JSON
GET/api/v1/history/transferTransfer history. Params: title, page, count, status
DELETE/api/v1/history/transferDelete transfer history. Params: deletesrc, deletedest. Body: TransferHistory
GET/api/v1/history/empty/transferClear all transfer history

Media Server (8 endpoints)

MethodPathDescription
GET/api/v1/mediaserver/play/{itemid}Play media online
GET/api/v1/mediaserver/existsCheck if media exists in library. Params: title, year, mtype, tmdbid, season
POST/api/v1/mediaserver/exists_remoteCheck existing episodes (remote). Body: MediaInfo JSON
POST/api/v1/mediaserver/notexistsCheck missing episodes (remote). Body: MediaInfo JSON
GET/api/v1/mediaserver/latestLatest library items. Params: server (required), count
GET/api/v1/mediaserver/playingCurrently playing. Params: server (required), count
GET/api/v1/mediaserver/libraryLibrary list. Params: server (required), hidden
GET/api/v1/mediaserver/clientsAvailable media servers

Storage / Files (13 endpoints)

MethodPathDescription
POST/api/v1/storage/listList directory contents. Params: sort. Body: FileItem JSON
POST/api/v1/storage/mkdirCreate directory. Params: name (required). Body: FileItem
POST/api/v1/storage/deleteDelete file or directory. Body: FileItem JSON
POST/api/v1/storage/downloadDownload file. Body: FileItem JSON
POST/api/v1/storage/imagePreview image. Body: FileItem JSON
POST/api/v1/storage/renameRename file/dir. Params: new_name (required), recursive. Body: FileItem
GET/api/v1/storage/usage/{name}Storage usage info
GET/api/v1/storage/transtype/{name}Supported transfer types
GET/api/v1/storage/qrcode/{name}Generate QR code for auth
GET/api/v1/storage/auth_url/{name}Get OAuth2 auth URL
GET/api/v1/storage/check/{name}Confirm QR login. Params: ck, t
POST/api/v1/storage/save/{name}Save storage config. Body: JSON object
GET/api/v1/storage/reset/{name}Reset storage config

Transfer (6 endpoints)

MethodPathDescription
GET/api/v1/transfer/namePreview transfer name. Params: path (required), filetype (required)
GET/api/v1/transfer/queueTransfer queue
DELETE/api/v1/transfer/queueRemove from transfer queue. Body: FileItem JSON
POST/api/v1/transfer/manual/target-pathMatch manual transfer target path. Body: ManualTransferItem JSON; optional media_source + media_id select the recognition source
POST/api/v1/transfer/manualManual transfer. Params: background. Body: ManualTransferItem JSON; optional media_source + media_id select recognition and scraping source
GET/api/v1/transfer/nowRun immediate transfer

Dashboard (19 endpoints)

MethodPathDescription
GET/api/v1/dashboard/statisticMedia statistics. Params: name
GET/api/v1/dashboard/statistic2Media statistics (API_TOKEN, use --token-param)
GET/api/v1/dashboard/storageLocal storage space
GET/api/v1/dashboard/storage2Local storage space (API_TOKEN)
GET/api/v1/dashboard/processesProcess info
GET/api/v1/dashboard/systemHost name, operating system, MoviePilot runtime, and backend version
GET/api/v1/dashboard/downloaderDownloader info. Params: name
GET/api/v1/dashboard/downloader2Downloader info (API_TOKEN)
GET/api/v1/dashboard/scheduleScheduled services
GET/api/v1/dashboard/schedule2Scheduled services (API_TOKEN)
GET/api/v1/dashboard/schedule/{job_id}/progressScheduled service real-time progress
GET/api/v1/dashboard/schedule2/{job_id}/progressScheduled service real-time progress (API_TOKEN)
GET/api/v1/dashboard/transferTransfer statistics. Params: days
GET/api/v1/dashboard/cpuCPU usage
GET/api/v1/dashboard/cpu2CPU usage (API_TOKEN)
GET/api/v1/dashboard/memoryMemory usage
GET/api/v1/dashboard/memory2Memory usage (API_TOKEN)
GET/api/v1/dashboard/networkNetwork traffic
GET/api/v1/dashboard/network2Network traffic (API_TOKEN)

Plugin (22 endpoints)

MethodPathDescription
GET/api/v1/plugin/List plugins. Params: state (installed/market/all), force
GET/api/v1/plugin/installedList installed plugins
GET/api/v1/plugin/statisticPlugin install statistics
GET/api/v1/plugin/install/{plugin_id}Install plugin. Params: repo_url, force
GET/api/v1/plugin/reload/{plugin_id}Reload plugin
GET/api/v1/plugin/reset/{plugin_id}Reset plugin config & data
GET/api/v1/plugin/{plugin_id}Get plugin config
PUT/api/v1/plugin/{plugin_id}Update plugin config. Body: JSON object
DELETE/api/v1/plugin/{plugin_id}Uninstall plugin
POST/api/v1/plugin/clone/{plugin_id}Clone plugin. Body: JSON object
GET/api/v1/plugin/form/{plugin_id}Plugin form page
GET/api/v1/plugin/page/{plugin_id}Plugin data page
GET/api/v1/plugin/remotesPlugin federation list. Params: token (required)
GET/api/v1/plugin/dashboard/metaAll plugin dashboard metadata
GET/api/v1/plugin/dashboard/{plugin_id}/{key}Plugin dashboard by key
GET/api/v1/plugin/dashboard/{plugin_id}Plugin dashboard
GET/api/v1/plugin/file/{plugin_id}/{filepath}Plugin static file
GET/api/v1/plugin/foldersPlugin folder config
POST/api/v1/plugin/foldersSave plugin folder config
POST/api/v1/plugin/folders/{folder_name}Create plugin folder
DELETE/api/v1/plugin/folders/{folder_name}Delete plugin folder
PUT/api/v1/plugin/folders/{folder_name}/pluginsUpdate folder plugins. Body: array

Workflow (16 endpoints)

MethodPathDescription
GET/api/v1/workflow/List all workflows
POST/api/v1/workflow/Create workflow. Body: Workflow JSON
GET/api/v1/workflow/{workflow_id}Workflow detail
PUT/api/v1/workflow/{workflow_id}Update workflow. Body: Workflow JSON
DELETE/api/v1/workflow/{workflow_id}Delete workflow
POST/api/v1/workflow/{workflow_id}/runRun workflow. Params: from_begin
POST/api/v1/workflow/{workflow_id}/startEnable workflow
POST/api/v1/workflow/{workflow_id}/pauseDisable workflow
POST/api/v1/workflow/{workflow_id}/resetReset workflow
GET/api/v1/workflow/actionsList all actions
GET/api/v1/workflow/plugin/actionsPlugin actions. Params: plugin_id
GET/api/v1/workflow/event_typesList event types
POST/api/v1/workflow/shareShare workflow. Body: WorkflowShare JSON
DELETE/api/v1/workflow/share/{share_id}Delete shared workflow
POST/api/v1/workflow/forkFork shared workflow. Body: WorkflowShare JSON
GET/api/v1/workflow/sharesList shared workflows. Params: name, page, count

System (24 endpoints)

MethodPathDescription
GET/api/v1/system/envGet system configuration, including runtime versions and Rust acceleration availability/enabled status
POST/api/v1/system/envUpdate system configuration. Body: JSON object
GET/api/v1/system/pingCheck service availability for authenticated users
GET/api/v1/system/setting/public/{key}Get allowlisted non-sensitive system setting for authenticated users
GET/api/v1/system/setting/{key}Get system setting
POST/api/v1/system/setting/{key}Update system setting
POST/api/v1/system/setting/PLUGIN_MARKET/sync-wikiSync plugin market repository URLs from the MoviePilot Wiki and merge with local PLUGIN_MARKET
GET/api/v1/system/globalNon-sensitive settings. Params: token (required)
GET/api/v1/system/global/userUser-related settings
GET/api/v1/system/restartRestart system
POST/api/v1/system/upgradeUpgrade and restart system. Body: "release" or "dev"
GET/api/v1/system/runschedulerRun scheduled service. Params: jobid (required)
GET/api/v1/system/runscheduler2Run scheduler (API_TOKEN, use --token-param). Params: jobid
GET/api/v1/system/modulelistList loaded modules
GET/api/v1/system/moduletest/{moduleid}Test module availability
GET/api/v1/system/versionsList all GitHub releases
GET/api/v1/system/ruletestTest filter rule. Params: title (required), rulegroup_name (required), subtitle
GET/api/v1/system/nettestTest network connectivity. Params: url (required), proxy (required), include
GET/api/v1/system/llm-modelsList LLM models. Params: provider (required), api_key (required), base_url
GET/api/v1/system/progress/{process_type}Real-time progress (SSE)
GET/api/v1/system/messageReal-time messages (SSE). Params: role
GET/api/v1/system/loggingReal-time logs (SSE). Params: length, logfile
GET/api/v1/system/img/{proxy}Image proxy. Params: imgurl (required), cache, use_cookies
GET/api/v1/system/cache/imageCached image. Params: url (required)

Discover (6 endpoints)

MethodPathDescription
GET/api/v1/discover/sourceDiscover data sources
GET/api/v1/discover/bangumiDiscover Bangumi. Params: type, cat, sort, year, page, count
GET/api/v1/discover/douban_moviesDiscover Douban movies. Params: sort, tags, page, count
GET/api/v1/discover/douban_tvsDiscover Douban TV. Params: sort, tags, page, count
GET/api/v1/discover/tmdb_moviesDiscover TMDB movies. Params: sort_by, with_genres, with_original_language, page
GET/api/v1/discover/tmdb_tvsDiscover TMDB TV. Params: same as movies

Recommend (14 endpoints)

MethodPathDescription
GET/api/v1/recommend/sourceRecommendation data sources
GET/api/v1/recommend/bangumi_calendarBangumi daily schedule. Params: page, count
GET/api/v1/recommend/douban_showingDouban now showing. Params: page, count
GET/api/v1/recommend/douban_moviesDouban movies. Params: sort, tags, page, count
GET/api/v1/recommend/douban_tvsDouban TV. Params: sort, tags, page, count
GET/api/v1/recommend/douban_movie_top250Douban Top 250 movies. Params: page, count
GET/api/v1/recommend/douban_tv_weekly_chineseDouban Chinese TV weekly. Params: page, count
GET/api/v1/recommend/douban_tv_weekly_globalDouban Global TV weekly. Params: page, count
GET/api/v1/recommend/douban_tv_animationDouban animation. Params: page, count
GET/api/v1/recommend/douban_movie_hotDouban hot movies. Params: page, count
GET/api/v1/recommend/douban_tv_hotDouban hot TV. Params: page, count
GET/api/v1/recommend/tmdb_moviesTMDB movies. Params: sort_by, with_genres, page
GET/api/v1/recommend/tmdb_tvsTMDB TV. Params: sort_by, with_genres, page
GET/api/v1/recommend/tmdb_trendingTMDB trending. Params: page

Torrent Cache (5 endpoints)

MethodPathDescription
GET/api/v1/torrent/cacheGet torrent cache
DELETE/api/v1/torrent/cacheClear torrent cache
DELETE/api/v1/torrent/cache/{domain}/{torrent_hash}Delete specific torrent cache
POST/api/v1/torrent/cache/refreshRefresh torrent cache
POST/api/v1/torrent/cache/reidentify/{domain}/{torrent_hash}Re-identify torrent. Params: tmdbid, doubanid

Message (8 endpoints)

MethodPathDescription
POST/api/v1/message/Receive user message. Params: token, source
GET/api/v1/message/Callback verification. Params: token, echostr, msg_signature, timestamp, nonce, source
POST/api/v1/message/webSend web message. Params: text (required)
GET/api/v1/message/webGet web messages. Params: page, count
GET/api/v1/message/notificationGet notification history. Params: page, count; server filters cleared history
DELETE/api/v1/message/notificationMark notification history as cleared. Params: scope (all, system, media)
POST/api/v1/message/webpush/subscribeWebPush subscribe. Body: Subscription JSON
POST/api/v1/message/webpush/sendSend WebPush notification. Body: SubscriptionMessage JSON

User (10 endpoints)

MethodPathDescription
GET/api/v1/user/List all users
POST/api/v1/user/Create user. Body: UserCreate JSON
PUT/api/v1/user/Update user. Body: UserUpdate JSON
GET/api/v1/user/currentCurrent logged-in user
GET/api/v1/user/{username}User detail
DELETE/api/v1/user/id/{user_id}Delete user by ID
DELETE/api/v1/user/name/{user_name}Delete user by username
POST/api/v1/user/avatar/{user_id}Upload avatar. Body: multipart/form-data
GET/api/v1/user/config/{key}Get user config
POST/api/v1/user/config/{key}Update user config

Login (3 endpoints)

MethodPathDescription
POST/api/v1/login/access-tokenGet JWT access token. Body: form (username, password)
GET/api/v1/login/wallpaperLogin page wallpaper
GET/api/v1/login/wallpapersLogin page wallpaper list

MCP Tools (6 endpoints)

MethodPathDescription
POST/api/v1/mcpMCP JSON-RPC 2.0 endpoint
DELETE/api/v1/mcpTerminate MCP session
GET/api/v1/mcp/toolsList all exposed tools
POST/api/v1/mcp/tools/callCall a tool. Body: {"tool_name":"...","arguments":{...}}
GET/api/v1/mcp/tools/{tool_name}Get tool definition
GET/api/v1/mcp/tools/{tool_name}/schemaGet tool input schema

Agent MCP Client (3 endpoints)

MethodPathDescription
GET/api/v1/message/agent/mcp/serversList external MCP servers configured for the built-in Agent. Superuser login required
POST/api/v1/message/agent/mcp/serversSave external MCP servers for the built-in Agent. Body: {"servers":[...]}
POST/api/v1/message/agent/mcp/servers/testTest one external MCP server and return discovered tools. Body: {"server":{...}}

Webhook (2 endpoints)

MethodPathDescription
GET/api/v1/webhook/Webhook message (GET). Params: token, source
POST/api/v1/webhook/Webhook message (POST). Params: token, source

Servarr Compatibility -- /api/v3 (16 endpoints)

Radarr/Sonarr compatible API for integration with external tools.

MethodPathDescription
GET/api/v3/system/statusSystem status
GET/api/v3/qualityProfileQuality profiles
GET/api/v3/rootfolderRoot folders
GET/api/v3/tagTags
GET/api/v3/languageprofileLanguages
GET/api/v3/movieAll subscribed movies
POST/api/v3/movieAdd movie subscription. Body: RadarrMovie JSON
GET/api/v3/movie/lookupSearch movie. Params: term (format: tmdb:123)
GET/api/v3/movie/{mid}Movie detail
DELETE/api/v3/movie/{mid}Delete movie subscription
GET/api/v3/seriesAll TV series
POST/api/v3/seriesAdd TV subscription. Body: SonarrSeries JSON
PUT/api/v3/seriesUpdate TV subscription. Body: SonarrSeries JSON
GET/api/v3/series/lookupSearch TV. Params: term (format: tvdb:123)
GET/api/v3/series/{tid}TV detail
DELETE/api/v3/series/{tid}Delete TV subscription

CookieCloud -- /cookiecloud (5 endpoints)

MethodPathDescription
GET/cookiecloud/Root
POST/cookiecloud/Root
POST/cookiecloud/updateUpload cookie data. Body: CookieData JSON
GET/cookiecloud/get/{uuid}Download encrypted data
POST/cookiecloud/get/{uuid}Download encrypted data (POST)

Common Workflows

Search and download a movie

# 1. Search TMDB for the movie
python scripts/mp-api.py GET /api/v1/media/search title="Inception" type="movie"

# 2. Get media detail (replace {tmdbid} with actual ID)
python scripts/mp-api.py GET /api/v1/media/27205 type_name="movie"

# 3. Search torrents
python scripts/mp-api.py GET /api/v1/search/media/tmdb:27205 mtype="movie"

# 4. Get latest search results
python scripts/mp-api.py GET /api/v1/search/last

# 5. Add download
python scripts/mp-api.py POST /api/v1/download/add --json '{"torrent_url":"<url_from_search>"}'

Search and download subtitles

# 1. Search site subtitles by keyword
python scripts/mp-api.py GET /api/v1/search/subtitle/title keyword="Inception" sites="1,2"

# 2. Restore the last subtitle search with replayable params
python scripts/mp-api.py GET /api/v1/search/last/context

# 3. Download a subtitle result to the recognized media directory
python scripts/mp-api.py POST /api/v1/download/subtitle --json '{"subtitle_in":{"title":"Inception.2010.1080p.chs","enclosure":"https://example.com/downloadsubs.php?torrentid=1&subid=2","site_name":"Example"},"tmdbid":27205}'

Add a subscription

# 1. Search for the show
python scripts/mp-api.py GET /api/v1/media/search title="Breaking Bad" type="tv"

# 2. Check if already subscribed
python scripts/mp-api.py GET /api/v1/subscribe/media/tmdb:1396

# 3. Check if already in library
python scripts/mp-api.py GET /api/v1/mediaserver/exists tmdbid=1396 mtype="tv"

# 4. Add subscription
python scripts/mp-api.py POST /api/v1/subscribe/ --json '{"name":"Breaking Bad","year":"2008","type":"tv","tmdbid":1396}'

System monitoring

# CPU, memory, network
python scripts/mp-api.py GET /api/v1/dashboard/cpu
python scripts/mp-api.py GET /api/v1/dashboard/memory
python scripts/mp-api.py GET /api/v1/dashboard/network

# Storage
python scripts/mp-api.py GET /api/v1/dashboard/storage

# Active downloads
python scripts/mp-api.py GET /api/v1/download/

# Run a scheduled task
python scripts/mp-api.py GET /api/v1/system/runscheduler jobid="subscribe_search_all"

Site management

# List all sites
python scripts/mp-api.py GET /api/v1/site/

# Test site connectivity
python scripts/mp-api.py GET /api/v1/site/test/1

# Get site user data
python scripts/mp-api.py GET /api/v1/site/userdata/1

# Sync CookieCloud
python scripts/mp-api.py GET /api/v1/site/cookiecloud

Error Handling

ScenarioAction
HTTP 401API key is invalid or missing. Verify local settings with moviepilot doctor; only use --apikey as an external fallback.
HTTP 403Insufficient permissions. The API key grants superuser access; check if the endpoint requires special auth.
HTTP 404Endpoint or resource not found. Verify the path and path parameters.
HTTP 422Validation error. Check required parameters and JSON body format.
Connection errorVerify --host URL is reachable. Check if MoviePilot is running.
Missing configRun inside the MoviePilot project, or set MP_HOST and MP_API_KEY in the process environment.
Repository
jxxghp/MoviePilot
Last updated
First committed

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.