curl --request POST \
--url https://api.tenbyte.io/v1/livestream/webhooks/transcoder \
--header 'Content-Type: application/json' \
--header 'X-Webhook-Secret: <api-key>' \
--data '
{
"event": "stream.status.live",
"stream_id": "0000cf2e-ae90-46bc-b119-f5f626258434",
"status": "live",
"timestamp": "2026-04-16T12:00:00Z"
}
'{
"received": true
}{
"success": false,
"code": "BAD_REQUEST",
"message": "Invalid request payload.",
"errors": [
{
"code": "invalid_json",
"message": "Malformed JSON at offset 42"
}
]
}{
"success": false,
"code": "UNAUTHORIZED",
"message": "Missing authorization. Provide Authorization header or X-API-Key header."
}{
"success": false,
"code": "NOT_FOUND",
"message": "Resource not found."
}{
"success": false,
"code": "VALIDATION_ERROR",
"message": "Some fields failed validation.",
"errors": [
{
"field": "name",
"code": "validation_required",
"message": "cannot be blank"
},
{
"field": "ingest.kind",
"code": "validation_required",
"message": "ingest.kind is required"
},
{
"field": "ladder",
"code": "validation_ladder_video_required",
"message": "ladder.video is required for video streams"
}
]
}Webhooks
Transcoder status callback
Internal endpoint called by the transcoder service when a stream’s
status changes. Authenticated via shared secret in X-Webhook-Secret
header, not JWT/API key.
On receive: updates stream status, creates audit event, and dispatches
a signed webhook to the customer’s configured webhook_url (if set).
POST
/
webhooks
/
transcoder
curl --request POST \
--url https://api.tenbyte.io/v1/livestream/webhooks/transcoder \
--header 'Content-Type: application/json' \
--header 'X-Webhook-Secret: <api-key>' \
--data '
{
"event": "stream.status.live",
"stream_id": "0000cf2e-ae90-46bc-b119-f5f626258434",
"status": "live",
"timestamp": "2026-04-16T12:00:00Z"
}
'{
"received": true
}{
"success": false,
"code": "BAD_REQUEST",
"message": "Invalid request payload.",
"errors": [
{
"code": "invalid_json",
"message": "Malformed JSON at offset 42"
}
]
}{
"success": false,
"code": "UNAUTHORIZED",
"message": "Missing authorization. Provide Authorization header or X-API-Key header."
}{
"success": false,
"code": "NOT_FOUND",
"message": "Resource not found."
}{
"success": false,
"code": "VALIDATION_ERROR",
"message": "Some fields failed validation.",
"errors": [
{
"field": "name",
"code": "validation_required",
"message": "cannot be blank"
},
{
"field": "ingest.kind",
"code": "validation_required",
"message": "ingest.kind is required"
},
{
"field": "ladder",
"code": "validation_ladder_video_required",
"message": "ladder.video is required for video streams"
}
]
}Authorizations
Shared secret for transcoder webhook callbacks
Body
application/json
Event type, e.g. stream.status.live
Example:
"stream.status.starting"
Available options:
idle, starting, live, reconnecting, stopping, errored Available options:
idle, starting, live, reconnecting, stopping, errored Freeform context about the transition
Show child attributes
Show child attributes
Response
Webhook received
Example:
true