{"id":"eebf6be3-8e8f-4646-82e6-dace776e1bcc","entityType":"agent","slug":"clawhub-crawlora-org-movie-tv-research","name":"movie-tv-research","canonicalUrl":"https://www.xpersona.co/agent/clawhub-crawlora-org-movie-tv-research","canonicalPath":"/agent/clawhub-crawlora-org-movie-tv-research","generatedAt":"2026-10-11T08:44:40.537Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:51:34.366Z","emptyReason":null},"description":"Researches movies and TV shows — metadata, cast/crew, ratings, reviews, streaming availability, and box-office performance — via the Crawlora API across IMDb, TMDB, JustWatch, Letterboxd, Rotten Tomatoes, Metacritic, and Box Office Mojo, returning clean JSON. Use when the user asks about a title's cast, ratings/scores, where to stream it, critic or user reviews, or its box-office numbers.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17d53nb8nd03gyyfdy32rgde58e574f:movie-tv-research","sourceUrl":"https://clawhub.ai/crawlora-org/movie-tv-research","homepage":"https://clawhub.ai/crawlora-org/skills/movie-tv-research","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/crawlora-org/movie-tv-research","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/crawlora-org/skills/movie-tv-research","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"movie-tv-research technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:51:34.366Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:51:34.366Z","emptyReason":null},"stars":null,"forks":null,"downloads":1141,"packageName":null,"latestVersion":"1.0.20","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:51:34.295Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T05:51:34.366Z","lastCrawledAt":"2026-10-11T05:51:34.295Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T05:51:34.295Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.20","createdAt":"2026-09-29T02:18:31.596Z","changelog":"Sync skill instructions, references, and helper from GitHub 4157a1bf7e8583ee9e9d7a264c65c00aee1a1783","fileCount":5,"zipByteSize":17889},{"version":"1.0.19","createdAt":"2026-09-26T15:13:07.879Z","changelog":"Sync published endpoints and helper route allowlist","fileCount":5,"zipByteSize":16836},{"version":"1.0.18","createdAt":"2026-09-21T01:39:41.295Z","changelog":"Sync skill instructions, references, and helper from GitHub 0cfbceba40b050ba434a0a3f4945ca97b668c805","fileCount":5,"zipByteSize":16290},{"version":"1.0.17","createdAt":"2026-09-17T10:19:15.782Z","changelog":"Security hardening: generated helpers now enforce exact routes, methods, and credential-safe curl behavior.","fileCount":5,"zipByteSize":14964},{"version":"1.0.16","createdAt":"2026-09-14T01:57:14.668Z","changelog":"Sync skill instructions, references, and helper from GitHub 902f58316c643ffbcabc57fc6f15f59d27ec063d","fileCount":5,"zipByteSize":15356},{"version":"1.0.15","createdAt":"2026-09-10T12:34:06.828Z","changelog":"Validate API keys before curl config","fileCount":5,"zipByteSize":15165},{"version":"1.0.14","createdAt":"2026-09-10T12:15:52.081Z","changelog":"Keep API keys out of process arguments","fileCount":5,"zipByteSize":14979},{"version":"1.0.13","createdAt":"2026-09-10T12:06:46.144Z","changelog":"Reject curl local-file query syntax","fileCount":5,"zipByteSize":14710}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17d53nb8nd03gyyfdy32rgde58e574f:movie-tv-research","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17d53nb8nd03gyyfdy32rgde58e574f:movie-tv-research` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/crawlora-org/movie-tv-research before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-movie-tv-research/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-movie-tv-research/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-movie-tv-research/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-movie-tv-research/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-movie-tv-research/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-movie-tv-research/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T08:44:40.533Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-movie-tv-research/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-movie-tv-research/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-movie-tv-research/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-crawlora-org-movie-tv-research/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T05:51:34.366Z","emptyReason":null},"readme":"Skill: movie-tv-research\n\nOwner: crawlora-org\n\nSummary: Researches movies and TV shows — metadata, cast/crew, ratings, reviews, streaming availability, and box-office performance — via the Crawlora API across IMDb, TMDB, JustWatch, Letterboxd, Rotten Tomatoes, Metacritic, and Box Office Mojo, returning clean JSON. Use when the user asks about a title's cast, ratings/scores, where to stream it, critic or user reviews, or its box-office numbers.\n\nTags: latest:1.0.20\n\nVersion history:\n\nv1.0.20 | 2026-09-29T02:18:31.596Z | user\n\nSync skill instructions, references, and helper from GitHub 4157a1bf7e8583ee9e9d7a264c65c00aee1a1783\n\nv1.0.19 | 2026-09-26T15:13:07.879Z | user\n\nSync published endpoints and helper route allowlist\n\nv1.0.18 | 2026-09-21T01:39:41.295Z | user\n\nSync skill instructions, references, and helper from GitHub 0cfbceba40b050ba434a0a3f4945ca97b668c805\n\nv1.0.17 | 2026-09-17T10:19:15.782Z | user\n\nSecurity hardening: generated helpers now enforce exact routes, methods, and credential-safe curl behavior.\n\nv1.0.16 | 2026-09-14T01:57:14.668Z | user\n\nSync skill instructions, references, and helper from GitHub 902f58316c643ffbcabc57fc6f15f59d27ec063d\n\nv1.0.15 | 2026-09-10T12:34:06.828Z | user\n\nValidate API keys before curl config\n\nv1.0.14 | 2026-09-10T12:15:52.081Z | user\n\nKeep API keys out of process arguments\n\nv1.0.13 | 2026-09-10T12:06:46.144Z | user\n\nReject curl local-file query syntax\n\nv1.0.12 | 2026-09-10T11:54:13.728Z | user\n\nStream helper request bodies through curl stdin\n\nv1.0.11 | 2026-09-10T11:42:26.664Z | user\n\nScope helper routes and remove secret-shaped key examples\n\nv1.0.10 | 2026-09-10T06:54:56.428Z | user\n\nMigrate publisher from tonywangcn to crawlora-org for brand consistency with the plugins\n\nv1.0.9 | 2026-09-08T04:33:42.372Z | user\n\nRefresh stale REST examples, endpoint references, and Bash helper from crawlora-skills 1.17.1.\n\nv1.0.8 | 2026-09-07T13:07:56.239Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.7 | 2026-09-07T07:58:38.107Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.6 | 2026-09-07T06:22:14.912Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.5 | 2026-08-24T06:53:12.868Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.4 | 2026-08-24T06:11:35.667Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.3 | 2026-08-24T04:54:08.027Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.2 | 2026-08-14T18:14:23.873Z | user\n\nSync via scripts/sync-directories.sh\n\nv1.0.1 | 2026-08-10T18:27:58.192Z | user\n\nSet categories\n\nv1.0.0 | 2026-08-10T18:02:21.463Z | auto\n\nInitial release: movie & TV research skill powered by Crawlora API.\n\n- Retrieves metadata, cast/crew details, ratings, reviews, streaming availability, and box office numbers for movies and TV shows.\n- Integrates data from IMDb, TMDB, JustWatch, Letterboxd, Rotten Tomatoes, Metacritic, and Box Office Mojo.\n- Returns normalized JSON responses—no web scraping required.\n- Supports lookups for cast, ratings, reviews, streaming options, box-office performance, and recommendations.\n- Requires a Crawlora API key for access.\n\nArchive index:\n\nArchive v1.0.20: 5 files, 17889 bytes\n\nFiles: reference/endpoints.md (63382b), scripts/crawlora.sh (8840b), skill-card.md (1907b), SKILL.md (4856b), _meta.json (137b)\n\nFile v1.0.20:SKILL.md\n\n---\nname: movie-tv-research\ndescription: Researches movies and TV shows — metadata, cast/crew, ratings, reviews, streaming availability, and box-office performance — via the Crawlora API across IMDb, TMDB, JustWatch, Letterboxd, Rotten Tomatoes, Metacritic, and Box Office Mojo, returning clean JSON. Use when the user asks about a title's cast, ratings/scores, where to stream it, critic or user reviews, or its box-office numbers.\n---\n\n# Movie & TV research\n\nPull title metadata, cast/crew, ratings, streaming availability, reviews, and\nbox-office numbers across seven film/TV data sources as normalized JSON from\nthe Crawlora API — no scraping IMDb pages or parsing streaming-provider HTML.\n\n## When to use this skill\n\n- \"Who's in / who directed <title>?\" / cast, crew, and credits lookups.\n- \"What's <title> rated on IMDb / Rotten Tomatoes / Metacritic / Letterboxd?\"\n- \"Where can I stream <title>?\" (JustWatch offers by provider).\n- \"How did <title> do at the box office?\" (Box Office Mojo).\n- \"Find titles similar to <title>\" or \"what's popular right now.\"\n- Critic vs. audience review comparisons; franchise/genre box-office analysis.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\nPick the source by job:\n\n1. **Identity & credits (IMDb / TMDB)** — search first: `/imdb/search` or\n   `/tmdb/search`; then detail: `/imdb/title` (needs the IMDb id) or\n   `/tmdb/movie/{id}` / `/tmdb/tv/{id}`. Cast/crew: `/imdb/title/credits` or\n   TMDB's title payload. Person pages: `/imdb/name`, `/tmdb/person/{id}`.\n2. **Scores & reviews** — Rotten Tomatoes (`/rottentomatoes/movie`, `/series`,\n   `/movie/reviews`), Metacritic (`/metacritic/movie/{slug}`,\n   `/critic-reviews`, `/user-reviews`), IMDb (`/imdb/title/reviews`),\n   Letterboxd (`/letterboxd/film/{slug}`, `/reviews`, `/rating-histogram`).\n3. **Where to watch (JustWatch)** — `/justwatch/search` → raw id, then\n   `/justwatch/title/offers` (or `/title-by-id` + `/title/offers`) for\n   per-provider streaming/rental/purchase links; `/justwatch/title/similar`\n   for recommendations.\n4. **Box office (Box Office Mojo)** — `/boxofficemojo/title` or `/release`\n   for one film's numbers; `/weekend/domestic`, `/year/domestic`,\n   `/year/worldwide` for charts; `/franchise` / `/genre` / `/brand` for\n   rollups; `/showdown` to compare two releases head-to-head.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Identity + scores:\nscripts/crawlora.sh /imdb/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /tmdb/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /rottentomatoes/search query=\"Dune Part Two\" | jq '.'\n\n# Streaming availability:\nscripts/crawlora.sh /justwatch/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /justwatch/title/offers id=<raw-justwatch-id> | jq '.'\n\n# Box office:\nscripts/crawlora.sh /boxofficemojo/title id=<mojo-title-id> | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every IMDb, TMDB,\nJustWatch, Letterboxd, Rotten Tomatoes, Metacritic, and Box Office Mojo\nendpoint this skill uses.\n\n## Examples\n\n- **Critic-vs-audience gap:** `/metacritic/movie/{slug}` (critic Metascore\n  vs. user score) alongside `/rottentomatoes/movie` (Tomatometer vs.\n  audience score) for the same title.\n- **Where-to-watch fan-out:** `/justwatch/search` → `/justwatch/title/offers`\n  to list every subscription/rent/buy option and price by provider.\n- **Franchise box-office trend:** `/boxofficemojo/franchise` for every\n  entry's opening/lifetime gross, sorted chronologically.\n- **Taste-matching:** `/letterboxd/film/{slug}/similar` or\n  `/tmdb/movie/{id}` (TMDB includes recommendations) for \"more like this.\"\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public title/review/box-office pages.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- **JustWatch uses its own raw GraphQL ids** (not IMDb/TMDB ids) — resolve\n  via `/justwatch/search` or `/justwatch/title/by-id` first.\n- Results are paginated where noted — pass `page` to walk longer lists\n  (reviews, charts, filmographies).\n\nFile v1.0.20:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"movie-tv-research\",\n  \"version\": \"1.0.20\",\n  \"publishedAt\": 1790648311596\n}\n\nFile v1.0.20:reference/endpoints.md\n\n# movie-tv-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**119 endpoints across 7 platform group(s).**\n\n## IMDb (30)\n\n### `imdb_charts`\n\n- **HTTP:** `GET /imdb/charts`\n- **What:** IMDb title charts. Returns normalized rows from public IMDb title charts. Chart values: `top_rated_movies`, `top_rated_tv_shows`, `most_popular_movies`, `most_popular_tv_shows`, `top_rated_english_movies`, `lowest_rated_movies`.\n- **Params:** `chart` (string, optional) — IMDb chart; `limit` (integer, optional) — Rows to return, default 25, max 250\n\n### `imdb_image_types`\n\n- **HTTP:** `GET /imdb/image-types`\n- **What:** IMDb image types. Lists every value the `type` parameter of the IMDb image endpoints accepts: `behind_the_scenes`, `event`, `poster`, `product`, `production_art`, `publicity`, `still_frame`, `unknown`. Each row carries a display label and a short description.\n- **Params:** _none_\n\n### `imdb_name`\n\n- **HTTP:** `GET /imdb/name`\n- **What:** IMDb name detail. Returns normalized public IMDb person metadata and known-for rows. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_name_awards`\n\n- **HTTP:** `GET /imdb/name/awards`\n- **What:** IMDb name awards. Returns normalized public IMDb award rows for a person. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_name_credits`\n\n- **HTTP:** `GET /imdb/name/credits`\n- **What:** IMDb name credits. Returns normalized public IMDb filmography sections for a person. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_name_images`\n\n- **HTTP:** `GET /imdb/name/images`\n- **What:** IMDb name images. Returns image metadata from a person's media index, including the original image URL, dimensions, caption and credited people. Filter by image type with `type`, which accepts a single value or a comma-separated list of: `behind_the_scenes`, `event`, `poster`, `product`, `production_art`, `publicity`, `still_frame`, `unknown`. Omit `type` to return every type. Limit defaults to 50 and clamps to 1000. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `limit` (integer, optional) — Rows to return, default 50, max 1000; `type` (string, optional) — Image type filter, single value or comma-separated list; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_name_videos`\n\n- **HTTP:** `GET /imdb/name/videos`\n- **What:** IMDb name video metadata. Returns public person video metadata and thumbnail URLs only; playback URLs and media manifests are never returned. IMDb caps the upstream slice at 100 and provides no usable continuation cursor, so `total` can exceed returned rows and `has_more` reports that condition. Limit defaults to 50 and clamps to 100. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `limit` (integer, optional) — Rows to return, default 50, max 100; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_search`\n\n- **HTTP:** `GET /imdb/search`\n- **What:** IMDb title search. Returns normalized IMDb title search rows from credential-free public IMDb pages. Limit defaults to 10 and clamps to 20.\n- **Params:** `limit` (integer, optional) — Rows to return, default 10, max 20; `query` (string, **required**) — Search query\n\n### `imdb_search_title`\n\n- **HTTP:** `GET /imdb/search/title`\n- **What:** IMDb advanced title search. Returns normalized IMDb advanced title-search results (imdb.com/search/title/) from a credential-free public IMDb page. At least one filter is required; sort/limit alone are not enough. Limit defaults to 25 and clamps to 50; only IMDb's first rendered page of results is returned (see `total`/`has_more`), there is no deeper cursor pagination. Genre/company/certificate/country/language/keyword/characters/role are include-only lists; there is no exclude support. Unsupported: genre exclude, three curated `groups` values (best-picture-nominee, best-director-nominee, national-film-registry), and the non-plot \"page topic\" search fields.\n- **Params:** `certificates` (string, optional) — Comma-separated `COUNTRY:RATING` certificate pairs, e.g. `US:PG-13`; `characters` (string, optional) — Comma-separated character names; `colors` (string, optional) — Comma-separated color info: `color`, `black_and_white`, `colorized`, `aces`; `companies` (string, optional) — Comma-separated IMDb company ids, format `co########`; `countries` (string, optional) — Comma-separated ISO country codes; `genres` (string, optional) — Comma-separated genres (include-only): `Action`, `Adventure`, `Animation`, `Biography`, `Comedy`, `Crime`, `Documentary`, `Drama`, `Family`, `Fantasy`, `Film-Noir`, `Game-Show`, `History`, `Horror`, `Music`, `Musical`, `Mystery`, `News`, `Reality-TV`, `Romance`, `Sci-Fi`, `Short`, `Sport`, `Talk-Show`, `Thriller`, `War`, `Western`; `groups` (string, optional) — Comma-separated awards/curated-list groups: `oscar_winner`, `oscar_nominee`, `emmy_winner`, `emmy_nominee`, `golden_globe_winner`, `golden_globe_nominee`, `best_picture_winner`, `best_director_winner`, `razzie_winner`, `razzie_nominee`, `top_100`, `top_250`, `top_1000`, `bottom_100`, `bottom_250`, `bottom_1000`; `include_adult` (boolean, optional) — Include adult titles. Defaults to excluded; `keywords` (string, optional) — Comma-separated plot keywords; `languages` (string, optional) — Comma-separated ISO language codes; `limit` (integer, optional) — Rows to return, default 25, max 50; `max_popularity` (integer, optional) — Maximum IMDb popularity rank; `max_runtime` (integer, optional) — Maximum runtime in minutes; `max_user_rating` (number, optional) — Maximum IMDb user rating, 0-10; `max_votes` (integer, optional) — Maximum number of user rating votes; `min_popularity` (integer, optional) — Minimum IMDb popularity rank (1 is most popular); `min_runtime` (integer, optional) — Minimum runtime in minutes; `min_user_rating` (number, optional) — Minimum IMDb user rating, 0-10; `min_votes` (integer, optional) — Minimum number of user rating votes; `plot` (string, optional) — Plot text search term; `release_date_from` (string, optional) — Release date lower bound: YYYY, YYYY-MM, or YYYY-MM-DD; `release_date_to` (string, optional) — Release date upper bound: YYYY, YYYY-MM, or YYYY-MM-DD; `role` (string, optional) — Comma-separated cast/crew IMDb name ids, format `nm########`; `sort` (string, optional) — One of `moviemeter`, `alpha`, `user_rating`, `num_votes`, `boxoffice_gross_us`, `runtime`, `year`, `release_date`; `sort_order` (string, optional) — `asc` or `desc`. Defaults to `asc` when sort is set; `sound_mixes` (string, optional) — Comma-separated sound mix names: `12-Track Digital Sound`, `3 Channel Stereo`, `4-Track Stereo`, `6-Track Stereo`, `70 mm 6-Track`, `AGA Sound System`, `Auro 11.1`, `CDS`, `Chronophone`, `Cinematophone`, `Cinephone`, `Cinerama 7-Track`, `Cinesound`, `D-Cinema 48kHz 5.1`, `Datasat`, `De Forest Phonofilm`, `Digitrac Digital Audio System`, `Dolby`, `Dolby Atmos`, `Dolby Digital`, `Dolby Digital EX`, `Dolby SR`, `Dolby Stereo`, `Dolby Surround 7.1`, `DTS`, `DTS 70 mm`, `DTS Stereo`, `DTS-ES`, `IMAX 6-Track`, `Kinoplasticon`, `LC-Concept Digital Sound`, `Matrix Surround`, `Mono`, `Perspecta Stereo`, `Phono-Kinema`, `SDDS`, `Sensurround`, `Silent`, `Sonics-DDP`, `Sonix`, `Stereo`, `Ultra Stereo`, `Vitaphone`; `title` (string, optional) — Title-name substring match; `title_type` (string, optional) — Comma-separated title types: `feature`, `tvSeries`, `short`, `tvEpisode`, `tvMiniSeries`, `tvMovie`, `tvSpecial`, `tvShort`, `videoGame`, `video`, `musicVideo`, `podcastSeries`, `podcastEpisode`\n\n### `imdb_title`\n\n- **HTTP:** `GET /imdb/title`\n- **What:** IMDb title detail. Returns normalized IMDb title metadata from a credential-free public IMDb title page. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_awards`\n\n- **HTTP:** `GET /imdb/title/awards`\n- **What:** IMDb title awards. Returns normalized public IMDb award rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_box_office`\n\n- **HTTP:** `GET /imdb/title/box-office`\n- **What:** IMDb title box office summary. Returns a title's public box-office summary: lifetime gross by market (domestic, international, worldwide), the domestic opening weekend, and the production budget. IMDb reports each figure independently, so a real title with no box office data (most TV series, many non-theatrical titles) returns `has_box_office: false` with every figure omitted rather than an error. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_company_credits`\n\n- **HTTP:** `GET /imdb/title/company-credits`\n- **What:** IMDb title company credits. Returns normalized public IMDb company-credit sections for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_connections`\n\n- **HTTP:** `GET /imdb/title/connections`\n- **What:** IMDb title connections. Returns a bounded slice of a title's public connections: other titles it references or is referenced by, such as remakes, spin-offs, \"featured in\" clips, and \"edited into\" compilations. `category` is upstream-supplied free text, not a closed enum. IMDb's connections list can run to hundreds or thousands of rows, so `total` can exceed the returned rows and `has_more` reports that condition. Limit defaults to 50 and clamps to 250. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `limit` (integer, optional) — Rows to return, default 50, max 250; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_credits`\n\n- **HTTP:** `GET /imdb/title/credits`\n- **What:** IMDb title credits. Returns normalized public IMDb full cast and crew sections. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_episodes`\n\n- **HTTP:** `GET /imdb/title/episodes`\n- **What:** IMDb title episodes. Returns normalized public IMDb episode rows for a series title. Limit defaults to 10 and clamps to 20. Optional `season` filters the upstream episodes page. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `limit` (integer, optional) — Rows to return, default 10, max 20; `season` (integer, optional) — Season number to request; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_filming_locations`\n\n- **HTTP:** `GET /imdb/title/filming-locations`\n- **What:** IMDb title filming locations. Returns normalized public IMDb filming-location rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_goofs`\n\n- **HTTP:** `GET /imdb/title/goofs`\n- **What:** IMDb title goofs. Returns normalized public IMDb goof rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_images`\n\n- **HTTP:** `GET /imdb/title/images`\n- **What:** IMDb title images. Returns image metadata from a title's media index, including the original image URL, dimensions, caption and credited people. Filter by image type with `type`, which accepts a single value or a comma-separated list of: `behind_the_scenes`, `event`, `poster`, `product`, `production_art`, `publicity`, `still_frame`, `unknown`. Omit `type` to return every type. Limit defaults to 50 and clamps to 1000. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `limit` (integer, optional) — Rows to return, default 50, max 1000; `type` (string, optional) — Image type filter, single value or comma-separated list; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_keywords`\n\n- **HTTP:** `GET /imdb/title/keywords`\n- **What:** IMDb title keywords. Returns normalized public IMDb keyword rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_parental_guide`\n\n- **HTTP:** `GET /imdb/title/parental-guide`\n- **What:** IMDb title parental guide. Returns normalized public IMDb parental-guide categories and severity signals. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_public_facts_analysis`\n\n- **HTTP:** `GET /imdb/title/public-facts-analysis`\n- **What:** IMDb title public facts analysis. Returns derived public-page summary metrics for IMDb trivia, goofs, quotes, keywords, filming locations, and company credits. This endpoint is not viewing advice. Pass exactly one of `id` or `url`. The six sections are gathered from six independent sources, so a section that cannot be fetched is omitted and named in `missing_sections` with `partial` set to `true`, rather than failing the whole response; an error is returned only when no section could be fetched. Callers that require a complete analysis should check `partial`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_quotes`\n\n- **HTTP:** `GET /imdb/title/quotes`\n- **What:** IMDb title quotes. Returns normalized public IMDb quote rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_ratings`\n\n- **HTTP:** `GET /imdb/title/ratings`\n- **What:** IMDb title ratings breakdown. Returns IMDb's aggregate rating, vote count, ten rating buckets, and country rating summaries. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute IMDb title URL\n\n### `imdb_title_release_info`\n\n- **HTTP:** `GET /imdb/title/release-info`\n- **What:** IMDb title release info. Returns normalized public IMDb release date rows and alternate titles. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_reviews`\n\n- **HTTP:** `GET /imdb/title/reviews`\n- **What:** IMDb title user reviews. Returns normalized public IMDb user review rows. Limit defaults to 10 and clamps to 20. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `limit` (integer, optional) — Rows to return, default 10, max 20; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_similar`\n\n- **HTTP:** `GET /imdb/title/similar`\n- **What:** IMDb similar titles. Returns normalized titles from IMDb's public More like this recommendations. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute IMDb title URL\n\n### `imdb_title_technical_specs`\n\n- **HTTP:** `GET /imdb/title/technical-specs`\n- **What:** IMDb title technical specs. Returns normalized public IMDb technical specifications such as runtime, sound mix, color, and aspect ratio. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_trivia`\n\n- **HTTP:** `GET /imdb/title/trivia`\n- **What:** IMDb title trivia. Returns normalized public IMDb trivia rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_videos`\n\n- **HTTP:** `GET /imdb/title/videos`\n- **What:** IMDb title video metadata. Returns public title video metadata and thumbnail URLs only; playback URLs and media manifests are never returned. IMDb server-truncates this connection and exposes no usable continuation cursor, so `total` can exceed returned rows and `has_more` reports that condition. Limit defaults to 50 and clamps to 100. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `limit` (integer, optional) — Rows to return, default 50, max 100; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n## TMDB (9)\n\n### `tmdb_collection`\n\n- **HTTP:** `GET /tmdb/collection/{id}`\n- **What:** Get a TMDB collection. Returns a normalized TMDB collection (franchise grouping), including its overview and server-rendered member movies. Credential-free public TMDB data.\n- **Params:** `id` (string, **required**) — TMDB collection id or id-slug\n\n### `tmdb_genres`\n\n- **HTTP:** `GET /tmdb/genres`\n- **What:** List TMDB browse genres. Returns every genre ID advertised by TMDB's public movie and TV browse pages. Use movie values only with movie list filters and TV values only with TV list filters. Credential-free public TMDB data.\n- **Params:** _none_\n\n### `tmdb_movie`\n\n- **HTTP:** `GET /tmdb/movie/{id}`\n- **What:** Get a TMDB movie. Returns a normalized TMDB movie: overview, tagline, genres, countries, runtime, budget/revenue, top-billed cast, top crew (director/writer), and aggregate rating. Credential-free public TMDB data (themoviedb.org) — not the official api.themoviedb.org, which requires an API key.\n- **Params:** `id` (string, **required**) — TMDB movie id\n\n### `tmdb_movie_list`\n\n- **HTTP:** `GET /tmdb/movie/list`\n- **What:** Get a TMDB movie chart. Returns a TMDB movie chart (popular, top rated, now playing, or upcoming). Credential-free public TMDB data.\n- **Params:** `category` (string, optional) — Movie chart, default popular; `date_from` (string, optional) — Release date lower bound (YYYY-MM-DD); `date_to` (string, optional) — Release date upper bound (YYYY-MM-DD); `include_adult` (boolean, optional) — Include adult titles; `limit` (integer, optional) — Max movies, default 10, max 20; `max_rating` (number, optional) — Maximum rating, 0-10; `max_runtime` (integer, optional) — Maximum runtime in minutes; `min_rating` (number, optional) — Minimum rating, 0-10; `min_runtime` (integer, optional) — Minimum runtime in minutes; `min_votes` (integer, optional) — Minimum vote count; `original_language` (string, optional) — Two-letter original-language code; `page` (integer, optional) — 1-based page, default 1; `sort_by` (string, optional) — Sort order; `with_genres` (string, optional) — Comma- or pipe-separated movie genre ids: 28,12,16,35,80,99,18,10751,14,36,27,10402,9648,10749,878,10770,53,10752,37\n\n### `tmdb_person`\n\n- **HTTP:** `GET /tmdb/person/{id}`\n- **What:** Get a TMDB person. Returns a normalized TMDB person: biography, birth date, photo, and filmography (movie and TV credits). Credential-free public TMDB data.\n- **Params:** `id` (string, **required**) — TMDB person id; `limit` (integer, optional) — Max filmography credits, default 10, max 20\n\n### `tmdb_person_list`\n\n- **HTTP:** `GET /tmdb/person/list`\n- **What:** List popular people on TMDB. Returns one page from TMDB's Popular People directory, including each person's id, name, known-for titles, profile image, and detail URL. Credential-free public TMDB data.\n- **Params:** `limit` (integer, optional) — Max people, default 10, max 20; `page` (integer, optional) — 1-based page, default 1\n\n### `tmdb_search`\n\n- **HTTP:** `GET /tmdb/search`\n- **What:** Search TMDB. Searches TMDB movies, TV shows, people, and collections. An unscoped query interleaves results across all four types rather than returning whichever type happens to rank first upstream. Credential-free public TMDB data.\n- **Params:** `limit` (integer, optional) — Max results, default 10, max 20; `page` (integer, optional) — 1-based results page, default 1; `query` (string, **required**) — Search query; `type` (string, optional) — Optional result type filter\n\n### `tmdb_tv`\n\n- **HTTP:** `GET /tmdb/tv/{id}`\n- **What:** Get a TMDB TV show. Returns a normalized TMDB TV show: overview, tagline, genres, countries, episode count, first/last air year, top-billed cast, top crew (creator), and aggregate rating. Credential-free public TMDB data.\n- **Params:** `id` (string, **required**) — TMDB TV show id\n\n### `tmdb_tv_list`\n\n- **HTTP:** `GET /tmdb/tv/list`\n- **What:** Get a TMDB TV chart. Returns a TMDB TV chart (popular, top rated, airing today, or on the air). Credential-free public TMDB data.\n- **Params:** `category` (string, optional) — TV chart, default popular; `date_from` (string, optional) — First-air date lower bound (YYYY-MM-DD); `date_to` (string, optional) — First-air date upper bound (YYYY-MM-DD); `include_adult` (boolean, optional) — Include adult titles; `limit` (integer, optional) — Max shows, default 10, max 20; `max_rating` (number, optional) — Maximum rating, 0-10; `max_runtime` (integer, optional) — Maximum runtime in minutes; `min_rating` (number, optional) — Minimum rating, 0-10; `min_runtime` (integer, optional) — Minimum runtime in minutes; `min_votes` (integer, optional) — Minimum vote count; `original_language` (string, optional) — Two-letter original-language code; `page` (integer, optional) — 1-based page, default 1; `sort_by` (string, optional) — Sort order; `with_genres` (string, optional) — Comma- or pipe-separated TV genre ids: 10759,16,35,80,99,18,10751,10762,9648,10763,10764,10765,10766,10767,10768,37\n\n## JustWatch (21)\n\n### `justwatch_age_certifications`\n\n- **HTTP:** `GET /justwatch/age-certifications`\n- **What:** Get JustWatch age certifications. Returns JustWatch age certification technical names for a country.\n- **Params:** `country` (string, optional) — Two-letter country code\n\n### `justwatch_discover`\n\n- **HTTP:** `GET /justwatch/discover`\n- **What:** Discover JustWatch titles. Returns popular movies and shows filtered by optional genre short names, provider short names, production countries, monetization types, and release year bounds. Combine `providers` with `production_countries` to build charts such as most popular Korean or Japanese titles on a given service. Type accepts only `all`, `movie`, or `show`; monetization_types accepts only `FLATRATE`, `FREE`, `ADS`, `RENT`, or `BUY`.\n- **Params:** `country` (string, optional) — Two-letter country code; `genres` (string, optional) — Comma-separated JustWatch genre short names; `language` (string, optional) — Two-letter language code; `limit` (integer, optional) — Maximum results, defaults to 20 and clamps to 50; `monetization_types` (string, optional) — Comma-separated monetization types: FLATRATE, FREE, ADS, RENT, BUY; `production_countries` (string, optional) — Comma-separated two-letter ISO production-country codes; `providers` (string, optional) — Comma-separated JustWatch provider short names; `type` (string, optional) — Title type: all, movie, show; `year_max` (integer, optional) — Maximum release year; `year_min` (integer, optional) — Minimum release year\n\n### `justwatch_episode_by_id`\n\n- **HTTP:** `GET /justwatch/episode/by-id`\n- **What:** Get JustWatch episode by raw id. Looks up an episode by raw JustWatch GraphQL id such as `tse5550494` and returns normalized metadata and offers.\n- **Params:** `country` (string, optional) — Two-letter country code; `id` (string, **required**) — Raw JustWatch episode id matching tse[0-9]+; `language` (string, optional) — Two-letter language code\n\n### `justwatch_episode_offers`\n\n- **HTTP:** `GET /justwatch/episode/offers`\n- **What:** Get JustWatch episode offers. Returns normalized offers for a raw JustWatch episode id across one to five comma-separated country codes.\n- **Params:** `countries` (string, optional) — One to five comma-separated two-letter country codes; `id` (string, **required**) — Raw JustWatch episode id matching tse[0-9]+; `language` (string, optional) — Two-letter language code\n\n### `justwatch_genre_titles`\n\n- **HTTP:** `GET /justwatch/genre/titles`\n- **What:** Get JustWatch genre titles. Returns popular titles for one JustWatch genre short name such as `act`. Type accepts only `all`, `movie`, or `show`.\n- **Params:** `country` (string, optional) — Two-letter country code; `genre` (string, **required**) — JustWatch genre short name; `language` (string, optional) — Two-letter language code; `limit` (integer, optional) — Maximum results, defaults to 20 and clamps to 50; `type` (string, optional) — Title type: all, movie, show\n\n### `justwatch_genres`\n\n- **HTTP:** `GET /justwatch/genres`\n- **What:** Get JustWatch genres. Returns JustWatch genre short names and localized translations.\n- **Params:** `language` (string, optional) — Two-letter language code\n\n### `justwatch_monetization_titles`\n\n- **HTTP:** `GET /justwatch/monetization/titles`\n- **What:** Get JustWatch monetization titles. Returns popular titles for one monetization type. monetization_type accepts only `FLATRATE`, `FREE`, `ADS`, `RENT`, or `BUY`; type accepts only `all`, `movie`, or `show`.\n- **Params:** `country` (string, optional) — Two-letter country code; `language` (string, optional) — Two-letter language code; `limit` (integer, optional) — Maximum results, defaults to 20 and clamps to 50; `monetization_type` (string, **required**) — Monetization type: FLATRATE, FREE, ADS, RENT, BUY; `type` (string, optional) — Title type: all, movie, show\n\n### `justwatch_new`\n\n- **HTTP:** `GET /justwatch/new`\n- **What:** Get new JustWatch titles. Returns newly available movies and shows from the public JustWatch website GraphQL endpoint. Type accepts only `all`, `movie`, or `show`; limit defaults to 20 and clamps to 50.\n- **Params:** `country` (string, optional) — Two-letter country code; `language` (string, optional) — Two-letter language code; `limit` (integer, optional) — Maximum results, defaults to 20 and clamps to 50; `type` (string, optional) — Title type: all, movie, show\n\n### `justwatch_popular`\n\n- **HTTP:** `GET /justwatch/popular`\n- **What:** Get popular JustWatch titles. Returns popular movies and shows from the public JustWatch website GraphQL endpoint. Type accepts only `all`, `movie`, or `show`; limit defaults to 20 and clamps to 50.\n- **Params:** `country` (string, optional) — Two-letter country code; `cursor` (string, optional) — Opaque next_cursor from the prior response; omit for the first page; `language` (string, optional) — Two-letter language code; `limit` (integer, optional) — Maximum results, defaults to 20 and clamps to 50; `type` (string, optional) — Title type: all, movie, show\n\n### `justwatch_provider_titles`\n\n- **HTTP:** `GET /justwatch/provider/titles`\n- **What:** Get JustWatch provider titles. Returns popular movie/show titles available through a JustWatch provider short name such as `nfx`.\n- **Params:** `country` (string, optional) — Two-letter country code; `language` (string, optional) — Two-letter language code; `limit` (integer, optional) — Maximum results, defaults to 20 and clamps to 50; `provider` (string, **required**) — JustWatch provider short name; `type` (string, optional) — Title type: all, movie, show\n\n### `justwatch_providers`\n\n- **HTTP:** `GET /justwatch/providers`\n- **What:** Get JustWatch providers. Returns the credential-free public JustWatch provider catalog for a country.\n- **Params:** `country` (string, optional) — Two-letter country code\n\n### `justwatch_search`\n\n- **HTTP:** `GET /justwatch/search`\n- **What:** Search JustWatch titles. Searches JustWatch titles using the public credential-free website GraphQL endpoint. Country must be a two-letter ISO code such as `US`; language must be a two-letter code such as `en`.\n- **Params:** `country` (string, optional) — Two-letter country code; `language` (string, optional) — Two-letter language code; `limit` (integer, optional) — Maximum results, defaults to 10 and clamps to 25; `query` (string, **required**) — Search query\n\n### `justwatch_season_by_id`\n\n- **HTTP:** `GET /justwatch/season/by-id`\n- **What:** Get JustWatch season by raw id. Looks up a season by raw JustWatch GraphQL id such as `tss297253`.\n- **Params:** `country` (string, optional) — Two-letter country code; `id` (string, **required**) — Raw JustWatch season id matching tss[0-9]+; `language` (string, optional) — Two-letter language code\n\n### `justwatch_season_episodes`\n\n- **HTTP:** `GET /justwatch/season/episodes`\n- **What:** Get JustWatch season episodes. Returns episodes and normalized episode offers for a raw JustWatch season id such as `tss297253`.\n- **Params:** `country` (string, optional) — Two-letter country code; `language` (string, optional) — Two-letter language code; `season_id` (string, **required**) — Raw JustWatch season id matching tss[0-9]+\n\n### `justwatch_show_seasons`\n\n- **HTTP:** `GET /justwatch/show/seasons`\n- **What:** Get JustWatch show seasons. Returns seasons for a raw JustWatch show id such as `ts287292`.\n- **Params:** `country` (string, optional) — Two-letter country code; `language` (string, optional) — Two-letter language code; `show_id` (string, **required**) — Raw JustWatch show id matching ts[0-9]+\n\n### `justwatch_title`\n\n- **HTTP:** `GET /justwatch/title`\n- **What:** Get JustWatch title details. Fetches a JustWatch title page and returns normalized metadata and current offers. Pass exactly one of `path` or `url`.\n- **Params:** `path` (string, optional) — JustWatch title path; `url` (string, optional) — Absolute https://www.justwatch.com title URL\n\n### `justwatch_title_analysis`\n\n- **HTTP:** `GET /justwatch/title/analysis`\n- **What:** Analyze JustWatch title availability. Fetches a JustWatch title page and summarizes provider availability, monetization buckets, formats, price ranges, and best rent/buy/free/subscription options. Pass exactly one of `path` or `url`.\n- **Params:** `path` (string, optional) — JustWatch title path; `url` (string, optional) — Absolute https://www.justwatch.com title URL\n\n### `justwatch_title_by_id`\n\n- **HTTP:** `GET /justwatch/title/by-id`\n- **What:** Get JustWatch title by raw id. Looks up a movie or show by raw JustWatch GraphQL id such as `tm92641` or `ts287292`.\n- **Params:** `country` (string, optional) — Two-letter country code; `id` (string, **required**) — Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+; `language` (string, optional) — Two-letter language code\n\n### `justwatch_title_media`\n\n- **HTTP:** `GET /justwatch/title/media`\n- **What:** Get JustWatch title media. Returns normalized credits, clips, and backdrops for a raw JustWatch movie/show id such as `tm92641`.\n- **Params:** `country` (string, optional) — Two-letter country code; `id` (string, **required**) — Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+; `language` (string, optional) — Two-letter language code\n\n### `justwatch_title_offers`\n\n- **HTTP:** `GET /justwatch/title/offers`\n- **What:** Get JustWatch title offers. Returns normalized offers for a raw JustWatch movie/show id across one to five comma-separated country codes.\n- **Params:** `countries` (string, optional) — One to five comma-separated two-letter country codes; `id` (string, **required**) — Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+; `language` (string, optional) — Two-letter language code\n\n### `justwatch_title_similar`\n\n- **HTTP:** `GET /justwatch/title/similar`\n- **What:** Get similar JustWatch titles. Returns similar titles for a raw JustWatch movie/show id such as `tm92641`.\n- **Params:** `country` (string, optional) — Two-letter country code; `id` (string, **required**) — Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+; `language` (string, optional) — Two-letter language code; `limit` (integer, optional) — Maximum results, defaults to 10 and clamps to 25\n\n## Letterboxd (8)\n\n### `letterboxd_film`\n\n- **HTTP:** `GET /letterboxd/film/{slug}`\n- **What:** Get a Letterboxd film. Returns a normalized Letterboxd film: synopsis, director, cast, genres, countries, languages, runtime, and aggregate member rating. Credential-free public Letterboxd data (letterboxd.com), parsed from the film page's schema.org structured data.\n- **Params:** `slug` (string, **required**) — Letterboxd film slug\n\n### `letterboxd_film_rating_histogram`\n\n- **HTTP:** `GET /letterboxd/film/{slug}/rating-histogram`\n- **What:** Get a Letterboxd film's rating distribution. Returns a film's full star-rating distribution (0.5 to 5.0 in half-star buckets) with counts and percentages. Credential-free public Letterboxd data.\n- **Params:** `slug` (string, **required**) — Letterboxd film slug\n\n### `letterboxd_film_reviews`\n\n- **HTTP:** `GET /letterboxd/film/{slug}/reviews`\n- **What:** Get a Letterboxd film's popular reviews. Returns a film's popular reviews (reviewer, rating, date, text, like/comment counts, spoiler flag). Credential-free public Letterboxd data.\n- **Params:** `limit` (integer, optional) — Max reviews, default 10, max 50; `slug` (string, **required**) — Letterboxd film slug\n\n### `letterboxd_film_similar`\n\n- **HTTP:** `GET /letterboxd/film/{slug}/similar`\n- **What:** Get films similar to a Letterboxd film. Returns films Letterboxd recommends as similar to the given film. Credential-free public Letterboxd data.\n- **Params:** `limit` (integer, optional) — Max films, default 10, max 50; `slug` (string, **required**) — Letterboxd film slug\n\n### `letterboxd_member`\n\n- **HTTP:** `GET /letterboxd/member/{username}`\n- **What:** Get a Letterboxd member's public profile stats. Returns a member's public profile stats (films watched, lists, following/followers). No private data — everything is visible to a logged-out visitor. Credential-free public Letterboxd data.\n- **Params:** `username` (string, **required**) — Letterboxd username\n\n### `letterboxd_person`\n\n- **HTTP:** `GET /letterboxd/person/{slug}`\n- **What:** Get a Letterboxd person's filmography. Returns a person's Letterboxd filmography for a credit role. Credential-free public Letterboxd data.\n- **Params:** `limit` (integer, optional) — Max films, default 10, max 50; `role` (string, optional) — Credit role, default actor; `slug` (string, **required**) — Letterboxd person slug\n\n### `letterboxd_popular`\n\n- **HTTP:** `GET /letterboxd/popular`\n- **What:** Get a Letterboxd popularity-ranked film chart. Returns a popularity-ranked film chart, optionally scoped to a time window, genre, and/or decade. Credential-free public Letterboxd data.\n- **Params:** `decade` (string, optional) — Decade filter, e.g. 2010s; `genre` (string, optional) — Genre slug filter; `limit` (integer, optional) — Max films, default 10, max 50; `period` (string, optional) — Popularity window, omit for all-time\n\n### `letterboxd_search`\n\n- **HTTP:** `GET /letterboxd/search`\n- **What:** Search Letterboxd. Searches Letterboxd films, people, lists, and tags. Credential-free public Letterboxd data.\n- **Params:** `limit` (integer, optional) — Max results, default 10, max 50; `q` (string, **required**) — Search query; `type` (string, optional) — Optional result type filter\n\n## Rotten Tomatoes (20)\n\n### `rottentomatoes_browse_filters`\n\n- **HTTP:** `GET /rottentomatoes/browse/filters`\n- **What:** Rotten Tomatoes browse filter discovery. Returns every filter and accepted value exposed by the selected live Rotten Tomatoes browse page. Call this before building filtered movie or TV browse requests; values differ by list and update with the site's menus.\n- **Params:** `list` (string, optional) — Browse list: movies_in_theaters, movies_at_home, movies_coming_soon, tv_series_browse\n\n### `rottentomatoes_browse_movies`\n\n- **HTTP:** `GET /rottentomatoes/browse/movies`\n- **What:** Rotten Tomatoes movie discovery rows. Returns normalized movie rows from Rotten Tomatoes' public browse JSON route. Use `/rottentomatoes/browse/filters` to discover current values for each list. Filters accept comma-separated values; pagination uses the opaque `after` cursor from the previous response.\n- **Params:** `affiliates` (string, optional) — Comma-separated streaming/service values from browse/filters; `after` (string, optional) — Opaque next-page cursor returned in data.page_info.end_cursor; `audience` (string, optional) — Comma-separated Popcornmeter values from browse/filters; `critics` (string, optional) — Comma-separated Tomatometer values from browse/filters; `genres` (string, optional) — Comma-separated genre values from browse/filters; `limit` (integer, optional) — Rows to return, default 10, max 30; `list` (string, optional) — Movie browse list: movies_in_theaters, movies_at_home, movies_coming_soon; `ratings` (string, optional) — Comma-separated content ratings from browse/filters; `sort` (string, optional) — Sort value from the selected list's browse/filters response\n\n### `rottentomatoes_browse_tv`\n\n- **HTTP:** `GET /rottentomatoes/browse/tv`\n- **What:** Rotten Tomatoes TV discovery rows. Returns normalized TV series rows from Rotten Tomatoes' public browse JSON route. Use `/rottentomatoes/browse/filters?list=tv_series_browse` to discover current filters; pagination uses the opaque `after` cursor from the previous response.\n- **Params:** `affiliates` (string, optional) — Comma-separated streaming/service values from browse/filters; `after` (string, optional) — Opaque next-page cursor returned in data.page_info.end_cursor; `audience` (string, optional) — Comma-separated Popcornmeter values from browse/filters; `critics` (string, optional) — Comma-separated Tomatometer values from browse/filters; `genres` (string, optional) — Comma-separated genre values from browse/filters; `limit` (integer, optional) — Rows to return, default 10, max 30; `list` (string, optional) — TV browse list: tv_series_browse; `ratings` (string, optional) — Comma-separated content ratings from browse/filters; `sort` (string, optional) — Sort value from browse/filters\n\n### `rottentomatoes_critics_authors`\n\n- **HTTP:** `GET /rottentomatoes/critics/authors`\n- **What:** Rotten Tomatoes critic directory. Returns current or inactive critics from Rotten Tomatoes' public author directory. Browse one letter or search by name; use `next_cursor` as `after` or `previous_cursor` as `before`, as indicated by the corresponding page flag. The letter values come from the live directory controls.\n- **Params:** `after` (string, optional) — Opaque cursor from data.next_cursor; `before` (string, optional) — Opaque cursor from data.previous_cursor; cannot be combined with after; `inactive` (boolean, optional) — Include the site's inactive critics list; `letter` (string, optional) — Directory letter. Omit when using search; default a.; `limit` (integer, optional) — Rows per page, default 100, range 1 to 100; `search` (string, optional) — Search critics by name; cannot be combined with letter\n\n### `rottentomatoes_editorial_content`\n\n- **HTTP:** `GET /rottentomatoes/editorial/content`\n- **What:** Rotten Tomatoes editorial content listing. Lists paginated editorial records from the selected public content type. The pages collection lists public editorial section and campaign indexes. Use the editorial types endpoint to discover accepted type values.\n- **Params:** `include_children` (boolean, optional) — For categories only, include child categories; default false; `limit` (integer, optional) — Rows per page, default 20, range 1 to 100; `operator` (string, optional) — Whether any or all selected terms must match; default OR; `page` (integer, optional) — One-based result page from 1 to 10000; default 1; `query` (string, optional) — Optional text filter; maximum 200 bytes; `taxonomy` (string, optional) — Optional editorial taxonomy; discover type support from /rottentomatoes/editorial/taxonomies; `term_ids` (string, optional) — Comma-separated positive term IDs; required with taxonomy; `type` (string, **required**) — Editorial content type\n\n### `rottentomatoes_editorial_detail`\n\n- **HTTP:** `GET /rottentomatoes/editorial/detail`\n- **What:** Rotten Tomatoes editorial article detail. Returns the public body, paragraphs, headings, links, images, and video embeds from an Editorial article, gallery, guide, on-the-go article, or preview. Discover paths from editorial content collections. The response body_html preserves public Gutenberg/ranked-list markup.\n- **Params:** `path` (string, **required**) — Discovered Editorial content path\n\n### `rottentomatoes_editorial_search`\n\n- **HTTP:** `GET /rottentomatoes/editorial/search`\n- **What:** Rotten Tomatoes editorial search. Searches public Rotten Tomatoes editorial content, including articles and guides. Results come from its anonymous WordPress REST search endpoint and include content subtype plus total-page metadata.\n- **Params:** `limit` (integer, optional) — Rows per page, default 10, range 1 to 100; `page` (integer, optional) — One-based result page from 1 to 10000; default 1; `query` (string, **required**) — Editorial search text; maximum 200 bytes\n\n### `rottentomatoes_editorial_section`\n\n- **HTTP:** `GET /rottentomatoes/editorial/section`\n- **What:** Rotten Tomatoes editorial section archive. Returns the rendered article cards for a discovered editorial page, RT hub, or hub subpage. Discover paths through editorial content types `pages`, `rt-hub`, and `hub-subpage`. Static pages use `articles_page` pagination upstream; hubs use `/page/{n}/`.\n- **Params:** `page` (integer, optional) — One-based page, default 1; `path` (string, **required**) — Discovered editorial section path\n\n### `rottentomatoes_editorial_taxonomies`\n\n- **HTTP:** `GET /rottentomatoes/editorial/taxonomies`\n- **What:** Rotten Tomatoes editorial taxonomy discovery. Returns the complete set of public editorial term vocabularies accepted by the term discovery endpoint, with the content types each taxonomy filters.\n- **Params:** _none_\n\n### `rottentomatoes_editorial_terms`\n\n- **HTTP:** `GET /rottentomatoes/editorial/terms`\n- **What:** Rotten Tomatoes editorial taxonomy terms. Pages public terms from one discovered editorial taxonomy. All taxonomy values are listed by `/rottentomatoes/editorial/taxonomies`; `parent` is accepted only for `categories`, while `offset` is supported by all other taxonomies.\n- **Params:** `exclude` (string, optional) — Comma-separated positive term IDs to exclude; `hide_empty` (boolean, optional) — When true, omit terms with no assigned content; `include` (string, optional) — Comma-separated positive term IDs to include; `limit` (integer, optional) — Terms per page, default 20, range 1 to 100; `offset` (integer, optional) — Zero-based offset; accepted except for categories; `order` (string, optional) — Term sort direction; `orderby` (string, optional) — Term sort key; `page` (integer, optional) — One-based page, default 1; `parent` (integer, optional) — Category parent ID; accepted only for categories; `post` (integer, optional) — Filter to terms assigned to this content record; `search` (string, optional) — Optional term search; maximum 200 bytes; `slug` (string, optional) — Optional term slug or comma-separated slugs; `taxonomy` (string, **required**) — Editorial taxonomy value\n\n### `rottentomatoes_editorial_types`\n\n- **HTTP:** `GET /rottentomatoes/editorial/types`\n- **What:** Rotten Tomatoes editorial content types. Returns the complete live-verified set of editorial type values accepted by the editorial content endpoint.\n- **Params:** _none_\n\n### `rottentomatoes_episode`\n\n- **HTTP:** `GET /rottentomatoes/episode`\n- **What:** Rotten Tomatoes episode detail. Returns normalized Rotten Tomatoes TV episode metadata, scorecard data, parent series/season metadata, and public video metadata from a credential-free public episode page. Pass exactly one of `path` or `url`.\n- **Params:** `path` (string, optional) — Rotten Tomatoes episode path; `url` (string, optional) — Absolute https://www.rottentomatoes.com episode URL\n\n### `rottentomatoes_movie`\n\n- **HTTP:** `GET /rottentomatoes/movie`\n- **What:** Rotten Tomatoes movie detail. Returns normalized Rotten Tomatoes movie metadata, scorecard data, and representative embedded audience reviews. Pass exactly one of `path` or `url`.\n- **Params:** `path` (string, optional) — Rotten Tomatoes movie path; `url` (string, optional) — Absolute https://www.rottentomatoes.com movie URL\n\n### `rottentomatoes_movie_reviews`\n\n- **HTTP:** `GET /rottentomatoes/movie/reviews`\n- **What:** Rotten Tomatoes movie reviews. Returns normalized critic or audience reviews from Rotten Tomatoes public review JSON hydrated by the movie review page, including pagination metadata. Pass exactly one of `path` or `url`. Supported `type` values are `critics`, `top-critics`, `audience`, and `verified-audience`.\n- **Params:** `after` (string, optional) — Pagination cursor from data.page_info.end_cursor; `limit` (integer, optional) — Reviews to return, default 10, max 20; `path` (string, optional) — Rotten Tomatoes movie path; `type` (string, optional) — Review type: critics, top-critics, audience, verified-audience; `url` (string, optional) — Absolute https://www.rottentomatoes.com movie URL\n\n### `rottentomatoes_person`\n\n- **HTTP:** `GET /rottentomatoes/person`\n- **What:** Rotten Tomatoes person detail and filmography. Returns normalized Rotten Tomatoes celebrity/person metadata and filmography rows from public Person JSON-LD and the credential-free filmography module. Pass exactly one of `path` or `url`.\n- **Params:** `path` (string, optional) — Rotten Tomatoes person path; `url` (string, optional) — Absolute https://www.rottentomatoes.com person URL\n\n### `rottentomatoes_search`\n\n- **HTTP:** `GET /rottentomatoes/search`\n- **What:** Rotten Tomatoes movie search. Returns normalized Rotten Tomatoes movie search rows from credential-free server-rendered search HTML.\n- **Params:** `limit` (integer, optional) — Rows to return, default 10, max 20; `query` (string, **required**) — Search query\n\n### `rottentomatoes_season`\n\n- **HTTP:** `GET /rottentomatoes/season`\n- **What:** Rotten Tomatoes season detail. Returns normalized Rotten Tomatoes TV season metadata, scorecard data, parent series metadata, and episode rows from a credential-free public season page. Pass exactly one of `path` or `url`.\n- **Params:** `path` (string, optional) — Rotten Tomatoes season path; `url` (string, optional) — Absolute https://www.rottentomatoes.com season URL\n\n### `rottentomatoes_series`\n\n- **HTTP:** `GET /rottentomatoes/series`\n- **What:** Rotten Tomatoes series detail. Returns normalized Rotten Tomatoes TV series metadata and scorecard data from a credential-free public series page. Pass exactly one of `path` or `url`.\n- **Params:** `path` (string, optional) — Rotten Tomatoes series path; `url` (string, optional) — Absolute https://www.rottentomatoes.com series URL\n\n### `rottentomatoes_sitemap_urls`\n\n- **HTTP:** `GET /rottentomatoes/sitemap/urls`\n- **What:** Rotten Tomatoes sitemap URL page. Returns a page of URLs from one child sitemap. Discover valid `name` values with `rottentomatoes-sitemaps`; use offset/limit to page through the complete sitemap.\n- **Params:** `limit` (integer, optional) — URLs to return, default 100, max 500; `name` (string, **required**) — Sitemap name returned by /rottentomatoes/sitemaps; `offset` (integer, optional) — Zero-based offset, default 0\n\n### `rottentomatoes_sitemaps`\n\n- **HTTP:** `GET /rottentomatoes/sitemaps`\n- **What:** Rotten Tomatoes sitemap discovery. Returns the live sitemap index and every named child sitemap, including movie, TV series, season, episode, person, critic, publication, browse-list, and static route inventories.\n- **Params:** _none_\n\n## Metacritic (10)\n\n### `metacritic_browse`\n\n- **HTTP:** `GET /metacritic/browse`\n- **What:** Browse Metacritic titles. Browse Metacritic titles by content type, optionally filtered by genre and ordered by Metascore, popularity, or release date. Returns paginated title cards with Metascore and user score. Credential-free public Metacritic data.\n- **Params:** `genre` (string, optional) — Genre filter (e.g. Action); `page` (integer, optional) — 1-based page number (default 1); `per_page` (integer, optional) — Results per page (default 24, max 100); `sort` (string, optional) — Sort order; `type` (string, **required**) — Content type\n\n### `metacritic_game`\n\n- **HTTP:** `GET /metacritic/game/{slug}`\n- **What:** Get a Metacritic game. Returns a normalized Metacritic game: Metascore (critic) and user score with sentiment and review counts, genres, per-platform scores, developer/publisher, rating, release date, and trailer. Credential-free public Metacritic data.\n- **Params:** `slug` (string, **required**) — Metacritic game slug\n\n### `metacritic_game_critic_reviews`\n\n- **HTTP:** `GET /metacritic/game/{slug}/critic-reviews`\n- **What:** List a Metacritic game's critic reviews. Returns paginated professional/publication reviews for a game: publication, score, quote, author, platform, and source URL. Credential-free p\n\nFile v1.0.20:skill-card.md\n\n## Description:\n\nResearches movie and TV metadata, cast, ratings, reviews, streaming availability, and box office through the Crawlora API.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nPeople researching movies and TV shows use this skill to compare credits, ratings, reviews, streaming options, and box-office results across public sources.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Movie, TV, review, and streaming searches are sent to Crawlora; sensitive queries or exposed API keys may disclose private information.\n\nMitigation: Keep the API key in the environment and send only public, non-sensitive lookup terms; avoid secrets, confidential projects, and private watch-history analysis.\n\nRisk: The endpoint catalog also contains public Metacritic game lookups outside the skill's main movie and TV purpose.\n\nMitigation: Limit requests to the movie and TV research task and review the chosen endpoint before sending a query.\n\n## Reference(s):\n\n- [Movie & TV research endpoint reference](reference/endpoints.md)\n- [Movie & TV research on ClawHub](https://clawhub.ai/crawlora-org/skills/movie-tv-research)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance]\n\n**Output Format:** [Markdown summaries informed by JSON lookup results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Results depend on the selected public data sources and available Crawlora API credits.]\n\n## Skill Version(s):\n\n1.0.20 (source: server-resolved release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.19: 5 files, 16836 bytes\n\nFiles: reference/endpoints.md (59339b), scripts/crawlora.sh (8488b), skill-card.md (1727b), SKILL.md (4856b), _meta.json (137b)\n\nFile v1.0.19:SKILL.md\n\n---\nname: movie-tv-research\ndescription: Researches movies and TV shows — metadata, cast/crew, ratings, reviews, streaming availability, and box-office performance — via the Crawlora API across IMDb, TMDB, JustWatch, Letterboxd, Rotten Tomatoes, Metacritic, and Box Office Mojo, returning clean JSON. Use when the user asks about a title's cast, ratings/scores, where to stream it, critic or user reviews, or its box-office numbers.\n---\n\n# Movie & TV research\n\nPull title metadata, cast/crew, ratings, streaming availability, reviews, and\nbox-office numbers across seven film/TV data sources as normalized JSON from\nthe Crawlora API — no scraping IMDb pages or parsing streaming-provider HTML.\n\n## When to use this skill\n\n- \"Who's in / who directed <title>?\" / cast, crew, and credits lookups.\n- \"What's <title> rated on IMDb / Rotten Tomatoes / Metacritic / Letterboxd?\"\n- \"Where can I stream <title>?\" (JustWatch offers by provider).\n- \"How did <title> do at the box office?\" (Box Office Mojo).\n- \"Find titles similar to <title>\" or \"what's popular right now.\"\n- Critic vs. audience review comparisons; franchise/genre box-office analysis.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\nPick the source by job:\n\n1. **Identity & credits (IMDb / TMDB)** — search first: `/imdb/search` or\n   `/tmdb/search`; then detail: `/imdb/title` (needs the IMDb id) or\n   `/tmdb/movie/{id}` / `/tmdb/tv/{id}`. Cast/crew: `/imdb/title/credits` or\n   TMDB's title payload. Person pages: `/imdb/name`, `/tmdb/person/{id}`.\n2. **Scores & reviews** — Rotten Tomatoes (`/rottentomatoes/movie`, `/series`,\n   `/movie/reviews`), Metacritic (`/metacritic/movie/{slug}`,\n   `/critic-reviews`, `/user-reviews`), IMDb (`/imdb/title/reviews`),\n   Letterboxd (`/letterboxd/film/{slug}`, `/reviews`, `/rating-histogram`).\n3. **Where to watch (JustWatch)** — `/justwatch/search` → raw id, then\n   `/justwatch/title/offers` (or `/title-by-id` + `/title/offers`) for\n   per-provider streaming/rental/purchase links; `/justwatch/title/similar`\n   for recommendations.\n4. **Box office (Box Office Mojo)** — `/boxofficemojo/title` or `/release`\n   for one film's numbers; `/weekend/domestic`, `/year/domestic`,\n   `/year/worldwide` for charts; `/franchise` / `/genre` / `/brand` for\n   rollups; `/showdown` to compare two releases head-to-head.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Identity + scores:\nscripts/crawlora.sh /imdb/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /tmdb/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /rottentomatoes/search query=\"Dune Part Two\" | jq '.'\n\n# Streaming availability:\nscripts/crawlora.sh /justwatch/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /justwatch/title/offers id=<raw-justwatch-id> | jq '.'\n\n# Box office:\nscripts/crawlora.sh /boxofficemojo/title id=<mojo-title-id> | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every IMDb, TMDB,\nJustWatch, Letterboxd, Rotten Tomatoes, Metacritic, and Box Office Mojo\nendpoint this skill uses.\n\n## Examples\n\n- **Critic-vs-audience gap:** `/metacritic/movie/{slug}` (critic Metascore\n  vs. user score) alongside `/rottentomatoes/movie` (Tomatometer vs.\n  audience score) for the same title.\n- **Where-to-watch fan-out:** `/justwatch/search` → `/justwatch/title/offers`\n  to list every subscription/rent/buy option and price by provider.\n- **Franchise box-office trend:** `/boxofficemojo/franchise` for every\n  entry's opening/lifetime gross, sorted chronologically.\n- **Taste-matching:** `/letterboxd/film/{slug}/similar` or\n  `/tmdb/movie/{id}` (TMDB includes recommendations) for \"more like this.\"\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public title/review/box-office pages.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- **JustWatch uses its own raw GraphQL ids** (not IMDb/TMDB ids) — resolve\n  via `/justwatch/search` or `/justwatch/title/by-id` first.\n- Results are paginated where noted — pass `page` to walk longer lists\n  (reviews, charts, filmographies).\n\nFile v1.0.19:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"movie-tv-research\",\n  \"version\": \"1.0.19\",\n  \"publishedAt\": 1790435587879\n}\n\nFile v1.0.19:reference/endpoints.md\n\n# movie-tv-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**113 endpoints across 7 platform group(s).**\n\n## IMDb (30)\n\n### `imdb_charts`\n\n- **HTTP:** `GET /imdb/charts`\n- **What:** IMDb title charts. Returns normalized rows from public IMDb title charts. Chart values: `top_rated_movies`, `top_rated_tv_shows`, `most_popular_movies`, `most_popular_tv_shows`, `top_rated_english_movies`, `lowest_rated_movies`.\n- **Params:** `chart` (string, optional) — IMDb chart; `limit` (integer, optional) — Rows to return, default 25, max 250\n\n### `imdb_image_types`\n\n- **HTTP:** `GET /imdb/image-types`\n- **What:** IMDb image types. Lists every value the `type` parameter of the IMDb image endpoints accepts: `behind_the_scenes`, `event`, `poster`, `product`, `production_art`, `publicity`, `still_frame`, `unknown`. Each row carries a display label and a short description.\n- **Params:** _none_\n\n### `imdb_name`\n\n- **HTTP:** `GET /imdb/name`\n- **What:** IMDb name detail. Returns normalized public IMDb person metadata and known-for rows. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_name_awards`\n\n- **HTTP:** `GET /imdb/name/awards`\n- **What:** IMDb name awards. Returns normalized public IMDb award rows for a person. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_name_credits`\n\n- **HTTP:** `GET /imdb/name/credits`\n- **What:** IMDb name credits. Returns normalized public IMDb filmography sections for a person. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_name_images`\n\n- **HTTP:** `GET /imdb/name/images`\n- **What:** IMDb name images. Returns image metadata from a person's media index, including the original image URL, dimensions, caption and credited people. Filter by image type with `type`, which accepts a single value or a comma-separated list of: `behind_the_scenes`, `event`, `poster`, `product`, `production_art`, `publicity`, `still_frame`, `unknown`. Omit `type` to return every type. Limit defaults to 50 and clamps to 1000. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `limit` (integer, optional) — Rows to return, default 50, max 1000; `type` (string, optional) — Image type filter, single value or comma-separated list; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_name_videos`\n\n- **HTTP:** `GET /imdb/name/videos`\n- **What:** IMDb name video metadata. Returns public person video metadata and thumbnail URLs only; playback URLs and media manifests are never returned. IMDb caps the upstream slice at 100 and provides no usable continuation cursor, so `total` can exceed returned rows and `has_more` reports that condition. Limit defaults to 50 and clamps to 100. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `limit` (integer, optional) — Rows to return, default 50, max 100; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_search`\n\n- **HTTP:** `GET /imdb/search`\n- **What:** IMDb title search. Returns normalized IMDb title search rows from credential-free public IMDb pages. Limit defaults to 10 and clamps to 20.\n- **Params:** `limit` (integer, optional) — Rows to return, default 10, max 20; `query` (string, **required**) — Search query\n\n### `imdb_search_title`\n\n- **HTTP:** `GET /imdb/search/title`\n- **What:** IMDb advanced title search. Returns normalized IMDb advanced title-search results (imdb.com/search/title/) from a credential-free public IMDb page. At least one filter is required; sort/limit alone are not enough. Limit defaults to 25 and clamps to 50; only IMDb's first rendered page of results is returned (see `total`/`has_more`), there is no deeper cursor pagination. Genre/company/certificate/country/language/keyword/characters/role are include-only lists; there is no exclude support. Unsupported: genre exclude, three curated `groups` values (best-picture-nominee, best-director-nominee, national-film-registry), and the non-plot \"page topic\" search fields.\n- **Params:** `certificates` (string, optional) — Comma-separated `COUNTRY:RATING` certificate pairs, e.g. `US:PG-13`; `characters` (string, optional) — Comma-separated character names; `colors` (string, optional) — Comma-separated color info: `color`, `black_and_white`, `colorized`, `aces`; `companies` (string, optional) — Comma-separated IMDb company ids, format `co########`; `countries` (string, optional) — Comma-separated ISO country codes; `genres` (string, optional) — Comma-separated genres (include-only): `Action`, `Adventure`, `Animation`, `Biography`, `Comedy`, `Crime`, `Documentary`, `Drama`, `Family`, `Fantasy`, `Film-Noir`, `Game-Show`, `History`, `Horror`, `Music`, `Musical`, `Mystery`, `News`, `Reality-TV`, `Romance`, `Sci-Fi`, `Short`, `Sport`, `Talk-Show`, `Thriller`, `War`, `Western`; `groups` (string, optional) — Comma-separated awards/curated-list groups: `oscar_winner`, `oscar_nominee`, `emmy_winner`, `emmy_nominee`, `golden_globe_winner`, `golden_globe_nominee`, `best_picture_winner`, `best_director_winner`, `razzie_winner`, `razzie_nominee`, `top_100`, `top_250`, `top_1000`, `bottom_100`, `bottom_250`, `bottom_1000`; `include_adult` (boolean, optional) — Include adult titles. Defaults to excluded; `keywords` (string, optional) — Comma-separated plot keywords; `languages` (string, optional) — Comma-separated ISO language codes; `limit` (integer, optional) — Rows to return, default 25, max 50; `max_popularity` (integer, optional) — Maximum IMDb popularity rank; `max_runtime` (integer, optional) — Maximum runtime in minutes; `max_user_rating` (number, optional) — Maximum IMDb user rating, 0-10; `max_votes` (integer, optional) — Maximum number of user rating votes; `min_popularity` (integer, optional) — Minimum IMDb popularity rank (1 is most popular); `min_runtime` (integer, optional) — Minimum runtime in minutes; `min_user_rating` (number, optional) — Minimum IMDb user rating, 0-10; `min_votes` (integer, optional) — Minimum number of user rating votes; `plot` (string, optional) — Plot text search term; `release_date_from` (string, optional) — Release date lower bound: YYYY, YYYY-MM, or YYYY-MM-DD; `release_date_to` (string, optional) — Release date upper bound: YYYY, YYYY-MM, or YYYY-MM-DD; `role` (string, optional) — Comma-separated cast/crew IMDb name ids, format `nm########`; `sort` (string, optional) — One of `moviemeter`, `alpha`, `user_rating`, `num_votes`, `boxoffice_gross_us`, `runtime`, `year`, `release_date`; `sort_order` (string, optional) — `asc` or `desc`. Defaults to `asc` when sort is set; `sound_mixes` (string, optional) — Comma-separated sound mix names: `12-Track Digital Sound`, `3 Channel Stereo`, `4-Track Stereo`, `6-Track Stereo`, `70 mm 6-Track`, `AGA Sound System`, `Auro 11.1`, `CDS`, `Chronophone`, `Cinematophone`, `Cinephone`, `Cinerama 7-Track`, `Cinesound`, `D-Cinema 48kHz 5.1`, `Datasat`, `De Forest Phonofilm`, `Digitrac Digital Audio System`, `Dolby`, `Dolby Atmos`, `Dolby Digital`, `Dolby Digital EX`, `Dolby SR`, `Dolby Stereo`, `Dolby Surround 7.1`, `DTS`, `DTS 70 mm`, `DTS Stereo`, `DTS-ES`, `IMAX 6-Track`, `Kinoplasticon`, `LC-Concept Digital Sound`, `Matrix Surround`, `Mono`, `Perspecta Stereo`, `Phono-Kinema`, `SDDS`, `Sensurround`, `Silent`, `Sonics-DDP`, `Sonix`, `Stereo`, `Ultra Stereo`, `Vitaphone`; `title` (string, optional) — Title-name substring match; `title_type` (string, optional) — Comma-separated title types: `feature`, `tvSeries`, `short`, `tvEpisode`, `tvMiniSeries`, `tvMovie`, `tvSpecial`, `tvShort`, `videoGame`, `video`, `musicVideo`, `podcastSeries`, `podcastEpisode`\n\n### `imdb_title`\n\n- **HTTP:** `GET /imdb/title`\n- **What:** IMDb title detail. Returns normalized IMDb title metadata from a credential-free public IMDb title page. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_awards`\n\n- **HTTP:** `GET /imdb/title/awards`\n- **What:** IMDb title awards. Returns normalized public IMDb award rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_box_office`\n\n- **HTTP:** `GET /imdb/title/box-office`\n- **What:** IMDb title box office summary. Returns a title's public box-office summary: lifetime gross by market (domestic, international, worldwide), the domestic opening weekend, and the production budget. IMDb reports each figure independently, so a real title with no box office data (most TV series, many non-theatrical titles) returns `has_box_office: false` with every figure omitted rather than an error. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_company_credits`\n\n- **HTTP:** `GET /imdb/title/company-credits`\n- **What:** IMDb title company credits. Returns normalized public IMDb company-credit sections for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_connections`\n\n- **HTTP:** `GET /imdb/title/connections`\n- **What:** IMDb title connections. Returns a bounded slice of a title's public connections: other titles it references or is referenced by, such as remakes, spin-offs, \"featured in\" clips, and \"edited into\" compilations. `category` is upstream-supplied free text, not a closed enum. IMDb's connections list can run to hundreds or thousands of rows, so `total` can exceed the returned rows and `has_more` reports that condition. Limit defaults to 50 and clamps to 250. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `limit` (integer, optional) — Rows to return, default 50, max 250; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_credits`\n\n- **HTTP:** `GET /imdb/title/credits`\n- **What:** IMDb title credits. Returns normalized public IMDb full cast and crew sections. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_episodes`\n\n- **HTTP:** `GET /imdb/title/episodes`\n- **What:** IMDb title episodes. Returns normalized public IMDb episode rows for a series title. Limit defaults to 10 and clamps to 20. Optional `season` filters the upstream episodes page. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `limit` (integer, optional) — Rows to return, default 10, max 20; `season` (integer, optional) — Season number to request; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_filming_locations`\n\n- **HTTP:** `GET /imdb/title/filming-locations`\n- **What:** IMDb title filming locations. Returns normalized public IMDb filming-location rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_goofs`\n\n- **HTTP:** `GET /imdb/title/goofs`\n- **What:** IMDb title goofs. Returns normalized public IMDb goof rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_images`\n\n- **HTTP:** `GET /imdb/title/images`\n- **What:** IMDb title images. Returns image metadata from a title's media index, including the original image URL, dimensions, caption and credited people. Filter by image type with `type`, which accepts a single value or a comma-separated list of: `behind_the_scenes`, `event`, `poster`, `product`, `production_art`, `publicity`, `still_frame`, `unknown`. Omit `type` to return every type. Limit defaults to 50 and clamps to 1000. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `limit` (integer, optional) — Rows to return, default 50, max 1000; `type` (string, optional) — Image type filter, single value or comma-separated list; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_keywords`\n\n- **HTTP:** `GET /imdb/title/keywords`\n- **What:** IMDb title keywords. Returns normalized public IMDb keyword rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_parental_guide`\n\n- **HTTP:** `GET /imdb/title/parental-guide`\n- **What:** IMDb title parental guide. Returns normalized public IMDb parental-guide categories and severity signals. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_public_facts_analysis`\n\n- **HTTP:** `GET /imdb/title/public-facts-analysis`\n- **What:** IMDb title public facts analysis. Returns derived public-page summary metrics for IMDb trivia, goofs, quotes, keywords, filming locations, and company credits. This endpoint is not viewing advice. Pass exactly one of `id` or `url`. The six sections are gathered from six independent sources, so a section that cannot be fetched is omitted and named in `missing_sections` with `partial` set to `true`, rather than failing the whole response; an error is returned only when no section could be fetched. Callers that require a complete analysis should check `partial`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_quotes`\n\n- **HTTP:** `GET /imdb/title/quotes`\n- **What:** IMDb title quotes. Returns normalized public IMDb quote rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_ratings`\n\n- **HTTP:** `GET /imdb/title/ratings`\n- **What:** IMDb title ratings breakdown. Returns IMDb's aggregate rating, vote count, ten rating buckets, and country rating summaries. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute IMDb title URL\n\n### `imdb_title_release_info`\n\n- **HTTP:** `GET /imdb/title/release-info`\n- **What:** IMDb title release info. Returns normalized public IMDb release date rows and alternate titles. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_reviews`\n\n- **HTTP:** `GET /imdb/title/reviews`\n- **What:** IMDb title user reviews. Returns normalized public IMDb user review rows. Limit defaults to 10 and clamps to 20. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `limit` (integer, optional) — Rows to return, default 10, max 20; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_similar`\n\n- **HTTP:** `GET /imdb/title/similar`\n- **What:** IMDb similar titles. Returns normalized titles from IMDb's public More like this recommendations. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute IMDb title URL\n\n### `imdb_title_technical_specs`\n\n- **HTTP:** `GET /imdb/title/technical-specs`\n- **What:** IMDb title technical specs. Returns normalized public IMDb technical specifications such as runtime, sound mix, color, and aspect ratio. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_trivia`\n\n- **HTTP:** `GET /imdb/title/trivia`\n- **What:** IMDb title trivia. Returns normalized public IMDb trivia rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_videos`\n\n- **HTTP:** `GET /imdb/title/videos`\n- **What:** IMDb title video metadata. Returns public title video metadata and thumbnail URLs only; playback URLs and media manifests are never returned. IMDb server-truncates this connection and exposes no usable continuation cursor, so `total` can exceed returned rows and `has_more` reports that condition. Limit defaults to 50 and clamps to 100. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `limit` (integer, optional) — Rows to return, default 50, max 100; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n## TMDB (9)\n\n### `tmdb_collection`\n\n- **HTTP:** `GET /tmdb/collection/{id}`\n- **What:** Get a TMDB collection. Returns a normalized TMDB collection (franchise grouping), including its overview and server-rendered member movies. Credential-free public TMDB data.\n- **Params:** `id` (string, **required**) — TMDB collection id or id-slug\n\n### `tmdb_genres`\n\n- **HTTP:** `GET /tmdb/genres`\n- **What:** List TMDB browse genres. Returns every genre ID advertised by TMDB's public movie and TV browse pages. Use movie values only with movie list filters and TV values only with TV list filters. Credential-free public TMDB data.\n- **Params:** _none_\n\n### `tmdb_movie`\n\n- **HTTP:** `GET /tmdb/movie/{id}`\n- **What:** Get a TMDB movie. Returns a normalized TMDB movie: overview, tagline, genres, countries, runtime, budget/revenue, top-billed cast, top crew (director/writer), and aggregate rating. Credential-free public TMDB data (themoviedb.org) — not the official api.themoviedb.org, which requires an API key.\n- **Params:** `id` (string, **required**) — TMDB movie id\n\n### `tmdb_movie_list`\n\n- **HTTP:** `GET /tmdb/movie/list`\n- **What:** Get a TMDB movie chart. Returns a TMDB movie chart (popular, top rated, now playing, or upcoming). Credential-free public TMDB data.\n- **Params:** `category` (string, optional) — Movie chart, default popular; `date_from` (string, optional) — Release date lower bound (YYYY-MM-DD); `date_to` (string, optional) — Release date upper bound (YYYY-MM-DD); `include_adult` (boolean, optional) — Include adult titles; `limit` (integer, optional) — Max movies, default 10, max 20; `max_rating` (number, optional) — Maximum rating, 0-10; `max_runtime` (integer, optional) — Maximum runtime in minutes; `min_rating` (number, optional) — Minimum rating, 0-10; `min_runtime` (integer, optional) — Minimum runtime in minutes; `min_votes` (integer, optional) — Minimum vote count; `original_language` (string, optional) — Two-letter original-language code; `page` (integer, optional) — 1-based page, default 1; `sort_by` (string, optional) — Sort order; `with_genres` (string, optional) — Comma- or pipe-separated movie genre ids: 28,12,16,35,80,99,18,10751,14,36,27,10402,9648,10749,878,10770,53,10752,37\n\n### `tmdb_person`\n\n- **HTTP:** `GET /tmdb/person/{id}`\n- **What:** Get a TMDB person. Returns a normalized TMDB person: biography, birth date, photo, and filmography (movie and TV credits). Credential-free public TMDB data.\n- **Params:** `id` (string, **required**) — TMDB person id; `limit` (integer, optional) — Max filmography credits, default 10, max 20\n\n### `tmdb_person_list`\n\n- **HTTP:** `GET /tmdb/person/list`\n- **What:** List popular people on TMDB. Returns one page from TMDB's Popular People directory, including each person's id, name, known-for titles, profile image, and detail URL. Credential-free public TMDB data.\n- **Params:** `limit` (integer, optional) — Max people, default 10, max 20; `page` (integer, optional) — 1-based page, default 1\n\n### `tmdb_search`\n\n- **HTTP:** `GET /tmdb/search`\n- **What:** Search TMDB. Searches TMDB movies, TV shows, people, and collections. An unscoped query interleaves results across all four types rather than returning whichever type happens to rank first upstream. Credential-free public TMDB data.\n- **Params:** `limit` (integer, optional) — Max results, default 10, max 20; `page` (integer, optional) — 1-based results page, default 1; `query` (string, **required**) — Search query; `type` (string, optional) — Optional result type filter\n\n### `tmdb_tv`\n\n- **HTTP:** `GET /tmdb/tv/{id}`\n- **What:** Get a TMDB TV show. Returns a normalized TMDB TV show: overview, tagline, genres, countries, episode count, first/last air year, top-billed cast, top crew (creator), and aggregate rating. Credential-free public TMDB data.\n- **Params:** `id` (string, **required**) — TMDB TV show id\n\n### `tmdb_tv_list`\n\n- **HTTP:** `GET /tmdb/tv/list`\n- **What:** Get a TMDB TV chart. Returns a TMDB TV chart (popular, top rated, airing today, or on the air). Credential-free public TMDB data.\n- **Params:** `category` (string, optional) — TV chart, default popular; `date_from` (string, optional) — First-air date lower bound (YYYY-MM-DD); `date_to` (string, optional) — First-air date upper bound (YYYY-MM-DD); `include_adult` (boolean, optional) — Include adult titles; `limit` (integer, optional) — Max shows, default 10, max 20; `max_rating` (number, optional) — Maximum rating, 0-10; `max_runtime` (integer, optional) — Maximum runtime in minutes; `min_rating` (number, optional) — Minimum rating, 0-10; `min_runtime` (integer, optional) — Minimum runtime in minutes; `min_votes` (integer, optional) — Minimum vote count; `original_language` (string, optional) — Two-letter original-language code; `page` (integer, optional) — 1-based page, default 1; `sort_by` (string, optional) — Sort order; `with_genres` (string, optional) — Comma- or pipe-separated TV genre ids: 10759,16,35,80,99,18,10751,10762,9648,10763,10764,10765,10766,10767,10768,37\n\n## JustWatch (21)\n\n### `justwatch_age_certifications`\n\n- **HTTP:** `GET /justwatch/age-certifications`\n- **What:** Get JustWatch age certifications. Returns JustWatch age certification technical names for a country.\n- **Params:** `country` (string, optional) — Two-letter country code\n\n### `justwatch_discover`\n\n- **HTTP:** `GET /justwatch/discover`\n- **What:** Discover JustWatch titles. Returns popular movies and shows filtered by optional genre short names, provider short names, production countries, monetization types, and release year bounds. Combine `providers` with `production_countries` to build charts such as most popular Korean or Japanese titles on a given service. Type accepts only `all`, `movie`, or `show`; monetization_types accepts only `FLATRATE`, `FREE`, `ADS`, `RENT`, or `BUY`.\n- **Params:** `country` (string, optional) — Two-letter country code; `genres` (string, optional) — Comma-separated JustWatch genre short names; `language` (string, optional) — Two-letter language code; `limit` (integer, optional) — Maximum results, defaults to 20 and clamps to 50; `monetization_types` (string, optional) — Comma-separated monetization types: FLATRATE, FREE, ADS, RENT, BUY; `production_countries` (string, optional) — Comma-separated two-letter ISO production-country codes; `providers` (string, optional) — Comma-separated JustWatch provider short names; `type` (string, optional) — Title type: all, movie, show; `year_max` (integer, optional) — Maximum release year; `year_min` (integer, optional) — Minimum release year\n\n### `justwatch_episode_by_id`\n\n- **HTTP:** `GET /justwatch/episode/by-id`\n- **What:** Get JustWatch episode by raw id. Looks up an episode by raw JustWatch GraphQL id such as `tse5550494` and returns normalized metadata and offers.\n- **Params:** `country` (string, optional) — Two-letter country code; `id` (string, **required**) — Raw JustWatch episode id matching tse[0-9]+; `language` (string, optional) — Two-letter language code\n\n### `justwatch_episode_offers`\n\n- **HTTP:** `GET /justwatch/episode/offers`\n- **What:** Get JustWatch episode offers. Returns normalized offers for a raw JustWatch episode id across one to five comma-separated country codes.\n- **Params:** `countries` (string, optional) — One to five comma-separated two-letter country codes; `id` (string, **required**) — Raw JustWatch episode id matching tse[0-9]+; `language` (string, optional) — Two-letter language code\n\n### `justwatch_genre_titles`\n\n- **HTTP:** `GET /justwatch/genre/titles`\n- **What:** Get JustWatch genre titles. Returns popular titles for one JustWatch genre short name such as `act`. Type accepts only `all`, `movie`, or `show`.\n- **Params:** `country` (string, optional) — Two-letter country code; `genre` (string, **required**) — JustWatch genre short name; `language` (string, optional) — Two-letter language code; `limit` (integer, optional) — Maximum results, defaults to 20 and clamps to 50; `type` (string, optional) — Title type: all, movie, show\n\n### `justwatch_genres`\n\n- **HTTP:** `GET /justwatch/genres`\n- **What:** Get JustWatch genres. Returns JustWatch genre short names and localized translations.\n- **Params:** `language` (string, optional) — Two-letter language code\n\n### `justwatch_monetization_titles`\n\n- **HTTP:** `GET /justwatch/monetization/titles`\n- **What:** Get JustWatch monetization titles. Returns popular titles for one monetization type. monetization_type accepts only `FLATRATE`, `FREE`, `ADS`, `RENT`, or `BUY`; type accepts only `all`, `movie`, or `show`.\n- **Params:** `country` (string, optional) — Two-letter country code; `language` (string, optional) — Two-letter language code; `limit` (integer, optional) — Maximum results, defaults to 20 and clamps to 50; `monetization_type` (string, **required**) — Monetization type: FLATRATE, FREE, ADS, RENT, BUY; `type` (string, optional) — Title type: all, movie, show\n\n### `justwatch_new`\n\n- **HTTP:** `GET /justwatch/new`\n- **What:** Get new JustWatch titles. Returns newly available movies and shows from the public JustWatch website GraphQL endpoint. Type accepts only `all`, `movie`, or `show`; limit defaults to 20 and clamps to 50.\n- **Params:** `country` (string, optional) — Two-letter country code; `language` (string, optional) — Two-letter language code; `limit` (integer, optional) — Maximum results, defaults to 20 and clamps to 50; `type` (string, optional) — Title type: all, movie, show\n\n### `justwatch_popular`\n\n- **HTTP:** `GET /justwatch/popular`\n- **What:** Get popular JustWatch titles. Returns popular movies and shows from the public JustWatch website GraphQL endpoint. Type accepts only `all`, `movie`, or `show`; limit defaults to 20 and clamps to 50.\n- **Params:** `country` (string, optional) — Two-letter country code; `cursor` (string, optional) — Opaque next_cursor from the prior response; omit for the first page; `language` (string, optional) — Two-letter language code; `limit` (integer, optional) — Maximum results, defaults to 20 and clamps to 50; `type` (string, optional) — Title type: all, movie, show\n\n### `justwatch_provider_titles`\n\n- **HTTP:** `GET /justwatch/provider/titles`\n- **What:** Get JustWatch provider titles. Returns popular movie/show titles available through a JustWatch provider short name such as `nfx`.\n- **Params:** `country` (string, optional) — Two-letter country code; `language` (string, optional) — Two-letter language code; `limit` (integer, optional) — Maximum results, defaults to 20 and clamps to 50; `provider` (string, **required**) — JustWatch provider short name; `type` (string, optional) — Title type: all, movie, show\n\n### `justwatch_providers`\n\n- **HTTP:** `GET /justwatch/providers`\n- **What:** Get JustWatch providers. Returns the credential-free public JustWatch provider catalog for a country.\n- **Params:** `country` (string, optional) — Two-letter country code\n\n### `justwatch_search`\n\n- **HTTP:** `GET /justwatch/search`\n- **What:** Search JustWatch titles. Searches JustWatch titles using the public credential-free website GraphQL endpoint. Country must be a two-letter ISO code such as `US`; language must be a two-letter code such as `en`.\n- **Params:** `country` (string, optional) — Two-letter country code; `language` (string, optional) — Two-letter language code; `limit` (integer, optional) — Maximum results, defaults to 10 and clamps to 25; `query` (string, **required**) — Search query\n\n### `justwatch_season_by_id`\n\n- **HTTP:** `GET /justwatch/season/by-id`\n- **What:** Get JustWatch season by raw id. Looks up a season by raw JustWatch GraphQL id such as `tss297253`.\n- **Params:** `country` (string, optional) — Two-letter country code; `id` (string, **required**) — Raw JustWatch season id matching tss[0-9]+; `language` (string, optional) — Two-letter language code\n\n### `justwatch_season_episodes`\n\n- **HTTP:** `GET /justwatch/season/episodes`\n- **What:** Get JustWatch season episodes. Returns episodes and normalized episode offers for a raw JustWatch season id such as `tss297253`.\n- **Params:** `country` (string, optional) — Two-letter country code; `language` (string, optional) — Two-letter language code; `season_id` (string, **required**) — Raw JustWatch season id matching tss[0-9]+\n\n### `justwatch_show_seasons`\n\n- **HTTP:** `GET /justwatch/show/seasons`\n- **What:** Get JustWatch show seasons. Returns seasons for a raw JustWatch show id such as `ts287292`.\n- **Params:** `country` (string, optional) — Two-letter country code; `language` (string, optional) — Two-letter language code; `show_id` (string, **required**) — Raw JustWatch show id matching ts[0-9]+\n\n### `justwatch_title`\n\n- **HTTP:** `GET /justwatch/title`\n- **What:** Get JustWatch title details. Fetches a JustWatch title page and returns normalized metadata and current offers. Pass exactly one of `path` or `url`.\n- **Params:** `path` (string, optional) — JustWatch title path; `url` (string, optional) — Absolute https://www.justwatch.com title URL\n\n### `justwatch_title_analysis`\n\n- **HTTP:** `GET /justwatch/title/analysis`\n- **What:** Analyze JustWatch title availability. Fetches a JustWatch title page and summarizes provider availability, monetization buckets, formats, price ranges, and best rent/buy/free/subscription options. Pass exactly one of `path` or `url`.\n- **Params:** `path` (string, optional) — JustWatch title path; `url` (string, optional) — Absolute https://www.justwatch.com title URL\n\n### `justwatch_title_by_id`\n\n- **HTTP:** `GET /justwatch/title/by-id`\n- **What:** Get JustWatch title by raw id. Looks up a movie or show by raw JustWatch GraphQL id such as `tm92641` or `ts287292`.\n- **Params:** `country` (string, optional) — Two-letter country code; `id` (string, **required**) — Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+; `language` (string, optional) — Two-letter language code\n\n### `justwatch_title_media`\n\n- **HTTP:** `GET /justwatch/title/media`\n- **What:** Get JustWatch title media. Returns normalized credits, clips, and backdrops for a raw JustWatch movie/show id such as `tm92641`.\n- **Params:** `country` (string, optional) — Two-letter country code; `id` (string, **required**) — Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+; `language` (string, optional) — Two-letter language code\n\n### `justwatch_title_offers`\n\n- **HTTP:** `GET /justwatch/title/offers`\n- **What:** Get JustWatch title offers. Returns normalized offers for a raw JustWatch movie/show id across one to five comma-separated country codes.\n- **Params:** `countries` (string, optional) — One to five comma-separated two-letter country codes; `id` (string, **required**) — Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+; `language` (string, optional) — Two-letter language code\n\n### `justwatch_title_similar`\n\n- **HTTP:** `GET /justwatch/title/similar`\n- **What:** Get similar JustWatch titles. Returns similar titles for a raw JustWatch movie/show id such as `tm92641`.\n- **Params:** `country` (string, optional) — Two-letter country code; `id` (string, **required**) — Raw JustWatch movie/show id matching tm[0-9]+ or ts[0-9]+; `language` (string, optional) — Two-letter language code; `limit` (integer, optional) — Maximum results, defaults to 10 and clamps to 25\n\n## Letterboxd (8)\n\n### `letterboxd_film`\n\n- **HTTP:** `GET /letterboxd/film/{slug}`\n- **What:** Get a Letterboxd film. Returns a normalized Letterboxd film: synopsis, director, cast, genres, countries, languages, runtime, and aggregate member rating. Credential-free public Letterboxd data (letterboxd.com), parsed from the film page's schema.org structured data.\n- **Params:** `slug` (string, **required**) — Letterboxd film slug\n\n### `letterboxd_film_rating_histogram`\n\n- **HTTP:** `GET /letterboxd/film/{slug}/rating-histogram`\n- **What:** Get a Letterboxd film's rating distribution. Returns a film's full star-rating distribution (0.5 to 5.0 in half-star buckets) with counts and percentages. Credential-free public Letterboxd data.\n- **Params:** `slug` (string, **required**) — Letterboxd film slug\n\n### `letterboxd_film_reviews`\n\n- **HTTP:** `GET /letterboxd/film/{slug}/reviews`\n- **What:** Get a Letterboxd film's popular reviews. Returns a film's popular reviews (reviewer, rating, date, text, like/comment counts, spoiler flag). Credential-free public Letterboxd data.\n- **Params:** `limit` (integer, optional) — Max reviews, default 10, max 50; `slug` (string, **required**) — Letterboxd film slug\n\n### `letterboxd_film_similar`\n\n- **HTTP:** `GET /letterboxd/film/{slug}/similar`\n- **What:** Get films similar to a Letterboxd film. Returns films Letterboxd recommends as similar to the given film. Credential-free public Letterboxd data.\n- **Params:** `limit` (integer, optional) — Max films, default 10, max 50; `slug` (string, **required**) — Letterboxd film slug\n\n### `letterboxd_member`\n\n- **HTTP:** `GET /letterboxd/member/{username}`\n- **What:** Get a Letterboxd member's public profile stats. Returns a member's public profile stats (films watched, lists, following/followers). No private data — everything is visible to a logged-out visitor. Credential-free public Letterboxd data.\n- **Params:** `username` (string, **required**) — Letterboxd username\n\n### `letterboxd_person`\n\n- **HTTP:** `GET /letterboxd/person/{slug}`\n- **What:** Get a Letterboxd person's filmography. Returns a person's Letterboxd filmography for a credit role. Credential-free public Letterboxd data.\n- **Params:** `limit` (integer, optional) — Max films, default 10, max 50; `role` (string, optional) — Credit role, default actor; `slug` (string, **required**) — Letterboxd person slug\n\n### `letterboxd_popular`\n\n- **HTTP:** `GET /letterboxd/popular`\n- **What:** Get a Letterboxd popularity-ranked film chart. Returns a popularity-ranked film chart, optionally scoped to a time window, genre, and/or decade. Credential-free public Letterboxd data.\n- **Params:** `decade` (string, optional) — Decade filter, e.g. 2010s; `genre` (string, optional) — Genre slug filter; `limit` (integer, optional) — Max films, default 10, max 50; `period` (string, optional) — Popularity window, omit for all-time\n\n### `letterboxd_search`\n\n- **HTTP:** `GET /letterboxd/search`\n- **What:** Search Letterboxd. Searches Letterboxd films, people, lists, and tags. Credential-free public Letterboxd data.\n- **Params:** `limit` (integer, optional) — Max results, default 10, max 50; `q` (string, **required**) — Search query; `type` (string, optional) — Optional result type filter\n\n## Rotten Tomatoes (14)\n\n### `rottentomatoes_browse_filters`\n\n- **HTTP:** `GET /rottentomatoes/browse/filters`\n- **What:** Rotten Tomatoes browse filter discovery. Returns every filter and accepted value exposed by the selected live Rotten Tomatoes browse page. Call this before building filtered movie or TV browse requests; values differ by list and update with the site's menus.\n- **Params:** `list` (string, optional) — Browse list: movies_in_theaters, movies_at_home, movies_coming_soon, tv_series_browse\n\n### `rottentomatoes_browse_movies`\n\n- **HTTP:** `GET /rottentomatoes/browse/movies`\n- **What:** Rotten Tomatoes movie discovery rows. Returns normalized movie rows from Rotten Tomatoes' public browse JSON route. Use `/rottentomatoes/browse/filters` to discover current values for each list. Filters accept comma-separated values; pagination uses the opaque `after` cursor from the previous response.\n- **Params:** `affiliates` (string, optional) — Comma-separated streaming/service values from browse/filters; `after` (string, optional) — Opaque next-page cursor returned in data.page_info.end_cursor; `audience` (string, optional) — Comma-separated Popcornmeter values from browse/filters; `critics` (string, optional) — Comma-separated Tomatometer values from browse/filters; `genres` (string, optional) — Comma-separated genre values from browse/filters; `limit` (integer, optional) — Rows to return, default 10, max 30; `list` (string, optional) — Movie browse list: movies_in_theaters, movies_at_home, movies_coming_soon; `ratings` (string, optional) — Comma-separated content ratings from browse/filters; `sort` (string, optional) — Sort value from the selected list's browse/filters response\n\n### `rottentomatoes_browse_tv`\n\n- **HTTP:** `GET /rottentomatoes/browse/tv`\n- **What:** Rotten Tomatoes TV discovery rows. Returns normalized TV series rows from Rotten Tomatoes' public browse JSON route. Use `/rottentomatoes/browse/filters?list=tv_series_browse` to discover current filters; pagination uses the opaque `after` cursor from the previous response.\n- **Params:** `affiliates` (string, optional) — Comma-separated streaming/service values from browse/filters; `after` (string, optional) — Opaque next-page cursor returned in data.page_info.end_cursor; `audience` (string, optional) — Comma-separated Popcornmeter values from browse/filters; `critics` (string, optional) — Comma-separated Tomatometer values from browse/filters; `genres` (string, optional) — Comma-separated genre values from browse/filters; `limit` (integer, optional) — Rows to return, default 10, max 30; `list` (string, optional) — TV browse list: tv_series_browse; `ratings` (string, optional) — Comma-separated content ratings from browse/filters; `sort` (string, optional) — Sort value from browse/filters\n\n### `rottentomatoes_critics_authors`\n\n- **HTTP:** `GET /rottentomatoes/critics/authors`\n- **What:** Rotten Tomatoes critic directory. Returns current or inactive critics from Rotten Tomatoes' public author directory. Browse one letter or search by name; use `next_cursor` as `after` or `previous_cursor` as `before`, as indicated by the corresponding page flag. The letter values come from the live directory controls.\n- **Params:** `after` (string, optional) — Opaque cursor from data.next_cursor; `before` (string, optional) — Opaque cursor from data.previous_cursor; cannot be combined with after; `inactive` (boolean, optional) — Include the site's inactive critics list; `letter` (string, optional) — Directory letter. Omit when using search; default a.; `limit` (integer, optional) — Rows per page, default 100, range 1 to 100; `search` (string, optional) — Search critics by name; cannot be combined with letter\n\n### `rottentomatoes_editorial_search`\n\n- **HTTP:** `GET /rottentomatoes/editorial/search`\n- **What:** Rotten Tomatoes editorial search. Searches public Rotten Tomatoes editorial content, including articles and guides. Results come from its anonymous WordPress REST search endpoint and include content subtype plus total-page metadata.\n- **Params:** `limit` (integer, optional) — Rows per page, default 10, range 1 to 100; `page` (integer, optional) — One-based result page from 1 to 10000; default 1; `query` (string, **required**) — Editorial search text; maximum 200 bytes\n\n### `rottentomatoes_episode`\n\n- **HTTP:** `GET /rottentomatoes/episode`\n- **What:** Rotten Tomatoes episode detail. Returns normalized Rotten Tomatoes TV episode metadata, scorecard data, parent series/season metadata, and public video metadata from a credential-free public episode page. Pass exactly one of `path` or `url`.\n- **Params:** `path` (string, optional) — Rotten Tomatoes episode path; `url` (string, optional) — Absolute https://www.rottentomatoes.com episode URL\n\n### `rottentomatoes_movie`\n\n- **HTTP:** `GET /rottentomatoes/movie`\n- **What:** Rotten Tomatoes movie detail. Returns normalized Rotten Tomatoes movie metadata, scorecard data, and representative embedded audience reviews. Pass exactly one of `path` or `url`.\n- **Params:** `path` (string, optional) — Rotten Tomatoes movie path; `url` (string, optional) — Absolute https://www.rottentomatoes.com movie URL\n\n### `rottentomatoes_movie_reviews`\n\n- **HTTP:** `GET /rottentomatoes/movie/reviews`\n- **What:** Rotten Tomatoes movie reviews. Returns normalized critic or audience reviews from Rotten Tomatoes public review JSON hydrated by the movie review page, including pagination metadata. Pass exactly one of `path` or `url`. Supported `type` values are `critics`, `top-critics`, `audience`, and `verified-audience`.\n- **Params:** `after` (string, optional) — Pagination cursor from data.page_info.end_cursor; `limit` (integer, optional) — Reviews to return, default 10, max 20; `path` (string, optional) — Rotten Tomatoes movie path; `type` (string, optional) — Review type: critics, top-critics, audience, verified-audience; `url` (string, optional) — Absolute https://www.rottentomatoes.com movie URL\n\n### `rottentomatoes_person`\n\n- **HTTP:** `GET /rottentomatoes/person`\n- **What:** Rotten Tomatoes person detail and filmography. Returns normalized Rotten Tomatoes celebrity/person metadata and filmography rows from public Person JSON-LD and the credential-free filmography module. Pass exactly one of `path` or `url`.\n- **Params:** `path` (string, optional) — Rotten Tomatoes person path; `url` (string, optional) — Absolute https://www.rottentomatoes.com person URL\n\n### `rottentomatoes_search`\n\n- **HTTP:** `GET /rottentomatoes/search`\n- **What:** Rotten Tomatoes movie search. Returns normalized Rotten Tomatoes movie search rows from credential-free server-rendered search HTML.\n- **Params:** `limit` (integer, optional) — Rows to return, default 10, max 20; `query` (string, **required**) — Search query\n\n### `rottentomatoes_season`\n\n- **HTTP:** `GET /rottentomatoes/season`\n- **What:** Rotten Tomatoes season detail. Returns normalized Rotten Tomatoes TV season metadata, scorecard data, parent series metadata, and episode rows from a credential-free public season page. Pass exactly one of `path` or `url`.\n- **Params:** `path` (string, optional) — Rotten Tomatoes season path; `url` (string, optional) — Absolute https://www.rottentomatoes.com season URL\n\n### `rottentomatoes_series`\n\n- **HTTP:** `GET /rottentomatoes/series`\n- **What:** Rotten Tomatoes series detail. Returns normalized Rotten Tomatoes TV series metadata and scorecard data from a credential-free public series page. Pass exactly one of `path` or `url`.\n- **Params:** `path` (string, optional) — Rotten Tomatoes series path; `url` (string, optional) — Absolute https://www.rottentomatoes.com series URL\n\n### `rottentomatoes_sitemap_urls`\n\n- **HTTP:** `GET /rottentomatoes/sitemap/urls`\n- **What:** Rotten Tomatoes sitemap URL page. Returns a page of URLs from one child sitemap. Discover valid `name` values with `rottentomatoes-sitemaps`; use offset/limit to page through the complete sitemap.\n- **Params:** `limit` (integer, optional) — URLs to return, default 100, max 500; `name` (string, **required**) — Sitemap name returned by /rottentomatoes/sitemaps; `offset` (integer, optional) — Zero-based offset, default 0\n\n### `rottentomatoes_sitemaps`\n\n- **HTTP:** `GET /rottentomatoes/sitemaps`\n- **What:** Rotten Tomatoes sitemap discovery. Returns the live sitemap index and every named child sitemap, including movie, TV series, season, episode, person, critic, publication, browse-list, and static route inventories.\n- **Params:** _none_\n\n## Metacritic (10)\n\n### `metacritic_browse`\n\n- **HTTP:** `GET /metacritic/browse`\n- **What:** Browse Metacritic titles. Browse Metacritic titles by content type, optionally filtered by genre and ordered by Metascore, popularity, or release date. Returns paginated title cards with Metascore and user score. Credential-free public Metacritic data.\n- **Params:** `genre` (string, optional) — Genre filter (e.g. Action); `page` (integer, optional) — 1-based page number (default 1); `per_page` (integer, optional) — Results per page (default 24, max 100); `sort` (string, optional) — Sort order; `type` (string, **required**) — Content type\n\n### `metacritic_game`\n\n- **HTTP:** `GET /metacritic/game/{slug}`\n- **What:** Get a Metacritic game. Returns a normalized Metacritic game: Metascore (critic) and user score with sentiment and review counts, genres, per-platform scores, developer/publisher, rating, release date, and trailer. Credential-free public Metacritic data.\n- **Params:** `slug` (string, **required**) — Metacritic game slug\n\n### `metacritic_game_critic_reviews`\n\n- **HTTP:** `GET /metacritic/game/{slug}/critic-reviews`\n- **What:** List a Metacritic game's critic reviews. Returns paginated professional/publication reviews for a game: publication, score, quote, author, platform, and source URL. Credential-free public Metacritic data.\n- **Params:** `page` (integer, optional) — 1-based page number (default 1); `per_page` (integer, optional) — Results per page (default 20, max 50); `slug` (string, **required**) — Metacritic game slug; `sort` (string, optional) — Sort order\n\n### `metacritic_game_user_reviews`\n\n- **HTTP:** `GET /metacritic/game/{slug}/user-reviews`\n- **What:** List a Metacritic game's user reviews. Returns paginated user reviews for a game: author, score (0-10), quote, date, platform, helpfulness, and spoiler flag. Credential-free public Metacritic data.\n- **Params:** `page` (integer, optional) — 1-based page number (default 1); `per_page` (integer, optional) — Results per page (default 20, max 50); `slug` (string, **required**) — Metacritic game slug; `sort` (string, optional) — Sort order\n\n### `metacritic_movie`\n\n- **HTTP:** `GET /metacritic/movie/{slug}`\n- **What:** Get a Metacritic movie. Returns a normalized Metacritic movie: Metascore (critic) and user score with sentiment and review counts, genres, cast/crew, rating, runtime, release date, IMDb id, and trailer. Credential-free public Metacritic data.\n- **Params:** `slug` (string, **required**) — Metacritic movie slug\n\n### `metacritic_movie_critic_reviews`\n\n- **HTTP:** `GET /metacritic/movie/{slug}/critic-reviews`\n- **What:** List a Metacritic movie's critic reviews. Returns paginated professional/publication reviews for a movie: publication, score, quote, author, and source URL. Credential-free public Metacritic data.\n- **Params:** `page` (integer, optional) — 1-based page number (default 1); `per_page` (integer, optional) — Results per page (default 20, max 50); `slug` (string, **required**) — Metacritic movie slug; `sort` (string, optional) — Sort order\n\n### `metacritic_movie_user_reviews`\n\n- **HTTP:** `GET /metacritic/movie/{slug}/user-reviews`\n- **What:** List a Metacritic movie's user reviews. Returns paginated user reviews for a movie: author, score (0-10), quote, date, helpfulness, and spoiler flag. Credential-free public Metacritic data.\n- **Params:** `page` (integer, optional) — 1-based page number (default 1); `per_page` (integer, optional) — Results per page (default 20, max 50); `slug` (string, **required**) — Metacritic movie slug; `sort` (string, optional) — Sort order\n\n### `metacritic_tv`\n\n- **HTTP:** `GET /metacritic/tv/{slug}`\n- **What:** Get a Metacritic TV show. Returns a normalized Metacritic TV show: Metascore (critic) and user score with sentiment and review counts, genres, networks, season count, rating, release date, IMDb id, and trailer. Credential-free public Metacritic data.\n- **Params:** `slug` (string, **required**) — Metacritic TV show slug\n\n### `metacritic_tv_critic_reviews`\n\n- **HTTP:** `GET /metacritic/tv/{slug}/critic-reviews`\n- **What:** List a Metacritic TV show's critic reviews. Returns paginated professional/publication reviews for a TV show: publication, score, quote, author, and source URL. Credential-free public Metacritic data.\n- **Params:** `page` (integer, optional) — 1-based page number (default 1); `per_page` (integer, optional) — Results per page (default 20, max 50); `slug` (string, **required**) — Metacritic TV show slug; `sort` (string, optional) — Sort order\n\n### `metacritic_tv_user_reviews`\n\n- **HTTP:** `GET /metacritic/tv/{slug}/user-reviews`\n- **What:** List a Metacritic TV show's user reviews. Returns paginated user reviews for a TV show: author, score (0-10), quote, date, helpfulness, and spoiler flag. Credential-free public Metacritic data.\n- **Params:** `page` (integer, optional) — 1-based page number (default 1); `per_page` (integer, optional) — Results per page (default 20, max 50); `slug` (string, **required**) — Metacritic TV show slug; `sort` (string, optional) — Sort order\n\n## Box Office Mojo (21)\n\n### `boxofficemojo_brand`\n\n- **HTTP:** `GET /boxofficemojo/brand`\n- **What:** Box Office Mojo brand detail. Returns normalized release rows from a public Box Office Mojo brand page. Pass exactly one of \n\nFile v1.0.19:skill-card.md\n\n## Description:\n\nResearches movies and TV shows through the Crawlora API, returning JSON on titles, cast and crew, ratings, reviews, streaming availability, and box-office performance across seven entertainment sources.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to answer movie and TV questions about credits, ratings, reviews, streaming options, similar titles, and box-office results using public entertainment data.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Entertainment queries, IDs, URLs, and the API key are sent to Crawlora.\n\nMitigation: Use public, nonsensitive lookup data; keep the key in the environment and never hardcode or commit it.\n\n## Reference(s):\n\n- [Skill release on ClawHub](https://clawhub.ai/crawlora-org/skills/movie-tv-research)\n- [Endpoint reference](reference/endpoints.md)\n- [Crawlora API and key access](https://crawlora.net)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, JSON]\n\n**Output Format:** [JSON lookup results or concise text and Markdown answers]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires a Crawlora API key; longer result lists may be paginated, and streaming offers depend on location.]\n\n## Skill Version(s):\n\n1.0.19 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.18: 5 files, 16290 bytes\n\nFiles: reference/endpoints.md (55431b), scripts/crawlora.sh (8213b), skill-card.md (2394b), SKILL.md (4856b), _meta.json (137b)\n\nFile v1.0.18:SKILL.md\n\n---\nname: movie-tv-research\ndescription: Researches movies and TV shows — metadata, cast/crew, ratings, reviews, streaming availability, and box-office performance — via the Crawlora API across IMDb, TMDB, JustWatch, Letterboxd, Rotten Tomatoes, Metacritic, and Box Office Mojo, returning clean JSON. Use when the user asks about a title's cast, ratings/scores, where to stream it, critic or user reviews, or its box-office numbers.\n---\n\n# Movie & TV research\n\nPull title metadata, cast/crew, ratings, streaming availability, reviews, and\nbox-office numbers across seven film/TV data sources as normalized JSON from\nthe Crawlora API — no scraping IMDb pages or parsing streaming-provider HTML.\n\n## When to use this skill\n\n- \"Who's in / who directed <title>?\" / cast, crew, and credits lookups.\n- \"What's <title> rated on IMDb / Rotten Tomatoes / Metacritic / Letterboxd?\"\n- \"Where can I stream <title>?\" (JustWatch offers by provider).\n- \"How did <title> do at the box office?\" (Box Office Mojo).\n- \"Find titles similar to <title>\" or \"what's popular right now.\"\n- Critic vs. audience review comparisons; franchise/genre box-office analysis.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\nPick the source by job:\n\n1. **Identity & credits (IMDb / TMDB)** — search first: `/imdb/search` or\n   `/tmdb/search`; then detail: `/imdb/title` (needs the IMDb id) or\n   `/tmdb/movie/{id}` / `/tmdb/tv/{id}`. Cast/crew: `/imdb/title/credits` or\n   TMDB's title payload. Person pages: `/imdb/name`, `/tmdb/person/{id}`.\n2. **Scores & reviews** — Rotten Tomatoes (`/rottentomatoes/movie`, `/series`,\n   `/movie/reviews`), Metacritic (`/metacritic/movie/{slug}`,\n   `/critic-reviews`, `/user-reviews`), IMDb (`/imdb/title/reviews`),\n   Letterboxd (`/letterboxd/film/{slug}`, `/reviews`, `/rating-histogram`).\n3. **Where to watch (JustWatch)** — `/justwatch/search` → raw id, then\n   `/justwatch/title/offers` (or `/title-by-id` + `/title/offers`) for\n   per-provider streaming/rental/purchase links; `/justwatch/title/similar`\n   for recommendations.\n4. **Box office (Box Office Mojo)** — `/boxofficemojo/title` or `/release`\n   for one film's numbers; `/weekend/domestic`, `/year/domestic`,\n   `/year/worldwide` for charts; `/franchise` / `/genre` / `/brand` for\n   rollups; `/showdown` to compare two releases head-to-head.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Identity + scores:\nscripts/crawlora.sh /imdb/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /tmdb/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /rottentomatoes/search query=\"Dune Part Two\" | jq '.'\n\n# Streaming availability:\nscripts/crawlora.sh /justwatch/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /justwatch/title/offers id=<raw-justwatch-id> | jq '.'\n\n# Box office:\nscripts/crawlora.sh /boxofficemojo/title id=<mojo-title-id> | jq '.'\n```\n\nUse `scripts/crawlora.sh` for all requests; it keeps the API key out of command-line arguments.\n\n\n## Endpoint reference\n\nSee [`reference/endpoints.md`](reference/endpoints.md) for every IMDb, TMDB,\nJustWatch, Letterboxd, Rotten Tomatoes, Metacritic, and Box Office Mojo\nendpoint this skill uses.\n\n## Examples\n\n- **Critic-vs-audience gap:** `/metacritic/movie/{slug}` (critic Metascore\n  vs. user score) alongside `/rottentomatoes/movie` (Tomatometer vs.\n  audience score) for the same title.\n- **Where-to-watch fan-out:** `/justwatch/search` → `/justwatch/title/offers`\n  to list every subscription/rent/buy option and price by provider.\n- **Franchise box-office trend:** `/boxofficemojo/franchise` for every\n  entry's opening/lifetime gross, sorted chronologically.\n- **Taste-matching:** `/letterboxd/film/{slug}/similar` or\n  `/tmdb/movie/{id}` (TMDB includes recommendations) for \"more like this.\"\n\n## Notes & limits\n\n- **Credits / pay-on-success:** billed only on `2xx`; free tier 2,000 credits/mo.\n  Key at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- **Public data only** — public title/review/box-office pages.\n- **Security:** key lives in `CRAWLORA_API_KEY` only — never hardcode, query-param, or commit it.\n- **JustWatch uses its own raw GraphQL ids** (not IMDb/TMDB ids) — resolve\n  via `/justwatch/search` or `/justwatch/title/by-id` first.\n- Results are paginated where noted — pass `page` to walk longer lists\n  (reviews, charts, filmographies).\n\nFile v1.0.18:_meta.json\n\n{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"movie-tv-research\",\n  \"version\": \"1.0.18\",\n  \"publishedAt\": 1789954781295\n}\n\nFile v1.0.18:reference/endpoints.md\n\n# movie-tv-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**108 endpoints across 7 platform group(s).**\n\n## IMDb (30)\n\n### `imdb_charts`\n\n- **HTTP:** `GET /imdb/charts`\n- **What:** IMDb title charts. Returns normalized rows from public IMDb title charts. Chart values: `top_rated_movies`, `top_rated_tv_shows`, `most_popular_movies`, `most_popular_tv_shows`, `top_rated_english_movies`, `lowest_rated_movies`.\n- **Params:** `chart` (string, optional) — IMDb chart; `limit` (integer, optional) — Rows to return, default 25, max 250\n\n### `imdb_image_types`\n\n- **HTTP:** `GET /imdb/image-types`\n- **What:** IMDb image types. Lists every value the `type` parameter of the IMDb image endpoints accepts: `behind_the_scenes`, `event`, `poster`, `product`, `production_art`, `publicity`, `still_frame`, `unknown`. Each row carries a display label and a short description.\n- **Params:** _none_\n\n### `imdb_name`\n\n- **HTTP:** `GET /imdb/name`\n- **What:** IMDb name detail. Returns normalized public IMDb person metadata and known-for rows. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_name_awards`\n\n- **HTTP:** `GET /imdb/name/awards`\n- **What:** IMDb name awards. Returns normalized public IMDb award rows for a person. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_name_credits`\n\n- **HTTP:** `GET /imdb/name/credits`\n- **What:** IMDb name credits. Returns normalized public IMDb filmography sections for a person. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_name_images`\n\n- **HTTP:** `GET /imdb/name/images`\n- **What:** IMDb name images. Returns image metadata from a person's media index, including the original image URL, dimensions, caption and credited people. Filter by image type with `type`, which accepts a single value or a comma-separated list of: `behind_the_scenes`, `event`, `poster`, `product`, `production_art`, `publicity`, `still_frame`, `unknown`. Omit `type` to return every type. Limit defaults to 50 and clamps to 1000. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `limit` (integer, optional) — Rows to return, default 50, max 1000; `type` (string, optional) — Image type filter, single value or comma-separated list; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_name_videos`\n\n- **HTTP:** `GET /imdb/name/videos`\n- **What:** IMDb name video metadata. Returns public person video metadata and thumbnail URLs only; playback URLs and media manifests are never returned. IMDb caps the upstream slice at 100 and provides no usable continuation cursor, so `total` can exceed returned rows and `has_more` reports that condition. Limit defaults to 50 and clamps to 100. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `limit` (integer, optional) — Rows to return, default 50, max 100; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_search`\n\n- **HTTP:** `GET /imdb/search`\n- **What:** IMDb title search. Returns normalized IMDb title search rows from credential-free public IMDb pages. Limit defaults to 10 and clamps to 20.\n- **Params:** `limit` (integer, optional) — Rows to return, default 10, max 20; `query` (string, **required**) — Search query\n\n### `imdb_search_title`\n\n- **HTTP:** `GET /imdb/search/title`\n- **What:** IMDb advanced title search. Returns normalized IMDb advanced title-search results (imdb.com/search/title/) from a credential-free public IMDb page. At least one filter is required; sort/limit alone are not enough. Limit defaults to 25 and clamps to 50; only IMDb's first rendered page of results is returned (see `total`/`has_more`), there is no deeper cursor pagination. Genre/company/certificate/country/language/keyword/characters/role are include-only lists; there is no exclude support. Unsupported: genre exclude, three curated `groups` values (best-picture-nominee, best-director-nominee, national-film-registry), and the non-plot \"page topic\" search fields.\n- **Params:** `certificates` (string, optional) — Comma-separated `COUNTRY:RATING` certificate pairs, e.g. `US:PG-13`; `characters` (string, optional) — Comma-separated character names; `colors` (string, optional) — Comma-separated color info: `color`, `black_and_white`, `colorized`, `aces`; `companies` (string, optional) — Comma-separated IMDb company ids, format `co########`; `countries` (string, optional) — Comma-separated ISO country codes; `genres` (string, optional) — Comma-separated genres (include-only): `Action`, `Adventure`, `Animation`, `Biography`, `Comedy`, `Crime`, `Documentary`, `Drama`, `Family`, `Fantasy`, `Film-Noir`, `Game-Show`, `History`, `Horror`, `Music`, `Musical`, `Mystery`, `News`, `Reality-TV`, `Romance`, `Sci-Fi`, `Short`, `Sport`, `Talk-Show`, `Thriller`, `War`, `Western`; `groups` (string, optional) — Comma-separated awards/curated-list groups: `oscar_winner`, `oscar_nominee`, `emmy_winner`, `emmy_nominee`, `golden_globe_winner`, `golden_globe_nominee`, `best_picture_winner`, `best_director_winner`, `razzie_winner`, `razzie_nominee`, `top_100`, `top_250`, `top_1000`, `bottom_100`, `bottom_250`, `bottom_1000`; `include_adult` (boolean, optional) — Include adult titles. Defaults to excluded; `keywords` (string, optional) — Comma-separated plot keywords; `languages` (string, optional) — Comma-separated ISO language codes; `limit` (integer, optional) — Rows to return, default 25, max 50; `max_popularity` (integer, optional) — Maximum IMDb popularity rank; `max_runtime` (integer, optional) — Maximum runtime in minutes; `max_user_rating` (number, optional) — Maximum IMDb user rating, 0-10; `max_votes` (integer, optional) — Maximum number of user rating votes; `min_popularity` (integer, optional) — Minimum IMDb popularity rank (1 is most popular); `min_runtime` (integer, optional) — Minimum runtime in minutes; `min_user_rating` (number, optional) — Minimum IMDb user rating, 0-10; `min_votes` (integer, optional) — Minimum number of user rating votes; `plot` (string, optional) — Plot text search term; `release_date_from` (string, optional) — Release date lower bound: YYYY, YYYY-MM, or YYYY-MM-DD; `release_date_to` (string, optional) — Release date upper bound: YYYY, YYYY-MM, or YYYY-MM-DD; `role` (string, optional) — Comma-separated cast/crew IMDb name ids, format `nm########`; `sort` (string, optional) — One of `moviemeter`, `alpha`, `user_rating`, `num_votes`, `boxoffice_gross_us`, `runtime`, `year`, `release_date`; `sort_order` (string, optional) — `asc` or `desc`. Defaults to `asc` when sort is set; `sound_mixes` (string, optional) — Comma-separated sound mix names: `12-Track Digital Sound`, `3 Channel Stereo`, `4-Track Stereo`, `6-Track Stereo`, `70 mm 6-Track`, `AGA Sound System`, `Auro 11.1`, `CDS`, `Chronophone`, `Cinematophone`, `Cinephone`, `Cinerama 7-Track`, `Cinesound`, `D-Cinema 48kHz 5.1`, `Datasat`, `De Forest Phonofilm`, `Digitrac Digital Audio System`, `Dolby`, `Dolby Atmos`, `Dolby Digital`, `Dolby Digital EX`, `Dolby SR`, `Dolby Stereo`, `Dolby Surround 7.1`, `DTS`, `DTS 70 mm`, `DTS Stereo`, `DTS-ES`, `IMAX 6-Track`, `Kinoplasticon`, `LC-Concept Digital Sound`, `Matrix Surround`, `Mono`, `Perspecta Stereo`, `Phono-Kinema`, `SDDS`, `Sensurround`, `Silent`, `Sonics-DDP`, `Sonix`, `Stereo`, `Ultra Stereo`, `Vitaphone`; `title` (string, optional) — Title-name substring match; `title_type` (string, optional) — Comma-separated title types: `feature`, `tvSeries`, `short`, `tvEpisode`, `tvMiniSeries`, `tvMovie`, `tvSpecial`, `tvShort`, `videoGame`, `video`, `musicVideo`, `podcastSeries`, `podcastEpisode`\n\n### `imdb_title`\n\n- **HTTP:** `GET /imdb/title`\n- **What:** IMDb title detail. Returns normalized IMDb title metadata from a credential-free public IMDb title page. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_awards`\n\n- **HTTP:** `GET /imdb/title/awards`\n- **What:** IMDb title awards. Returns normalized public IMDb award rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_box_office`\n\n- **HTTP:** `GET /imdb/title/box-office`\n- **What:** IMDb title box office summary. Returns a title's public box-office summary: lifetime gross by market (domestic, international, worldwide), the domestic opening weekend, and the production budget. IMDb reports each figure independently, so a real title with no box office data (most TV series, many non-theatrical titles) returns `has_box_office: false` with every figure omitted rather than an error. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_company_credits`\n\n- **HTTP:** `GET /imdb/title/company-credits`\n- **What:** IMDb title company credits. Returns normalized public IMDb company-credit sections for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_connections`\n\n- **HTTP:** `GET /imdb/title/connections`\n- **What:** IMDb title connections. Returns a bounded slice of a title's public connections: other titles it references or is referenced by, such as remakes, spin-offs, \"featured in\" clips, and \"edited into\" compilations. `category` is upstream-supplied free text, not a closed enum. IMDb's connections list can run to hundreds or thousands of rows, so `total` can exceed the returned rows and `has_more` reports that condition. Limit defaults to 50 and clamps to 250. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `limit` (integer, optional) — Rows to return, default 50, max 250; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_credits`\n\n- **HTTP:** `GET /imdb/title/credits`\n- **What:** IMDb title credits. Returns normalized public IMDb full cast and crew sections. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_episodes`\n\n- **HTTP:** `GET /imdb/title/episodes`\n- **What:** IMDb title episodes. Returns normalized public IMDb episode rows for a series title. Limit defaults to 10 and clamps to 20. Optional `season` filters the upstream episodes page. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `limit` (integer, optional) — Rows to return, default 10, max 20; `season` (integer, optional) — Season number to request; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_filming_locations`\n\n- **HTTP:** `GET /imdb/title/filming-locations`\n- **What:** IMDb title filming locations. Returns normalized public IMDb filming-location rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_goofs`\n\n- **HTTP:** `GET /imdb/title/goofs`\n- **What:** IMDb title goofs. Returns normalized public IMDb goof rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_images`\n\n- **HTTP:** `GET /imdb/title/images`\n- **What:** IMDb title images. Returns image metadata from a title's media index, including the original image URL, dimensions, caption and credited people. Filter by image type with `type`, which accepts a single value or a comma-separated list of: `behind_the_scenes`, `event`, `poster`, `product`, `production_art`, `publicity`, `still_frame`, `unknown`. Omit `type` to return every type. Limit defaults to 50 and clamps to 1000. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `limit` (integer, optional) — Rows to return, default 50, max 1000; `type` (string, optional) — Image type filter, single value or comma-separated list; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_keywords`\n\n- **HTTP:** `GET /imdb/title/keywords`\n- **What:** IMDb title keywords. Returns normalized public IMDb keyword rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_parental_guide`\n\n- **HTTP:** `GET /imdb/title/parental-guide`\n- **What:** IMDb title parental guide. Returns normalized public IMDb parental-guide categories and severity signals. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_public_facts_analysis`\n\n- **HTTP:** `GET /imdb/title/public-facts-analysis`\n- **What:** IMDb title public facts analysis. Returns derived public-page summary metrics for IMDb trivia, goofs, quotes, keywords, filming locations, and company credits. This endpoint is not viewing advice. Pass exactly one of `id` or `url`. The six sections are gathered from six independent sources, so a section that cannot be fetched is omitted and named in `missing_sections` with `partial` set to `true`, rather than failing the whole response; an error is returned only when no section could be fetched. Callers that require a complete analysis should check `partial`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_quotes`\n\n- **HTTP:** `GET /imdb/title/quotes`\n- **What:** IMDb title quotes. Returns normalized public IMDb quote rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_ratings`\n\n- **HTTP:** `GET /imdb/title/ratings`\n- **What:** IMDb title ratings breakdown. Returns IMDb's aggregate rating, vote count, ten rating buckets, and country rating summaries. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute IMDb title URL\n\n### `imdb_title_release_info`\n\n- **HTTP:** `GET /imdb/title/release-info`\n- **What:** IMDb title release info. Returns normalized public IMDb release date rows and alternate titles. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_reviews`\n\n- **HTTP:** `GET /imdb/title/reviews`\n- **What:** IMDb title user reviews. Returns normalized public IMDb user review rows. Limit defaults to 10 and clamps to 20. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `limit` (integer, optional) — Rows to return, default 10, max 20; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_similar`\n\n- **HTTP:** `GET /imdb/title/similar`\n- **What:** IMDb similar titles. Returns normalized titles from IMDb's public More like this recommendations. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute IMDb title URL\n\n### `imdb_title_technical_specs`\n\n- **HTTP:** `GET /imdb/title/technical-specs`\n- **What:** IMDb title technical specs. Returns normalized public IMDb technical specifications such as runtime, sound mix, color, and aspect ratio. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_trivia`\n\n- **HTTP:** `GET /imdb/title/trivia`\n- **What:** IMDb title trivia. Returns normalized public IMDb trivia rows for a title. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n### `imdb_title_videos`\n\n- **HTTP:** `GET /imdb/title/videos`\n- **What:** IMDb title video metadata. Returns public title video metadata and thumbnail URLs only; playback URLs and media manifests are never returned. IMDb server-truncates this connection and exposes no usable continuation cursor, so `total` can exceed returned rows and `has_more` reports that condition. Limit defaults to 50 and clamps to 100. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb title id; `limit` (integer, optional) — Rows to return, default 50, max 100; `url` (string, optional) — Absolute https://www.imdb.com/title/<id>/ URL\n\n## TMDB (9)\n\n### `tmdb_collection`\n\n- **HTTP:** `GET /tmdb/collection/{id}`\n- **What:** Get a TMDB collection. Returns a normalized TMDB collection (franchise grouping), including its overview and server-rendered member movies. Credential-free public TMDB data.\n- **Params:** `id` (string, **required**) — TMDB collection id or id-slug\n\n### `tmdb_genres`\n\n- **HTTP:** `GET /tmdb/genres`\n- **What:** List TMDB browse genres. Returns every genre ID advertised by TMDB's public movie and TV browse pages. Use movie values only with movie list filters and TV values only with TV list filters. Credential-free public TMDB data.\n- **Params:** _none_\n\n### `tmdb_movie`\n\n- **HTTP:** `GET /tmdb/movie/{id}`\n- **What:** Get a TMDB movie. Returns a normalized TMDB movie: overview, tagline, genres, countries, runtime, budget/revenue, top-billed cast, top crew (director/writer), and aggregate rating. Credential-free public TMDB data (themoviedb.org) — not the official api.themoviedb.org, which requires an API key.\n- **Params:** `id` (string, **required**) — TMDB movie id\n\n### `tmdb_movie_list`\n\n- **HTTP:** `GET /tmdb/movie/list`\n- **What:** Get a TMDB movie chart. Returns a TMDB movie chart (popular, top rated, now playing, or upcoming). Credential-free public TMDB data.\n- **Params:** `category` (string, optional) — Movie chart, default popular; `date_from` (string, optional) — Release date lower bound (YYYY-MM-DD); `date_to` (string, optional) — Release date upper bound (YYYY-MM-DD); `include_adult` (boolean, optional) — Include adult titles; `limit` (integer, optional) — Max movies, default 10, max 20; `max_rating` (number, optional) — Maximum rating, 0-10; `max_runtime` (integer, optional) — Maximum runtime in minutes; `min_rating` (number, optional) — Minimum rating, 0-10; `min_runtime` (integer, optional) — Minimum runtime in minutes; `min_votes` (integer, optional) — Minimum vote count; `original_language` (string, optional) — Two-letter original-language code; `page` (integer, optional) — 1-based page, default 1; `sort_by` (string, optional) — Sort order; `with_genres` (string, optional) — Comma- or pipe-separated movie genre ids: 28,12,16,35,80,99,18,10751,14,36,27,10402,9648,10749,878,10770,53,10752,37\n\n### `tmdb_person`\n\n- **HTTP:** `GET /tmdb/person/{id}`\n- **What:** Get a TMDB person. Returns a normalized TMDB person: biography, birth date, photo, and filmography (movie and TV credits). Credential-free public TMDB data.\n- **Params:** `id` (string, **required**) — TMDB person id; `limit` (integer, optional) — Max filmography credits, default 10, max 20\n\n### `tmdb_person_list`\n\n- **HTTP:** `GET /tmdb/person/list`\n- **What:** List popular people on TMDB. Returns one page from TMDB's Popular People directory, including each person's id, name, known-for titles, profile image, and detail URL. Credential-free public TMDB data.\n- **Params:** `limit` (integer, optional) — Max people, default 10, max 20; `page` (integer, optional) — 1-based page, default 1\n\n### `tmdb_search`\n\n- **HTTP:** `GET /tmdb/search`\n- **What:** Search TMDB. Searches TMDB movies, TV shows, people, and collections. An unscoped query interleaves results across all four types rather than returning whichever type happens to rank first upstream. Credential-free public TMDB data.\n- **Params:** `limit` (integer, optional) — Max results, default 10, max 20; `page` (integer, optional) — 1-based results page, default 1; `query` (string, **required**) — Search query; `type` (string, optional) — Optional result type filter\n\n### `tmdb_tv`\n\n- **HTTP:** `GET /tmdb/tv/{id}`\n- **What:** Get a TMDB TV show. Returns a normalized TMDB TV show: overview, tagline, genres, countries, episode count, first/last air year, top-billed cast, top crew (creator), and aggregate rating. Credential-free pub\n\nArchive v1.0.17: 5 files, 14964 bytes\n\nFiles: reference/endpoints.md (49818b), scripts/crawlora.sh (7832b), skill-card.md (2279b), SKILL.md (4856b), _meta.json (137b)\n\nArchive v1.0.16: 5 files, 15356 bytes\n\nFiles: reference/endpoints.md (49818b), scripts/crawlora.sh (8750b), skill-card.md (2080b), SKILL.md (4856b), _meta.json (137b)\n\nArchive v1.0.15: 5 files, 15165 bytes\n\nFiles: reference/endpoints.md (49818b), scripts/crawlora.sh (6648b), skill-card.md (2324b), SKILL.md (4856b), _meta.json (137b)\n\nArchive v1.0.14: 5 files, 14979 bytes\n\nFiles: reference/endpoints.md (49818b), scripts/crawlora.sh (6391b), skill-card.md (2108b), SKILL.md (4856b), _meta.json (137b)\n\nArchive v1.0.13: 5 files, 14710 bytes\n\nFiles: reference/endpoints.md (49818b), scripts/crawlora.sh (6066b), skill-card.md (1919b), SKILL.md (4889b), _meta.json (137b)\n\nArchive v1.0.12: 5 files, 14771 bytes\n\nFiles: reference/endpoints.md (49818b), scripts/crawlora.sh (5766b), skill-card.md (2387b), SKILL.md (4889b), _meta.json (137b)\n\nArchive v1.0.11: 5 files, 14730 bytes\n\nFiles: reference/endpoints.md (49818b), scripts/crawlora.sh (5718b), skill-card.md (2363b), SKILL.md (4889b), _meta.json (137b)","readmeExcerpt":"Skill: movie-tv-research Owner: crawlora-org Summary: Researches movies and TV shows — metadata, cast/crew, ratings, reviews, streaming availability, and box-office performance — via the Crawlora API across IMDb, TMDB, JustWatch, Letterboxd, Rotten Tomatoes, Metacritic, and Box Office Mojo, returning clean JSON. Use when the user asks about a title's cast, ratings/scores, where to stream it, critic or user reviews, o","codeSnippets":[],"executableExamples":[{"language":"sh","snippet":"# Identity + scores:\nscripts/crawlora.sh /imdb/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /tmdb/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /rottentomatoes/search query=\"Dune Part Two\" | jq '.'\n\n# Streaming availability:\nscripts/crawlora.sh /justwatch/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /justwatch/title/offers id=<raw-justwatch-id> | jq '.'\n\n# Box office:\nscripts/crawlora.sh /boxofficemojo/title id=<mojo-title-id> | jq '.'"},{"language":"sh","snippet":"# Identity + scores:\nscripts/crawlora.sh /imdb/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /tmdb/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /rottentomatoes/search query=\"Dune Part Two\" | jq '.'\n\n# Streaming availability:\nscripts/crawlora.sh /justwatch/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /justwatch/title/offers id=<raw-justwatch-id> | jq '.'\n\n# Box office:\nscripts/crawlora.sh /boxofficemojo/title id=<mojo-title-id> | jq '.'"},{"language":"sh","snippet":"# Identity + scores:\nscripts/crawlora.sh /imdb/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /tmdb/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /rottentomatoes/search query=\"Dune Part Two\" | jq '.'\n\n# Streaming availability:\nscripts/crawlora.sh /justwatch/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /justwatch/title/offers id=<raw-justwatch-id> | jq '.'\n\n# Box office:\nscripts/crawlora.sh /boxofficemojo/title id=<mojo-title-id> | jq '.'"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: movie-tv-research\ndescription: Researches movies and TV shows — metadata, cast/crew, ratings, reviews, streaming availability, and box-office performance — via the Crawlora API across IMDb, TMDB, JustWatch, Letterboxd, Rotten Tomatoes, Metacritic, and Box Office Mojo, returning clean JSON. Use when the user asks about a title's cast, ratings/scores, where to stream it, critic or user reviews, or its box-office numbers.\n---\n\n# Movie & TV research\n\nPull title metadata, cast/crew, ratings, streaming availability, reviews, and\nbox-office numbers across seven film/TV data sources as normalized JSON from\nthe Crawlora API — no scraping IMDb pages or parsing streaming-provider HTML.\n\n## When to use this skill\n\n- \"Who's in / who directed <title>?\" / cast, crew, and credits lookups.\n- \"What's <title> rated on IMDb / Rotten Tomatoes / Metacritic / Letterboxd?\"\n- \"Where can I stream <title>?\" (JustWatch offers by provider).\n- \"How did <title> do at the box office?\" (Box Office Mojo).\n- \"Find titles similar to <title>\" or \"what's popular right now.\"\n- Critic vs. audience review comparisons; franchise/genre box-office analysis.\n\n## Setup (one-time)\n\n- Get a free Crawlora API key (2,000 credits/mo, no card) at [https://crawlora.net](https://crawlora.net?utm_source=github&utm_medium=referral&utm_campaign=crawlora-skills).\n- Set `CRAWLORA_API_KEY` in the environment before running the helper.\n- The helper reads `CRAWLORA_API_KEY` from the environment and sends requests to `https://api.crawlora.net/api/v1`. Missing/invalid key → `401`.\n\n## How it works\n\nPick the source by job:\n\n1. **Identity & credits (IMDb / TMDB)** — search first: `/imdb/search` or\n   `/tmdb/search`; then detail: `/imdb/title` (needs the IMDb id) or\n   `/tmdb/movie/{id}` / `/tmdb/tv/{id}`. Cast/crew: `/imdb/title/credits` or\n   TMDB's title payload. Person pages: `/imdb/name`, `/tmdb/person/{id}`.\n2. **Scores & reviews** — Rotten Tomatoes (`/rottentomatoes/movie`, `/series`,\n   `/movie/reviews`), Metacritic (`/metacritic/movie/{slug}`,\n   `/critic-reviews`, `/user-reviews`), IMDb (`/imdb/title/reviews`),\n   Letterboxd (`/letterboxd/film/{slug}`, `/reviews`, `/rating-histogram`).\n3. **Where to watch (JustWatch)** — `/justwatch/search` → raw id, then\n   `/justwatch/title/offers` (or `/title-by-id` + `/title/offers`) for\n   per-provider streaming/rental/purchase links; `/justwatch/title/similar`\n   for recommendations.\n4. **Box office (Box Office Mojo)** — `/boxofficemojo/title` or `/release`\n   for one film's numbers; `/weekend/domestic`, `/year/domestic`,\n   `/year/worldwide` for charts; `/franchise` / `/genre` / `/brand` for\n   rollups; `/showdown` to compare two releases head-to-head.\n\nFull endpoint list, methods, and params: [`reference/endpoints.md`](reference/endpoints.md).\n\n## Calling the API\n\n```sh\n# Identity + scores:\nscripts/crawlora.sh /imdb/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /tmdb/search query=\"Dune Part Two\" | jq '.'\nscripts/crawlora.sh /rottentomatoes"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn70shhkf6qpfwgfrbgtep2wkd8c6b4t\",\n  \"slug\": \"movie-tv-research\",\n  \"version\": \"1.0.20\",\n  \"publishedAt\": 1790648311596\n}"},{"path":"reference/endpoints.md","content":"# movie-tv-research — endpoint reference\n\n> Generated from `scripts/tools.json` by `scripts/generate.mjs` — do not edit by hand.\n\nEndpoints this skill uses, grouped by platform. Call them via `scripts/crawlora.sh` (see SKILL.md).\n\nAll paths are relative to the API base `https://api.crawlora.net/api/v1` and require the header `x-api-key: $CRAWLORA_API_KEY`. Path params like `{id}` are substituted into the URL; `GET` params go in the query string; `POST` params go in a JSON body.\n\n**119 endpoints across 7 platform group(s).**\n\n## IMDb (30)\n\n### `imdb_charts`\n\n- **HTTP:** `GET /imdb/charts`\n- **What:** IMDb title charts. Returns normalized rows from public IMDb title charts. Chart values: `top_rated_movies`, `top_rated_tv_shows`, `most_popular_movies`, `most_popular_tv_shows`, `top_rated_english_movies`, `lowest_rated_movies`.\n- **Params:** `chart` (string, optional) — IMDb chart; `limit` (integer, optional) — Rows to return, default 25, max 250\n\n### `imdb_image_types`\n\n- **HTTP:** `GET /imdb/image-types`\n- **What:** IMDb image types. Lists every value the `type` parameter of the IMDb image endpoints accepts: `behind_the_scenes`, `event`, `poster`, `product`, `production_art`, `publicity`, `still_frame`, `unknown`. Each row carries a display label and a short description.\n- **Params:** _none_\n\n### `imdb_name`\n\n- **HTTP:** `GET /imdb/name`\n- **What:** IMDb name detail. Returns normalized public IMDb person metadata and known-for rows. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_name_awards`\n\n- **HTTP:** `GET /imdb/name/awards`\n- **What:** IMDb name awards. Returns normalized public IMDb award rows for a person. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_name_credits`\n\n- **HTTP:** `GET /imdb/name/credits`\n- **What:** IMDb name credits. Returns normalized public IMDb filmography sections for a person. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `url` (string, optional) — Absolute https://www.imdb.com/name/<id>/ URL\n\n### `imdb_name_images`\n\n- **HTTP:** `GET /imdb/name/images`\n- **What:** IMDb name images. Returns image metadata from a person's media index, including the original image URL, dimensions, caption and credited people. Filter by image type with `type`, which accepts a single value or a comma-separated list of: `behind_the_scenes`, `event`, `poster`, `product`, `production_art`, `publicity`, `still_frame`, `unknown`. Omit `type` to return every type. Limit defaults to 50 and clamps to 1000. Pass exactly one of `id` or `url`.\n- **Params:** `id` (string, optional) — IMDb name id; `limit` (integer, optional) — Rows to return, default 50, max 1000; `type` (string, optional) — Image type filter, single value or comma-separated list; `url` (string, opti"},{"path":"skill-card.md","content":"## Description:\n\nResearches movie and TV metadata, cast, ratings, reviews, streaming availability, and box office through the Crawlora API.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[crawlora-org](https://clawhub.ai/user/crawlora-org)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nPeople researching movies and TV shows use this skill to compare credits, ratings, reviews, streaming options, and box-office results across public sources.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Movie, TV, review, and streaming searches are sent to Crawlora; sensitive queries or exposed API keys may disclose private information.\n\nMitigation: Keep the API key in the environment and send only public, non-sensitive lookup terms; avoid secrets, confidential projects, and private watch-history analysis.\n\nRisk: The endpoint catalog also contains public Metacritic game lookups outside the skill's main movie and TV purpose.\n\nMitigation: Limit requests to the movie and TV research task and review the chosen endpoint before sending a query.\n\n## Reference(s):\n\n- [Movie & TV research endpoint reference](reference/endpoints.md)\n- [Movie & TV research on ClawHub](https://clawhub.ai/crawlora-org/skills/movie-tv-research)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance]\n\n**Output Format:** [Markdown summaries informed by JSON lookup results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Results depend on the selected public data sources and available Crawlora API credits.]\n\n## Skill Version(s):\n\n1.0.20 (source: server-resolved release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1597,"uniquenessScore":40,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T05:51:34.366Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T05:51:34.366Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T08:44:40.537Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}