Iniciar a tradução em segundo plano em lote dos documentos publicados de um esquema para idiomas de destino.
Enfileira a tradução em segundo plano de todos os documentos publicados de um ou mais esquemas de componentes para um conjunto de idiomas de destino. Os resultados são inseridos ou atualizados na tabela translations à medida que cada tradução é concluída.
Endpoint: POST /translation
Autenticação: JWT Bearer (WorkOS)
{
"websiteId": "<uuid>",
"schemaNames": ["post", "hero"],
"languages": ["fr", "es", "de"]
}
| Campo | Tipo | Obrigatório | Observações |
|---|---|---|---|
websiteId | uuid | sim | Site que contém os documentos de origem. |
schemaNames | string[] | sim* | Esquemas de componentes a serem traduzidos. Nomes duplicados são removidos. |
schemaName | string | sim* | Alternativa legada para enviar um único esquema. |
languages | string[] | sim | Códigos de idioma de destino compatíveis. Códigos duplicados são removidos. |
schemaNames ou schemaName.Somente documentos publicados com conteúdo publicado não nulo são considerados.
{
"job_id": "<uuid>",
"website_id": "<uuid>",
"schema_name": null,
"schema_names": ["post", "hero"],
"languages": ["fr", "es", "de"],
"status": "queued",
"documents_processed": 12,
"translations_scheduled": 30,
"translations_skipped": 6,
"translations_completed": 0,
"translations_failed": 0,
"reused": false,
"created_at": "2026-07-15T18:00:00Z",
"updated_at": "2026-07-15T18:00:00Z"
}
Retorna:
202 Accepted quando as traduções são enfileiradas200 OK quando todas as traduções já estão atualizadas| Campo | Descrição |
|---|---|
job_id | Identificador usado para recuperar o progresso do job. |
status | Status atual do job. |
documents_processed | Número de documentos de origem elegíveis encontrados. |
translations_scheduled | Número de pares documento-idioma enfileirados. |
translations_skipped | Número ignorado porque os hashes de origem estão atualizados. |
translations_completed | Número traduzido com sucesso. |
translations_failed | Número de traduções que falharam. |
reused | Indica se a resposta se refere a um job ativo existente. |
Os possíveis status do job são:
preparingqueuedrunningcompletedcompleted_with_errorsfailedCada par documento-idioma armazena um hash SHA-256 do conteúdo publicado do documento de origem.
Uma tradução é ignorada quando o hash de origem armazenado corresponde ao conteúdo publicado atual. Isso permite chamar o endpoint repetidamente sem traduzir novamente conteúdo que não foi alterado.
Se o conteúdo publicado mudar enquanto um job equivalente estiver ativo, o serviço rejeitará a nova solicitação. Envie-a novamente após a conclusão do job ativo.
A tradução é executada de forma assíncrona após a resposta inicial.
completed_with_errors.curl -X POST '{TRANSLATION_API_URL}/translation' \
-H 'Authorization: Bearer <workos-jwt>' \
-H 'Content-Type: application/json' \
-d '{
"websiteId": "<uuid>",
"schemaNames": ["post", "hero"],
"languages": ["fr", "es"]
}'
400 Bad Request — esquemas ou idiomas estão ausentes, um idioma não é compatível ou o lote excede o limite configurado401 Unauthorized — o token bearer está ausente ou é inválido409 Conflict — há trabalho correspondente ativo, mas o conteúdo de origem publicado mudou500 Internal Server Error — não foi possível preparar os documentos de origem ou uma operação de banco de dados falhouRecupere o progresso mais recente de um job de tradução.
Endpoint: GET /translation-jobs/{job_id}
Autenticação: JWT Bearer (WorkOS)
A resposta usa o mesmo objeto de job retornado por POST /translation, com status e contagens de progresso atualizados.
{
"job_id": "<uuid>",
"website_id": "<uuid>",
"schema_name": null,
"schema_names": ["post", "hero"],
"languages": ["fr", "es"],
"status": "running",
"documents_processed": 12,
"translations_scheduled": 24,
"translations_skipped": 0,
"translations_completed": 16,
"translations_failed": 1,
"reused": false,
"created_at": "2026-07-15T18:00:00Z",
"updated_at": "2026-07-15T18:01:30Z"
}
curl '{TRANSLATION_API_URL}/translation-jobs/<job-id>' \
-H 'Authorization: Bearer <workos-jwt>'
401 Unauthorized — o token bearer está ausente ou é inválido404 Not Found — o job não existe ou não é mais mantidoAtualmente, os jobs de tradução são mantidos na memória. O status do job é perdido quando o serviço de tradução é reiniciado, e as implantações com várias instâncias exigem roteamento persistente.