PhiPTV — Compatibility checklist for service operators https://phiptv.com/providers Tick every line and your service will look and behave at its best inside PhiPTV. Everything here is derived from how the app actually reads a source. PhiPTV does not supply, list or endorse any service; this is technical guidance only. XTREAM CODES API [ ] player_api.php answers get_live_categories, get_live_streams, get_vod_categories, get_vod_streams, get_series_categories, get_series, get_vod_info and get_series_info within 30 seconds. [ ] user_info returns auth (0 as a NUMBER for a wrong login) and max_connections. max_connections drives the app's "Auto" stream limit. status and exp_date are read but not shown to the customer. [ ] Every live stream has stream_icon, category_id and epg_channel_id, and its stream_id never changes (favourites and history are stored on it). Channel numbers are positions inside each category; num is not shown. [ ] Archived channels carry tv_archive = 1 and tv_archive_duration in whole days; /timeshift/USER/PASS/MIN/YYYY-MM-DD:HH-MM/ID.m3u8 (or .ts, or /streaming/timeshift.php) answers 2xx with media; server_info carries time_now and timestamp_now so replay start times are right. [ ] Usernames and passwords contain no / ? # % or spaces (they are written into stream paths as typed). [ ] epg_channel_id equals the channel="…" id in your XMLTV exactly. [ ] Every live stream_id is served as raw .ts AND as .m3u8 (the app tunes .ts first and falls back to .m3u8). [ ] is_adult is set to 1 on every adult live stream, movie and series. It is the ONLY signal the parental filter uses. [ ] Radio streams carry stream_type "radio_streams". [ ] Categories are returned in the order you want them shown; streams and titles in the order you want them listed (the app never re-sorts; customers can hide or move categories themselves, stored by name, so keep names stable). [ ] Category names are spelled identically everywhere ("EN | Sports" and "EN| Sports" are two categories). [ ] get_vod_streams carries stream_icon, rating (0-10), year, genre, container_extension. [ ] get_vod_info fills plot, cast, director, genre, releasedate, duration_secs, backdrop_path, movie_image or cover_big, tmdb_id, youtube_trailer. [ ] get_series carries cover, rating (0-10), year, genre, last_modified. [ ] get_series_info puts every season inside the episodes OBJECT (the top-level seasons array is ignored) and fills per-episode added, info.plot, info.duration_secs, info.movie_image. [ ] xmltv.php serves the guide (gzip welcome, no size cap). [ ] Connection-limit rejections return HTTP 429 or 509 (retried quietly), not 403/404 (treated as a dead channel). [ ] No User-Agent filtering: the MAG250 string (plus X-MAC / mac cookie) for the API and playlist, "VLC/3.0.20 LibVLC/3.0.20" for streams and replays; xmltv.php and images arrive with the platform default. M3U PLAYLISTS [ ] First line starts with #EXTM3U. [ ] Every entry is exactly #EXTINF line + URL line. No #EXTVLCOPT, #KODIPROP or #EXTGRP lines in between (those entries are dropped). [ ] Channel name is after the last comma. tvg-id, tvg-logo, group-title are filled; radio entries have radio="true". [ ] The file is ordered the way you want channels listed and numbered inside each group; new channels go at the end (entries are identified by position). [ ] No " or ' inside attribute values; no |User-Agent= suffixes on URLs. [ ] The XMLTV URL is published where customers can copy it (the #EXTM3U header's url-tvg is not read). XMLTV GUIDE [ ] Every has start, stop and channel. [ ] Every timestamp carries a space and a ±HHMM offset (none = UTC). [ ] The title/desc language you want shown comes first in each programme. [ ] Only & < > " ' are used as entities; other characters are written directly in UTF-8. IMAGES [ ] Logos and posters load without a User-Agent or Referer check. [ ] Logos are square-ish PNG/JPG, around 256 px; posters are portrait. [ ] http and https both work; https preferred. NOT SUPPORTED BY PHIPTV — do not promise these to PhiPTV users - Catch-up for M3U playlists (catchup-* attributes); Xtream catch-up IS supported (tv_archive) - DRM-protected streams - Stalker / MAG portals - External subtitle files (.srt / .vtt); only embedded tracks - RTSP, RTMP, Smooth Streaming - Movies & Series inside an M3U file - allowed_output_formats and server_info.timezone - tvg-chno, url-tvg / x-tvg-url - XMLTV elements (display-name, icon)