Book with Embedded Captions
Overview
Verbit’s Embedded Captions feature lets you send live captions directly within your broadcast video stream using RTMP or SRT protocols. Captions are embedded in the video feed using the CEA-608 closed-captioning standard, so viewers can see them directly in their player or broadcast platform.
Note: Embedded captions currently support CEA-608 captions only. If you your workflow requires the CEA-708 captioning standard, please contact your account executive.
The end user will not only request the order, but will also need to provide the URL with the stream key to the external endpoint they wish for their stream with embedded captions to broadcast. These endpoints will be created under the delivery object array.
"delivery": [
{
"type": "rtmp_push",
"connection_params": {
"url": "rtmp://testserver.com/live1",
"stream_key": "12345"
},
"language": "en-US"
},
{
"type": "rtmp_push",
"connection_params": {
"url": "rtmp://testserver.com/live2",
"stream_key": "12345"
},
"language": "en-US"
},
],
This will deliver video and captions endpoints like Facebook Live, YouTube Live or any third-party video provider.
RTMP Stream
This is an example payload for creating embedded captions with RTMP stream via Orders API:
curl --request POST \
--url https://orders.verbit.co/api/v2/orders \
--header 'accept: application/json' \
--header 'authorization: Bearer <BEARER-TOKEN>' \
--header 'content-type: application/json' \
--data '{
"client_transaction_id": "d3554f39-7403-4ba1-a4d8-24903e09c4cd",
"name": "test - create output API",
"input": {
"schedule": {
"recurrence": false,
"start_at": "2025-11-19T16:23:47.892Z",
"timezone": "America/New_York",
"max_duration": 7200
},
"language": "en-US",
"type": "rtmp_push"
},
"output": [
{
"product": {
"type": "captions",
"target_languages": [
"en-US"
],
"service_type": "live"
},
"delivery": [
{
"type": "rtmp_push",
"connection_params": {
"url": "rtmp://testserver.com/live",
"stream_key": "12345"
},
"language": "en-US"
}
],
"default_delivery_settings": {
"encryption": {
"enabled": false
},
"quality": "passthrough"
}
}
],
"contact_details": {
"order_contact_person_email": "[email protected]"
}
}'
Response:
{
"order": {
"id": "ff14cf32-2245-47a9-85b0-e635396754e8",
"category_id": null,
"transcription_job_id": null,
"short_id": "3110041",
"name": "test - create output API",
"client_transaction_id": "d3554f39-7403-4ba1-a4d8-24903e09c4cd",
"status": {
"name": "created",
"message": "Order 'ff14cf32-2245-47a9-85b0-e635396754e8' is created"
},
"internal_status": {
"name": null,
"message": null,
"reason": []
},
"last_updated_at": "2025-11-18T18:34:32.597010",
"input": {
"language": "en-US",
"glossary": null,
"schedule": {
"recurrence": false,
"start_at": "2025-11-19T16:23:47.892000Z",
"timezone": "America/New_York",
"max_duration": 7200
},
"type": "rtmp_push",
"external_urls": null,
"connection_plan": null,
"notes": null,
"encryption": null,
"connection_params": null
},
"output": [
{
"id": "f0f36ceb-ac90-4862-8f07-339e06c3b5d8",
"product": {
"id": "1c2ec55b-e131-4530-b723-e20f1adf499f",
"type": "captions",
"addon_type": null,
"product_category": null,
"target_languages": [
"en-US"
],
"turn_around_time_hours": 0.0,
"service_type": "live"
},
"delivery": [
{
"id": "2f17bf83-0ca0-46db-a3ce-01de92fffaa5",
"language": "en-US",
"type": "rtmp_push",
"connection_params": {
"url": "rtmp://testserver.com/live",
"stream_key": "12345",
"username": null,
"password": null
},
"quality": null,
"format": "text"
}
],
"discard_transcript": null,
"allow_asr_fallback": false,
"legal_template_id": null,
"default_delivery_settings": {
"quality": "passthrough",
"encryption": {
"enabled": false
}
},
"session_duration": null,
"status": {
"name": "created",
"message": "Order 'ff14cf32-2245-47a9-85b0-e635396754e8' is created"
}
}
],
"po_number": null,
"cost_center": null,
"service_type": "live",
"settings": null,
"contact_details": {
"email": null,
"phone_number": null,
"phone_country_code": null,
"first_name": null,
"last_name": null,
"cc_email_addresses": null,
"order_contact_person_email": "[email protected]",
"order_contact_person_first_name": null,
"order_contact_person_last_name": null
},
"request_origin": "frontend",
"attachments": [],
"created_by": {
"email": "[email protected]",
"name": ""
},
"container": null,
"groups": [],
"created_at": "2025-11-18T18:34:32.597006",
"verbitext_group_id": "ff14cf32-2245-47a9-85b0-e635396754e8",
"editor_ids": [],
"collections": [],
"meta_data": null
SRT Stream
For SRT the account if you want to encrypt the input stream this will require passphrases, which needs to be enabled for input and output. This will require the account admin to login, go to "My Account". Then scroll down and fill out the passphrases and enable the input/output security:

To enable that encryption under the input object there is an encryption object with a property called enabled which needs to be set to true.
This is an example payload for creating embedded captions with SRT stream via Orders API:
curl --request POST \
--url https://orders.verbit.co/api/v2/orders \
--header 'accept: application/json' \
--header 'authorization: Bearer <BEARER-TOKEN>' \
--header 'content-type: application/json' \
--data '{
"client_transaction_id": "c345cf71-ceb5-464f-af6f-ee5345b14964",
"name": "test SRT ouput order API",
"input": {
"schedule": {
"recurrence": false,
"start_at": "2025-11-20T19:07:49.712Z",
"timezone": "America/New_York",
"max_duration": 7200
},
"language": "en-US",
"encryption": {
"enabled": true
},
"type": "srt"
},
"output": [
{
"product": {
"type": "captions",
"target_languages": [
"en-US"
],
"service_type": "live"
},
"delivery": [
{
"type": "srt",
"connection_params": {
"url": "srt://targetserver.com/live",
"stream_id": "12345"
},
"language": "en-US"
}
],
"default_delivery_settings": {
"encryption": {
"enabled": true
},
"quality": "passthrough"
}
}
],
"contact_details": {
"order_contact_person_email": "[email protected]"
}
}'
Response:
{
"order": {
"id": "d6521d19-721f-4c8b-9513-4449a86de200",
"category_id": null,
"transcription_job_id": null,
"short_id": "4289515",
"name": "test SRT ouput order API 2",
"client_transaction_id": "c345cf71-ceb5-464f-af6f-ee5345b14912",
"status": {
"name": "created",
"message": "Order 'd6521d19-721f-4c8b-9513-4449a86de200' is created"
},
"internal_status": {
"name": null,
"message": null,
"reason": []
},
"last_updated_at": "2025-11-19T20:43:43.842133",
"input": {
"language": "en-US",
"glossary": null,
"schedule": {
"recurrence": false,
"start_at": "2025-11-20T19:07:49.712000Z",
"timezone": "America/New_York",
"max_duration": 7200
},
"type": "srt",
"external_urls": null,
"connection_plan": null,
"notes": null,
"encryption": {
"enabled": true
},
"connection_params": null
},
"output": [
{
"id": "2f40df11-e59e-48bb-a5d6-727fd5e5d237",
"product": {
"id": "1c2ec55b-e131-4530-b723-e20f1adf499f",
"type": "captions",
"addon_type": null,
"product_category": null,
"tier": "automatic",
"target_languages": [
"en-US"
],
"turn_around_time_hours": 0.0,
"service_type": "live"
},
"delivery": [
{
"id": "5e9b2463-644a-4624-a796-0888df04c13d",
"language": "en-US",
"type": "srt",
"connection_params": {
"url": "srt://targetserver.com/live",
"stream_id": "12345"
},
"quality": null,
"encryption": null,
"format": "text"
}
],
"discard_transcript": null,
"allow_asr_fallback": false,
"legal_template_id": null,
"default_delivery_settings": {
"quality": "passthrough",
"encryption": {
"enabled": true
}
},
"session_duration": null,
"status": {
"name": "created",
"message": "Order 'd6521d19-721f-4c8b-9513-4449a86de200' is created"
}
}
],
"po_number": null,
"cost_center": null,
"service_type": "live",
"settings": null,
"contact_details": {
"email": null,
"phone_number": null,
"phone_country_code": null,
"first_name": null,
"last_name": null,
"cc_email_addresses": null,
"order_contact_person_email": "[email protected]",
"order_contact_person_first_name": null,
"order_contact_person_last_name": null
},
"request_origin": "frontend",
"attachments": [],
"created_by": {
"email": "[email protected]",
"name": ""
},
"container": null,
"groups": [],
"created_at": "2025-11-19T20:43:43.842129",
"verbitext_group_id": "d6521d19-721f-4c8b-9513-4449a86de200",
"editor_ids": [],
"collections": [],
"meta_data": null
}
}
Considerations
When an order is initially created it will take at most a couple minutes for the RTMP/SRT endpoint and transcoder that broadcasts your stream to be created. The end point credentials that you will need to send the RTMP/SRT stream to will be found under the connection_params under the input object. Make sure to get the order id before making the following call:
curl --request GET \
--url https://orders.verbit.co/api/v2/orders/<ID> \
--header 'accept: application/json' \
--header 'authorization: Bearer <BEARER-TOKEN>' \
--header 'content-type: application/json' \
Response:
"connection_params": {
"url": "rtmp://xxxxxxxxxx.entrypoint.cloud.wowza.com:1935/app-xxxxxxx",
"stream_key": "xxxxxxx",
"username": "xxxxxxxx",
"password": "xxxxxxxx"
}
Updated 1 day ago
