Skip to main content
tuliprox listens on a single HTTP port (default 8901) and serves several distinct API surfaces from that port. Base URL
http://<host>:8901
The port is set in config.yml. If tuliprox is behind a reverse proxy with a path prefix configured in api-proxy.yml, prepend that path to every URL shown in this reference.

API groups

M3U API

Download processed M3U/M3U8 playlists and stream live, VOD, and series content. Endpoints: GET /get.php, GET /m3u, GET /apiget.

Xtream Codes API

Full Xtream Codes-compatible API for media players. Endpoints: player_api.php, panel_api.php, /xtream, stream paths, catchup/timeshift.

HDHomeRun API

Emulates an HDHomeRun network tuner device for Plex, Emby, and Jellyfin. Endpoints: device.xml, discover.json, lineup.json, lineup_status.json.

XMLTV / EPG API

Serve Electronic Programme Guide data in XMLTV format. Endpoints: GET /xmltv.php, GET /epg, GET /update/epg.php.

Management API (v1)

REST API for the web UI and automation. Configuration, playlist management, library management, and user CRUD. All routes under /api/v1/.

Authentication

How username/password, token, and JWT credentials work across all API surfaces.

Port and server configuration

The default port is 8901. Change it in config.yml:
api:
  host: 0.0.0.0
  port: 8901
If you run tuliprox behind a reverse proxy and want a URL path prefix, set path in api-proxy.yml:
server:
  - name: default
    protocol: http
    host: tv.example.com
    port: "443"
    path: tuliprox
With path: tuliprox every endpoint becomes http://tv.example.com:443/tuliprox/<endpoint>.

Protocol notes

  • All endpoints use plain HTTP. TLS termination is done by an upstream proxy.
  • Playlist and stream endpoints accept both GET (query parameters) and POST (form body) unless noted otherwise.
  • The management API (/api/v1/) uses JSON request and response bodies.
  • HDHomeRun endpoints run on a separate port configured under hdhr in config.yml.

Build docs developers (and LLMs) love