Add Stream Output

Add a restream output to an active managed stream.

Endpoint

POST /api/streams/:streamId/outputs

Headers

X-API-Key: <appApiKey>
X-Package-Name: <packageName>

Parameters

  • streamId: The managed stream identifier

Request Body

{
  "url": "rtmp://streaming.service.com/live/stream-key",
  "name": "My Stream Output"
}

Response

Success:
{
  "success": true,
  "outputId": "output-uuid",
  "message": "Output added successfully"
}
Error:
{
  "error": "MAX_OUTPUTS_REACHED",
  "message": "Maximum outputs per stream reached (10)"
}

Implementation

  • File: packages/cloud/src/routes/streams.routes.ts:22-137
  • Middleware: validateAppApiKey
  • Service: ManagedStreamingExtension.addRestreamOutput()

Validation

  • URL must start with rtmp:// or rtmps://
  • App must be actively viewing the stream
  • Maximum 10 outputs per stream
  • Maximum 10 outputs per app
  • No duplicate URLs allowed

Remove Stream Output

Remove a restream output from a managed stream.

Endpoint

DELETE /api/streams/:streamId/outputs/:outputId

Headers

X-API-Key: <appApiKey>
X-Package-Name: <packageName>

Parameters

  • streamId: The managed stream identifier
  • outputId: The output identifier to remove

Response

Success:
{
  "success": true,
  "message": "Output removed successfully"
}
Error:
{
  "error": "NOT_AUTHORIZED",
  "message": "App did not add this output"
}

Implementation

  • File: packages/cloud/src/routes/streams.routes.ts:142-229
  • Authorization: Only the app that added an output can remove it

List Stream Outputs

Get all restream outputs for a managed stream.

Endpoint

GET /api/streams/:streamId/outputs

Headers

X-API-Key: <appApiKey>
X-Package-Name: <packageName>

Parameters

  • streamId: The managed stream identifier

Response

{
  "streamId": "stream-123",
  "outputs": [
    {
      "outputId": "output-uuid",
      "url": "rtmp://streaming.service.com/live/stream-key",
      "name": "My Stream Output",
      "addedBy": "com.example.app",
      "status": "active",
      "error": null
    }
  ],
  "total": 1,
  "maxPerStream": 10,
  "maxPerApp": 10
}

Implementation

  • File: packages/cloud/src/routes/streams.routes.ts:234-307
  • Authorization: App must be viewing the stream

Output Status

Possible status values:
  • active - Output is streaming
  • connecting - Attempting to connect
  • error - Connection failed
  • unknown - Status unavailable

Error Codes

CodeErrorDescription
400INVALID_URLURL is missing or invalid format
403NOT_A_VIEWERApp is not viewing the stream
403NOT_AUTHORIZEDApp cannot modify this output
404STREAM_NOT_FOUNDManaged stream not found
404OUTPUT_NOT_FOUNDOutput ID not found
409MAX_OUTPUTS_REACHEDStream has maximum outputs (10)
409MAX_APP_OUTPUTS_REACHEDApp has maximum outputs (10)
409DUPLICATE_URLURL already exists as output
502CLOUDFLARE_ERRORCloudflare streaming service error
500INTERNAL_ERRORInternal server error

Notes

  • Managed streams are created by apps using the SDK
  • Apps must be actively viewing a stream to manage outputs
  • Each stream supports up to 10 simultaneous outputs
  • Each app can add up to 10 outputs across all streams
  • Outputs are managed through Cloudflare Stream service
  • Only the app that added an output can remove it