Запустіть масовий фоновий переклад опублікованих документів схеми на цільові мови.
Поставте в чергу фоновий переклад усіх опублікованих документів з однієї чи кількох компонентних схем до набору цільових мов. Результати вставляються або оновлюються в таблиці translations після завершення кожного перекладу.
Кінцева точка: POST /translation
Автентифікація: Bearer JWT (WorkOS)
{
"websiteId": "<uuid>",
"schemaNames": ["post", "hero"],
"languages": ["fr", "es", "de"]
}
| Поле | Тип | Обов’язково | Примітки |
|---|---|---|---|
websiteId | uuid | так | Вебсайт, що містить вихідні документи. |
schemaNames | string[] | так* | Компонентні схеми для перекладу. Повторювані назви видаляються. |
schemaName | string | так* | Застаріла альтернатива для надсилання однієї схеми. |
languages | string[] | так | Підтримувані коди цільових мов. Повторювані коди видаляються. |
* Надайте або schemaNames, або schemaName.
Розглядаються лише опубліковані документи з непорожнім опублікованим вмістом.
{
"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"
}
Повертає:
202 Accepted — коли переклади поставлені в чергу200 OK — коли кожен переклад уже актуальний| Поле | Опис |
|---|---|
job_id | Ідентифікатор для отримання прогресу завдання. |
status | Поточний статус завдання. |
documents_processed | Кількість знайдених придатних вихідних документів. |
translations_scheduled | Кількість поставлених у чергу пар документ–мова. |
translations_skipped | Кількість пропущених, оскільки їхні хеші джерела актуальні. |
translations_completed | Кількість успішно перекладених. |
translations_failed | Кількість невдалих. |
reused | Чи посилається відповідь на наявне активне завдання. |
Можливі статуси завдання:
preparingqueuedrunningcompletedcompleted_with_errorsfailedКожна пара документ–мова зберігає SHA-256-хеш опублікованого вмісту вихідного документа.
Переклад пропускається, якщо збережений хеш джерела збігається з поточним опублікованим вмістом. Це дозволяє викликати кінцеву точку повторно без перекладу незмінного вмісту.
Якщо опублікований вміст змінюється, поки аналогічне завдання активне, сервіс відхиляє новий запит. Надішліть його знову після завершення активного завдання.
Переклад виконується асинхронно після початкової відповіді.
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 — схеми або мови відсутні, мова не підтримується або пакет перевищує налаштований ліміт401 Unauthorized — відсутній або недійсний маркер Bearer409 Conflict — подібна робота активна, але опублікований вміст джерела змінився500 Internal Server Error — вихідні документи неможливо підготувати або сталася помилка операції з базою данихОтримайте найновіший прогрес для завдання перекладу.
Кінцева точка: GET /translation-jobs/{job_id}
Автентифікація: Bearer JWT (WorkOS)
Відповідь використовує той самий об’єкт завдання, що повертається POST /translation, але з оновленим статусом і показниками прогресу.
{
"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 — відсутній або недійсний маркер Bearer404 Not Found — завдання не існує або більше не зберігаєтьсяНаразі завдання перекладу зберігаються в пам’яті. Статус завдання втрачається під час перезапуску сервісу перекладу, а для розгортань із кількома екземплярами потрібна маршрутизація з фіксацією сеансів (sticky routing).