Webhooks
Получайте уведомления в реальном времени о завершении или сбое задач
Обзор
Вебхуки позволяют получать HTTP-вызовы при завершении задач по созданию изображений или видео. Вместо постоянного опроса на предмет результатов вы можете настроить конечную точку вебхука для автоматических уведомлений.
Доступные события
task.completedСрабатывает при успешном завершении задачиtask.failedСрабатывает при сбое задачиGET
/api/v1/webhooksПоказать все ваши конфигурации вебхуков
Ответ
{
"success": true,
"data": [
{
"id": 1,
"url": "https://your-server.com/webhook",
"events": ["job.completed", "job.failed"],
"status": "active"
}
]
}POST
/api/v1/webhooksСоздать новый конечный вебхук
Тело запроса
{
"url": "https://your-server.com/webhook",
"events": ["job.completed", "job.failed"],
"secret_key": "your-secret-key"
}Поля тела
| Параметр | Тип | Обязательный параметр | Описание |
|---|---|---|---|
| url | string | Требуется | URL вашего вебхук-эндпоинта |
| events | string[] | Требуется | События для подписки |
| secret_key | string | Опционально | Секретный ключ для проверки подписи |
Ответ
{
"success": true,
"data": {
"id": 1,
"url": "https://your-server.com/webhook",
"events": ["job.completed", "job.failed"],
"status": "active"
}
}DELETE
/api/v1/webhooks/{id}Удалить конечную точку вебхука
Ответ
{
"success": true,
"data": { "id": 1 }
}Полезная нагрузка вебхука
При возникновении события мы отправим POST-запрос на ваш вебхук-URL со следующим содержимым:
Заголовки
| Шапка | Описание |
|---|---|
| X-Webhook-Timestamp | Временная метка Unix запроса |
| X-Webhook-Signature | HMAC-SHA256 подпись для верификации |
Пример полезной нагрузки
{
"event": "job.completed",
"task_id": "task_xxx",
"task_type": "image",
"status": "completed",
"data": {
"url": "https://cdn.example.com/image.png",
"credits_charged": 6
},
"timestamp": "2024-12-23T10:00:00Z"
}Проверка подписи
Проверка подлинности вебхуков с использованием HMAC-SHA256
const crypto = require('crypto');
function verifySignature(payload, signature, secret, timestamp) {
const message = `${timestamp}.${JSON.stringify(payload)}`;
const expectedSig = crypto
.createHmac('sha256', secret)
.update(message)
.digest('hex');
return `v1=${expectedSig}` === signature;
}