TV shows

List episodes

GET/tv/episodes/

read Read: looks, changes nothing. Scopes

Episodes of the TV shows you may manage, a page at a time.

Query parameters

  • orderingstring

    Which field to use when ordering the results.

  • pageinteger

    A page number within the paginated result set.

  • page_sizeinteger

    Number of results to return per page.

  • searchstring

    Matches the name.

  • seasonstring (uuid)

    Only this season's episodes.

  • seriesstring (uuid)

    Only this TV show's episodes.

  • statestring

    The file's state; no_media: no file yet.

    One of: "draft" "failed" "ingesting" "no_media" "ready"

Response

200 OK

  • countintegerrequired

    How many there are in all, on every page.

  • nextstring (uri)can be null

    The next page, or null on the last one.

  • previousstring (uri)can be null

    The page before, or null on the first one.

  • resultsobject[]required
    • idstring (uuid)requiredread-only
    • xtream_idintegerrequiredread-only

      The number players know it by, in player links and the player API. Given when it is created, never changed or reused, because players save favourites against it.

    • seasonstring (uuid)required
    • season_numberintegerrequiredread-only
    • series_idstring (uuid)requiredread-only
    • series_namestringrequiredread-only
    • numberintegerrequired
    • codestringrequiredread-only
    • namestring

      Empty reads as "Episode N" wherever a title is shown.

    • titlestringrequiredread-only
    • plotstring
    • still_urlstring (uri)

      A frame from the episode, shown as its thumbnail. The series poster stands in when empty.

    • air_datestring (date)can be null
    • runtime_minutesintegercan be null
    • ratingstring (decimal)can be null

      Out of 10.

    • directorstring
    • writerstring
    • guest_starsstring
    • tmdb_idstring

      The episode's own TMDB record, filled by a sync.

    • is_activeboolean

      An inactive episode disappears from playlists and refuses playback, without being deleted.

    • media_filestring (uuid)requiredread-onlycan be null

      The file behind this title. Null until a source is attached. One title, one file — selling the same title in two qualities means two entries, which is also how every player's VOD list expects to see it.

    • mediaobjectrequiredread-only
      • idstring (uuid)requiredread-only
      • statestringrequiredread-only

        Lifecycle of the file itself, not of any one node's copy. "ready" means at least one node finished ingest and can serve it; per-node progress lives on MediaAsset.

        • draft - Draft
        • ingesting - Ingesting
        • ready - Ready
        • failed - Failed
      • original_namestringrequiredread-only

        Filename as uploaded, downloaded, or found in the watch folder. Kept for operator recognition only.

      • containerstringrequiredread-only

        File extension of what is actually served (mkv, mp4, ts, …). Ingest keeps the source's own container byte for byte, so this is whatever the file arrived as; the play URL carries it because players pick a demuxer from the extension.

      • size_bytesintegerrequiredread-only

        Size of the finished file. Drives the per-node storage quota.

      • duration_secondsnumberrequiredread-onlycan be null

        Null until a node probes the file.

      • video_codecstringrequiredread-only

        e.g. H.264, HEVC. Decides whether the operator preview player can show it.

      • widthintegerrequiredread-onlycan be null
      • heightintegerrequiredread-onlycan be null
      • fpsnumberrequiredread-onlycan be null

        Null when the file declares a variable or unknown rate.

      • checksumstringrequiredread-only

        Of the finished file. Node-to-node replication verifies against this, so a truncated copy is caught before it is ever served.

      • is_readybooleanrequiredread-only

        Whether a streaming server can serve this file now.

      • assetsobject[]requiredread-only
        • idstring (uuid)requiredread-only
        • serverstring (uuid)requiredread-only
        • server_namestringrequiredread-only
        • server_instance_idstringrequiredread-only
        • statusstringrequiredread-only
        • progress_pctintegerrequiredread-only
        • bytes_doneintegerrequiredread-only
        • bytes_totalintegerrequiredread-only
        • errorstringrequiredread-only

          Why the last attempt failed. Cleared on a successful retry.

        • last_verified_atstring (date-time)requiredread-onlycan be null

          When the node last confirmed the file is present and the right size.

      • audio_tracksobject[]requiredread-only
        • idstring (uuid)requiredread-only
        • indexintegerrequiredread-only

          Position within the stored container, 0-based.

        • languagestringrequiredread-only

          ISO 639-2 code as tagged in the container (eng, fra, ara). Empty when the source carried no tag.

        • titlestringrequiredread-only
        • codecstringrequiredread-only
        • channelsintegerrequiredread-onlycan be null
        • is_defaultbooleanrequiredread-only
      • subtitle_tracksobject[]requiredread-only
        • idstring (uuid)requiredread-only
        • indexintegerrequiredread-only

          Position within the stored container, 0-based.

        • languagestring

          ISO 639-2 code (eng, fra, ara). Required for operator-supplied files — an untagged subtitle shows up as "Track 3" on every player.

        • titlestring
        • codecstringrequiredread-only

          subrip, ass, hdmv_pgs_subtitle, ...

        • is_defaultboolean
        • is_forcedboolean

          Shown automatically for foreign-language passages even when subtitles are off.

        • is_sdhboolean
        • source_urlstring (uri)

          Where an operator-supplied subtitle was fetched from. Empty for tracks that came out of the source media.

      • deliverystringrequiredread-only

        Who carries the bytes. "stored" is the normal path: a node holds a copy and serves it off local disk. "proxy" keeps nothing — a node opens the source per viewer and passes the bytes through, so the title costs no storage and the viewer never learns the origin, but every byte crosses your bandwidth. "redirect" costs you neither: the viewer is sent to the source and fetches it themselves — which necessarily shows them the URL, and puts playback beyond anything you can observe or cut off. All three inherit the source's reliability: if it goes away, so does the film.

        • stored - Stored on a node
        • proxy - Proxied through a node
        • redirect - Sent straight to the source
      • source_urlstring (uri)requiredread-only

        Upstream this file is proxied from. Empty for stored files. Operator-visible only: it is handed to a node over the authenticated server-to-server channel and never reaches a viewer, which is the point of proxying.

      • source_storagestring (uuid)requiredread-onlycan be null

        Set when the source is an object in one of the panel's buckets (Settings → Storage). The file is then addressed by its key and a signed URL is made each time it is needed, because a signed URL expires and a stored one would stop the film after a few hours.

      • source_storage_namestringrequiredread-only
      • source_keystringrequiredread-only
      • source_labelstringrequiredread-only
      • supports_rangesbooleanrequiredread-only

        Whether the proxied source answered a range request when it was probed. False means the film plays from the start but cannot be scrubbed — accepted rather than refused, because a source that plays is worth more than one that is rejected for a feature the viewer may not use.

      • proxy_serverstring (uuid)requiredread-onlycan be null

        The node that carries a proxied title's traffic. Chosen by the operator rather than routed, because this is a bandwidth bill and picking which machine pays it is their decision, not a load-balancing one. Required for "proxy"; meaningless for the other two, since one serves from disk and the other never touches us.

      • proxy_server_namestringrequiredread-only
      • proxy_balancedbooleanrequiredread-only

        Proxied through whichever streaming node the panel picks at each play (load balanced: a viewer stays on one node, different viewers spread over all of them) instead of one chosen node. The operator opts into spreading the bandwidth bill; with it off, proxy_server alone carries the title.

      • created_atstring (date-time)requiredread-only
      • updated_atstring (date-time)requiredread-only
    • is_playablebooleanrequiredread-only

      Whether a viewer asking for it now could be served.

    • ready_node_countintegerrequiredread-only
    • created_atstring (date-time)requiredread-only
    • updated_atstring (date-time)requiredread-only

Errors

  • 401 No credential, or one that is wrong, expired or revoked.
  • 403 The account, or the key's or app's scopes, may not do this.
  • 429 Slow down: wait the seconds in the Retry-After header, then try again.

What each error means