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"
}
翻訳と吹き替え
翻訳済み動画・音声プロジェクトを作成
アップロード済みの fileKey からプロジェクトを作成し、文字起こしと翻訳を行った後、音声を合成します。独自の SRT、音声、字幕、任意のリップシンクに対応します。通常のメディア用クレジットを使用します。任意の webhookUrl で処理イベントを受信できます。projects_status で状態を確認してください。
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"
}
アップロード済みの fileKey からプロジェクトを作成し、文字起こしと翻訳を行った後、音声を合成します。独自の SRT、音声、字幕、任意のリップシンクに対応します。通常のメディア用クレジットを使用します。任意の webhookUrl で処理イベントを受信できます。projects_status で状態を確認してください。
必要な権限:
POST https://api.voicecheap.ai/v1/actions/translations_create
認証と権限
string
必須
このヘッダーに VoiceCheap API キーを指定してください。同じ API キーを Authorization: Bearer で送信することもできます。OAuth アクセストークンは MCP
でのみ使用でき、この REST エンドポイントでは使用できません。
projects:write, translations:write, transcription:write.
有効な有料サブスクリプションが必要です。権限によってチーム内のロール、リソースの所有権、メディアクレジット、プランの制限が変わることはありません。
パラメーター
string
必須
テキスト値。最小文字数: 1. 最大文字数: 1024.
string
必須
テキスト値。許容値: “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
テキスト値。許容値: “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
テキスト値。最小文字数: 1. 最大文字数: 200.
string
テキスト値。許容値: “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
値のリスト。要素の構造は完全な入力スキーマを参照してください。最大要素数: 1000.
boolean
真偽値。
string
テキスト値。最大文字数: 1000000.
string
テキスト値。最大文字数: 2048. 形式: “uri”.
string
トランスポート境界では任意です。省略すると、検証前にサーバーが識別子を補完します。レスポンスを受信できなかった場合に安全に復旧できるよう、固定の UUID v4 を指定してください。形式: “uuid”. パターン:
^[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
真偽値。
boolean
真偽値。
number
数値。最小値: 1. 最大値: 70.
string
テキスト値。許容値: “cloning”, “custom”.
string
テキスト値。最小文字数: 1. 最大文字数: 128.
boolean
真偽値。
string
テキスト値。許容値: “translated”, “original”.
string
テキスト値。許容値: “studio”, “realistic”.
string
テキスト値。許容値: “standard”, “pro”, “studio”.
boolean
真偽値。
object
JSON オブジェクト。ネストされたフィールドは完全な入力スキーマを参照してください。
array
値のリスト。要素の構造は完全な入力スキーマを参照してください。最大要素数: 100.
string
テキスト値。最大文字数: 1000000.
完全な入力スキーマ
完全な入力スキーマ
以下の JSON Schema は、ディスカバリーで公開される正確なフィールド名、ネストされた型、デフォルト値、範囲、許容値を保持しています。フィールド間の追加ルールは操作の注意事項に記載されています。
{
"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
}
冪等性
変更操作ごとに、requestId または Idempotency-Key HTTP ヘッダーに UUID v4 を指定してください。ネットワーク障害後の再試行では、同じ識別子と同一の引数を使用します。両方を指定する場合は一致させる必要があります。保存済みリクエストを再取得しても、操作は再実行されず、月間呼び出し回数も追加で消費されません。失敗または中断したリクエストは自動的には再開されません。 すべての変更操作は、再試行時に同じリクエストがまだ実行中であれば、通常の初回実行が同期処理であっても HTTP 202 を返す場合があります。実行が完了していても resultStored が false の場合、再試行では元の結果ではなく、保存済みリクエストの状態を HTTP 200 で返します。出力は対応するドメインの履歴、結果、またはダウンロードアクションで取得してください。リクエスト例
例に記載されたリソース識別子とメディアキーを、ご自身のアカウントで返された値に置き換えてください。同じ変更操作を再試行する場合は、リクエスト識別子を変更しないでください。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 に格納して HTTP 200 を返します。同じリクエストを再送した場合は、代わりに保存済みリクエストの状態を返すことがあります。例はサポートされるレスポンスの一例であり、すべての任意フィールドを示すものではありません。 文字起こしに続く翻訳・音声生成、または指定済み翻訳による吹き替えを開始した後、新しいプロジェクト識別子を返します。{
"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"
}
結果フィールド
| フィールド | 説明 |
|---|---|
data.success | バックグラウンドワークフローが受け付けられた場合は true。メディアの完成を示すものではありません。 |
data.message | 翻訳、または指定済み翻訳による吹き替えの確認応答。 |
data.projectId | 親プロジェクトの識別子。 |
data.estimatedDuration | 処理時間の概算(分): ceil(source duration in seconds / 60) * 5。 |
translatedSrt が指定され、受け付けられています。
同じ結果フィールドで、指定された対象テキストの吹き替えが受け付けられたことを示します。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
}
}
リクエストの復旧とポーリング
接続が切断された後も同じ識別子を使用してください。resultStored が false の場合は、対応する履歴、結果、またはダウンロードアクションで出力を取得します。進捗を確認するためだけに、別の生成を開始しないでください。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
}
}
}
操作の注意事項
- 完了済みの fileKey は認証済み実行者に属している必要があります。サーバーが保存済みメディアの長さとサイズを計測します。
- 任意の sourceSrt を指定する場合は、originalLanguage の明示が必要です。translatedSrt も指定する場合、両方の SRT のキュー数は同じである必要があり、指定した翻訳はキューのインデックスで対応付けられます。
- translatedSrt を指定すると、ワークフローはそのテキストを吹き替え、指定済み翻訳の受け付け確認を返します。sourceSrt がある場合はインデックスでキューを対応付け、ない場合は自動文字起こしのタイムラインを使用します。
- 作成結果に workId や translatedVersionId は含まれません。生成された後に projects_status または projects_get から取得してください。
- voiceMode の既定値は cloning です。voiceMode custom では、カタログの音声、または認証済みアカウントが保存したカスタム音声を使用し、voiceCloningSettings は指定しないでください。チームでの請求によって他のメンバーの保存済み音声にアクセスできるようにはなりません。
- 任意の subtitles、lipSyncMode、translationTimeSkips には動画入力が必要です。スキップ範囲はメディアの長さの範囲内で、keepBackgroundMusic は true、keepOriginalVoice は false である必要があります。
- lipSyncMode は standard、pro、studio を受け付け、プランと通常のメディアクレジット確認が適用されます。月間 API 呼び出しが無制限でも、音声生成やリップシンクが無料になるわけではありません。
- メディア処理の状態は projects_status をポーリングし、全言語のバージョンは projects_get で取得してください。
- originalLanguage には fr や en などの元言語コード(対応する場合は auto-detect)を指定します。targetLanguage には english などの対応する翻訳先言語名を指定します。
使用量
正常に実行された呼び出しごとに、月間 API/MCP 呼び出し回数を 1 回消費します。メディアクレジットと、その操作固有の生成枠も適用されます。エラー
| HTTP ステータス | コード | 意味または対処方法 |
|---|---|---|
| 400 | CREDENTIAL_IN_QUERY | access_token または api_key クエリパラメーターに認証情報が指定されています。認証情報はヘッダーで送信してください。 |
| 400 | FILE_TOO_LARGE | 保存済みのアップロードが、アカウントのアップロードサイズ上限を超えています。 |
| 400 | IDEMPOTENCY_CONFLICT | Idempotency-Key ヘッダーとリクエストボディの requestId は一致させる必要があります。 |
| 400 | INVALID_FILE_TYPE | アップロードしたファイル名に、対応する音声または動画の拡張子がありません。 |
| 400 | INVALID_MEDIA_DURATION | 計測した長さが無効か、プランの上限を超えています。 |
| 400 | INVALID_REQUEST_ID | UUID v4 の requestId または Idempotency-Key を指定してください。 |
| 400 | INVALID_SOURCE_SRT | sourceSrt は有効なSRTキューを含む必要があります。 |
| 400 | INVALID_TRANSLATED_SRT | 指定された翻訳先言語の SRT の形式が不正です。 |
| 400 | LIPSYNC_NOT_AVAILABLE_FOR_AUDIO | リップシンクには動画入力が必要です。 |
| 400 | LIPSYNC_VIDEO_TOO_LONG | 動画が、選択したリップシンクモードの長さの上限を超えています。 |
| 400 | SOURCE_LANGUAGE_REQUIRED_FOR_SRT | sourceSrt を指定する場合は、originalLanguage を明示的に設定してください。 |
| 400 | SUBTITLES_NOT_AVAILABLE_FOR_AUDIO | 字幕の焼き込みには動画入力が必要です。 |
| 400 | TRANSLATED_SRT_CUE_COUNT_MISMATCH | sourceSrt と translatedSrt を同時に指定する場合、両方のキュー数が一致している必要があります。 |
| 400 | TRANSLATION_TIME_SKIP_CONFLICT | 翻訳時の時間スキップは、keepOriginalVoice true と併用できません。 |
| 400 | TRANSLATION_TIME_SKIP_NOT_AVAILABLE_FOR_AUDIO | 翻訳時の時間範囲スキップには動画入力が必要です。 |
| 400 | TRANSLATION_TIME_SKIP_OUT_OF_RANGE | スキップ範囲がメディアの長さを超えています。 |
| 400 | TRANSLATION_TIME_SKIP_REQUIRES_BACKGROUND | 翻訳時の時間範囲スキップには、keepBackgroundMusic が true である必要があります。 |
| 400 | VALIDATION_ERROR | スキーマに従って入力を修正してください。無効な値や整合性のない値は実行前に拒否されます。 |
| 400 | VOICE_CLONING_SETTINGS_NOT_ALLOWED | voiceCloningSettings は、voiceMode が cloning の場合のみ適用されます。 |
| 400 | VOICE_ID_NOT_ALLOWED_WITH_CLONING | voiceId は voiceMode の cloning と併用できません。 |
| 400 | VOICE_ID_REQUIRED | voiceMode が custom の場合は voiceId が必要です。 |
| 401 | API_KEY_EXPIRED | API キーの有効期限が切れています。 |
| 401 | INVALID_API_KEY | 有効期限内の有効な API キーを指定してください。 |
| 401 | INVALID_CREDENTIAL | Authorization ヘッダーの形式が不正、または x-api-key と競合しています。 |
| 401 | MISSING_CREDENTIAL | 利用可能なヘッダー認証情報が指定されていないか、4096文字を超えています。 |
| 401 | USER_NOT_FOUND | 認証情報に対応するアカウントはすでに存在しません。 |
| 403 | ACCOUNT_UNAVAILABLE | 操作を実行するアカウントまたは請求対象アカウントが利用できないか、削除中です。 |
| 403 | AMBIGUOUS_TEAM_API_KEY | 認証情報のユーザーが複数のチームに属しているため、課金コンテキストが曖昧です。 |
| 403 | CUSTOM_VOICE_ACCESS_DENIED | 選択した音声はカタログの音声でも、認証済みアカウントが保存したカスタム音声でもありません。 |
| 403 | INSUFFICIENT_CREDITS | 選択した音声と任意のリップシンク設定に必要なメディアクレジットが、アカウントに不足しています。 |
| 403 | INSUFFICIENT_SCOPE | 必要な権限をすべて付与するか、別の認証情報を使用してください。 |
| 403 | INTEGRATION_PLAN_UNSUPPORTED | アカウントの連携上限を確認できませんでした。 |
| 403 | INVALID_FILE_REFERENCE | fileKey は、認証済み実行者が所有する completed のアップロードを示す必要があります。 |
| 403 | LIPSYNC_MODE_ACCESS_DENIED | 選択したオプションのリップシンクモードは、現在のプランでは利用できません。 |
| 403 | SUBSCRIPTION_REQUIRED | 有効な有料サブスクリプションを使用してください。 |
| 403 | TEAM_OWNER_NOT_FOUND | 実効的なチームオーナーのアカウントが見つかりませんでした。 |
| 404 | MEDIA_NOT_FOUND | アップロードしたオブジェクトが存在しないか、空です。 |
| 409 | CONCURRENT_ACTION_LIMIT_REACHED | このアカウントでは、すでに 10 件の連携アクションが実行中です。新しいアクションを開始する前に、既存のリクエストをポーリングしてください。 |
| 409 | IDEMPOTENCY_CONFLICT | 識別子を再利用する場合は、同じ操作と引数でのみ使用してください。 |
| 429 | CONCURRENT_TRANSLATION_LIMIT_REACHED | このアカウントは、すでに API 翻訳の同時実行数上限に達しています。 |
| 429 | INTEGRATION_MONTHLY_LIMIT_REACHED | 月次リセットを待つか、プランを変更してください。 |
| 429 | INTEGRATION_RATE_LIMIT_REACHED | Retry-After がある場合は指定時間を待ち、バックオフを使用してください。 |
| 500 | INTERNAL_ERROR | 変更操作を再試行するか判断する前に、保存済みリクエストの状態とリソースの履歴を確認してください。 |
| 503 | ACTION_RESULT_UNAVAILABLE | アクションは実行されましたが、結果を保存できませんでした。新しい生成を開始する前に、保存済みリクエストの状態とリソース履歴を確認してください。 |
| 503 | SERVER_RESTARTING | サーバーが再起動中です。少し待ってから再試行し、変更操作では同じリクエスト識別子を使用してください。 |
{
"code": "INSUFFICIENT_SCOPE",
"message": "This credential does not permit the requested action.",
"status": 403,
"details": {
"requiredScopes": ["projects:write", "translations:write", "transcription:write"]
}
}
このページは役に立ちましたか?

