Webhooks
Получайте уведомления в реальном времени о завершении или сбое задач
Обзор
Webhooks allow you to receive HTTP callbacks when your image or video generation tasks complete. Instead of polling for results, you can set up a webhook endpoint to receive automatic notifications.
Доступные события
- job.completedTriggered when a task completes successfully
- job.failedTriggered when a task fails
API-эндпоинты
GET
/api/v1/webhooksList all your webhook configurations
Пример ответа:
{
"success": true,
"data": [
{
"id": 1,
"url": "https://your-server.com/webhook",
"events": ["job.completed", "job.failed"],
"status": "active"
}
]
}POST
/api/v1/webhooksCreate a new webhook endpoint
Пример запроса:
{
"url": "https://your-server.com/webhook",
"events": ["job.completed", "job.failed"],
"secret_key": "your-secret-key"
}Параметры:
| Параметр | Тип | Обязательный параметр | Описание |
|---|---|---|---|
| url | string | Требуется | Your webhook endpoint URL |
| events | string[] | Требуется | Events to subscribe to |
| secret_key | string | Опционально | Secret for signature verification |
Пример ответа:
{
"success": true,
"data": {
"id": 1,
"url": "https://your-server.com/webhook",
"events": ["job.completed", "job.failed"],
"status": "active"
}
}DELETE
/api/v1/webhooks/{id}Delete a webhook endpoint
Пример ответа:
{
"success": true,
"data": { "id": 1 }
}Полезная нагрузка вебхука
Формат уведомлений через вебхуки, отправляемых на ваш эндпоинт
| Шапка | Описание |
|---|---|
| X-Nano-Timestamp | Unix timestamp of the request |
| X-Nano-Signature | HMAC-SHA256 signature for verification |
Пример полезной нагрузки:
{
"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"
}Проверка подписи
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;
}