curl --request POST 'https://api.voicecheap.ai/v1/actions/translations_create' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"fileKey":"uploads/your-user-id/6bee76be-109f-423a-88fb-f41e2aa1f03b-launch.mp4","targetLanguage":"english","originalLanguage":"fr","projectName":"Product launch","numberOfSpeakers":"auto-detect","brandVocabulary":["VoiceCheap"],"removeFillerWords":true,"requestId":"41321bda-e243-4b6f-96a4-622cd047c991","keepBackgroundMusic":true,"keepOriginalVoice":false,"voiceMode":"cloning","subtitles":true,"subtitlesSource":"translated","voiceIsolatorOption":"studio"}'
const input = {
fileKey: 'uploads/your-user-id/6bee76be-109f-423a-88fb-f41e2aa1f03b-launch.mp4',
targetLanguage: 'english',
originalLanguage: 'fr',
projectName: 'Product launch',
numberOfSpeakers: 'auto-detect',
brandVocabulary: ['VoiceCheap'],
removeFillerWords: true,
requestId: '41321bda-e243-4b6f-96a4-622cd047c991',
keepBackgroundMusic: true,
keepOriginalVoice: false,
voiceMode: 'cloning',
subtitles: true,
subtitlesSource: 'translated',
voiceIsolatorOption: 'studio',
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/translations_create', {
method: 'POST',
headers: {
'x-api-key': process.env.VOICECHEAP_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify(input),
});
const body = await response.json();
if (!response.ok) throw new Error(body.code + ': ' + body.message);
console.log(body);
import os
import requests
response = requests.post(
"https://api.voicecheap.ai/v1/actions/translations_create",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"fileKey": "uploads/your-user-id/6bee76be-109f-423a-88fb-f41e2aa1f03b-launch.mp4", "targetLanguage": "english", "originalLanguage": "fr", "projectName": "Product launch", "numberOfSpeakers": "auto-detect", "brandVocabulary": ["VoiceCheap"], "removeFillerWords": True, "requestId": "41321bda-e243-4b6f-96a4-622cd047c991", "keepBackgroundMusic": True, "keepOriginalVoice": False, "voiceMode": "cloning", "subtitles": True, "subtitlesSource": "translated", "voiceIsolatorOption": "studio"},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
{
"data": {
"success": true,
"message": "Translation started successfully. Use the status endpoint to track progress.",
"projectId": "project_launch_2026",
"estimatedDuration": 10
},
"requestId": "41321bda-e243-4b6f-96a4-622cd047c991"
}
{
"data": {
"requestId": "41321bda-e243-4b6f-96a4-622cd047c991",
"operation": "translations_create",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "running",
"pollAfterSeconds": 5
},
"requestId": "41321bda-e243-4b6f-96a4-622cd047c991"
}
{
"data": {
"requestId": "41321bda-e243-4b6f-96a4-622cd047c991",
"operation": "translations_create",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "completed",
"resultStored": false,
"message": "The action completed. Retrieve its output from the corresponding history or resource action."
},
"requestId": "41321bda-e243-4b6f-96a4-622cd047c991"
}
Übersetzung und Synchronisation
Übersetztes Video- oder Audioprojekt erstellen
Erstellen Sie ein Projekt aus Ihrem hochgeladenen fileKey, transkribieren und übersetzen Sie es und erzeugen Sie anschließend die Sprache. Unterstützt eigene SRT, Stimmen, Untertitel und optionale Lippensynchronisation. Verwendet die normalen Medien-Credits. Eine optionale webhookUrl empfängt Verarbeitungsereignisse. Fragen Sie projects_status ab.
POST
/
v1
/
actions
/
translations_create
curl --request POST 'https://api.voicecheap.ai/v1/actions/translations_create' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"fileKey":"uploads/your-user-id/6bee76be-109f-423a-88fb-f41e2aa1f03b-launch.mp4","targetLanguage":"english","originalLanguage":"fr","projectName":"Product launch","numberOfSpeakers":"auto-detect","brandVocabulary":["VoiceCheap"],"removeFillerWords":true,"requestId":"41321bda-e243-4b6f-96a4-622cd047c991","keepBackgroundMusic":true,"keepOriginalVoice":false,"voiceMode":"cloning","subtitles":true,"subtitlesSource":"translated","voiceIsolatorOption":"studio"}'
const input = {
fileKey: 'uploads/your-user-id/6bee76be-109f-423a-88fb-f41e2aa1f03b-launch.mp4',
targetLanguage: 'english',
originalLanguage: 'fr',
projectName: 'Product launch',
numberOfSpeakers: 'auto-detect',
brandVocabulary: ['VoiceCheap'],
removeFillerWords: true,
requestId: '41321bda-e243-4b6f-96a4-622cd047c991',
keepBackgroundMusic: true,
keepOriginalVoice: false,
voiceMode: 'cloning',
subtitles: true,
subtitlesSource: 'translated',
voiceIsolatorOption: 'studio',
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/translations_create', {
method: 'POST',
headers: {
'x-api-key': process.env.VOICECHEAP_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify(input),
});
const body = await response.json();
if (!response.ok) throw new Error(body.code + ': ' + body.message);
console.log(body);
import os
import requests
response = requests.post(
"https://api.voicecheap.ai/v1/actions/translations_create",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"fileKey": "uploads/your-user-id/6bee76be-109f-423a-88fb-f41e2aa1f03b-launch.mp4", "targetLanguage": "english", "originalLanguage": "fr", "projectName": "Product launch", "numberOfSpeakers": "auto-detect", "brandVocabulary": ["VoiceCheap"], "removeFillerWords": True, "requestId": "41321bda-e243-4b6f-96a4-622cd047c991", "keepBackgroundMusic": True, "keepOriginalVoice": False, "voiceMode": "cloning", "subtitles": True, "subtitlesSource": "translated", "voiceIsolatorOption": "studio"},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
{
"data": {
"success": true,
"message": "Translation started successfully. Use the status endpoint to track progress.",
"projectId": "project_launch_2026",
"estimatedDuration": 10
},
"requestId": "41321bda-e243-4b6f-96a4-622cd047c991"
}
{
"data": {
"requestId": "41321bda-e243-4b6f-96a4-622cd047c991",
"operation": "translations_create",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "running",
"pollAfterSeconds": 5
},
"requestId": "41321bda-e243-4b6f-96a4-622cd047c991"
}
{
"data": {
"requestId": "41321bda-e243-4b6f-96a4-622cd047c991",
"operation": "translations_create",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "completed",
"resultStored": false,
"message": "The action completed. Retrieve its output from the corresponding history or resource action."
},
"requestId": "41321bda-e243-4b6f-96a4-622cd047c991"
}
Erstellen Sie ein Projekt aus Ihrem hochgeladenen fileKey, transkribieren und übersetzen Sie es und erzeugen Sie anschließend die Sprache. Unterstützt eigene SRT, Stimmen, Untertitel und optionale Lippensynchronisation. Verwendet die normalen Medien-Credits. Eine optionale webhookUrl empfängt Verarbeitungsereignisse. Fragen Sie projects_status ab.
Erforderliche Berechtigungen:
POST https://api.voicecheap.ai/v1/actions/translations_create
Authentifizierung und Berechtigungen
string
erforderlich
Senden Sie einen VoiceCheap-API-Schlüssel in diesem Header. Authorization: Bearer mit demselben API-Schlüssel wird ebenfalls unterstützt.
OAuth-Zugriffstoken werden nur von MCP akzeptiert, nicht von diesem REST-Endpunkt.
projects:write, translations:write, transcription:write.
Ein aktives kostenpflichtiges Abonnement ist erforderlich. Berechtigungen ändern weder Teamrollen noch Ressourceneigentum, Medienguthaben oder Tariflimits.
Parameter
string
erforderlich
Textwert.Mindestlänge: 1. Höchstlänge: 1024.
string
erforderlich
Textwert.Zulässige Werte: “afrikaans”, “albanian”, “amharic”, “arabic”, “armenian”, “assamese”, “azerbaijani”, “basque”, “belarusian”, “bengali”, “bosnian”, “bulgarian”, “catalan”, “croatian”, “czech”, “danish”, “dutch”, “english”, “british english”, “estonian”, “finnish”, “french”, “french canadian”, “galician”, “german”, “greek”, “gujarati”, “hebrew”, “hindi”, “hungarian”, “icelandic”, “indonesian”, “irish”, “italian”, “japanese”, “kannada”, “kazakh”, “khmer”, “korean”, “lao”, “latvian”, “lithuanian”, “macedonian”, “malay”, “malayalam”, “mandarin”, “marathi”, “mongolian”, “nepali”, “norwegian”, “persian”, “polish”, “portuguese”, “brazilian portuguese”, “pt_brazil”, “punjabi”, “romanian”, “russian”, “serbian”, “slovak”, “slovenian”, “spanish”, “swahili”, “swedish”, “tagalog”, “tamil”, “telugu”, “thai”, “turkish”, “ukrainian”, “urdu”, “vietnamese”, “welsh”, “yoruba”, “zulu”.
string
Textwert.Zulässige Werte: “af”, “sq”, “am”, “ar”, “hy”, “as”, “ast”, “az”, “ba”, “eu”, “be”, “bn”, “bs”, “br”, “bg”, “my”, “ca”, “ceb”, “zh”, “hr”, “cs”, “da”, “nl”, “en”, “eo”, “at”, “et”, “fil”, “fo”, “fi”, “fr”, “fr-CA”, “fy”, “ff”, “gd”, “gl”, “lg”, “ka”, “de”, “el”, “gu”, “ht”, “ha”, “haw”, “he”, “hi”, “hu”, “is”, “ig”, “ilo”, “id”, “ia”, “ga”, “it”, “ja”, “jv”, “kea”, “kn”, “kk”, “km”, “kur”, “kir”, “ko”, “lo”, “la”, “luo”, “lv”, “lb”, “ln”, “lt”, “mk”, “mg”, “ms”, “ml”, “mt”, “mi”, “mr”, “mo”, “mn”, “ne”, “no”, “nn”, “nso”, “nya”, “oc”, “or”, “pa”, “ps”, “fa”, “pl”, “pt”, “ro”, “ru”, “sa”, “sr”, “sn”, “sd”, “si”, “sk”, “sl”, “so”, “es”, “su”, “sw”, “ss”, “sv”, “tl”, “tg”, “ta”, “tt”, “te”, “th”, “bo”, “tn”, “tr”, “tk”, “ug”, “uk”, “umb”, “ur”, “uz”, “vi”, “cy”, “wo”, “xh”, “yi”, “yo”, “zu”, “cmn”, “yue”, “en-GB”, “en-US”, “en-AU”, “auto-detect”.
string
Textwert.Mindestlänge: 1. Höchstlänge: 200.
string
Textwert.Zulässige Werte: “1”, “2”, “3”, “4”, “5”, “6”, “7”, “8”, “9”, “10”, “11”, “12”, “13”, “14”, “15”, “16”, “17”, “18”, “19”, “20”, “21”, “22”, “23”, “24”, “25”, “26”, “27”, “28”, “29”, “30”, “31”, “32”, “auto-detect”.
array
Liste von Werten. Die Struktur der Elemente finden Sie im vollständigen Eingabeschema.Höchstanzahl an Elementen: 1000.
boolean
Boolescher Wert.
string
Textwert.Höchstlänge: 1000000.
string
Textwert.Höchstlänge: 2048. Format: “uri”.
string
An der Transportschnittstelle optional: Bei fehlender Angabe fügt der Server vor der Validierung eine Kennung ein. Geben Sie eine eigene stabile UUID v4 an, um eine verlorene Antwort sicher wiederherstellen zu können.Format: “uuid”. Muster:
^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$.boolean
Boolescher Wert.
boolean
Boolescher Wert.
number
Numerischer Wert.Minimum: 1. Maximum: 70.
string
Textwert.Zulässige Werte: “cloning”, “custom”.
string
Textwert.Mindestlänge: 1. Höchstlänge: 128.
boolean
Boolescher Wert.
string
Textwert.Zulässige Werte: “translated”, “original”.
string
Textwert.Zulässige Werte: “studio”, “realistic”.
string
Textwert.Zulässige Werte: “standard”, “pro”, “studio”.
boolean
Boolescher Wert.
object
JSON-Objekt. Die verschachtelten Felder finden Sie im vollständigen Eingabeschema.
array
Liste von Werten. Die Struktur der Elemente finden Sie im vollständigen Eingabeschema.Höchstanzahl an Elementen: 100.
string
Textwert.Höchstlänge: 1000000.
Vollständiges Eingabeschema
Vollständiges Eingabeschema
Das folgende JSON Schema enthält die exakten Feldnamen, verschachtelten Typen, Standardwerte, Grenzen und akzeptierten Werte aus der Discovery. Zusätzliche feldübergreifende Regeln finden Sie in den Hinweisen zur Operation.
{
"type": "object",
"properties": {
"fileKey": {
"type": "string",
"minLength": 1,
"maxLength": 1024
},
"targetLanguage": {
"type": "string",
"enum": [
"afrikaans",
"albanian",
"amharic",
"arabic",
"armenian",
"assamese",
"azerbaijani",
"basque",
"belarusian",
"bengali",
"bosnian",
"bulgarian",
"catalan",
"croatian",
"czech",
"danish",
"dutch",
"english",
"british english",
"estonian",
"finnish",
"french",
"french canadian",
"galician",
"german",
"greek",
"gujarati",
"hebrew",
"hindi",
"hungarian",
"icelandic",
"indonesian",
"irish",
"italian",
"japanese",
"kannada",
"kazakh",
"khmer",
"korean",
"lao",
"latvian",
"lithuanian",
"macedonian",
"malay",
"malayalam",
"mandarin",
"marathi",
"mongolian",
"nepali",
"norwegian",
"persian",
"polish",
"portuguese",
"brazilian portuguese",
"pt_brazil",
"punjabi",
"romanian",
"russian",
"serbian",
"slovak",
"slovenian",
"spanish",
"swahili",
"swedish",
"tagalog",
"tamil",
"telugu",
"thai",
"turkish",
"ukrainian",
"urdu",
"vietnamese",
"welsh",
"yoruba",
"zulu"
]
},
"originalLanguage": {
"type": "string",
"enum": [
"af",
"sq",
"am",
"ar",
"hy",
"as",
"ast",
"az",
"ba",
"eu",
"be",
"bn",
"bs",
"br",
"bg",
"my",
"ca",
"ceb",
"zh",
"hr",
"cs",
"da",
"nl",
"en",
"eo",
"at",
"et",
"fil",
"fo",
"fi",
"fr",
"fr-CA",
"fy",
"ff",
"gd",
"gl",
"lg",
"ka",
"de",
"el",
"gu",
"ht",
"ha",
"haw",
"he",
"hi",
"hu",
"is",
"ig",
"ilo",
"id",
"ia",
"ga",
"it",
"ja",
"jv",
"kea",
"kn",
"kk",
"km",
"kur",
"kir",
"ko",
"lo",
"la",
"luo",
"lv",
"lb",
"ln",
"lt",
"mk",
"mg",
"ms",
"ml",
"mt",
"mi",
"mr",
"mo",
"mn",
"ne",
"no",
"nn",
"nso",
"nya",
"oc",
"or",
"pa",
"ps",
"fa",
"pl",
"pt",
"ro",
"ru",
"sa",
"sr",
"sn",
"sd",
"si",
"sk",
"sl",
"so",
"es",
"su",
"sw",
"ss",
"sv",
"tl",
"tg",
"ta",
"tt",
"te",
"th",
"bo",
"tn",
"tr",
"tk",
"ug",
"uk",
"umb",
"ur",
"uz",
"vi",
"cy",
"wo",
"xh",
"yi",
"yo",
"zu",
"cmn",
"yue",
"en-GB",
"en-US",
"en-AU",
"auto-detect"
]
},
"projectName": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"numberOfSpeakers": {
"type": "string",
"enum": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"20",
"21",
"22",
"23",
"24",
"25",
"26",
"27",
"28",
"29",
"30",
"31",
"32",
"auto-detect"
]
},
"brandVocabulary": {
"maxItems": 1000,
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 200
}
},
"removeFillerWords": {
"type": "boolean"
},
"sourceSrt": {
"type": "string",
"maxLength": 1000000
},
"webhookUrl": {
"type": "string",
"maxLength": 2048,
"format": "uri"
},
"requestId": {
"type": "string",
"format": "uuid",
"pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$",
"description": "UUID v4 for this action. Reuse the same ID with identical arguments on retries."
},
"keepBackgroundMusic": {
"type": "boolean"
},
"keepOriginalVoice": {
"type": "boolean"
},
"originalVoiceVolume": {
"type": "number",
"minimum": 1,
"maximum": 70
},
"voiceMode": {
"type": "string",
"enum": ["cloning", "custom"]
},
"voiceId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"subtitles": {
"type": "boolean"
},
"subtitlesSource": {
"type": "string",
"enum": ["translated", "original"]
},
"voiceIsolatorOption": {
"type": "string",
"enum": ["studio", "realistic"]
},
"lipSyncMode": {
"type": "string",
"enum": ["standard", "pro", "studio"]
},
"activeSpeakerDetectionEnabled": {
"type": "boolean"
},
"voiceCloningSettings": {
"type": "object",
"properties": {
"stability": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"similarity": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": ["stability", "similarity"],
"additionalProperties": false
},
"translationTimeSkips": {
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"startTime": {
"type": "number",
"minimum": 0
},
"endTime": {
"type": "number",
"exclusiveMinimum": 0
}
},
"required": ["startTime", "endTime"],
"additionalProperties": false
}
},
"translatedSrt": {
"type": "string",
"maxLength": 1000000
}
},
"required": ["fileKey", "targetLanguage"],
"additionalProperties": false
}
Idempotenz
Verwenden Sie für jede Mutation eine UUID v4 in requestId oder im HTTP-Header Idempotency-Key. Verwenden Sie nach einem Netzwerkfehler dieselbe Kennung und identische Argumente erneut. Wenn Sie beides angeben, müssen die Werte übereinstimmen. Die Wiederholung einer gespeicherten Anfrage führt die Operation nicht erneut aus und verbraucht keinen weiteren monatlichen Aufruf. Fehlgeschlagene oder unterbrochene Anfragen werden nicht automatisch neu gestartet. Jede Mutation kann HTTP 202 zurückgeben, wenn bei einem Wiederholungsversuch dieselbe Anfrage noch läuft, auch wenn ihre erste Ausführung normalerweise synchron erfolgt. Wenn die Ausführung abgeschlossen ist, resultStored aber false ist, gibt ein Wiederholungsversuch HTTP 200 mit dem gespeicherten Anfragestatus anstelle des ursprünglichen Ergebnisses zurück. Rufen Sie die Ausgabe über die für ihren Bereich vorgesehene Verlaufs-, Ergebnis- oder Downloadaktion ab.Anfragebeispiele
Ersetzen Sie die beispielhaften Ressourcenkennungen und Medienschlüssel durch Werte, die für Ihr Konto zurückgegeben wurden. Behalten Sie bei Wiederholungen derselben Mutation dieselbe Anfragekennung bei.curl --request POST 'https://api.voicecheap.ai/v1/actions/translations_create' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"fileKey":"uploads/your-user-id/6bee76be-109f-423a-88fb-f41e2aa1f03b-launch.mp4","targetLanguage":"english","originalLanguage":"fr","projectName":"Product launch","numberOfSpeakers":"auto-detect","brandVocabulary":["VoiceCheap"],"removeFillerWords":true,"requestId":"41321bda-e243-4b6f-96a4-622cd047c991","keepBackgroundMusic":true,"keepOriginalVoice":false,"voiceMode":"cloning","subtitles":true,"subtitlesSource":"translated","voiceIsolatorOption":"studio"}'
const input = {
fileKey: 'uploads/your-user-id/6bee76be-109f-423a-88fb-f41e2aa1f03b-launch.mp4',
targetLanguage: 'english',
originalLanguage: 'fr',
projectName: 'Product launch',
numberOfSpeakers: 'auto-detect',
brandVocabulary: ['VoiceCheap'],
removeFillerWords: true,
requestId: '41321bda-e243-4b6f-96a4-622cd047c991',
keepBackgroundMusic: true,
keepOriginalVoice: false,
voiceMode: 'cloning',
subtitles: true,
subtitlesSource: 'translated',
voiceIsolatorOption: 'studio',
};
const response = await fetch('https://api.voicecheap.ai/v1/actions/translations_create', {
method: 'POST',
headers: {
'x-api-key': process.env.VOICECHEAP_API_KEY,
'Content-Type': 'application/json',
},
body: JSON.stringify(input),
});
const body = await response.json();
if (!response.ok) throw new Error(body.code + ': ' + body.message);
console.log(body);
import os
import requests
response = requests.post(
"https://api.voicecheap.ai/v1/actions/translations_create",
headers={"x-api-key": os.environ["VOICECHEAP_API_KEY"]},
json={"fileKey": "uploads/your-user-id/6bee76be-109f-423a-88fb-f41e2aa1f03b-launch.mp4", "targetLanguage": "english", "originalLanguage": "fr", "projectName": "Product launch", "numberOfSpeakers": "auto-detect", "brandVocabulary": ["VoiceCheap"], "removeFillerWords": True, "requestId": "41321bda-e243-4b6f-96a4-622cd047c991", "keepBackgroundMusic": True, "keepOriginalVoice": False, "voiceMode": "cloning", "subtitles": True, "subtitlesSource": "translated", "voiceIsolatorOption": "studio"},
timeout=120,
)
body = response.json()
if not response.ok:
raise RuntimeError(f"{body.get('code')}: {body.get('message')}")
print(body)
Antwort
Eine erfolgreiche erste Ausführung gibt HTTP 200 mit dem Ergebnis der Operation unter data zurück. Bei einer Wiederholung kann stattdessen der gespeicherte Anfragestatus zurückgegeben werden. Das Beispiel zeigt eine unterstützte Antwort, nicht alle optionalen Felder. Gibt eine neue Projektkennung zurück, nachdem die Transkription mit anschließender Übersetzung und Spracherzeugung oder die Synchronisation mit einer bereitgestellten Übersetzung gestartet wurde.{
"data": {
"success": true,
"message": "Translation started successfully. Use the status endpoint to track progress.",
"projectId": "project_launch_2026",
"estimatedDuration": 10
},
"requestId": "41321bda-e243-4b6f-96a4-622cd047c991"
}
{
"data": {
"requestId": "41321bda-e243-4b6f-96a4-622cd047c991",
"operation": "translations_create",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "running",
"pollAfterSeconds": 5
},
"requestId": "41321bda-e243-4b6f-96a4-622cd047c991"
}
{
"data": {
"requestId": "41321bda-e243-4b6f-96a4-622cd047c991",
"operation": "translations_create",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"status": "completed",
"resultStored": false,
"message": "The action completed. Retrieve its output from the corresponding history or resource action."
},
"requestId": "41321bda-e243-4b6f-96a4-622cd047c991"
}
Ergebnisfelder
| Feld | Beschreibung |
|---|---|
data.success | True, wenn der Hintergrundablauf zugelassen wurde; dies bedeutet nicht, dass die Medien fertig sind. |
data.message | Bestätigung der Übersetzung oder der Synchronisation mit bereitgestellter Übersetzung. |
data.projectId | Kennung des übergeordneten Projekts. |
data.estimatedDuration | Grobe Verarbeitungszeitschätzung in Minuten: ceil(source duration in seconds / 60) * 5. |
translatedSrt wird übergeben und akzeptiert.
Dieselben Ergebnisfelder bestätigen die Synchronisation des übergebenen Zieltexts.HTTP 200
{
"data": {
"success": true,
"message": "Dubbing started successfully from the provided translation. Use the status endpoint to track progress.",
"projectId": "project_launch_2026",
"estimatedDuration": 10
}
}
Diese Anfrage wiederherstellen und abfragen
Verwenden Sie auch nach einem Verbindungsabbruch dieselbe Kennung. Wenn resultStored den Wert false hat, rufen Sie die Ausgabe über die entsprechende Verlaufs-, Ergebnis- oder Downloadaktion ab. Starten Sie niemals eine zweite Generierung, nur um den Fortschritt zu prüfen.curl --request POST 'https://api.voicecheap.ai/v1/actions/action_request_get' \
--header "x-api-key: $VOICECHEAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{"requestId":"41321bda-e243-4b6f-96a4-622cd047c991","operation":"translations_create"}'
HTTP 200
{
"data": {
"requestId": "41321bda-e243-4b6f-96a4-622cd047c991",
"operation": "translations_create",
"status": "completed",
"createdAt": 1792144800000,
"updatedAt": 1792144820000,
"resultStored": true,
"result": {
"success": true,
"message": "Translation started successfully. Use the status endpoint to track progress.",
"projectId": "project_launch_2026",
"estimatedDuration": 10
}
}
}
Hinweise zur Operation
- Der fertiggestellte fileKey muss dem authentifizierten Akteur gehören. Der Server misst Dauer und Größe der gespeicherten Medien.
- Ein optionales sourceSrt erfordert eine explizite originalLanguage. Wenn zusätzlich translatedSrt angegeben wird, müssen beide SRTs dieselbe Anzahl an Untertiteleinträgen haben; die bereitgestellte Übersetzung wird anhand des Eintragsindex zugeordnet.
- Wenn translatedSrt übergeben wird, synchronisiert der Ablauf diesen Text und gibt die Bestätigung für die übergebene Übersetzung zurück. Mit sourceSrt erfolgt die Zuordnung der Untertitelblöcke nach Index; ohne sourceSrt wird die automatische Transkriptzeitleiste verwendet.
- Das Erstellungsergebnis enthält weder workId noch translatedVersionId. Rufen Sie diese über projects_status oder projects_get ab, sobald sie existieren.
- voiceMode ist standardmäßig cloning. Verwenden Sie bei voiceMode custom eine Katalogstimme oder eine vom authentifizierten Konto gespeicherte benutzerdefinierte Stimme; übergeben Sie keine voiceCloningSettings. Die Teamabrechnung gewährt keinen Zugriff auf die gespeicherten Stimmen anderer Mitglieder.
- Optionale subtitles, lipSyncMode und translationTimeSkips erfordern eine Videoeingabe. Übersprungene Bereiche müssen innerhalb der Mediendauer bleiben, keepBackgroundMusic muss true und keepOriginalVoice muss false sein.
- lipSyncMode akzeptiert standard, pro oder studio, abhängig vom Tarif und den üblichen Prüfungen des Medienguthabens. Sprachausgabe und Lippensynchronisation werden durch unbegrenzte monatliche API-Aufrufe nicht kostenlos.
- Fragen Sie projects_status für den Medien-Workflow regelmäßig ab; rufen Sie alle Sprachversionen mit projects_get ab.
- originalLanguage verwendet Ausgangssprachcodes wie fr oder en (oder auto-detect, sofern akzeptiert); targetLanguage verwendet unterstützte Zielsprachnamen wie english.
Nutzung
Jeder erfolgreiche Aufruf verbraucht einen monatlichen API/MCP-Aufruf. Zusätzlich gelten das Medienguthaben und die eigenen Generierungskontingente der Operation.Fehler
| HTTP-Status | Code | Bedeutung oder Behebung |
|---|---|---|
| 400 | CREDENTIAL_IN_QUERY | Zugangsdaten wurden in einem Abfrageparameter namens access_token oder api_key übergeben. Senden Sie Zugangsdaten in Headern. |
| 400 | FILE_TOO_LARGE | Der gespeicherte Upload überschreitet das Upload-Größenlimit des Kontos. |
| 400 | IDEMPOTENCY_CONFLICT | Der Header Idempotency-Key und das Feld requestId im Anfragetext müssen übereinstimmen. |
| 400 | INVALID_FILE_TYPE | Der hochgeladene Dateiname hat keine unterstützte Audio- oder Videoerweiterung. |
| 400 | INVALID_MEDIA_DURATION | Die gemessene Dauer ist ungültig oder überschreitet das Tariflimit. |
| 400 | INVALID_REQUEST_ID | Geben Sie eine UUID v4 als requestId oder Idempotency-Key an. |
| 400 | INVALID_SOURCE_SRT | sourceSrt muss gültige SRT-Untertitelblöcke enthalten. |
| 400 | INVALID_TRANSLATED_SRT | Die bereitgestellte SRT in der Zielsprache ist fehlerhaft. |
| 400 | LIPSYNC_NOT_AVAILABLE_FOR_AUDIO | Lippensynchronisation erfordert eine Videoeingabe. |
| 400 | LIPSYNC_VIDEO_TOO_LONG | Das Video überschreitet die Dauerbegrenzung des ausgewählten Modus für die Lippensynchronisation. |
| 400 | SOURCE_LANGUAGE_REQUIRED_FOR_SRT | Legen Sie originalLanguage ausdrücklich fest, wenn Sie sourceSrt angeben. |
| 400 | SUBTITLES_NOT_AVAILABLE_FOR_AUDIO | Eingebrannte Untertitel erfordern eine Videoeingabe. |
| 400 | TRANSLATED_SRT_CUE_COUNT_MISMATCH | Wenn sourceSrt und translatedSrt gemeinsam übergeben werden, müssen beide dieselbe Anzahl von Untertitelblöcken enthalten. |
| 400 | TRANSLATION_TIME_SKIP_CONFLICT | Zeitsprünge in der Übersetzung können nicht mit keepOriginalVoice true kombiniert werden. |
| 400 | TRANSLATION_TIME_SKIP_NOT_AVAILABLE_FOR_AUDIO | Zeitsprünge bei der Übersetzung erfordern eine Videoeingabe. |
| 400 | TRANSLATION_TIME_SKIP_OUT_OF_RANGE | Ein übersprungener Bereich reicht über die Mediendauer hinaus. |
| 400 | TRANSLATION_TIME_SKIP_REQUIRES_BACKGROUND | Zeitsprünge bei der Übersetzung erfordern keepBackgroundMusic true. |
| 400 | VALIDATION_ERROR | Korrigieren Sie die Eingabe anhand des Schemas. Ungültige oder widersprüchliche Werte werden vor der Ausführung abgelehnt. |
| 400 | VOICE_CLONING_SETTINGS_NOT_ALLOWED | voiceCloningSettings gelten nur für voiceMode cloning. |
| 400 | VOICE_ID_NOT_ALLOWED_WITH_CLONING | voiceId kann nicht mit voiceMode cloning kombiniert werden. |
| 400 | VOICE_ID_REQUIRED | voiceMode custom erfordert voiceId. |
| 401 | API_KEY_EXPIRED | Der API-Schlüssel ist abgelaufen. |
| 401 | INVALID_API_KEY | Geben Sie einen gültigen, nicht abgelaufenen API-Schlüssel an. |
| 401 | INVALID_CREDENTIAL | Der Authorization-Header ist fehlerhaft oder steht im Konflikt mit x-api-key. |
| 401 | MISSING_CREDENTIAL | Es wurde kein nutzbarer Berechtigungsnachweis im Header übergeben, oder er überschritt 4096 Zeichen. |
| 401 | USER_NOT_FOUND | Das Konto des Zugangsnachweises existiert nicht mehr. |
| 403 | ACCOUNT_UNAVAILABLE | Das ausführende Konto oder das Abrechnungskonto ist nicht verfügbar oder wird gerade gelöscht. |
| 403 | AMBIGUOUS_TEAM_API_KEY | Der Benutzer des Berechtigungsnachweises gehört mehr als einem Team an, weshalb der Abrechnungskontext nicht eindeutig ist. |
| 403 | CUSTOM_VOICE_ACCESS_DENIED | Die ausgewählte Stimme ist weder eine Katalogstimme noch eine vom authentifizierten Konto gespeicherte benutzerdefinierte Stimme. |
| 403 | INSUFFICIENT_CREDITS | Das Medienguthaben des Kontos reicht für die ausgewählte Sprachausgabe und die optionalen Einstellungen zur Lippensynchronisation nicht aus. |
| 403 | INSUFFICIENT_SCOPE | Erteilen Sie alle erforderlichen Berechtigungen oder verwenden Sie andere Zugangsdaten. |
| 403 | INTEGRATION_PLAN_UNSUPPORTED | Die Integrationslimits des Kontos konnten nicht verifiziert werden. |
| 403 | INVALID_FILE_REFERENCE | fileKey muss einen abgeschlossenen Upload des authentifizierten Akteurs bezeichnen. |
| 403 | LIPSYNC_MODE_ACCESS_DENIED | Der ausgewählte optionale Modus für die Lippensynchronisation ist im aktuellen Tarif nicht verfügbar. |
| 403 | SUBSCRIPTION_REQUIRED | Verwenden Sie ein aktives kostenpflichtiges Abonnement. |
| 403 | TEAM_OWNER_NOT_FOUND | Das maßgebliche Konto des Teaminhabers wurde nicht gefunden. |
| 404 | MEDIA_NOT_FOUND | Das hochgeladene Objekt fehlt oder ist leer. |
| 409 | CONCURRENT_ACTION_LIMIT_REACHED | Für dieses Konto laufen bereits 10 Integrationsaktionen. Fragen Sie eine vorhandene Anfrage ab, bevor Sie eine weitere starten. |
| 409 | IDEMPOTENCY_CONFLICT | Verwenden Sie eine Kennung nur mit derselben Operation und denselben Argumenten erneut. |
| 429 | CONCURRENT_TRANSLATION_LIMIT_REACHED | Das Konto hat bereits seine maximale Anzahl gleichzeitiger API-Übersetzungen erreicht. |
| 429 | INTEGRATION_MONTHLY_LIMIT_REACHED | Warten Sie auf die monatliche Zurücksetzung oder wechseln Sie den Tarif. |
| 429 | INTEGRATION_RATE_LIMIT_REACHED | Warten Sie gegebenenfalls die in Retry-After angegebene Zeit und verwenden Sie zunehmend längere Warteintervalle. |
| 500 | INTERNAL_ERROR | Prüfen Sie den Status der gespeicherten Anfrage und den Ressourcenverlauf, bevor Sie eine Mutation erneut versuchen. |
| 503 | ACTION_RESULT_UNAVAILABLE | Die Aktion wurde ausgeführt, ihr Ergebnis konnte jedoch nicht gespeichert werden. Prüfen Sie den gespeicherten Anfragestatus und den Ressourcenverlauf, bevor Sie eine neue Generierung starten. |
| 503 | SERVER_RESTARTING | Der Server wird neu gestartet. Versuchen Sie es in Kürze erneut und behalten Sie bei einer Mutation dieselbe Anfragekennung bei. |
{
"code": "INSUFFICIENT_SCOPE",
"message": "This credential does not permit the requested action.",
"status": 403,
"details": {
"requiredScopes": ["projects:write", "translations:write", "transcription:write"]
}
}
War diese Seite hilfreich?

