Вы создали группу, получили в ответ groupId, и теперь несколько локалей переводятся параллельно. Дальше вам нужно снова и снова получать ответ на один вопрос, пока всё не завершится: что прямо сейчас происходит со всей отправкой? Не по каждой локали отдельно, а в целом. Сколько уже завершено, сколько вернулось с предупреждениями, сколько завершилось с ошибкой и сколько всё ещё в работе.
Именно это и возвращает этот endpoint. Один запрос — и статусы всех локалей в одном ответе. Если вы только начинаете работать с асинхронной локализацией, начните с обзора Async Localization API.
На этой странице
- Получить группу заданий
- Ответ
- Статусы группы
- Как часто опрашивать
- Что будет, если одна локаль завершится с ошибкой
Получить группу заданий#
Получите статус группы заданий и всех её дочерних заданий.
GET /jobs/localization/groups/:groupIdПередайте свой API-ключ в заголовке X-API-Key — тот же ключ, который вы использовали, чтобы создать группу. groupId — это id с префиксом ljg_ из ответа 202.
Ответ#
Ответ — это снимок состояния всей отправки: собственный status группы, четыре счётчика и дочерние задания с их индивидуальными статусами. Именно этот объект вы читаете при каждом опросе.
{
"groupId": "ljg_A1b2C3d4E5f6G7h8",
"status": "processing",
"sourceLocale": "en",
"totalJobs": 3,
"completedJobs": 1,
"completedWithWarningsJobs": 0,
"failedJobs": 0,
"jobs": [
{ "id": "ljb_A1b2C3d4E5f6G7h8", "targetLocale": "de", "status": "completed", "warnings": [], "completedAt": "2026-03-16T10:30:04.000Z" },
{ "id": "ljb_B2c3D4e5F6g7H8i9", "targetLocale": "fr", "status": "processing", "warnings": [], "completedAt": null },
{ "id": "ljb_C3d4E5f6G7h8I9j0", "targetLocale": "ja", "status": "queued", "warnings": [], "completedAt": null }
],
"createdAt": "2026-03-16T10:30:00.000Z"
}Три поля счётчиков для терминальных заданий — completedJobs, completedWithWarningsJobs и failedJobs — в сумме дают число локалей, которые уже завершились. Остальные из totalJobs всё ещё находятся в состояниях queued или processing. В примере выше 1 из 3 завершена, а 2 всё ещё в работе, поэтому достаточно просто посмотреть на счётчики, чтобы понять: процесс ещё не завершён — даже не заглядывая в массив jobs. Когда эта сумма достигает totalJobs, группа переходит в терминальное состояние.
Массив warnings у каждого задания показывает некритичные сбои на этапах пайплайна — например, если не отработал шаг предредактирования или обратного перевода. Непустой массив означает, что задание всё равно вернуло результат, но как минимум один необязательный этап не завершился. Само переведённое outputData находится в отдельном задании — запрашивайте его, когда будете готовы читать содержимое завершённой локали.
Статусы группы#
Поле status группы сводит статусы дочерних заданий в одно значение. Вы опрашиваете endpoint, пока оно не перейдёт в терминальное состояние.
| Статус группы | Что означает |
|---|---|
pending | Группа создана, но ни одно задание ещё не запущено |
processing | Хотя бы одно задание в работе |
completed | Все задания успешно завершены |
completed_with_warnings | Все задания вернули результат, но в одном или нескольких заданиях не прошёл хотя бы один необязательный этап пайплайна |
partial | Часть заданий завершилась успешно, часть — с ошибкой |
failed | Все задания завершились с ошибкой |
Именно в различии между completed, completed_with_warnings и partial и заключается ценность этого endpoint: он отделяет «все локали доставлены» от «все локали доставлены, но некоторые — с предупреждением» и от «часть локалей доставлена, а часть — нет». Иначе эти три исхода пришлось бы восстанавливать, читая каждое задание по отдельности. partial — это не ошибка, а реальное состояние, которое группа явно сообщает, чтобы ваш код мог отреагировать правильно.
Как часто опрашивать#
Интервал опроса
Для большинства заданий обработка занимает 2–8 секунд на язык. Если вы используете опрос вместо вебхуков или WebSocket, разумная отправная точка — интервал в 2 секунды.
Опрос — самый простой способ отслеживать группу, и для короткого батча он вполне подходит. Но это всё же менее сильный вариант, и об этом стоит говорить честно: каждый опрос — это лишний round-trip, независимо от того, изменилось что-то или нет, а о завершении локали вы узнаёте только на следующем тике, а не в тот же момент.
Если вам нужен каждый результат сразу, как только он готов, не опрашивайте — пусть платформа сообщит сама. Она отправляет результат каждой завершённой локали на ваш webhook URL по мере готовности, а WebSocket connection на группе пушит полный снимок состояния при каждом изменении, так что ваш UI обновляется без лишних запросов. Выбирайте опрос, когда endpoint для вебхука или постоянное соединение — это избыточно для задачи; выбирайте push, когда для UI важна минимальная задержка.
Что будет, если одна локаль завершится с ошибкой#
Если смотреть на фразу «перевод сразу на много локалей» немного скептически, первым возникает очевидный вопрос: что будет с остальными, если одна локаль упадёт? Ответ — прямо в API-ответе.
Каждая локаль — это отдельное независимое задание. Если немецкий перевод завершился успешно, а японский — с ошибкой, немецкий перевод всё равно считается готовым и доставляется как обычно — сбой его не откатывает. Задание с ошибкой появляется в группе с status: "failed", счётчик failedJobs увеличивается, а статус группы сводится к partial:
{
"groupId": "ljg_A1b2C3d4E5f6G7h8",
"status": "partial",
"sourceLocale": "en",
"totalJobs": 3,
"completedJobs": 2,
"completedWithWarningsJobs": 0,
"failedJobs": 1,
"jobs": [
{ "id": "ljb_A1b2C3d4E5f6G7h8", "targetLocale": "de", "status": "completed", "warnings": [], "completedAt": "2026-03-16T10:30:04.000Z" },
{ "id": "ljb_B2c3D4e5F6g7H8i9", "targetLocale": "fr", "status": "completed", "warnings": [], "completedAt": "2026-03-16T10:30:05.000Z" },
{ "id": "ljb_C3d4E5f6G7h8I9j0", "targetLocale": "ja", "status": "failed", "warnings": [], "completedAt": null }
],
"createdAt": "2026-03-16T10:30:00.000Z"
}Две локали доставлены, одна — нет, и это видно по счётчикам без лишней проверки. Чтобы повторить попытку, отправьте новый запрос только для локалей, которые завершились с ошибкой, и укажите новый ключ идемпотентности. Полное описание ошибки для неуспешной локали — errorMessage — находится в отдельном задании; группа даёт вам только счётчик и итоговый статус.
Частичные сбои — это нормальное состояние
partial означает ровно то, что показывают счётчики: часть локалей завершилась, часть — с ошибкой. Успешные локали уже доставлены. Откатывать нечего, и не нужно заново тратить ресурсы на те локали, которые уже прошли успешно — повторять нужно только то, что упало.
