API reference

A small JSON API to manage tenants, streams, destinations, and read relay status.

Base URL

https://watch.taylor.am/api

Authentication

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.

Endpoints

MethodPathDescription
GET/tenantsList workspaces you can access.
GET/channelsList streams with their tenant, destinations and relay status.
GET/channels/{channel}/ingestIngest + playback URLs and keys for a stream.
GET/channels/{channel}/statusCurrent channel status, live viewer count and destination relay states.
GET/channels/{channel}/destinationsList a stream's outbound destinations.
POST/channels/{channel}/destinationsAdd 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}/toggleEnable 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}/relaysPer-destination relay status with the latest events.

Destination parameters

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}.

Example: list streams

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" } }
    ]
  }
]

Example: add a destination

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

Example: update a destination

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

Example: pause a destination

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

Example: delete a destination

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 }
}

Example: channel status

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" }
  ]
}

Example: delete a channel

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
}

Event webhooks

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.