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,bannedordisabled.exp_date: unix seconds, ornullif the line never expires. For a line whose clock starts on first use, the projected date.active_connections: what is playing right now.