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

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

При отправке задачи добавьте поле webhook в тело запроса:
После завершения задачи мы отправим POST-запрос на ваш URL + /callback.
Другие конечные точки асинхронных задач (видео, аудио и т. д.) работают так же — просто добавьте поле webhook в тело запроса.

Правила URL

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

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

Отправляемое содержимое полностью совпадает с тем, что возвращает конечная точка «Получение статуса задачи» — вы можете обрабатывать его той же логикой разбора.
Для видеозадач результат находится в result.videos, а для аудио — в result.audios.
Мы отправляем уведомление только когда задача достигает конечного состояния (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 как можно быстрее, а логику обработки выполняйте асинхронно в фоне.