A small JSON API to manage tenants, streams, destinations, and read relay status.
https://watch.taylor.am/api
All endpoints are authenticated using a Sanctum Personal Access Token. You can generate or revoke these tokens from your dashboard under Settings → API tokens. Requests are rate-limited to 60 / minute per IP, and all errors are returned as JSON.
Send the token in the Authorization header as a Bearer token:
curl -H "Authorization: Bearer YOUR_TOKEN_HERE" https://watch.taylor.am/api/channels
Your account is scoped to the workspaces you belong to. Tokens can be read-only or read/write. Mutating stream and destination endpoints require a write token and the Manage streams role in that workspace. Workspace and stream provisioning endpoints are admin-only and are documented in the admin console.
| Method | Path | Description |
|---|---|---|
| GET | /tenants | List workspaces you can access. |
| GET | /channels | List streams with their tenant, destinations and relay status. |
| GET | /channels/{channel}/ingest | Ingest + playback URLs and keys for a stream. |
| GET | /channels/{channel}/status | Current channel status, live viewer count and destination relay states. |
| GET | /channels/{channel}/destinations | List a stream's outbound destinations. |
| POST | /channels/{channel}/destinations | Add a destination (protocol, url, name). |
| PUT | /channels/{channel}/destinations/{destination} | Update a destination's name, protocol, URL and optional video settings. |
| PATCH | /channels/{channel}/destinations/{destination}/toggle | Enable or disable a destination with an explicit enabled boolean. |
| DELETE | /channels/{channel}/destinations/{destination} | Disable and flag a destination for watchdog removal. |
| DELETE | /channels/{channel} | Disable and flag a channel and its destinations for watchdog removal. |
| GET | /channels/{channel}/relays | Per-destination relay status with the latest events. |
POST and PUT destination requests accept either a custom destination or a saved preset payload. For a custom destination, send name, protocol (rtmp, rtsp or srt) and url. Optional video_settings can include resolution (source, 1080p, 720p, 480p) and bitrate in Kbps. The toggle endpoint accepts {"enabled": true} or {"enabled": false}.
curl -H "Authorization: Bearer YOUR_TOKEN_HERE" https://watch.taylor.am/api/channels
[
{
"id": 1,
"path_name": "acme--main",
"status": "live",
"tenant": { "id": 1, "name": "Acme" },
"destinations": [
{ "id": 7, "name": "YouTube", "protocol": "rtmp",
"relay_process": { "status": "running" } }
]
}
]
curl -H "Authorization: Bearer YOUR_TOKEN_HERE" \
-H "Content-Type: application/json" \
-d '{"name":"Twitch","protocol":"rtmp","url":"rtmp://live.twitch.tv/app/KEY"}' \
https://watch.taylor.am/api/channels/1/destinations
curl -X PUT -H "Authorization: Bearer YOUR_TOKEN_HERE" \
-H "Content-Type: application/json" \
-d '{"name":"YouTube backup","protocol":"rtmp","url":"rtmps://a.rtmps.youtube.com:443/live2/KEY","video_settings":{"resolution":"720p","bitrate":3500}}' \
https://watch.taylor.am/api/channels/1/destinations/7
curl -X PATCH -H "Authorization: Bearer YOUR_TOKEN_HERE" \
-H "Content-Type: application/json" \
-d '{"enabled":false}' \
https://watch.taylor.am/api/channels/1/destinations/7/toggle
curl -X DELETE -H "Authorization: Bearer YOUR_TOKEN_HERE" \
https://watch.taylor.am/api/channels/1/destinations/7
{
"message": "Destination pending deletion.",
"destination": { "id": 7, "enabled": false, "pending_deletion": true }
}
curl -H "Authorization: Bearer YOUR_TOKEN_HERE" https://watch.taylor.am/api/channels/1/status
{
"channel_id": 1,
"path_name": "acme--main",
"status": "live",
"viewers": 7,
"destinations": [
{ "id": 7, "name": "YouTube", "enabled": true, "relay_status": "running" }
]
}
curl -X DELETE -H "Authorization: Bearer YOUR_TOKEN_HERE" \
https://watch.taylor.am/api/channels/1
{
"message": "Channel pending deletion.",
"channel_id": 1,
"pending_deletion": true
}
Create developer webhooks from Settings -> Developer webhooks. Each delivery is a JSON POST signed with X-Streamrepeater-Signature, where the value is sha256= plus an HMAC-SHA256 of the raw request body using the endpoint's signing secret.
{
"id": "9b6f6b4d-2d13-4d4b-b3b8-54ff5d29c9ef",
"event": "stream.live",
"created_at": "2026-06-16T12:00:00+00:00",
"data": {
"channel": { "id": 1, "title": "Main Feed" },
"destination_count": 2
}
}
Available events: stream.live, stream.offline, and destination.failed. The settings page can also send a ping test event.
Need help integrating? Get in touch.