> ## 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.

# Crear un proyecto de vídeo o audio traducido

> Crea un proyecto a partir de tu fileKey subido, transcríbelo y tradúcelo, y después sintetiza la voz. Admite SRT propios, voces, subtítulos y sincronización labial opcional. Usa los créditos multimedia habituales. Una webhookUrl opcional recibe eventos de procesamiento. Consulta projects_status.

Crea un proyecto a partir de tu fileKey subido, transcríbelo y tradúcelo, y después sintetiza la voz. Admite SRT propios, voces, subtítulos y sincronización labial opcional. Usa los créditos multimedia habituales. Una webhookUrl opcional recibe eventos de procesamiento. Consulta projects\_status.

```http theme={null}
POST https://api.voicecheap.ai/v1/actions/translations_create
```

## Autenticación y permisos

<ParamField header="x-api-key" type="string" required>
  Envía una clave de API de VoiceCheap en esta cabecera. También se admite Authorization: Bearer con la misma clave de API. Los tokens de acceso OAuth
  solo se aceptan en MCP, no en este endpoint REST.
</ParamField>

Permisos necesarios: `projects:write`, `translations:write`, `transcription:write`.

Se requiere una suscripción de pago activa. Los permisos no cambian los roles del equipo, la propiedad de los recursos, los créditos multimedia ni los límites del plan.

## Parámetros

<ParamField body="fileKey" type="string" required>
  Valor de texto.

  Longitud mínima: 1. Longitud máxima: 1024.
</ParamField>

<ParamField body="targetLanguage" type="string" required>
  Valor de texto.

  Valores permitidos: "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".
</ParamField>

<ParamField body="originalLanguage" type="string">
  Valor de texto.

  Valores permitidos: "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".
</ParamField>

<ParamField body="projectName" type="string">
  Valor de texto.

  Longitud mínima: 1. Longitud máxima: 200.
</ParamField>

<ParamField body="numberOfSpeakers" type="string">
  Valor de texto.

  Valores permitidos: "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".
</ParamField>

<ParamField body="brandVocabulary" type="array">
  Lista de valores. Consulta la estructura de sus elementos en el esquema completo de entrada.

  Número máximo de elementos: 1000.
</ParamField>

<ParamField body="removeFillerWords" type="boolean">
  Valor booleano.
</ParamField>

<ParamField body="sourceSrt" type="string">
  Valor de texto.

  Longitud máxima: 1000000.
</ParamField>

<ParamField body="webhookUrl" type="string">
  Valor de texto.

  Longitud máxima: 2048. Formato: "uri".
</ParamField>

<ParamField body="requestId" type="string">
  Opcional en la capa de transporte: el servidor introduce un identificador antes de la validación si se omite. Proporciona tu propio UUID v4 estable para recuperar la solicitud de forma segura si se pierde la respuesta.

  Formato: "uuid". Patrón: `^[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}$`.
</ParamField>

<ParamField body="keepBackgroundMusic" type="boolean">
  Valor booleano.
</ParamField>

<ParamField body="keepOriginalVoice" type="boolean">
  Valor booleano.
</ParamField>

<ParamField body="originalVoiceVolume" type="number">
  Valor numérico.

  Mínimo: 1. Máximo: 70.
</ParamField>

<ParamField body="voiceMode" type="string">
  Valor de texto.

  Valores permitidos: "cloning", "custom".
</ParamField>

<ParamField body="voiceId" type="string">
  Valor de texto.

  Longitud mínima: 1. Longitud máxima: 128.
</ParamField>

<ParamField body="subtitles" type="boolean">
  Valor booleano.
</ParamField>

<ParamField body="subtitlesSource" type="string">
  Valor de texto.

  Valores permitidos: "translated", "original".
</ParamField>

<ParamField body="voiceIsolatorOption" type="string">
  Valor de texto.

  Valores permitidos: "studio", "realistic".
</ParamField>

<ParamField body="lipSyncMode" type="string">
  Valor de texto.

  Valores permitidos: "standard", "pro", "studio".
</ParamField>

<ParamField body="activeSpeakerDetectionEnabled" type="boolean">
  Valor booleano.
</ParamField>

<ParamField body="voiceCloningSettings" type="object">
  Objeto JSON. Consulta sus campos anidados en el esquema completo de entrada.
</ParamField>

<ParamField body="translationTimeSkips" type="array">
  Lista de valores. Consulta la estructura de sus elementos en el esquema completo de entrada.

  Número máximo de elementos: 100.
</ParamField>

<ParamField body="translatedSrt" type="string">
  Valor de texto.

  Longitud máxima: 1000000.
</ParamField>

<Accordion title="Esquema completo de entrada">
  El JSON Schema siguiente conserva los nombres exactos de los campos, los tipos anidados, los valores predeterminados, los límites y los valores aceptados que expone el descubrimiento. Las reglas adicionales entre campos se indican en las notas de la operación.

  ```json theme={null}
  {
    "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
  }
  ```
</Accordion>

## Idempotencia

Usa un UUID v4 en requestId o en la cabecera HTTP Idempotency-Key para cada modificación. Reutiliza el mismo identificador y argumentos idénticos después de un fallo de red. Si proporcionas ambos, deben coincidir. Repetir una solicitud guardada no vuelve a ejecutar la operación ni consume otra llamada mensual. Las solicitudes fallidas o interrumpidas no se reinician automáticamente.

Toda modificación puede devolver HTTP 202 cuando un reintento encuentra la misma solicitud todavía en ejecución, incluso si su primera ejecución suele ser síncrona. Si la ejecución ha terminado pero resultStored es false, un reintento devuelve HTTP 200 con el estado de la solicitud guardada en lugar del resultado original. Recupera la salida mediante la acción de historial, resultado o descarga de su ámbito.

## Ejemplos de solicitud

Sustituye los identificadores de recursos y las claves multimedia de los ejemplos por valores devueltos para tu cuenta. Mantén el identificador de solicitud al reintentar la misma modificación.

<RequestExample>
  ```bash cURL theme={null}
  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"}'
  ```

  ```javascript JavaScript theme={null}
  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);
  ```

  ```python Python theme={null}
  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)
  ```
</RequestExample>

## Respuesta

Una primera ejecución correcta devuelve HTTP 200 con el resultado de la operación en data. Una repetición puede devolver el estado de la solicitud guardada en su lugar. El ejemplo muestra una respuesta admitida, no todos los campos opcionales.

Devuelve un nuevo identificador de proyecto tras iniciar la transcripción seguida de la traducción y la generación de voz, o el doblaje con la traducción proporcionada.

<ResponseExample>
  ```json HTTP 200 theme={null}
  {
    "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"
  }
  ```

  ```json HTTP 202 replay_running theme={null}
  {
    "data": {
      "requestId": "41321bda-e243-4b6f-96a4-622cd047c991",
      "operation": "translations_create",
      "createdAt": 1792144800000,
      "updatedAt": 1792144820000,
      "status": "running",
      "pollAfterSeconds": 5
    },
    "requestId": "41321bda-e243-4b6f-96a4-622cd047c991"
  }
  ```

  ```json HTTP 200 replay_completed_without_result theme={null}
  {
    "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"
  }
  ```
</ResponseExample>

## Campos del resultado

| Campo | Descripción |
| - | - |
| `data.success` | True cuando se admitió el flujo de trabajo en segundo plano; no indica que el contenido multimedia esté terminado. |
| `data.message` | Confirmación de traducción o de doblaje con traducción proporcionada. |
| `data.projectId` | Identificador del proyecto principal. |
| `data.estimatedDuration` | Estimación aproximada del procesamiento en minutos: ceil(source duration in seconds / 60) \* 5. |

## translatedSrt se proporciona y se acepta.

Los mismos campos del resultado confirman el doblaje del texto de destino proporcionado.

```json HTTP 200 theme={null}
{
  "data": {
    "success": true,
    "message": "Dubbing started successfully from the provided translation. Use the status endpoint to track progress.",
    "projectId": "project_launch_2026",
    "estimatedDuration": 10
  }
}
```

## Recuperar y consultar esta solicitud

Usa el mismo identificador incluso después de perder la conexión. Si resultStored es false, recupera la salida mediante la acción correspondiente de historial, resultado o descarga. Nunca inicies una segunda generación solo para comprobar el progreso.

```bash theme={null}
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"}'
```

```json HTTP 200 theme={null}
{
  "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
    }
  }
}
```

## Notas de la operación

* El fileKey completado debe pertenecer al actor autenticado. El servidor mide la duración y el tamaño del archivo multimedia almacenado.
* Un sourceSrt opcional requiere un originalLanguage explícito. Cuando también se proporciona translatedSrt, ambos SRT deben tener el mismo número de entradas de subtítulos; la traducción proporcionada se empareja por el índice de cada entrada.
* Cuando se proporciona translatedSrt, el flujo de trabajo dobla ese texto y devuelve la confirmación de traducción proporcionada. Con sourceSrt, los bloques se alinean por índice; sin sourceSrt, se utiliza la línea temporal de la transcripción automática.
* El resultado de creación no contiene workId ni translatedVersionId. Obtenlos de projects\_status o projects\_get cuando existan.
* voiceMode usa cloning de forma predeterminada. Con voiceMode custom, utiliza una voz del catálogo o una voz personalizada guardada por la cuenta autenticada; no envíes voiceCloningSettings. La facturación del equipo no da acceso a las voces guardadas de otro miembro.
* Los campos opcionales subtitles, lipSyncMode y translationTimeSkips requieren una entrada de vídeo. Los intervalos omitidos deben permanecer dentro de la duración del contenido multimedia, keepBackgroundMusic debe ser true y keepOriginalVoice debe ser false.
* lipSyncMode acepta standard, pro o studio, sujeto al plan y a las comprobaciones normales de créditos multimedia. La voz y la sincronización labial no pasan a ser gratuitas porque las llamadas mensuales a la API sean ilimitadas.
* Consulta periódicamente projects\_status para seguir el flujo multimedia; recupera todas las versiones por idioma con projects\_get.
* originalLanguage usa códigos del idioma de origen como fr o en (o auto-detect donde se acepte); targetLanguage usa nombres de idiomas de destino compatibles como english.

## Uso

Cada invocación correcta consume una llamada mensual de API/MCP. También se aplican los créditos multimedia y las cuotas de generación propias de la operación.

## Errores

| Estado HTTP | Código | Significado o solución |
| - | - | - |
| 400 | `CREDENTIAL_IN_QUERY` | Se han proporcionado credenciales en un parámetro de consulta access\_token o api\_key. Envía las credenciales en las cabeceras. |
| 400 | `FILE_TOO_LARGE` | La subida almacenada supera el límite de tamaño de subida de la cuenta. |
| 400 | `IDEMPOTENCY_CONFLICT` | La cabecera Idempotency-Key y el campo requestId del cuerpo deben coincidir. |
| 400 | `INVALID_FILE_TYPE` | El nombre del archivo subido no tiene una extensión de audio o vídeo compatible. |
| 400 | `INVALID_MEDIA_DURATION` | La duración medida no es válida o supera el límite del plan. |
| 400 | `INVALID_REQUEST_ID` | Proporciona un UUID v4 en requestId o Idempotency-Key. |
| 400 | `INVALID_SOURCE_SRT` | sourceSrt debe contener bloques SRT válidos. |
| 400 | `INVALID_TRANSLATED_SRT` | El SRT proporcionado en el idioma de destino tiene un formato incorrecto. |
| 400 | `LIPSYNC_NOT_AVAILABLE_FOR_AUDIO` | La sincronización labial requiere un vídeo de entrada. |
| 400 | `LIPSYNC_VIDEO_TOO_LONG` | El vídeo supera el límite de duración del modo de sincronización labial seleccionado. |
| 400 | `SOURCE_LANGUAGE_REQUIRED_FOR_SRT` | Establece originalLanguage explícitamente al proporcionar sourceSrt. |
| 400 | `SUBTITLES_NOT_AVAILABLE_FOR_AUDIO` | Los subtítulos incrustados requieren una entrada de vídeo. |
| 400 | `TRANSLATED_SRT_CUE_COUNT_MISMATCH` | Cuando sourceSrt y translatedSrt se proporcionan juntos, ambos deben contener el mismo número de bloques. |
| 400 | `TRANSLATION_TIME_SKIP_CONFLICT` | Los saltos de tiempo de traducción no se pueden combinar con keepOriginalVoice true. |
| 400 | `TRANSLATION_TIME_SKIP_NOT_AVAILABLE_FOR_AUDIO` | Los saltos de tiempo de traducción requieren una entrada de vídeo. |
| 400 | `TRANSLATION_TIME_SKIP_OUT_OF_RANGE` | Un intervalo omitido se extiende más allá de la duración del contenido multimedia. |
| 400 | `TRANSLATION_TIME_SKIP_REQUIRES_BACKGROUND` | Los saltos de tiempo de traducción requieren keepBackgroundMusic true. |
| 400 | `VALIDATION_ERROR` | Corrige la entrada según el esquema. Los valores no válidos o incoherentes se rechazan antes de la ejecución. |
| 400 | `VOICE_CLONING_SETTINGS_NOT_ALLOWED` | voiceCloningSettings solo se aplica a voiceMode cloning. |
| 400 | `VOICE_ID_NOT_ALLOWED_WITH_CLONING` | voiceId no se puede combinar con voiceMode cloning. |
| 400 | `VOICE_ID_REQUIRED` | voiceMode custom requiere voiceId. |
| 401 | `API_KEY_EXPIRED` | La clave API ha caducado. |
| 401 | `INVALID_API_KEY` | Proporciona una clave de API válida que no haya caducado. |
| 401 | `INVALID_CREDENTIAL` | La cabecera Authorization tiene un formato incorrecto o entra en conflicto con x-api-key. |
| 401 | `MISSING_CREDENTIAL` | No se proporcionó ninguna credencial de cabecera utilizable o superaba 4096 caracteres. |
| 401 | `USER_NOT_FOUND` | La cuenta de la credencial ya no existe. |
| 403 | `ACCOUNT_UNAVAILABLE` | La cuenta que realiza la acción o la cuenta de facturación no está disponible o se está eliminando. |
| 403 | `AMBIGUOUS_TEAM_API_KEY` | El usuario de la credencial pertenece a más de un equipo, por lo que el contexto de facturación es ambiguo. |
| 403 | `CUSTOM_VOICE_ACCESS_DENIED` | La voz seleccionada no es una voz del catálogo ni una voz personalizada guardada por la cuenta autenticada. |
| 403 | `INSUFFICIENT_CREDITS` | La cuenta no tiene suficientes créditos multimedia para los ajustes de voz y de sincronización labial opcional seleccionados. |
| 403 | `INSUFFICIENT_SCOPE` | Concede todos los permisos necesarios o elige otra credencial. |
| 403 | `INTEGRATION_PLAN_UNSUPPORTED` | No se han podido verificar los límites de integración de la cuenta. |
| 403 | `INVALID_FILE_REFERENCE` | fileKey debe identificar una subida completada perteneciente al actor autenticado. |
| 403 | `LIPSYNC_MODE_ACCESS_DENIED` | El modo opcional de sincronización labial seleccionado no está disponible en el plan actual. |
| 403 | `SUBSCRIPTION_REQUIRED` | Usa una suscripción de pago activa. |
| 403 | `TEAM_OWNER_NOT_FOUND` | No se pudo encontrar la cuenta del propietario efectivo del equipo. |
| 404 | `MEDIA_NOT_FOUND` | El objeto subido no existe o está vacío. |
| 409 | `CONCURRENT_ACTION_LIMIT_REACHED` | Esta cuenta ya tiene 10 acciones de integración en ejecución. Consulta una solicitud existente antes de iniciar otra. |
| 409 | `IDEMPOTENCY_CONFLICT` | Reutiliza un identificador solo con la misma operación y los mismos argumentos. |
| 429 | `CONCURRENT_TRANSLATION_LIMIT_REACHED` | La cuenta ya tiene su número máximo de traducciones de API simultáneas. |
| 429 | `INTEGRATION_MONTHLY_LIMIT_REACHED` | Espera al restablecimiento mensual o cambia de plan. |
| 429 | `INTEGRATION_RATE_LIMIT_REACHED` | Espera el tiempo indicado en Retry-After cuando esté presente y aplica esperas progresivas. |
| 500 | `INTERNAL_ERROR` | Comprueba el estado de la solicitud guardada y el historial del recurso antes de decidir si reintentas una modificación. |
| 503 | `ACTION_RESULT_UNAVAILABLE` | La acción se ejecutó, pero no se pudo guardar su resultado. Revisa el estado de la solicitud guardada y el historial del recurso antes de iniciar una nueva generación. |
| 503 | `SERVER_RESTARTING` | El servidor se está reiniciando. Reinténtalo en breve y conserva el mismo identificador de solicitud para una modificación. |

```json theme={null}
{
  "code": "INSUFFICIENT_SCOPE",
  "message": "This credential does not permit the requested action.",
  "status": 403,
  "details": {
    "requiredScopes": ["projects:write", "translations:write", "transcription:write"]
  }
}
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.