Skip to main content
GET
/
v1
/
tv
/
{id}
/
seasons
/
{s}
/
episodes
/
{e}
Get streaming sources for a TV episode
const options = {method: 'GET'};

fetch('https://api.example.com/v1/tv/{id}/seasons/{s}/episodes/{e}', options)
  .then(res => res.json())
  .then(res => console.log(res))
  .catch(err => console.error(err));
{
  "responseId": "e7f2c8d1-9a3b-4c5e-8f1d-2a6b9c4e7f3a",
  "expiresAt": "2026-01-15T20:30:00Z",
  "sources": [
    {
      "id": "src_tv_001",
      "url": "/v1/proxy?data=%7B%22url%22%3A%22https%3A%2F%2Fstreaming.provider.com%2Fbreaking-bad%2Fs01e01.m3u8%22%7D",
      "type": "hls",
      "quality": "1080p",
      "audioTracks": [
        {
          "language": "en",
          "label": "English"
        },
        {
          "language": "es",
          "label": "Spanish"
        },
        {
          "language": "de",
          "label": "German"
        }
      ],
      "provider": {
        "id": "prov_streaming",
        "name": "Streaming Provider"
      }
    }
  ],
  "subtitles": [
    {
      "url": "/v1/proxy?data=%7B%22url%22%3A%22https%3A%2F%2Fsubs.provider.com%2Fbb-s01e01-en.vtt%22%7D",
      "label": "English",
      "format": "vtt"
    }
  ],
  "diagnostics": []
}

Path Parameters

id
string
required

TMDB series ID (numeric, max 20 characters)

Pattern: ^\d{1,20}$
s
integer
required

Season number (0–99, where 0 is specials)

Required range: 0 <= x <= 99
e
integer
required

Episode number (1–9,999)

Required range: 1 <= x <= 9999

Response

Streaming sources and subtitles found

responseId
string<uuid>
required

Unique identifier for this response (UUID v4)

Example:

"bdfa40a7-a468-461c-8563-7a0c165f252c"

expiresAt
string<date-time>
required

ISO 8601 timestamp when sources expire and cache is invalidated. Recommended default: 2 hours from response time for sources.

Example:

"2026-01-15T18:00:00Z"

sources
object[]
required

Array of available streaming sources

subtitles
object[]
required

Array of available subtitles

diagnostics
object[]
required

Optional diagnostics for partial scrapes, warnings, or metadata inferred from filenames. Useful for understanding why certain fields may have incomplete or inferred values.