Обзор
Вместо того чтобы опрашивать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, метаданных и необработанного тела запроса, соединённых символами новой строки:
- Убедитесь, что
X-Krea-Webhook-Urlточно совпадает сX-Webhook-URL, который вы отправили вместе с заданием. - Убедитесь, что временная метка отличается от текущего времени вашего сервера не более чем на 5 минут.
- Принимайте запрос, если подпись проходит проверку любым ключом из
https://api.krea.ai/.well-known/jwks.json. Кэшируйте ключи не дольше 24 часов. Krea публикует новый ключ за 24 часа до того, как начинает подписывать им запросы.
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