All need Authorization: Bearer except identity and login.

Method Action
GET identity Health check and capabilities
POST login Sign in a line
POST refresh-session Renew the session
POST logout Sign out this device
POST logout-all Sign out every device of the line
GET account-info The line's status
GET live-categories, vod-categories, series-categories Categories
GET live-channels Channels, paginated
GET vod-movies Movies, paginated
GET series Series, paginated
GET vod-info One movie
GET series-info One series with seasons and episodes
GET episode-info One episode with its series
GET short-epg Upcoming programs of a channel
GET epg Guide of a channel in a time range (with past programs)
GET epg-now Now and next for up to 100 channels
GET search Search by name
GET recently-added Newest items
GET events Event channels
GET history The line's watch history
GET continue-watching Movies and episodes to resume, next episodes
POST history-update Report what is being watched
POST history-remove, history-clear Remove history
POST diagnostics Report blocked streaming hosts (7.7)
GET genres Genre dictionary
GET actor-images Photos of an actor
GET upcoming-matches Upcoming matches of a channel
GET brand-info Reseller branding
GET playback-routes Which streaming node serves what
GET get-playback-url Server-issued playback URL
GET streaming-servers Streaming nodes of the line

GET identity

No session token needed.

{
  "platform": "xtream-ai",
  "version": "2.6",
  "timestamp": 1767225600,
  "capabilities": ["token_auth", "playback_tokens", "api_keys", "branding",
                   "client_playback_tokens", "playback_routes",
                   "refresh_session", "renewable_sessions", "error_codes",
                   "epg_batch", "episode_info", "watch_history", "adult_flags",
                   "channel_thumbnails", "playback_reports",
                   "picture_routes", "list_fields", "search_relevance",
                   "relative_images"]
}

timestamp is the panel's clock. version is the contract described here. Capabilities tell you what this panel supports; panels update at different times, so check before relying on:

Capability Means
client_playback_tokens, playback_routes Section 7 (direct playback). Without them, use get-playback-url
renewable_sessions refresh-session accepts an expired token (90 days). Without it, an expired token means signing in again
error_codes Errors carry code
epg_batch epg-now and epg with a time range
episode_info episode-info
watch_history history, continue-watching and history-*
adult_flags is_adult on categories and items
channel_thumbnails Channel pictures (7.6), on nodes with thumbnails: true
playback_reports diagnostics (7.7); stall reports go to nodes with reports: true
picture_routes Channel routes list pictures: the nodes that keep that channel's picture (7.1, 7.6)
list_fields fields on lists and compact series items (section 3)
search_relevance search sorts by relevance by default (sort_by=relevance)
relative_images images=relative (section 3)

GET account-info

{ "username": "line1234", "status": "active", "exp_date": 1770000000, "is_trial": false,
  "created": 1720000000, "active_connections": 1, "max_connections": 2 }
  • status: active, expired, banned or disabled.
  • exp_date: unix seconds, or null if the line never expires. For a line whose clock starts on first use, the projected date.
  • active_connections: what is playing right now.