If you've spent any time looking at IPTV apps or reseller dashboards, you've seen these two formats: M3U playlists and Xtream Codes API. They're often presented as alternatives — "M3U URL or Xtream login" — but they're actually different things solving overlapping problems. This article breaks down what each one really is, the trade-offs, and when to use which.
The fast answer
- M3U: A simple text file format. A list of channels. Static. Easy.
- Xtream Codes API: A protocol with authentication, dynamic channel lists, EPG, VOD, and series support. Richer.
If your supplier offers both, prefer Xtream Codes for production. M3U is fine for testing and one-off setups.
What is M3U really?
M3U is a text-based playlist format that's been around since 1998 — it predates IPTV by a decade. A typical M3U file looks like this:
#EXTM3U
#EXTINF:-1 tvg-id="bbc1.uk" tvg-name="BBC One" tvg-logo="http://logos.example.com/bbc1.png" group-title="UK General",BBC One
http://server.example.com/live/user/pass/100.ts
#EXTINF:-1 tvg-id="bbc2.uk" tvg-name="BBC Two" group-title="UK General",BBC Two
http://server.example.com/live/user/pass/101.ts
The structure is just:
#EXTINFline with metadata (logo, EPG ID, group, name)- Stream URL on the next line
- Repeat for every channel
The IPTV app downloads this entire file, parses it, and shows each channel as an entry.
M3U pros
- Simple, human-readable
- Universal — every IPTV app on every platform supports it
- Easy to share between providers and tools
- You can manually edit one in a text editor
M3U cons
- Static: Once the app downloads the playlist, channel changes on the server don't sync until the user manually re-imports
- No real authentication: The credentials are part of the URL — they're visible to anyone who can read the playlist file. This is a privacy and security disaster.
- No EPG: Unless you provide a separate XMLTV file
- No VOD/series: M3U is just live channels; movies and TV series need a different format
- Bulk-download problem: A 5,000-channel M3U file is 5+ MB; downloading on every app launch is slow
What is Xtream Codes API?
Xtream Codes API is the de facto IPTV REST protocol named after the Xtream Codes panel that popularized it. The customer's app makes authenticated HTTP requests to specific endpoints to get channel lists, EPG data, VOD, etc.
The customer enters three things in their app:
- Server URL: e.g.
http://your-server.com:8080 - Username
- Password
The app then queries endpoints like:
# Get account info (subscription expiry, max connections)
GET /player_api.php?username=XXX&password=YYY
# Get all live channel categories
GET /player_api.php?username=XXX&password=YYY&action=get_live_categories
# Get channels in a category
GET /player_api.php?username=XXX&password=YYY&action=get_live_streams&category_id=1
# Get EPG for a channel
GET /player_api.php?username=XXX&password=YYY&action=get_short_epg&stream_id=1234
# Get VOD movies
GET /player_api.php?username=XXX&password=YYY&action=get_vod_streams
# Get series
GET /player_api.php?username=XXX&password=YYY&action=get_series
Xtream Codes pros
- Dynamic: Channel changes on server are reflected immediately
- Built-in EPG: Per-channel program guide without a separate XMLTV setup
- VOD & Series: Full library support with metadata, posters, descriptions
- Connection accounting: Server knows about every active session, can enforce limits
- Subscription metadata: Expiry dates, package info shown in the app
- Smaller initial load: Categories first, channels on demand
Xtream Codes cons
- Server must support the API (not all panels do — check before committing)
- Credentials still travel over the wire; HTTPS is essential (use our hardening guide)
- Slightly more complex to debug than a flat M3U file
Side-by-side feature comparison
| Feature | M3U | Xtream Codes |
|---|---|---|
| Live TV | ✓ | ✓ |
| VOD movies | limited | ✓ full metadata |
| TV series | no | ✓ |
| Built-in EPG | no (separate XMLTV) | ✓ |
| Channel categories | via group-title | ✓ structured |
| Catch-up TV | no | ✓ (with archive) |
| Connection limits | no enforcement | ✓ enforced |
| Subscription expiry shown | no | ✓ |
| App support | universal | most major IPTV apps |
| Initial load size | large (entire file) | small (paginated API) |
So when do you use each?
Use M3U when:
- Setting up a quick test (you got an M3U URL from a supplier and want to verify it plays)
- Your customer's device only supports M3U (some smart TVs, older STBs)
- You're aggregating channels from multiple sources into one playlist
- You're a hobbyist with under 100 channels
Use Xtream Codes when:
- You're running an IPTV business at any reasonable scale
- Customers expect EPG and program info
- You sell VOD and TV series alongside live
- You need connection limit enforcement (which is most of the time)
- You want subscription expiry shown directly in the customer's app
The good news: most modern apps support both
IPTV Smarters, TiviMate, Smart IPTV, GSE Smart IPTV — all the major players support both formats. Customers usually pick the option their supplier sends them. As an operator, offering both is ideal: M3U for compatibility with old devices, Xtream Codes as the recommended primary.
Our restream service outputs in both formats from the same source, so you don't have to choose for your customers.
Validating playlists before you import
Whether your source is M3U or Xtream Codes, validate it before importing 5,000 channels into your panel. Our M3U checker catches duplicate channels, malformed EXTINF tags, and dead URLs in seconds — much faster than discovering issues during customer onboarding.
Bottom line
M3U is the simpler, dumber, more universal format. Xtream Codes is the richer, smarter, more business-ready format. For testing and compatibility: M3U. For production: Xtream Codes API. Most serious operators support both.