Перейти к основному содержанию

Обзор

Вместо того чтобы опрашивать GET /jobs/{id}, укажите Krea URL webhook’а. Когда задание завершится, Krea отправит его на этот URL.

Использование webhooks

Добавьте заголовок X-Webhook-URL к любому запросу на генерацию. Когда задание завершается успешно, с ошибкой или отменяется, Krea отправляет POST-запрос на этот URL.

Тело webhook-запроса

Тело запроса имеет ту же структуру, что и ответ GET /jobs/{id}:

Проверка подписей

Krea подписывает каждый webhook с помощью Ed25519. Проверяйте подпись, прежде чем доверять телу запроса, и отклоняйте запросы без подписи. Krea подписывает SHA-256 в шестнадцатеричном виде (в нижнем регистре) от временной метки, URL, метаданных и необработанного тела запроса, соединённых символами новой строки:
Чтобы проверить запрос:
  1. Убедитесь, что X-Krea-Webhook-Url точно совпадает с X-Webhook-URL, который вы отправили вместе с заданием.
  2. Убедитесь, что временная метка отличается от текущего времени вашего сервера не более чем на 5 минут.
  3. Принимайте запрос, если подпись проходит проверку любым ключом из https://api.krea.ai/.well-known/jwks.json. Кэшируйте ключи не дольше 24 часов. Krea публикует новый ключ за 24 часа до того, как начинает подписывать им запросы.
Хешируйте необработанные байты тела, а не повторно сериализованный JSON. Например, используйте express.raw() в Express, await request.arrayBuffer() во фреймворках на основе Fetch API или request.get_data() во Flask. Если заголовок X-Krea-Webhook-Metadata отсутствует, считайте его пустой строкой.

Доставка и повторные попытки

Возвращайте 2xx в течение 15 секунд. Если время ожидания запроса истекает, не удаётся установить соединение или приходит ответ 5xx, 408, 423, 425 или 429, Krea повторяет попытки в течение примерно 10 минут, каждый раз с новой временной меткой и подписью. Другие коды 4xx Krea не повторяет. Одно и то же задание может прийти несколько раз, поэтому устраняйте дубликаты по job_id и status.

Webhooks против опроса

Используйте webhooks, если у вас есть сервер, который может принимать HTTP-запросы. Используйте опрос для клиентских приложений или когда вы не можете предоставить публичный эндпоинт.

Следующие шаги

Жизненный цикл задания

Узнайте о состояниях заданий и опросе статуса

Примеры кода

Полный пример генерации изображения через API