API del traductor de Creator Tools: guía para desarrolladores

Esta guía explica cómo traducir videos y canales de YouTube con el traductor de Creator Tools desde tu propio código. ¿Es tu primera vez con la API? Empieza por la presentación: El traductor de Creator Tools ya está disponible por API.

Resumen

  • La traducción se ejecuta como una tarea en segundo plano. Inicias una tarea, recibes un jobId y consultas la tarea hasta que termine.
  • Iniciar una tarea y consultarla usan la misma dirección: POST https://api.creator-tools.com/info/longterm-job. El campo requestType del cuerpo indica qué operación quieres.
  • Cuando la tarea termina, el título, la descripción y los subtítulos traducidos ya están publicados en YouTube.
  • No hay callbacks. Consulta el estado de la tarea cada 5 segundos, igual que hace la aplicación de Creator Tools.
1. POST /info/longterm-job  { "requestType": "startTranslationJob", … }  →  { "jobId": "…", "status": "IN_PROGRESS" }
2. POST /info/longterm-job  { "requestType": "getJobById", "jobId": "…" }  →  { "status": "IN_PROGRESS" }
   … espera 5 segundos y repite …
3. POST /info/longterm-job  { "requestType": "getJobById", "jobId": "…" }  →  { "status": "FINISHED", "response": { … } }

Claves que necesitas

Cada solicitud necesita cuatro valores. La clave de la pasarela te la da una sola vez el equipo de soporte. Los otros tres los copias desde el navegador mientras tienes la sesión iniciada en https://app.creator-tools.com; el siguiente capítulo muestra dónde están.

ValorSe envía comoDónde encontrarlo
Clave de la pasarelaCabecera x-api-keyPídesela al equipo de soporte: escribe a info@creator-tools.com o al bot de Creator Tools en Telegram.
Clave personalCampo del cuerpo xApiKeyHerramientas para desarrolladores → Application (aplicación) → Cookies → https://app.creator-tools.com → cookie xApiKey. Es la clave de tu suscripción: las traducciones se descuentan de tu saldo.
ID de sesiónCampo del cuerpo sessionIdHerramientas para desarrolladores → Application → Local storage (almacenamiento local) → https://app.creator-tools.com → clave channels
ID del canalCampo del cuerpo channelIdLa misma entrada channels

Todas las solicitudes son POST con Content-Type: application/json. No hacen falta cookies ni la cabecera Authorization.

Mantén tus claves en privado. Tu clave personal y tu ID de sesión funcionan como una contraseña: cualquiera que los tenga puede iniciar traducciones en tu canal y gastar tu saldo. Nunca los pongas en código público ni los compartas en chats.

Cómo encontrar tu ID de sesión y tu ID de canal

Paso 1: inicia sesión y elige el canal

Abre https://app.creator-tools.com, inicia sesión y selecciona en la lista de canales el canal que quieres traducir. Si el canal aún no aparece, añádelo primero con Add channel (añadir canal).

Paso 2: abre el almacenamiento local

Abre las herramientas para desarrolladores (F12 en Windows, ⌥⌘I en Mac) → Application → Local storage → https://app.creator-tools.com → clave channels.

El valor tiene una entrada por cada canal conectado. El nombre de la entrada es el ID del canal, y la entrada contiene el ID de sesión:

{
  "UCzOmbH8UyFIVjSAukXAhY5g": {            // ← channelId
    "sessionId": "f35876a8-1…",            // ← sessionId
    "channelId": "UCzOmbH8UyFIVjSAukXAhY5g",
    "name": "My Channel",
    "isSelected": true                      // ← el canal elegido en la aplicación
  },
  "UC…another channel…": { … }
}

Si tienes varios canales, usa la entrada con "isSelected": true, o aquella cuyo name coincida con el canal que quieres.

Conviene saber

  • El ID del canal es el ID de canal de YouTube que empieza por UC. El ID de sesión lo crea Creator Tools cuando conectas el canal.
  • La conexión de un canal dura unos tres meses. Si recibes 403 No credentials for channel, elimina el canal en la aplicación, vuelve a añadirlo y copia el nuevo ID de sesión.
  • Cerrar sesión en la aplicación termina la sesión, así que el ID de sesión anterior deja de funcionar.

Iniciar una traducción

POST https://api.creator-tools.com/info/longterm-job

Cabeceras: Content-Type: application/json y x-api-key: <gateway key>.

Traduce un video cada vez. Inicia una tarea, consúltala hasta que su estado sea FINISHED o FAILED, y solo entonces inicia el siguiente video. Las tareas en paralelo comparten tu saldo y los límites de YouTube de tu canal, así que pueden cobrarse de forma incorrecta, fallar con 429 o sobrescribir las traducciones unas de otras.

Qué se traduce

  • Con videoId: el título y la descripción del video, y también los subtítulos si capturesIncluded es true.
  • Sin videoId: el nombre y la descripción del canal.

Campos de la solicitud

CampoTipoObligatorioDescripción
xApiKeystringsíTu clave personal
requestTypestringsíSiempre "startTranslationJob"
sessionIdstringsíTu ID de sesión. Sin él, la respuesta es 400 Missing sessionId.
channelIdstringsíTu ID de canal. Debe pertenecer a la misma sesión; de lo contrario, la respuesta es 403.
languagesstring[]síCódigos de los idiomas de destino (consulta Idiomas y códigos). Los idiomas que el video ya tiene se omiten, salvo que rewrite sea true.
videoIdstringnoID del video de YouTube. Omítelo para traducir el canal.
capturesIncludedbooleannoTraducir también los subtítulos
rewritebooleannoSobrescribir las traducciones y los subtítulos que ya existen
saveHashtagsbooleannoMantener #hashtags y @mentions tal cual
excludedFromTranslatebooleannoDejar sin traducir el texto dentro de [[…]]
useDialectsbooleannoTraducir por separado las variantes regionales (en-GB, es-MX, …). Si es false, reciben la traducción de su idioma principal.
tonestringnodefault, emotional, friendly, science u official
providerstringnoopenai (predeterminado) o gemini. Si uno falla, se prueba el otro y después Google Translate.
isPoetrybooleannoTraducir los subtítulos como una canción o un poema
aiTranslationsbooleannoUsar traducción con IA. La aplicación siempre envía true.

Ejemplo: un video con subtítulos

curl -X POST https://api.creator-tools.com/info/longterm-job \
  -H 'Content-Type: application/json' \
  -H 'x-api-key: <GATEWAY_KEY>' \
  -d '{
    "xApiKey": "<PERSONAL_KEY>",
    "requestType": "startTranslationJob",
    "sessionId": "<SESSION_ID>",
    "channelId": "UCxxxxxxxxxxxxxxxxxxxxxx",
    "videoId": "dQw4w9WgXcQ",
    "languages": ["es", "de", "fr", "pt-BR", "ja"],
    "capturesIncluded": true,
    "rewrite": false,
    "saveHashtags": true,
    "excludedFromTranslate": false,
    "useDialects": false,
    "tone": "default",
    "provider": "openai",
    "isPoetry": false,
    "aiTranslations": true
  }'

Respuesta

Una respuesta 200 describe la nueva tarea. Guarda el jobId: lo necesitas para consultar la tarea.

{
  "jobId": "3f1c2a0e-7b8d-4c1e-9a55-…",
  "jobType": "translate",
  "videoId": "dQw4w9WgXcQ",
  "channelId": "UCxxxxxxxxxxxxxxxxxxxxxx",
  "status": "IN_PROGRESS",
  "languages": ["es", "de", "fr", "pt-BR", "ja"],
  "startDate": "2026-09-30T10:15:00.000Z"
}

Consultar el estado de la tarea

POST https://api.creator-tools.com/info/longterm-job, con las mismas cabeceras que antes.

{
  "xApiKey": "<PERSONAL_KEY>",
  "requestType": "getJobById",
  "jobId": "3f1c2a0e-7b8d-4c1e-9a55-…"
}

La respuesta 200 es la tarea, o null si no tienes ninguna tarea con ese ID.

{
  "jobId": "3f1c2a0e-…",
  "jobType": "translate",
  "status": "FINISHED",
  "startDate": "2026-09-30T10:15:00.000Z",
  "finishDate": "2026-09-30T10:16:12.000Z",
  "languages": ["es", "de", "fr", "pt-BR", "ja"],
  "languagesToTranslateVideo": ["es", "de", "fr", "pt-BR", "ja"],
  "languagesToTranslateCaptions": ["es", "de", "fr", "pt-BR", "ja"],
  "response": {
    "status": "translated",
    "captionsTranslated": true,
    "metadataLanguagesTranslated": 5,
    "captionsLanguageTranslated": 5
  }
}

Valores de estado

EstadoSignificado
WAITINGLa tarea está en cola y aún no ha empezado.
IN_PROGRESSLa tarea está en curso. Sigue consultando.
FINISHEDTerminada. El resultado está en response.
FAILEDLa tarea se detuvo. reason indica el motivo, por ejemplo no token, No Subscription, Not enough translations are left o freeTrialCheck failed.
  • Con qué frecuencia consultar: cada 5 segundos. La aplicación deja de esperar a los 50 minutos.
  • Sin porcentaje de progreso: las tareas de traducción solo informan de su estado.
  • Todas tus tareas: envía "requestType": "getAllJobs" con tu xApiKey para listar todas las tareas.
  • Cuánto tiempo se guardan las tareas: una tarea terminada se puede leer durante 60 días.

Errores

Una respuesta de error tiene la forma {"message": "…"}.

HTTPMensajeQué hacer
400Missing sessionIdAñade sessionId a la solicitud.
403No credentials for channelEl ID de sesión y el ID del canal no coinciden, o la conexión ha caducado. Vuelve a conectar el canal en la aplicación y copia el nuevo ID de sesión.
403No subscriptionLa clave personal xApiKey es incorrecta. Cópiala de nuevo.
403No accessNo se pudo comprobar la suscripción. Inténtalo de nuevo más tarde.
403ForbiddenFalta la cabecera x-api-key o es incorrecta.
429Not enough translations are leftTu saldo no alcanza para los idiomas elegidos. Recarga el saldo o elige menos idiomas.

Una tarea puede aceptarse y aun así terminar más tarde como FAILED, por ejemplo cuando el saldo se agota durante la traducción. Comprueba siempre status y reason.

Ejemplo completo en JavaScript

const API = "https://api.creator-tools.com/info/longterm-job";
const GATEWAY_KEY = "<GATEWAY_KEY>";
const xApiKey = "<PERSONAL_KEY>";
const sessionId = "<SESSION_ID>";
const channelId = "UC…";

// Inicia una tarea. Inicia el siguiente video solo cuando esta termine en FINISHED o FAILED.
const job = await post({
  xApiKey, requestType: "startTranslationJob", sessionId, channelId,
  videoId: "dQw4w9WgXcQ", languages: ["es", "de", "fr"], capturesIncluded: true,
});

// Consulta cada 5 segundos hasta que la tarea termine.
let status;
do {
  await new Promise((resolve) => setTimeout(resolve, 5000));
  status = await post({ xApiKey, requestType: "getJobById", jobId: job.jobId });
} while (status && status.status !== "FINISHED" && status.status !== "FAILED");

console.log(status.status, status.response ?? status.reason);

async function post(body) {
  const res = await fetch(API, {
    method: "POST",
    headers: { "Content-Type": "application/json", "x-api-key": GATEWAY_KEY },
    body: JSON.stringify(body),
  });
  if (!res.ok) throw new Error((await res.json()).message);
  return res.json();
}

Idiomas y códigos

  • Envía los códigos en languages exactamente como aparecen abajo. Siguen los códigos de YouTube, así que el hebreo es iw, el español de Latinoamérica es es-419 y el cantonés es yue.
  • Canal significa que el código también se puede usar para traducir un canal (una solicitud sin videoId). Los demás códigos se omiten en los canales. La lista de canales también acepta en-UK, fil y nb.
CódigoIdiomaCanal
azAzerbaiyanoSí
sqAlbanésSí
enInglésSí
en-GBInglés (Reino Unido)
en-INInglés (India)Sí
en-IEInglés (Irlanda)
en-CAInglés (Canadá)
en-USInglés (Estados Unidos)
en-AUInglés (Australia)
arÁrabeSí
hyArmenioSí
euEuskeraSí
beBielorrusoSí
bnBengalíSí
myBirmanoSí
bgBúlgaroSí
bsBosnioSí
cyGalés
huHúngaroSí
viVietnamitaSí
hawHawaiano
htCriollo haitiano
glGallegoSí
elGriegoSí
kaGeorgianoSí
guGuyaratíSí
gdGaélico escocés
daDanésSí
zuZulúSí
iwHebreoSí
yiYidis
idIndonesioSí
gaIrlandés
isIslandésSí
esEspañolSí
es-ESEspañol (España)
es-419Español (Latinoamérica)
es-MXEspañol (México)Sí
es-USEspañol (Estados Unidos)Sí
itItalianoSí
kkKazajoSí
knCanarésSí
yueCantonés
caCatalánSí
kyKirguísSí
zhChinoSí
zh-TWChino (Taiwán)
zh-CNChino (China)
zh-HansChino (simplificado)
zh-HKChino (Hong Kong)Sí
zh-SGChino (Singapur)
koCoreanoSí
coCorso
kuKurdo
kmJemerSí
loLaoSí
laLatín
lvLetónSí
ltLituanoSí
lbLuxemburgués
mkMacedonioSí
msMalayoSí
mnMongolSí
deAlemánSí
de-ATAlemán (Austria)
de-DEAlemán (Alemania)
de-CHAlemán (Suiza)
neNepalíSí
nlNeerlandésSí
nl-BENeerlandés (Bélgica)
nl-NLNeerlandés (Países Bajos)
noNoruego
paPanyabíSí
faPersaSí
fa-AFPersa (Afganistán)
fa-IRPersa (Irán)
plPolacoSí
ptPortuguésSí
pt-BRPortugués (Brasil)Sí
pt-PTPortugués (Portugal)
roRumanoSí
ruRusoSí
saSánscrito
smSamoano
srSerbioSí
skEslovacoSí
slEslovenoSí
soSomalí
tlTagalo (filipino)
tgTayiko
thTailandésSí
taTamilSí
teTeluguSí
trTurcoSí
uzUzbekoSí
ukUcranianoSí
urUrduSí
fiFinésSí
frFrancésSí
fr-BEFrancés (Bélgica)
fr-CAFrancés (Canadá)Sí
fr-FRFrancés (Francia)
fr-CHFrancés (Suiza)
hiHindiSí
hrCroataSí
csChecoSí
svSuecoSí
eoEsperanto
etEstonioSí
jaJaponésSí
jvJavanés
afAfrikáansSí
akAkan
amAmáricoSí
asAsamésSí
ayAimara
bmBambara
gnGuaraní
haHausa
igIgbo
lnLingala
lgLuganda
mgMalgache
mlMalayalamSí
mtMaltés
miMaorí
mrMaratíSí
orOriyaSí
omOromo
psPastún
stSesoto
snShona
sdSindi
siCingalésSí
suSundanés
swSuajiliSí
ttTártaro
tiTigriña
tsTsonga
tkTurcomano
ugUigur
xhXhosa
yoYoruba

Comienza a ganar en más mercados hoy

300 traducciones gratuitas · 143 idiomas · sin tarjeta de crédito