Skip to main content
При отправке асинхронных задач генерации, таких как видео / изображение / аудио, вы можете указать URL обратного вызова. После завершения задачи (успешно или с ошибкой) мы активно отправим результат через POST на ваш URL, чтобы вам не приходилось постоянно опрашивать статус. Для задач генерации видео и изображений параметр language также позволяет выбрать язык сообщения об ошибке.

Быстрый старт

При отправке задачи добавьте webhook на верхний уровень тела запроса. Чтобы перевести сообщение об ошибке, добавьте также language:
После завершения задачи мы отправим POST-запрос на ваш URL + /callback.
Для других асинхронных задач (видео, аудио и т. д.) webhook задаётся так же. Параметр language сейчас поддерживается для POST /v1/videos/generations и POST /v1/images/generations; оба поля должны находиться на верхнем уровне тела запроса.

Выбор языка сообщения об ошибке

language — необязательный строковый параметр, который влияет только на error.message в уведомлении об ошибке. ID задачи, статус, прогресс, стоимость и URL результата от языка не зависят. Если параметр не указан, возвращается исходное сообщение вышестоящего сервиса или платформы.
  • Значения не зависят от регистра, а пробелы по краям автоматически удаляются. Например, "RU" и " ru " обрабатываются как ru.
  • Используйте двухбуквенные коды из таблицы. Региональные теги, такие как zh-CN, en-US и pt-BR, не распознаются.
  • Неподдерживаемое значение не приводит к ошибке отправки задачи; в уведомлении сохраняется исходное сообщение.
  • Если исходное сообщение уже написано на целевом языке, оно возвращается без повторного перевода.
  • При ошибке перевода возвращается исходное сообщение, а доставка уведомления не задерживается и не отменяется.
При опросе используйте параметр запроса language конечной точки статуса задачи, чтобы выбрать тот же язык сообщения об ошибке. У Webhook нет строки запроса, поэтому language необходимо указать при отправке задачи.
POST /mj/submit/* и POST /v1/images/edits не поддерживают webhook / language. Официальные модели изображений xAI не поддерживают language и при наличии этого параметра возвращают 400 parameter "language" is not supported. Не передавайте этот параметр таким моделям.

Правила URL

Указанный вами webhook — это базовый URL (base), к которому мы автоматически добавляем /callback: Поэтому на вашем сервере нужна конечная точка, принимающая POST .../callback.

Что вы получите

Отправляемое содержимое полностью совпадает с тем, что возвращает конечная точка «Получение статуса задачи» — вы можете обрабатывать его той же логикой разбора.
Для видеозадач результат находится в result.videos, а для аудио — в result.audios.
В примере ошибки выше используется "language": "ru". Параметр языка изменяет только error.message; остальные поля остаются прежними.
Мы отправляем уведомление только когда задача достигает конечного состояния (completed / failed); во время обработки уведомления не отправляются.

Повторные попытки и дедупликация (важно)

  • Повторные попытки: Если ваш сервер не вернёт 2xx примерно за 10 секунд или вернёт 5xx, мы автоматически повторим попытку, до 3 раз, с интервалами около 10 с, 30 с и 60 с. Если все 3 попытки неудачны, мы прекращаем (примерно за 2 минуты).
  • Без повтора: Если ваша конечная точка вернёт 4xx (считается проблемой URL / запроса), мы сразу прекращаем без повторных попыток.
  • Дедупликация: Обычно задача отправляется только один раз. Но в крайних случаях (например, перезапуск на нашей стороне после отправки, но до подтверждения) вы можете получить повторные отправки. Обязательно выполняйте идемпотентную дедупликацию по id (task_id), чтобы избежать повторной обработки.
Рекомендации для вашей принимающей конечной точки:
1

Возвращайте 2xx как можно быстрее

Сначала примите и поставьте в очередь, затем обрабатывайте асинхронно — не заставляйте нас ждать завершения вашей обработки.
2

Дедуплицируйте по id

Используйте id (task_id) как ключ идемпотентности, чтобы избежать повторной обработки.
3

Настройте и проверяйте подпись

В продакшене проверяйте источник запросов обратного вызова и отклоняйте поддельные.

Требования к URL обратного вызова

В целях безопасности URL обратного вызова должен соответствовать следующему: URL, не отвечающие этим требованиям, отбрасываются (без отправки и без повторов).

Частые вопросы

Проверьте по пунктам:
  1. Задача действительно завершена? Проверьте детали задачи — status равен completed / failed (во время обработки уведомления не отправляются)?
  2. Ваш URL публично доступен? Можем ли мы достучаться до вашего /callback?
  3. Порт стандартный (80 / 443)? Нестандартные порты могут блокироваться политиками безопасности.
  4. Ваш /callback вовремя вернул 2xx? При 4xx мы сразу прекращаем.
  5. Используете ли вы https? Действителен ли сертификат?
Некоторые модели создают несколько изображений за раз, поэтому images[].url может быть массивом — просто обрабатывайте его как массив.
Если в result есть expires_at (метка времени Unix), это время истечения срока действия ссылки — вовремя перенесите/сохраните её.
Нет. Мы отправляем уведомление только один раз, когда задача окончательно завершается успехом или ошибкой.

Минимальный пример приёмника

Python
Возвращайте 200 как можно быстрее, а логику обработки выполняйте асинхронно в фоне.