Setup
The setup for Dynamic Ingest requests is the same, whether you are ingesting a video, images, a Transcript file, or all of these. For full details of the request body fields, see the API Reference.
- Request URL
-
https://ingest.api.brightcove.com/v1/accounts/account_id/videos/video_id/ingest-requests - Authentication
- Authentication requires an access token passed as a
Bearertoken in anAuthorizationheader:Authorization: Bearer {access_token}
Note on S3
If your Transcript will be pulled from a protected S3 bucket, you will need to set a bucket policy to allow Video Cloud to access the files. See Using Dynamic Ingest with S3 for details.
Ingest Transcript files
You can also add Transcript files to your video or upload them for an existing video using Dynamic Ingest:
Add transcripts during video ingestion
Request URL
https://ingest.api.brightcove.com/v1/accounts/account_id/videos/video_id/ingest-requests
Method
POST
Sample request body
{
"master": {
"url": "https://support.brightcove.com/test-assets/videos/Great_Blue_Heron.mp4"
},
"transcriptions": [
{
"url": "https://support.brightcove.com/test-assets/transcript/herons-transcript.txt",
"srclang": "en-US",
"kind": "transcripts",
"label": "English",
"default": true,
"status" : "published"
}
]
}
Add transcripts existing videos
Adding transcripts to existing videos is exactly the same, except that you do not need any of the video information or the profile in the request body. unless you are requesting closed transcript to be added to MP4 renditions - in that case, you will need to replace the video
Request URL
https://ingest.api.brightcove.com/v1/accounts/account_id/videos/video_id/ingest-requests
Method
POST
Sample request body
{
"transcriptions": [
{
"url": "https://support.brightcove.com/test-assets/transcripts/herons.txt",
"srclang": "en-US",
"kind": "transcripts",
"label": "English",
"default": true,
"status" : "published"
}
]
}
Ingest fields
The following table details the fields used for ingesting transcripts or requesting auto captions.
| Field | Type | Required | Description |
|---|---|---|---|
autodetect |
boolean | no |
true to auto-detect language from audio source. false to use srclang specifying the audio language.
|
default |
boolean | no |
If true, srclang will be ignored, and the main audio track will be used - language will be auto-detected.
|
input_audio_track |
object | no | For multiple audio tracks, defines the audio to extract the captions from. It is composed by language and variant (both required). |
kind |
string | no |
The kind of output to generate. Allowed values:
|
label |
string | no | Human readable label. Defaults to the BCP-47 style language code. |
srclang |
string | no | BCP-47 style language code for the text tracks (en-US, fr-FR, es-ES, etc.); see supported languages |
status |
string | no |
Indicates the actual situation of the caption, if it is published, draft.
|
url |
string | no |
The URL where a transcript file is located. Must be included in the kind is transcripts. Must not be included if the kind is captions.
|
use_dictionary |
boolean | no |
When true, apply the account autocaption dictionary to generated captions/transcripts when supported.
|
max_chars_per_line |
integer | no | Maximum characters per caption line when provided; must be between 25 and 60 inclusive when set. |
max_lines_per_cue |
integer | no | Maximum lines per caption cue when provided; must be 1 or 2 when set. |
diarization_mode |
string | no |
How speaker changes are represented when supported: hyphen, speaker_labels, or speaker_names.
|
enable_audio_tags |
boolean | no |
When true, include audio event tags in the output when supported.
|
allow_multilanguage_caption |
boolean | no |
When true, allow multilanguage caption behavior for this entry when supported.
|
ai_transparency_label |
string | no | Optional label for AI-generated text tracks (AI transparency). |
polished_transcription |
boolean | no |
When true, request a polished transcript style when supported.
|
translation_languages |
array | no |
Target languages for caption translation (and optional dubbing) after auto captions are generated for the source transcriptions entry. Each item is an object with srclang (BCP-47, required) and optional label, status (draft or published), dubbing (boolean), disable_voice_cloning (boolean), ai_transparency_label (string, label for translated captions when supported), and ai_transparency_label_dubbing (string, label for generated dubbed audio when supported). See Caption translation and dubbing and the Universal Translator documentation.
|
metadata_optimizer |
object | no |
Requests AI metadata enhancement in the same workflow as this transcriptions entry. Same fields as POST .../videos/{video_id}/ai/metadata-enhancement/{language}, including optional translation_request with only languages (BCP-47 array). On ingest, include translation_request only when skip_review and auto_translate are both true, and use explicit srclang on this entry (not autodetect: true). Must include language (BCP-47). See AI metadata enhancement at ingest and AI Metadata Optimizer.
|
audio_descriptions |
object | no |
Requests AI audio description in the same workflow as this transcriptions entry. Same body as POST .../videos/{video_id}/ai/audio-descriptions: required languages (array of BCP-47 strings) and optional ai_transparency_label (string, for generated descriptive audio tracks when supported). See Audio description at ingest and Audio Description.
|
Caption translation and dubbing
Within each object in the transcriptions array, you can add translation_languages to translate auto-generated captions into additional languages. Each translation entry is an object with:
srclang(required) — BCP-47 target language codelabel(optional) — display labelstatus(optional) —draftorpublisheddubbing(optional, boolean) — whentrue, generates dubbed audio for that language after translated captions existdisable_voice_cloning(optional, boolean) — whentrue, uses a synthetic voice instead of voice cloning for dubbingai_transparency_label(optional, string) — AI transparency label for translated captions (text tracks) for this target language when supportedai_transparency_label_dubbing(optional, string) — AI transparency label for dubbed audio generated for this target language when supported (typically used whendubbingistrue)
Dubbing depends on translated captions, and translated captions depend on auto captions for the source language. If prerequisites are missing, downstream steps may not run.
Sample transcriptions with translations
{
"transcriptions": [{
"srclang": "en-US",
"label": "English",
"status": "published",
"kind": "captions",
"translation_languages": [
{ "srclang": "es-ES", "label": "Spanish", "status": "draft", "dubbing": true, "disable_voice_cloning": true, "ai_transparency_label": "AI-generated captions", "ai_transparency_label_dubbing": "AI-generated audio" },
{ "srclang": "fr-FR", "label": "French", "status": "draft" }
]
}]
}
For account-level defaults that prefill Studio upload fields (API clients may still send any values), see GET/PUT https://ingest.api.brightcove.com/v1/accounts/{account_id}/ingestion-configurations in the Universal Translator documentation.
To start translation jobs outside an ingest request, use POST https://ingest.api.brightcove.com/v1/accounts/{account_id}/videos/{video_id}/ai/translation with a target_languages array (same per-language shape as above). See AI translation endpoints for request and response details.
AI metadata enhancement at ingest
You can queue AI Metadata Optimizer jobs together with auto captions by including metadata_optimizer on a transcriptions object. The object uses the same fields as POST .../videos/{video_id}/ai/metadata-enhancement/{language} and must include language (BCP-47). On ingest, include translation_request (with only languages) only when skip_review and auto_translate are both true so metadata can be applied and then translated in one job; omit translation_request for review workflows (skip_review false). Use explicit caption fields such as srclang on the transcriptions entry when combining with metadata or translation—do not use autodetect: true in those cases. Other typical optional fields include fields_to_generate, use_tag_architecture, references, and character_limits. Full behavior is described in AI Metadata Optimizer — API access.
Sample ingest body (review workflow)
{
"transcriptions": [
{
"srclang": "en-US",
"label": "English",
"kind": "captions",
"status": "published",
"metadata_optimizer": {
"language": "en-US",
"fields_to_generate": ["names", "short_descriptions", "tags", "long_descriptions"],
"skip_review": false
}
}
]
}
Sample ingest body (generate, apply, and translate in one job)
Requires explicit srclang on the transcriptions entry (not autodetect), and both skip_review and auto_translate set to true with translation_request.languages:
{
"transcriptions": [
{
"srclang": "en-US",
"label": "English",
"kind": "captions",
"status": "published",
"metadata_optimizer": {
"language": "en-US",
"fields_to_generate": ["names", "short_descriptions", "tags", "long_descriptions"],
"skip_review": true,
"auto_translate": true,
"translation_request": {
"languages": ["es-ES", "fr-FR"]
}
}
}
]
}
Creating a job via ingest uses the same job lifecycle as direct API calls: poll or delete with GET/DELETE on .../videos/{video_id}/ai/metadata-enhancement/{language}, and list jobs with GET .../ai/metadata-enhancement/jobs. Full field reference and behavior notes are in AI Metadata Optimizer — API access.
Audio description at ingest
On each object in the transcriptions array, optional audio_descriptions queues AI Audio Description in the same ingest workflow (typically with auto captions so a text track exists). Use the same body as POST .../videos/{video_id}/ai/audio-descriptions: required languages, an array of BCP-47 language codes with at least one entry (e.g. ["en-US", "es-ES"]), and optional ai_transparency_label (string) for AI transparency on generated descriptive audio when supported. One descriptive audio track per language.
Sample transcriptions with audio_descriptions
{
"transcriptions": [
{
"srclang": "en-US",
"label": "English",
"kind": "captions",
"status": "published",
"audio_descriptions": {
"languages": ["en-US"],
"ai_transparency_label": "AI-generated audio"
}
}
]
}
Standalone audio description endpoints
You can also create or list jobs without an ingest request:
POST | GET https://ingest.api.brightcove.com/v1/accounts/{account_id}/videos/{video_id}/ai/audio-descriptions— create a job (body: requiredlanguagesarray as above; optionalai_transparency_labelwhen supported) or list jobs for the video (GET)GET https://ingest.api.brightcove.com/v1/accounts/{account_id}/ai/audio-descriptions/jobs— list audio description jobs for the account
For supported languages and job response fields, see Audio Description — API access.
Supported languages
Currently, the supported languages for transcripts are limited to the following languages
|
|