Skip to content

Stream Management API

Stream management APIs are mounted under /v6/api/. Responses follow REST conventions: success returns resource JSON; pagination uses { data, meta }; errors use RFC 7807 application/problem+json.

Default base URL: http://localhost:8180.

  1. List streams (paginated):
Terminal window
curl 'http://localhost:8180/v6/api/streams?page=1&per_page=20'
  1. Get stream detail:
Terminal window
curl http://localhost:8180/v6/api/streams/live/demo
  1. Stop the stream:
Terminal window
curl -X DELETE http://localhost:8180/v6/api/streams/live/demo

URL-encode streamPath when it contains /, e.g. live/demolive%2Fdemo.

GET /v6/api/streams?page=1&per_page=20
QueryDescriptionDefault
pagePage number (1-based)1
per_pagePage size20

Response example:

{
"data": [
{
"path": "live/camera01",
"state": 1,
"subscribers": 5,
"start_time_ms": 1742306400000,
"plugin_name": "rtmp",
"stream_type": "server",
"video_track": {
"codec": "H264",
"width": 1920,
"height": 1080,
"bps": 312500,
"fps": 30
}
}
],
"meta": { "page": 1, "per_page": 20, "total": 1 }
}
GET /v6/api/streams/{streamPath}
DELETE /v6/api/streams/{streamPath}

Stops publishing and releases stream resources. Returns 204 No Content on success.

CaseHTTPNotes
Stream not found404RFC 7807 Problem Detail
Empty path400stream path is required

Behavior:

  • With no subscribers, or without continue_push_timeout: normal teardown.
  • With active subscribers and publish.continue_push_timeout set: stream may enter waiting reconnect instead of immediate disposal; subscribers may stay connected.

This is stop/dispose, not pause. Engine-level pause/resume has no /v6/api/ endpoint.

Not available on /v6/api/ (gRPC pause_stream / resume_stream also return not implemented):

CapabilityStatus
Pause stream distribution❌ Not implemented
Resume stream distribution❌ Not implemented
Kick subscriber by ID❌ Not implemented

Supported today:

  • List subscribers: GET /v6/api/streams/{streamPath}/subscribers
  • Stop entire stream: DELETE /v6/api/streams/{streamPath}

is_paused in stream detail is read-only.

Live room pause/resume (different API):

POST /live/rooms/{room_id}/pause
POST /live/rooms/{room_id}/resume

See Live plugin.

Use a pull proxy:

POST /v6/api/proxies/pull
Content-Type: application/json
{
"name": "remote_camera",
"pull_url": "rtsp://192.168.1.50:554/stream1",
"stream_path": "live/remote_camera",
"pull_on_start": true
}

Push proxies use /v6/api/proxies/push with the same CRUD/lifecycle pattern.

GET /v6/api/streams/{streamPath}/subscribers?page=1&per_page=20

id is the numeric subscriber ID as a string. Missing stream returns an empty list (total: 0), not an error.

Not implemented. No /v6/api/ endpoint to kick a single subscriber; stop the whole stream or wait for the client to disconnect.

GET /v6/api/streams/{streamPath}/tracks/video
GET /v6/api/streams/{streamPath}/tracks/audio
MethodPathDescription
GET/v6/api/aliasesList aliases
PUT/v6/api/aliasesCreate/update (alias, stream_path, auto_remove)
DELETE/v6/api/aliases/{alias}Remove alias
MethodPath
GET/v6/api/tasks/tree
POST/v6/api/tasks/{id}/stop
POST/v6/api/tasks/{id}/restart
MethodPath
GET/v6/api/system/info
GET/v6/api/system/summary
GET/v6/api/system/health
GET /v6/api/plugins
GET /v6/api/streams/secret?stream_path=live/test&type=publish&expire=<hex>&plugin=rtmp

See HTTP API Overview and Advanced: Stream Authentication.