2 July 2026
Subtitle translation
New translate option translates subtitles from one language to another.
<?xml version="1.0"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required -->
<action>[Action]</action> <!-- required -->
<source>[SourceFile]</source> <!-- required -->
<format>
<output>closed_captions</output> <!-- required-->
<translate>
<source_language>[LanguageCode]</source_language>
<target_language>[LanguageCode]</target_language>
</translate>
</format>
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "[Action]", // required
"source": "[SourceFile]", // required
"format": {
"output": "closed_captions",
"translate": {
"source_language": "[LanguageCode]",
"target_language": "[LanguageCode]"
}
}
}
}| Parameter | Description | Allowed Values | Default Value |
|---|---|---|---|
| source_language | Source language | 2 or 3 characters language code | none |
| target_language | Target language | 2 or 3 characters language code | none |
STT non-verbal and music cue normalization
The stt option group now controls how non-verbal and music cues are formatted in the generated captions.
- normalize_non_verbal changed from a
yes/notoggle to an enum:Default,Remove,Parentheses,SquareBrackets(defaultDefault). - normalize_music changed from a
yes/notoggle to a free-text value — the text/symbol used to denote music cues (case-preserved).
<?xml version="1.0"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required -->
<action>[Action]</action> <!-- required -->
<source>[SourceFile]</source> <!-- required -->
<format>
<output>closed_captions</output> <!-- required-->
<stt>
<model>[base|tiny|small|medium|largev2|largev3]</model>
<language>[LanguageCode]</language>
<prompt></prompt>
<refine_timing>[yes|no]</refine_timing>
<normalize_non_verbal>[Default|Remove|Parentheses|SquareBrackets]</normalize_non_verbal>
<normalize_music>[MusicCueText]</normalize_music>
<audio_stream>
[AudioStreamDefinition]
</audio_stream>
</stt>
</format>
</query>{
"query": {
"userid": "[UserID]", // required
"userkey": "[UserKey]", // required
"action": "[Action]", // required
"source": "[SourceFile]", // required
"format": {
"output": "closed_captions",
"stt": {
"model": "[base|tiny|small|medium|largev2|largev3]",
"language": "[LanguageCode]",
"prompt": "",
"refine_timing": "[yes|no]",
"normalize_non_verbal": "[Default|Remove|Parentheses|SquareBrackets]",
"normalize_music": "[MusicCueText]",
"audio_stream": {
[AudioStreamDefinition]
}
}
}
}
}| Parameter | Description | Allowed Values | Default Value |
|---|---|---|---|
| normalize_non_verbal | How non-verbal cues (e.g. sound effects) are formatted. Default: keep as produced by the model; Remove: strip them; Parentheses: wrap in ( ); SquareBrackets: wrap in [ ] | Default, Remove, Parentheses, SquareBrackets | Default |
| normalize_music | Text/symbol used to denote music cues (case-preserved) | Text | none |
New Preset Options
-
preset_mode controls how an output_preset is applied in AddMedia request. The default behavior (
default, or when the parameter is omitted) is unchanged: the preset only fills in top-level<format>fields that the request did not specify. Withrecursive, the preset and the request are merged recursively, so the request can override any preset value at any nesting level (individual streams, audio streams, codec parameters, etc.). Array elements such as<stream>are matched by position. -
include_defaults in SavePreset API request controls whether system/encoding defaults are baked into a preset. The default (
yes, or when omitted) is unchanged. Set it tonoto store a preset that contains only the values that were explicitly specified.
Applying a preset with recursive merge
<?xml version="1.0"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required -->
<action>AddMedia</action> <!-- required -->
<source>[SourceFile]</source> <!-- required -->
<format>
<output_preset>[PresetName]</output_preset> <!-- required -->
<preset_mode>recursive</preset_mode>
<destination>[Destination]</destination>
<stream>
<bitrate>6000k</bitrate> <!-- overrides only this value of the preset's first stream -->
</stream>
</format>
</query>{
"query": {
"userid": "[UserID]",
"userkey": "[UserKey]",
"action": "AddMedia",
"source": "[SourceFile]",
"format": {
"output_preset": "[PresetName]",
"preset_mode": "recursive",
"destination": "[Destination]",
"stream": [
{
"bitrate": "6000k"
}
]
}
}
}Saving a lean preset (without defaults)
<?xml version="1.0"?>
<query>
<userid>[UserID]</userid> <!-- required -->
<userkey>[UserKey]</userkey> <!-- required -->
<action>SavePreset</action> <!-- required -->
<name>[PresetName]</name>
<include_defaults>no</include_defaults>
<format>
<output>[output]</output> <!-- required -->
[FormatParams]
</format>
</query>{
"query": {
"userid": "[UserID]",
"userkey": "[UserKey]",
"action": "SavePreset",
"name": "[PresetName]",
"include_defaults": "no",
"format": {
"output": "[output]"
}
}
}| Parameter | Description | Allowed Values | Default Value |
|---|---|---|---|
| preset_mode | For AddMedia action: how an output_preset is merged into the request. default fills only missing top-level <format> fields; recursive merges preset and request recursively, with request values overriding the preset at any level. | default, recursive | default |
| include_defaults | For SavePreset action: whether system/encoding defaults are baked into the saved preset. no stores only the explicitly specified values. | yes, no | yes |