{
  "openapi": "3.1.0",
  "info": {
    "title": "StreamRank API",
    "version": "1.0.0",
    "summary": "Daily Top 10 streaming rankings across providers and countries. Plain JSON over HTTPS. Optional Bearer API key.",
    "description": "StreamRank serves daily Top 10 charts for Netflix, Prime Video, Disney+, HBO Max, Hulu, Apple TV+, Paramount+, and Peacock.\n\nRequests without a key run in the free scope: country=US; provider=netflix; current charts only. Send `Authorization: Bearer sk_live_…` or `sk_test_…` for a plan. Test keys never count toward quota.\n\nThis is Top 10 rankings plus one daily cross-service trending list, not a catalog of everything on a service. Charts and trend scores update once a day. Cache them.\n\nIdentifiers: provider ids are lowercase (`netflix`, not `Netflix`). Countries are ISO 3166-1 alpha-2 (`US`, not `USA`). Look up a title with `GET /v1/titles?q=` or `imdb_id` / `tmdb_id`. Title ids look like `ttl_…`.\n\nHuman docs: https://streamrank.io/docs\nMarkdown: https://streamrank.io/docs.md\nThis document: https://streamrank.io/v1/openapi.json"
  },
  "servers": [
    {
      "url": "https://streamrank.io",
      "description": "StreamRank"
    }
  ],
  "security": [
    {},
    {
      "BearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "Charts"
    },
    {
      "name": "Titles"
    },
    {
      "name": "Trending"
    },
    {
      "name": "Catalog"
    }
  ],
  "paths": {
    "/v1/charts": {
      "get": {
        "operationId": "getCharts",
        "summary": "Current or historical Top 10",
        "description": "The Top 10 for one provider in one country. Omit `type` to receive both the movie and TV charts in one response.",
        "tags": [
          "Charts"
        ],
        "parameters": [
          {
            "name": "provider",
            "in": "query",
            "required": true,
            "description": "Required. netflix, prime, disney, max, hulu, apple, paramount, peacock.",
            "schema": {
              "type": "string",
              "enum": [
                "netflix",
                "prime",
                "disney",
                "max",
                "hulu",
                "apple",
                "paramount",
                "peacock"
              ]
            }
          },
          {
            "name": "country",
            "in": "query",
            "required": true,
            "description": "Required. ISO 3166-1 alpha-2, e.g. US, GB, JP.",
            "schema": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Optional. Return one chart instead of both.",
            "schema": {
              "type": "string",
              "enum": [
                "movie",
                "tv"
              ]
            }
          },
          {
            "name": "date",
            "in": "query",
            "required": false,
            "description": "Optional. A past chart. Resolves to the newest chart on or before the date. Requires history on your plan.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Optional. Return only the top N.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Body is `{ data }` and sometimes `{ meta }`."
          },
          "400": {
            "description": "invalid_request"
          },
          "401": {
            "description": "unauthorized"
          },
          "403": {
            "description": "plan_required"
          },
          "404": {
            "description": "not_found"
          },
          "429": {
            "description": "rate_limited or quota_exceeded"
          }
        }
      }
    },
    "/v1/titles": {
      "get": {
        "operationId": "searchTitles",
        "summary": "Look up titles by name, IMDb id, or TMDB id",
        "description": "Returns a ranked list. Ambiguous names are not a 404. Then call GET /v1/titles/{id} for current positions. At least one of q, imdb_id, or tmdb_id is required.",
        "tags": [
          "Titles"
        ],
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "required": false,
            "description": "Name, slug, ttl_ id, IMDb id, or TMDB id. Required unless imdb_id or tmdb_id is set.",
            "schema": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          },
          {
            "name": "imdb_id",
            "in": "query",
            "required": false,
            "description": "Exact IMDb id, e.g. tt4574334.",
            "schema": {
              "type": "string",
              "pattern": "^tt\\d{7,}$"
            }
          },
          {
            "name": "tmdb_id",
            "in": "query",
            "required": false,
            "description": "Exact TMDB id. Pass type when a movie and a show share the number.",
            "schema": {
              "type": "integer",
              "minimum": 1
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Optional. Restrict results to one kind.",
            "schema": {
              "type": "string",
              "enum": [
                "movie",
                "tv"
              ]
            }
          },
          {
            "name": "year",
            "in": "query",
            "required": false,
            "description": "Optional. Prefer titles released this year when matching by name.",
            "schema": {
              "type": "integer",
              "minimum": 1870,
              "maximum": 2100
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Optional. Default 10.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 10
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Body is `{ data }` and sometimes `{ meta }`."
          },
          "400": {
            "description": "invalid_request"
          },
          "401": {
            "description": "unauthorized"
          },
          "403": {
            "description": "plan_required"
          },
          "404": {
            "description": "not_found"
          },
          "429": {
            "description": "rate_limited or quota_exceeded"
          }
        }
      }
    },
    "/v1/titles/{id}": {
      "get": {
        "operationId": "getTitle",
        "summary": "Canonical title, current positions, lifetime stats",
        "description": "Accepts a title id (`ttl_…`), slug, IMDb id, or TMDB id. TMDB ids that match both a movie and a show should use GET /v1/titles?tmdb_id=&type= instead. Returns where it sits on every current chart plus lifetime stats.",
        "tags": [
          "Titles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Title id (`ttl_…`), slug, IMDb id, or numeric TMDB id.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Body is `{ data }` and sometimes `{ meta }`."
          },
          "400": {
            "description": "invalid_request"
          },
          "401": {
            "description": "unauthorized"
          },
          "403": {
            "description": "plan_required"
          },
          "404": {
            "description": "not_found"
          },
          "429": {
            "description": "rate_limited or quota_exceeded"
          }
        }
      }
    },
    "/v1/titles/{id}/rankings": {
      "get": {
        "operationId": "getTitleRankings",
        "summary": "Day-by-day ranking history",
        "description": "Newest first, clamped to your plan's history window.",
        "tags": [
          "Titles"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Title id (`ttl_…`) or slug.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "provider",
            "in": "query",
            "required": false,
            "description": "Optional filter.",
            "schema": {
              "type": "string",
              "enum": [
                "netflix",
                "prime",
                "disney",
                "max",
                "hulu",
                "apple",
                "paramount",
                "peacock"
              ]
            }
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "Optional filter.",
            "schema": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "description": "Optional start date.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "description": "Optional end date.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Optional. Default 1000.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 5000,
              "default": 1000
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Body is `{ data }` and sometimes `{ meta }`."
          },
          "400": {
            "description": "invalid_request"
          },
          "401": {
            "description": "unauthorized"
          },
          "403": {
            "description": "plan_required"
          },
          "404": {
            "description": "not_found"
          },
          "429": {
            "description": "rate_limited or quota_exceeded"
          }
        }
      }
    },
    "/v1/trending": {
      "get": {
        "operationId": "getTrending",
        "summary": "Risers, new entries, longest streaks",
        "description": "Movement inside one provider's charts in one country: `biggest_risers`, `new_entries`, and `longest_streaks`. It compares a chart with itself, so a #1 on Apple TV+ and a #5 on Netflix are not comparable. For one list that ranks titles across every service, use GET /v1/trending/titles.",
        "tags": [
          "Trending"
        ],
        "parameters": [
          {
            "name": "provider",
            "in": "query",
            "required": true,
            "description": "Required.",
            "schema": {
              "type": "string",
              "enum": [
                "netflix",
                "prime",
                "disney",
                "max",
                "hulu",
                "apple",
                "paramount",
                "peacock"
              ]
            }
          },
          {
            "name": "country",
            "in": "query",
            "required": true,
            "description": "Required. ISO 3166-1 alpha-2.",
            "schema": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Optional. Items per bucket, default 5.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 20,
              "default": 5
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Body is `{ data }` and sometimes `{ meta }`."
          },
          "400": {
            "description": "invalid_request"
          },
          "401": {
            "description": "unauthorized"
          },
          "403": {
            "description": "plan_required"
          },
          "404": {
            "description": "not_found"
          },
          "429": {
            "description": "rate_limited or quota_exceeded"
          }
        }
      }
    },
    "/v1/trending/titles": {
      "get": {
        "operationId": "getTrendingTitles",
        "summary": "One cross-service trending list",
        "description": "Titles ranked across every service by a single trend score, 0–100. Three categories feed the score: `chart_momentum` (position, breadth, and movement across Top 10 charts inside the scope), `demand` (consumption and discovery intent: first-party activity is worldwide, discovery rankings follow the country scope and are summed on the global list), and `attention` (broad web attention, worldwide). Omit `country` for the global list; a country scope weights that country's Top 10 charts and discovery rankings while first-party demand and attention stay worldwide. The score is daily. First-party demand counts cover the last complete day, attention is discounted when it is flat, and titles seen only by attention rank after titles with chart or demand presence.",
        "tags": [
          "Trending"
        ],
        "parameters": [
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "Optional. ISO 3166-1 alpha-2. Omit it for the global list. A country scope weights that country's Top 10 charts and that country's discovery rankings; first-party demand and attention stay worldwide.",
            "schema": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2
            }
          },
          {
            "name": "type",
            "in": "query",
            "required": false,
            "description": "Optional. Restrict the list to movies or to shows.",
            "schema": {
              "type": "string",
              "enum": [
                "movie",
                "tv"
              ]
            }
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "description": "Optional. Keep only titles with this status.",
            "schema": {
              "type": "string",
              "enum": [
                "new",
                "rising",
                "steady",
                "peaking",
                "fading"
              ]
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Optional. Default 10. Capped by your plan: 10 on Free, 100 on paid plans.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 100,
              "default": 10
            }
          },
          {
            "name": "date",
            "in": "query",
            "required": false,
            "description": "Optional. A past list. Resolves to the newest list on or before the date. Requires history on your plan.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Body is `{ data }` and sometimes `{ meta }`."
          },
          "400": {
            "description": "invalid_request"
          },
          "401": {
            "description": "unauthorized"
          },
          "403": {
            "description": "plan_required"
          },
          "404": {
            "description": "not_found"
          },
          "429": {
            "description": "rate_limited or quota_exceeded"
          }
        }
      }
    },
    "/v1/titles/{id}/trend": {
      "get": {
        "operationId": "getTitleTrend",
        "summary": "Day-by-day trend score for one title",
        "description": "The title's row on today's list plus its score history, newest first, clamped to your plan's history window. `current` is null when the title is not trending in that scope today.",
        "tags": [
          "Trending"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "description": "Title id (`ttl_…`), slug, IMDb id, or numeric TMDB id.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "country",
            "in": "query",
            "required": false,
            "description": "Optional. ISO 3166-1 alpha-2. Omit it for the global scope.",
            "schema": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2
            }
          },
          {
            "name": "from",
            "in": "query",
            "required": false,
            "description": "Optional start date. Clamped to your plan's history window.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "to",
            "in": "query",
            "required": false,
            "description": "Optional end date.",
            "schema": {
              "type": "string",
              "format": "date"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "description": "Optional. Days of history, default 90.",
            "schema": {
              "type": "integer",
              "minimum": 1,
              "maximum": 365,
              "default": 90
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK. Body is `{ data }` and sometimes `{ meta }`."
          },
          "400": {
            "description": "invalid_request"
          },
          "401": {
            "description": "unauthorized"
          },
          "403": {
            "description": "plan_required"
          },
          "404": {
            "description": "not_found"
          },
          "429": {
            "description": "rate_limited or quota_exceeded"
          }
        }
      }
    },
    "/v1/countries": {
      "get": {
        "operationId": "listCountries",
        "summary": "Countries with chart data",
        "description": "Every country with chart data and the providers available in each, plus whether your plan includes it.",
        "tags": [
          "Catalog"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Body is `{ data }` and sometimes `{ meta }`."
          },
          "400": {
            "description": "invalid_request"
          },
          "401": {
            "description": "unauthorized"
          },
          "403": {
            "description": "plan_required"
          },
          "404": {
            "description": "not_found"
          },
          "429": {
            "description": "rate_limited or quota_exceeded"
          }
        }
      }
    },
    "/v1/providers": {
      "get": {
        "operationId": "listProviders",
        "summary": "Providers and their countries",
        "description": "Every provider we cover, the countries that have data, and whether your plan includes it.",
        "tags": [
          "Catalog"
        ],
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK. Body is `{ data }` and sometimes `{ meta }`."
          },
          "400": {
            "description": "invalid_request"
          },
          "401": {
            "description": "unauthorized"
          },
          "403": {
            "description": "plan_required"
          },
          "404": {
            "description": "not_found"
          },
          "429": {
            "description": "rate_limited or quota_exceeded"
          }
        }
      }
    }
  },
  "components": {
    "securitySchemes": {
      "BearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "API key",
        "description": "sk_live_… or sk_test_…. Omit the header to use the free anonymous scope."
      }
    },
    "schemas": {
      "TitleSummary": {
        "type": "object",
        "required": [
          "id",
          "slug",
          "name",
          "type",
          "year",
          "tmdb_id",
          "imdb_id",
          "poster_url"
        ],
        "properties": {
          "id": {
            "type": "string",
            "examples": [
              "ttl_5k2m9x1qzc7v"
            ]
          },
          "slug": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "movie",
              "tv"
            ]
          },
          "year": {
            "type": [
              "integer",
              "null"
            ]
          },
          "tmdb_id": {
            "type": [
              "integer",
              "null"
            ]
          },
          "imdb_id": {
            "type": [
              "string",
              "null"
            ]
          },
          "poster_url": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "Chart": {
        "type": "object",
        "properties": {
          "provider": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "movie",
              "tv"
            ]
          },
          "date": {
            "type": "string",
            "format": "date"
          },
          "updated_at": {
            "type": "string",
            "format": "date-time"
          },
          "rankings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RankingItem"
            }
          }
        }
      },
      "RankingItem": {
        "type": "object",
        "properties": {
          "rank": {
            "type": "integer"
          },
          "previous_rank": {
            "type": [
              "integer",
              "null"
            ]
          },
          "rank_change": {
            "type": [
              "integer",
              "null"
            ]
          },
          "is_new": {
            "type": "boolean"
          },
          "days_in_top_10": {
            "type": "integer"
          },
          "peak_rank": {
            "type": [
              "integer",
              "null"
            ]
          },
          "first_charted_at": {
            "type": [
              "string",
              "null"
            ],
            "format": "date"
          },
          "title": {
            "$ref": "#/components/schemas/TitleSummary"
          }
        }
      },
      "TrendSignals": {
        "type": "object",
        "description": "Each category is 0-100 within the scope and day, or null when the category had no data that day.",
        "required": [
          "chart_momentum",
          "demand",
          "attention"
        ],
        "properties": {
          "chart_momentum": {
            "type": [
              "number",
              "null"
            ],
            "description": "Position, breadth, and movement across Top 10 charts inside the scope."
          },
          "demand": {
            "type": [
              "number",
              "null"
            ],
            "description": "Consumption and discovery intent. First-party activity is worldwide; discovery rankings follow the country scope and are summed on the global list."
          },
          "attention": {
            "type": [
              "number",
              "null"
            ],
            "description": "Broad web attention, worldwide."
          }
        }
      },
      "ChartPosition": {
        "type": "object",
        "required": [
          "provider",
          "country",
          "type",
          "rank"
        ],
        "properties": {
          "provider": {
            "type": "string"
          },
          "country": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "movie",
              "tv"
            ]
          },
          "rank": {
            "type": "integer"
          }
        }
      },
      "TrendItem": {
        "type": "object",
        "properties": {
          "rank": {
            "type": "integer"
          },
          "previous_rank": {
            "type": [
              "integer",
              "null"
            ]
          },
          "rank_change": {
            "type": [
              "integer",
              "null"
            ]
          },
          "score": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "previous_score": {
            "type": [
              "number",
              "null"
            ]
          },
          "score_change": {
            "type": [
              "number",
              "null"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "new",
              "rising",
              "steady",
              "peaking",
              "fading"
            ]
          },
          "chart_count": {
            "type": "integer",
            "description": "Top 10 charts inside the scope today, counted before plan filtering."
          },
          "on_charts": {
            "type": "array",
            "description": "Today's positions, filtered to the countries and providers your plan includes.",
            "items": {
              "$ref": "#/components/schemas/ChartPosition"
            }
          },
          "signals": {
            "$ref": "#/components/schemas/TrendSignals"
          },
          "title": {
            "$ref": "#/components/schemas/TitleSummary"
          }
        }
      },
      "TrendPoint": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "format": "date"
          },
          "rank": {
            "type": "integer"
          },
          "score": {
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "status": {
            "type": "string",
            "enum": [
              "new",
              "rising",
              "steady",
              "peaking",
              "fading"
            ]
          },
          "chart_count": {
            "type": "integer"
          },
          "signals": {
            "$ref": "#/components/schemas/TrendSignals"
          }
        }
      },
      "Error": {
        "type": "object",
        "properties": {
          "error": {
            "type": "object",
            "properties": {
              "code": {
                "type": "string",
                "enum": [
                  "invalid_request",
                  "unauthorized",
                  "forbidden",
                  "not_found",
                  "rate_limited",
                  "quota_exceeded",
                  "plan_required",
                  "internal_error"
                ]
              },
              "message": {
                "type": "string"
              },
              "details": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        },
        "examples": [
          {
            "error": {
              "code": "plan_required",
              "message": "Country \"JP\" is not included in the Free plan.",
              "details": {
                "param": "country",
                "requested": "JP",
                "allowed_countries": [
                  "US"
                ],
                "hint": "Use country=US, or send a key for a plan that includes JP.",
                "upgrade_url": "https://streamrank.io/pricing",
                "docs_url": "https://streamrank.io/docs.md#authentication"
              }
            }
          }
        ]
      }
    },
    "examples": {
      "Chart": {
        "value": {
          "data": {
            "provider": "netflix",
            "country": "US",
            "type": "movie",
            "date": "2026-09-10",
            "updated_at": "2026-09-10T22:49:43.000Z",
            "rankings": [
              {
                "rank": 1,
                "previous_rank": 3,
                "rank_change": 2,
                "is_new": false,
                "days_in_top_10": 8,
                "peak_rank": 1,
                "first_charted_at": "2026-09-03",
                "title": {
                  "id": "ttl_5k2m9x1qzc7v",
                  "slug": "the-whisper-man-2026",
                  "name": "The Whisper Man",
                  "type": "movie",
                  "year": 2026,
                  "tmdb_id": 860508,
                  "imdb_id": "tt11561116",
                  "poster_url": "https://image.tmdb.org/t/p/w500/….jpg"
                }
              }
            ]
          }
        }
      },
      "TitleSearch": {
        "value": {
          "data": [
            {
              "id": "ttl_5k2m9x1qzc7v",
              "slug": "the-whisper-man-2026",
              "name": "The Whisper Man",
              "type": "movie",
              "year": 2026,
              "tmdb_id": 860508,
              "imdb_id": "tt11561116",
              "poster_url": "https://image.tmdb.org/t/p/w500/….jpg",
              "match": "name"
            }
          ],
          "meta": {
            "count": 1
          }
        }
      },
      "TitleRankings": {
        "value": {
          "data": [
            {
              "date": "2026-09-10",
              "provider": "netflix",
              "country": "US",
              "type": "movie",
              "rank": 3,
              "previous_rank": 1,
              "rank_change": -2,
              "days_in_top_10": 13,
              "peak_rank": 1
            }
          ],
          "meta": {
            "title_id": "ttl_5k2m9x1qzc7v",
            "from": "2026-08-11",
            "to": "2026-09-10",
            "history_days": 30
          }
        }
      },
      "TrendingTitles": {
        "value": {
          "data": {
            "scope": "global",
            "date": "2026-09-10",
            "items": [
              {
                "rank": 1,
                "previous_rank": 4,
                "rank_change": 3,
                "score": 92.6,
                "previous_score": 81.4,
                "score_change": 11.2,
                "status": "rising",
                "chart_count": 9,
                "on_charts": [
                  {
                    "provider": "netflix",
                    "country": "US",
                    "type": "movie",
                    "rank": 1
                  },
                  {
                    "provider": "netflix",
                    "country": "GB",
                    "type": "movie",
                    "rank": 2
                  }
                ],
                "signals": {
                  "chart_momentum": 96.1,
                  "demand": 88.3,
                  "attention": 90.7
                },
                "title": {
                  "id": "ttl_5k2m9x1qzc7v",
                  "slug": "the-whisper-man-2026",
                  "name": "The Whisper Man",
                  "type": "movie",
                  "year": 2026,
                  "tmdb_id": 860508,
                  "imdb_id": "tt11561116",
                  "poster_url": "https://image.tmdb.org/t/p/w500/….jpg"
                }
              }
            ]
          },
          "meta": {
            "count": 1,
            "limit_max": 10,
            "history_days": 0
          }
        }
      },
      "TitleTrend": {
        "value": {
          "data": {
            "title_id": "ttl_5k2m9x1qzc7v",
            "scope": "US",
            "current": {
              "scope": "US",
              "date": "2026-09-10",
              "rank": 2,
              "previous_rank": 5,
              "rank_change": 3,
              "score": 90.1,
              "previous_score": 78.9,
              "score_change": 11.2,
              "status": "rising",
              "chart_count": 3,
              "signals": {
                "chart_momentum": 94,
                "demand": 86.2,
                "attention": 88.5
              }
            },
            "history": [
              {
                "date": "2026-09-10",
                "rank": 2,
                "score": 90.1,
                "status": "rising",
                "chart_count": 3,
                "signals": {
                  "chart_momentum": 94,
                  "demand": 86.2,
                  "attention": 88.5
                }
              },
              {
                "date": "2026-09-09",
                "rank": 5,
                "score": 78.9,
                "status": "new",
                "chart_count": 2,
                "signals": {
                  "chart_momentum": 81.3,
                  "demand": 74,
                  "attention": null
                }
              }
            ]
          },
          "meta": {
            "from": "2026-08-11",
            "to": "2026-09-10",
            "history_days": 30
          }
        }
      },
      "Countries": {
        "value": {
          "data": [
            {
              "code": "US",
              "name": "United States",
              "providers": [
                "netflix",
                "prime",
                "disney",
                "max",
                "hulu",
                "apple",
                "paramount",
                "peacock"
              ],
              "included_in_plan": true
            }
          ]
        }
      },
      "Providers": {
        "value": {
          "data": [
            {
              "id": "netflix",
              "name": "Netflix",
              "countries": [
                "AU",
                "CA",
                "DE",
                "FR",
                "GB",
                "JP",
                "US"
              ],
              "included_in_plan": true
            },
            {
              "id": "prime",
              "name": "Prime Video",
              "countries": [
                "…"
              ],
              "included_in_plan": true
            }
          ]
        }
      },
      "Error": {
        "value": {
          "error": {
            "code": "plan_required",
            "message": "Country \"JP\" is not included in the Free plan.",
            "details": {
              "param": "country",
              "requested": "JP",
              "allowed_countries": [
                "US"
              ],
              "hint": "Use country=US, or send a key for a plan that includes JP.",
              "upgrade_url": "https://streamrank.io/pricing",
              "docs_url": "https://streamrank.io/docs.md#authentication"
            }
          }
        }
      }
    }
  }
}