API v1
Вебхуки
Вебхуки сообщают вашему серверу о событиях без опроса API. Адрес обработчика и список событий задаются в кабинете: «Настройки» → «Вебхуки».
События
| Событие | Описание |
|---|---|
generation.completed | Все варианты генерации готовы. |
generation.failed | Генерация завершилась ошибкой. |
export.ready | Файл экспорта готов к скачиванию. |
quota.low | Осталось меньше 10% генераций по тарифу. |
Формат запроса
Мы отправляем POST с JSON-телом на ваш адрес. Ответьте любым кодом 2xx в течение 10 секунд.
json
{
"id": "evt_0Qz4nB8s",
"type": "export.ready",
"created_at": "2026-10-02T09:15:02Z",
"data": { "export_id": "exp_2Lc7pQ0d", "generation_id": "gen_5mWq1xR7", "preset": "wildberries-3x4" }
} Проверка подписи
Каждый запрос подписан заголовком Accelator-Signature: время отправки и HMAC-SHA256 от строки
{t}.{тело запроса} с секретом обработчика. Отклоняйте запросы с неверной подписью или старше 5 минут.
javascript
import crypto from 'node:crypto';
function isValid(rawBody, header, secret) {
// header: "t=1759396502,v1=5f2b…"
const parts = Object.fromEntries(header.split(',').map((p) => p.split('=')));
const expected = crypto
.createHmac('sha256', secret)
.update(`${parts.t}.${rawBody}`)
.digest('hex');
const fresh = Math.abs(Date.now() / 1000 - Number(parts.t)) < 300;
return fresh && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
} Повторная доставка
Если обработчик не ответил 2xx, мы повторим отправку 6 раз с растущим интервалом в течение 12 часов. Используйте id события, чтобы не обработать его дважды.