Skip to main content
The management API is mounted at /api/v1/ (or /<path>/api/v1/ if a URL path prefix is configured). All endpoints except the public playlist resource endpoint require a valid admin JWT bearer token.
Admin endpoints are protected by the validator_admin middleware. If web_auth_enabled is false in your tuliprox setup, the middleware is bypassed and no token is required.

System

Server status

Returns a JSON object describing the current server state.

Active streams

Returns the list of currently active streams.

GeoIP database update

Triggers an update of the GeoIP database used for connection geo-filtering. Returns 200 OK on success, 400 Bad Request if GeoIP is disabled or the download failed.

IP info

Returns the server’s detected public IPv4 and IPv6 addresses. Requires ipcheck to be configured in config.yml.

Configuration

Get full configuration

Returns the current config.yml, source.yml, and api-proxy.yml contents merged into a single JSON object. Response headers include revision hashes for each file:

Save main config

Saves a new config.yml. Requires the If-Match header to contain the current revision hash from x-config-main-revision. Request body: JSON ConfigDto object. Headers: Responses:
Always fetch the config first, record the revision header, then send that revision in If-Match when saving. This prevents overwriting concurrent changes.

Save sources config

Saves a new source.yml. Same If-Match / x-config-sources-revision revision-check protocol as config/main. Request body: JSON SourcesConfigDto object.

Get API proxy config

Returns the current api-proxy.yml content (excluding the user list). Response includes the x-config-api-proxy-revision header.

Save API proxy config

Saves updated server and global settings from api-proxy.yml. Uses the same If-Match / x-config-api-proxy-revision revision-check protocol. Request body: JSON ApiProxyConfigDto object (without the user list — use the user endpoints below to manage users).

Get batch content for an input

Downloads the raw batch CSV file for a given input. Returns text/csv.
number
required
The numeric input ID.

Test Xtream provider login

Attempts to log in to an Xtream Codes provider and returns the login response. Useful for verifying provider credentials before saving them in source.yml. Request body:

File downloads

Queue a file download

Queues a background file download task.

Get download status

Returns the status of any queued or in-progress file downloads.

Playlist management

Trigger playlist update

Triggers a manual playlist refresh. Deduplicates rapid calls — if an update is already pending, the response is still 202 Accepted but no duplicate run is queued. Request body: JSON array of target name strings. Send an empty array [] to update all targets.

Get live channels

Returns the live channel playlist for the specified source. Used by the web UI playlist browser. Request body: A PlaylistRequest object:
or for an input:
or for a custom Xtream provider:
or for a custom M3U URL:

Get VOD

Same request body as /playlist/live. Returns VOD items.

Get series

Same request body as /playlist/live. Returns series items.

Get series info

Returns detailed info for a series item.
string
required
The virtual stream ID of the series.
string
required
The provider stream ID.
Request body: A PlaylistRequest with Target variant.

Get series episode item

Returns a single series episode item.
string
required
The virtual stream ID of the episode.
Request body: A PlaylistRequest with Target variant.

Get EPG for playlist

Returns the EPG data for a target or custom source. Used by the web UI EPG viewer. Request body: A PlaylistEpgRequest object:
or for a custom URL:

Get web player URL

Generates a short-lived stream URL for the built-in web player. Request body:
Returns a plain-text URL string using a JWT access token valid for 30 seconds.

Public: playlist resource proxy

Proxy for obfuscated resource URLs (e.g., cover images) embedded in web UI playlist responses. This endpoint is public — no authentication required.
string
required
Obfuscated resource identifier generated internally by tuliprox.

Library management

These endpoints are available only when library.enabled: true in config.yml.

Trigger library scan

Starts a background scan of the configured library directories. Returns 202 Accepted immediately; the scan runs asynchronously. If a scan is already in progress, returns 400 Bad Request. Request body:
boolean
When true, forces a full re-scan of all library directories even if files have not changed.

Get library status

Returns the current status of the local media library, including item counts.

User management

These endpoints manage proxy users in api-proxy.yml (or the user database when use_user_db: true).

Create a user

Creates a new user credential under the specified target.
string
required
The target name (as defined in source.yml) to associate the user with.
Request body: JSON ProxyUserCredentialsDto object:

Update a user

Updates an existing user credential. The username in the request body identifies the user to update. If the target path parameter differs from the user’s current target, the user is moved to the new target. Request body: Same ProxyUserCredentialsDto structure as create.

Delete a user

Deletes a user credential.
string
required
The target the user belongs to.
string
required
The username to delete.

User self-service API

These endpoints are for authenticated end-users (not admins). They use a user JWT bearer token rather than the admin token, and are enabled only when user_ui_enabled is true in config.yml.

Get playlist categories

Returns the category groups available to the authenticated user, split by output type.

Get user bouquet

Returns the user’s saved channel bouquet (favourite/selected channels) for both Xtream and M3U output types.

Save user bouquet

Saves the user’s channel bouquet. Request body: JSON PlaylistBouquetDto object.