> ## Documentation Index
> Fetch the complete documentation index at: https://api-docs.voicecheap.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 翻訳を開始

> ビデオまたはオーディオファイルをアップロードして、新しい翻訳プロジェクトを開始します

# 翻訳を開始

ビデオまたはオーディオファイルをアップロードして、新しい翻訳プロジェクトを作成します。翻訳プロセスはバックグラウンドで非同期に実行されます。進捗状況の追跡と結果の取得には [ステータスエンドポイント](/docs/ja/api-reference/translation-status) を使用してください。翻訳されたバージョン履歴やリップシンク履歴が必要な場合は、[プロジェクト詳細を取得](/docs/ja/api-reference/project-details) を使用してください。

## 同時実行制限

アカウントごとに最大10個の翻訳を同時に実行できます。すでに10個の翻訳が進行中の場合、新しいリクエストは `CONCURRENT_TRANSLATION_LIMIT_REACHED` (HTTP 429) を返します。

## リクエスト

このエンドポイントは、ファイルアップロードを伴う `multipart/form-data` を受け付けます。

### ヘッダー

<ParamField header="x-api-key" type="string" required>
  VoiceCheap APIキー。[app.voicecheap.ai/page-api](https://app.voicecheap.ai/page-api)から取得してください。
</ParamField>

### ボディパラメータ

<ParamField body="file" type="file" required>
  翻訳対象の動画または音声ファイル。

  **サポートされている動画形式:** `video/mp4`、`video/quicktime`、`video/x-matroska`、`video/webm`、`video/mpeg`

  **サポートされている音声形式:** `audio/mpeg`、`audio/wav`、`audio/mp4`、`audio/x-m4a`、`audio/flac`、`audio/ogg`、`audio/aac`、`audio/webm`

  **プランごとの最大ファイルサイズ:** Beginner 5 GB、Starter 10 GB、Creator 20 GB、Pro 30 GB、Scale 40 GB、Enterprise 60 GB。
</ParamField>

<ParamField body="targetLanguage" type="string" required>
  コンテンツの翻訳先言語。小文字である必要があります。

  **許可される値 (70以上):** `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`、`punjabi`、`romanian`、`russian`、`serbian`、`slovak`、`slovenian`、`spanish`、`swahili`、`swedish`、`tagalog`、`tamil`、`telugu`、`thai`、`turkish`、`ukrainian`、`urdu`、`vietnamese`、`welsh`、`yoruba`、`zulu`
</ParamField>

<ParamField body="originalLanguage" type="string">
  ISO言語コードを使用したコンテンツのソース言語（例: `en`、`es`、`fr`、`de`、`ja`、`zh`）。

  <Warning>
    **強く推奨: 自動検出を行う場合は、この項目を空のままにしてください。**

    このパラメータは、言語コードが正しいこと、および有効なISO形式であることを100%確信している場合にのみ指定してください。誤った言語コードを指定すると、文字起こしが失敗します。当社の自動検出機能は80以上の言語に対応しており、非常に高精度です。
  </Warning>

  **デフォルト:** `auto-detect`
</ParamField>

<ParamField body="projectName" type="string">
  プロジェクトのカスタム名。ダッシュボードでプロジェクトを識別するのに便利です。

  **デフォルト:** 指定がない場合はプロジェクトIDが使用されます。
</ParamField>

<ParamField body="webhookUrl" type="string">
  このプロジェクトの[webhookイベント](/docs/ja/api-reference/webhooks)を受信するhttpsエンドポイント。
  アカウントに設定されたエンドポイントを上書きします。

  **デフォルト:** 設定されている場合は、アカウントのwebhookエンドポイント。
</ParamField>

<ParamField body="numberOfSpeakers" type="string">
  `auto-detect`、または`1`から`32`までの整数。話者数が判明している場合、話者分離（ダイアライゼーション）の精度が向上します。

  **デフォルト:** `auto-detect`
</ParamField>

<ParamField body="brandVocabulary" type="string">
  リクエスト固有の名前、ブランド、頭字語、専門用語のJSON文字列配列。これらの用語は、保存されたアカウントまたはチームの用語集と統合されます。
</ParamField>

<ParamField body="removeFillerWords" type="boolean">
  翻訳前に、ソースの文字起こしから一般的なフィラーワード（言い淀み）を削除します。

  **デフォルト:** `true`
</ParamField>

<ParamField body="sourceSrt" type="string">
  既存のソース言語のSRT文字起こしファイル。このフィールドを指定する場合、`originalLanguage`を明示する必要があります。
</ParamField>

<ParamField body="keepBackgroundMusic" type="boolean">
  出力に背景音声を保持するかどうか。

  有効にすると、元の音声のみを削除（ステム分離）し、背景音楽、環境音、笑い声、拍手、群衆の音を保持します。ソースに背景音声がない場合はオフにしてください。

  **デフォルト:** `true`
</ParamField>

<ParamField body="keepOriginalVoice" type="boolean">
  翻訳された音声の下で、元の話者の音声を小さく保持します。

  **デフォルト:** `false`
</ParamField>

<ParamField body="originalVoiceVolume" type="number">
  `keepOriginalVoice`が有効な場合の、`1`から`70`までの元の音声の音量。

  **デフォルト:** `30`
</ParamField>

<ParamField body="voiceIsolatorOption" type="string">
  `keepBackgroundMusic`が有効な場合の音声分離モード。音声分離の品質と特性を制御します。

  <Accordion title="スタジオ（推奨）">
    プロフェッショナルな音質のために設計された、当社のデフォルトの音声処理:

    * エコーや残響を除去
    * 技術的な不完全さをクリーンアップ
    * 明瞭で鮮明な音声を生成

    **推奨用途:** 音質が最優先されるほとんどのプロジェクト。チュートリアル、教育コンテンツ、マーケティング動画、および最適な音声の明瞭さが求められるあらゆるコンテンツに最適です。
  </Accordion>

  <Accordion title="リアル">
    録音環境の自然な特性を保持します:

    * 元の録音に近い音を維持
    * 環境特性を保持

    **推奨用途:** 屋外のVlog、ドキュメンタリー、または音の雰囲気が体験の不可欠な要素であるコンテンツなど、環境の真正性が重要なコンテンツ。

    <Warning>このオプションは、背景要素を保持するため、場合によってはアーティファクトや予期しない影響が生じることがあります。</Warning>
  </Accordion>

  **許可される値:** `studio`、`realistic`

  **デフォルト:** `studio`
</ParamField>

<ParamField body="subtitles" type="boolean">
  翻訳された動画の字幕を生成するかどうか。

  有効にすると、Netflixスタイルのクリーンな白黒字幕が追加されます。`subtitlesSource`を使用して、オリジナル（ソース言語）または翻訳済み（ターゲット言語）のテキストを選択してください。字幕は最適な読みやすさのために自動的に同期されます。

  **注:** 字幕の焼き込みには、`subtitles`フィルタ（libass）を備えたFFmpegが必要です。利用できない場合、APIはハード焼き込みスタイルの代わりに字幕トラックを埋め込む方式にフォールバックします。

  **デフォルト:** `false`
</ParamField>

<ParamField body="subtitlesSource" type="string">
  `subtitles`が有効な場合に、字幕テキストのソースを選択します。

  **許可される値:** `translated`, `original`

  **デフォルト:** `translated`

  **注:** `original`が選択されているにもかかわらず元の文字起こしが利用できない場合、字幕は`translated`にフォールバックします。
</ParamField>

<ParamField body="lipSyncMode" type="string">
  翻訳完了後にリップシンク処理をトリガーします。

  * `standard` = Lip Sync
  * `pro` = Lip Sync Pro
  * `studio` = Lip Sync Studio

  プレミアムモードでは、通常のプラン、期間、およびクレジット要件が適用されます。

  **デフォルト:** フィールドを省略するとリップシンクをスキップします。
</ParamField>

<ParamField body="activeSpeakerDetectionEnabled" type="boolean">
  リクエストされたリップシンク実行に対して、アクティブスピーカー検出を有効にします。

  **デフォルト:** `false`
</ParamField>

<ParamField body="lipsyncPro" type="boolean">
  下位互換性のために保持されているレガシーリップシンクセレクターです。

  * `false` = 標準リップシンク (**動画1分あたり4分のクレジット**)
  * `true` = Lip Sync Pro (**動画1分あたり9分のクレジット**)

  Lip Sync ProはCreatorプランから利用可能です。

  <Warning>
    **最大期間:** 動画1本あたり30分。

    **レイテンシ:** リップシンク処理は通常、元の動画時間の**2倍〜4倍**の時間を要します。
  </Warning>

  <Info>
    API経由のリクエストでは、リップシンクの完了および失敗のメールは送信されません。[ステータスエンドポイント](/docs/ja/api-reference/translation-status)を使用して
    進捗状況を追跡してください。
  </Info>

  **デフォルト:** 無効（フィールドを省略するとリップシンクをスキップします）

  **フォームデータ:** ブール値は`true`または`false`の文字列として送信してください（例: `-F "lipsyncPro=false"`）。

  <Warning>`lipsyncPro`と競合する`lipSyncMode`を組み合わせないでください。</Warning>
</ParamField>

<ParamField body="voiceMode" type="string">
  音声戦略: `cloning`または`custom`。

  **デフォルト:** `cloning`
</ParamField>

<ParamField body="voiceId" type="string">
  `voiceMode`が`custom`の場合に必須です。音声は有効なプロジェクト所有者に属している必要があります。任意の音声IDや所有されていない音声IDは拒否されます。
</ParamField>

<ParamField body="voiceCloningSettings" type="object">
  生成される音声の詳細な制御のために、音声クローニングのパラメータを微調整します。フォームデータを使用する場合はJSON文字列として渡してください。すべての値は0から1の間である必要があります（0.01刻み）。

  <Info>これらの設定は、`voiceMode`が`cloning`の場合にのみ適用されます。</Info>

  <Expandable title="voiceCloningSettings プロパティ">
    <ParamField body="stability" type="number" default="0.60" placeholder="0.60">
      **音声の安定性 (0.00 - 1.00)**

      音声の安定性と、生成ごとのランダム性を決定します。

      * **低い値**は感情の幅を広げますが、不自然な発話や早口になる可能性があります
      * **高い値**は一貫した出力を生成しますが、単調に聞こえる可能性があります

      **デフォルト:** `0.60`

      **ヒント:** アクセントの再現を避けるには、`0.80`を使用してください
    </ParamField>

    <ParamField body="similarity" type="number" default="0.85" placeholder="0.85">
      **音声の類似度 (0.00 - 1.00)**

      AIが元の音声にどれだけ忠実であるかを制御します。

      * **高い値**にすると、クローンされた音声が元の音声により似るようになります
      * 元の音声にノイズが多く、類似度が高すぎる場合、アーティファクトや背景ノイズが生成された音声に混入する可能性があります

      **デフォルト:** `0.85`

      **ヒント:** アクセントの再現を避けるには、`0.20`を使用してください
    </ParamField>

    <ParamField body="speakerBoost" type="number" default="0.60" placeholder="0.60">
      **スピーカーブースト (0.00 - 1.00)**

      元の話者への類似度を高めます。これは、ソース音声への似通った度合いを向上させる微細な強化機能です。

      **注:** 値を高くすると、計算時間とレイテンシが増加します。

      **デフォルト:** `0.60`

      **ヒント:** アクセントの再現を避けるには、`0.00`を使用してください
    </ParamField>
  </Expandable>

  **デフォルト値 (バランス型):**

  ```json theme={null}
  {
    "stability": 0.6,
    "similarity": 0.85,
    "speakerBoost": 0.6
  }
  ```

  **アクセントの再現を避けるために推奨:**

  ```json theme={null}
  {
    "stability": 0.8,
    "similarity": 0.2,
    "speakerBoost": 0.0
  }
  ```
</ParamField>

<ParamField body="translationTimeSkips" type="string">
  元の言語のままにするソース時間範囲のJSON配列。

  ```json theme={null}
  [
    { "startTime": 10.2, "endTime": 12.8 }
  ]
  ```

  タイムスキップには動画入力と`keepBackgroundMusic=true`が必要です。これらは`keepOriginalVoice`と組み合わせることはできず、文字起こしセグメントと重複させることもできません。
</ParamField>

## レスポンス

<ResponseField name="success" type="boolean" required>
  リクエストが成功した場合は常に`true`
</ResponseField>

<ResponseField name="message" type="string" required>
  結果を説明する人間が読める形式のメッセージ
</ResponseField>

<ResponseField name="projectId" type="string" required>
  作成された吹き替えプロジェクトの一意の識別子。このIDを使用してステータスを確認してください。
</ResponseField>

<ResponseField name="estimatedDuration" type="number" required>
  分単位での概算処理時間。現在の見積もりでは、ソースメディアの開始1分あたり5分の処理時間がかかります。
</ResponseField>

## 例

<Info>
  有効なアカウントまたはチームに保存されている用語集ルールとカスタム翻訳指示が自動的に適用されます。
</Info>

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.voicecheap.ai/v1/translate \
    -H "x-api-key: vc_your-api-key" \
    -F "file=@video.mp4" \
    -F "targetLanguage=spanish" \
    -F "projectName=My Spanish Translation" \
    -F "numberOfSpeakers=2" \
    -F 'brandVocabulary=["VoiceCheap","SmartSync"]' \
    -F "removeFillerWords=true" \
    -F "keepBackgroundMusic=true" \
    -F "keepOriginalVoice=false" \
    -F "voiceIsolatorOption=studio" \
    -F "subtitles=true" \
    -F "subtitlesSource=translated" \
    -F "lipSyncMode=standard" \
    -F "activeSpeakerDetectionEnabled=true"
  ```

  ```typescript TypeScript theme={null}
  interface StartTranslationResponse {
    success: boolean;
    message: string;
    projectId: string;
    estimatedDuration: number;
  }

  interface VoiceCloningSettings {
    stability: number; // 0.00 - 1.00
    similarity: number; // 0.00 - 1.00
    speakerBoost: number; // 0.00 - 1.00
  }

  interface StartTranslationRequest {
    targetLanguage: string;
    originalLanguage?: string;
    projectName?: string;
    numberOfSpeakers?: 'auto-detect' | string;
    brandVocabulary?: string[];
    removeFillerWords?: boolean;
    keepBackgroundMusic?: boolean;
    keepOriginalVoice?: boolean;
    originalVoiceVolume?: number;
    voiceMode?: 'cloning' | 'custom';
    voiceId?: string;
    voiceIsolatorOption?: 'studio' | 'realistic';
    subtitles?: boolean;
    subtitlesSource?: 'translated' | 'original';
    lipSyncMode?: 'standard' | 'pro' | 'studio';
    activeSpeakerDetectionEnabled?: boolean;
    voiceCloningSettings?: VoiceCloningSettings;
    translationTimeSkips?: Array<{ startTime: number; endTime: number }>;
  }

  async function startTranslation(
    file: File,
    targetLanguage: string,
    options?: {
      originalLanguage?: string;
      projectName?: string;
      numberOfSpeakers?: 'auto-detect' | string;
      brandVocabulary?: string[];
      removeFillerWords?: boolean;
      keepBackgroundMusic?: boolean;
      keepOriginalVoice?: boolean;
      originalVoiceVolume?: number;
      voiceMode?: 'cloning' | 'custom';
      voiceId?: string;
      voiceIsolatorOption?: 'studio' | 'realistic';
      subtitles?: boolean;
      subtitlesSource?: 'translated' | 'original';
      lipSyncMode?: 'standard' | 'pro' | 'studio';
      activeSpeakerDetectionEnabled?: boolean;
      voiceCloningSettings?: VoiceCloningSettings;
      translationTimeSkips?: Array<{ startTime: number; endTime: number }>;
    },
  ): Promise<StartTranslationResponse> {
    const formData = new FormData();
    formData.append('file', file);
    formData.append('targetLanguage', targetLanguage);

    if (options?.projectName) {
      formData.append('projectName', options.projectName);
    }
    if (options?.originalLanguage) {
      formData.append('originalLanguage', options.originalLanguage);
    }
    if (options?.numberOfSpeakers) {
      formData.append('numberOfSpeakers', options.numberOfSpeakers);
    }
    if (options?.brandVocabulary) {
      formData.append('brandVocabulary', JSON.stringify(options.brandVocabulary));
    }
    if (options?.removeFillerWords !== undefined) {
      formData.append('removeFillerWords', String(options.removeFillerWords));
    }
    if (options?.keepBackgroundMusic !== undefined) {
      formData.append('keepBackgroundMusic', String(options.keepBackgroundMusic));
    }
    if (options?.keepOriginalVoice !== undefined) {
      formData.append('keepOriginalVoice', String(options.keepOriginalVoice));
    }
    if (options?.originalVoiceVolume !== undefined) {
      formData.append('originalVoiceVolume', String(options.originalVoiceVolume));
    }
    if (options?.voiceMode) {
      formData.append('voiceMode', options.voiceMode);
    }
    if (options?.voiceId) {
      formData.append('voiceId', options.voiceId);
    }
    if (options?.voiceIsolatorOption) {
      formData.append('voiceIsolatorOption', options.voiceIsolatorOption);
    }
    if (options?.subtitles !== undefined) {
      formData.append('subtitles', String(options.subtitles));
    }
    if (options?.subtitlesSource) {
      formData.append('subtitlesSource', options.subtitlesSource);
    }
    if (options?.lipSyncMode) {
      formData.append('lipSyncMode', options.lipSyncMode);
    }
    if (options?.activeSpeakerDetectionEnabled !== undefined) {
      formData.append('activeSpeakerDetectionEnabled', String(options.activeSpeakerDetectionEnabled));
    }
    if (options?.voiceCloningSettings) {
      formData.append('voiceCloningSettings', JSON.stringify(options.voiceCloningSettings));
    }
    if (options?.translationTimeSkips) {
      formData.append('translationTimeSkips', JSON.stringify(options.translationTimeSkips));
    }

    const response = await fetch('https://api.voicecheap.ai/v1/translate', {
      method: 'POST',
      headers: {
        'x-api-key': 'vc_your-api-key',
      },
      body: formData,
    });

    if (!response.ok) {
      const error = await response.json();
      throw new Error(error.message || 'Translation failed');
    }

    return response.json();
  }

  // Usage example
  const file = document.querySelector<HTMLInputElement>('#fileInput')?.files?.[0];
  if (file) {
    const result = await startTranslation(file, 'spanish', {
      projectName: 'My Spanish Translation',
      keepBackgroundMusic: true,
      voiceIsolatorOption: 'studio',
      subtitles: true,
      subtitlesSource: 'translated',
      voiceCloningSettings: {
        stability: 0.6,
        similarity: 0.85,
        speakerBoost: 0.6,
      },
    });
    console.log('Project ID:', result.projectId);
  }
  ```

  ```javascript JavaScript theme={null}
  const formData = new FormData();
  formData.append('file', videoFile);
  formData.append('targetLanguage', 'spanish');
  formData.append('projectName', 'My Spanish Translation');
  formData.append('keepBackgroundMusic', 'true');
  formData.append('voiceIsolatorOption', 'studio');
  formData.append('subtitles', 'true');
  formData.append('subtitlesSource', 'translated');
  formData.append(
    'voiceCloningSettings',
    JSON.stringify({
      stability: 0.6,
      similarity: 0.85,
      speakerBoost: 0.6,
    }),
  );

  const response = await fetch('https://api.voicecheap.ai/v1/translate', {
    method: 'POST',
    headers: {
      'x-api-key': 'vc_your-api-key',
    },
    body: formData,
  });

  const data = await response.json();
  console.log('Project ID:', data.projectId);
  ```

  ```python Python theme={null}
  import requests
  import json

  files = {'file': open('video.mp4', 'rb')}
  data = {
      'targetLanguage': 'spanish',
      'projectName': 'My Spanish Translation',
      'keepBackgroundMusic': 'true',
      'voiceIsolatorOption': 'studio',
      'subtitles': 'true',
      'subtitlesSource': 'translated',
      'voiceCloningSettings': json.dumps({
          'stability': 0.60,
          'similarity': 0.85,
          'speakerBoost': 0.60
      })
  }
  headers = {'x-api-key': 'vc_your-api-key'}

  response = requests.post(
      'https://api.voicecheap.ai/v1/translate',
      headers=headers,
      files=files,
      data=data
  )

  result = response.json()
  print(f"Project ID: {result['projectId']}")
  ```

  ```php PHP theme={null}
  <?php
  $curl = curl_init();

  $voiceCloningSettings = json_encode([
      'stability' => 0.60,
      'similarity' => 0.85,
      'speakerBoost' => 0.60
  ]);

  $postFields = [
      'file' => new CURLFile('video.mp4'),
      'targetLanguage' => 'spanish',
      'projectName' => 'My Spanish Translation',
      'keepBackgroundMusic' => 'true',
      'voiceIsolatorOption' => 'studio',
      'subtitles' => 'true',
      'subtitlesSource' => 'translated',
      'voiceCloningSettings' => $voiceCloningSettings
  ];

  curl_setopt_array($curl, [
      CURLOPT_URL => 'https://api.voicecheap.ai/v1/translate',
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_POST => true,
      CURLOPT_POSTFIELDS => $postFields,
      CURLOPT_HTTPHEADER => [
          'x-api-key: vc_your-api-key'
      ]
  ]);

  $response = curl_exec($curl);
  $result = json_decode($response, true);
  echo "Project ID: " . $result['projectId'];
  ```
</CodeGroup>

## レスポンス例

```json theme={null}
{
  "success": true,
  "message": "Translation started successfully. Use the status endpoint to track progress.",
  "projectId": "abc123-def456-ghi789",
  "estimatedDuration": 15
}
```

## エラー

| ステータス | コード                                             | 説明                                          |
| ----- | ----------------------------------------------- | ------------------------------------------- |
| 400   | `FILE_REQUIRED`                                 | リクエストでファイルがアップロードされませんでした                   |
| 400   | `INVALID_FILE_TYPE`                             | アップロードされたファイルタイプはサポートされていません                |
| 400   | `DURATION_DETECTION_FAILED`                     | アップロードされたファイルの長さを検出できませんでした                 |
| 400   | `INVALID_MULTIPART_REQUEST`                     | マルチパートフォームデータが不正であるか、フィールド制限を超えています         |
| 400   | `INVALID_BOOLEAN_VALUE`                         | ブール値パラメータの値が無効です（"true"または"false"を使用してください） |
| 400   | `INVALID_JSON_FORMAT`                           | voiceCloningSettingsのJSONが不正です              |
| 400   | `INVALID_BRAND_VOCABULARY`                      | リクエスト固有の語彙エントリが無効です                         |
| 400   | `INVALID_SOURCE_SRT`                            | 提供されたソースSRTが不正です                            |
| 400   | `SOURCE_LANGUAGE_REQUIRED_FOR_SRT`              | sourceSrtには明示的なoriginalLanguageが必要です        |
| 400   | `VOICE_ID_REQUIRED`                             | 音声IDなしでカスタム音声モードが選択されました                    |
| 400   | `VOICE_ID_NOT_ALLOWED_WITH_CLONING`             | 音声IDが音声クローニングと組み合わされています                    |
| 400   | `VOICE_CLONING_SETTINGS_NOT_ALLOWED`            | クローン設定がカスタム音声モードと組み合わされています                 |
| 400   | `CONFLICTING_LIPSYNC_OPTIONS`                   | lipSyncModeが従来のlipsyncProと競合しています           |
| 400   | `TRANSLATION_TIME_SKIP_CONFLICT`                | タイムスキップが他の音声オプションと競合しています                   |
| 400   | `TRANSLATION_TIME_SKIP_REQUIRES_BACKGROUND`     | タイムスキップには背景音声が必要です                          |
| 400   | `TRANSLATION_TIME_SKIP_OUT_OF_RANGE`            | タイムスキップがメディアの長さを超えています                      |
| 400   | `INVALID_TRANSLATION_TIME_SKIPS`                | タイムスキップが文字起こしセグメントと重複しています                  |
| 400   | `SUBTITLES_NOT_AVAILABLE_FOR_AUDIO`             | 音声入力に対して焼き込み字幕がリクエストされました                   |
| 400   | `LIPSYNC_NOT_AVAILABLE_FOR_AUDIO`               | 音声入力に対してリップシンクがリクエストされました                   |
| 400   | `TRANSLATION_TIME_SKIP_NOT_AVAILABLE_FOR_AUDIO` | 音声入力に対してタイムスキップがリクエストされました                  |
| 400   | `LIPSYNC_VIDEO_TOO_LONG`                        | サポートされている長さを超えるメディアに対してリップシンクがリクエストされました    |
| 413   | `FILE_TOO_LARGE`                                | アップロードされたファイルがユーザーのプラン制限を超えています             |
| 401   | `MISSING_API_KEY`                               | APIキーが必要です                                  |
| 401   | `INVALID_API_KEY_FORMAT`                        | APIキーは`vc_`で始まる必要があります                      |
| 401   | `INVALID_API_KEY`                               | 提供されたAPIキーは無効です                             |
| 403   | `API_ACCESS_REQUIRED`                           | このアカウントにはAPIアクセスが必要です                       |
| 403   | `SUBSCRIPTION_REQUIRED`                         | APIアクセスには有料サブスクリプションが必要です                   |
| 403   | `INSUFFICIENT_CREDITS`                          | このファイルを処理するためのクレジットが不足しています                 |
| 403   | `CUSTOM_VOICE_ACCESS_DENIED`                    | カスタム音声は有効なプロジェクト所有者が所有していません                |
| 403   | `LIPSYNC_MODE_ACCESS_DENIED`                    | プレミアムリップシンクモードは現在のプランでは利用できません              |
| 429   | `RATE_LIMIT_EXCEEDED`                           | リクエストが多すぎます（制限：1分あたり10リクエスト）                |
| 429   | `CONCURRENT_TRANSLATION_LIMIT_REACHED`          | 進行中の翻訳が多すぎます（制限：同時翻訳10件）                    |
