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"
}

Поля тела

ПараметрТипОбязательный параметрОписание
urlstringТребуетсяURL вашего вебхук-эндпоинта
eventsstring[]ТребуетсяСобытия для подписки
secret_keystringОпциональноСекретный ключ для проверки подписи

Ответ

{
  "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-SignatureHMAC-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;
}
Nano Banana Pro API