Webhooks
Получайте уведомления, когда новый черновик готов — затем загрузите полную статью через API.
Настройте URL webhook и secret в Интеграциях. Когда черновик готов, мы отправляем article.ready со slug и подсказками для fetch. Ваш backend проверяет HMAC и вызывает GET /posts/{slug} для импорта contentHtml.
События
article.ready— Черновик прошёл проверку качества — получите полный HTML через API по slugwebhook.test— Отправляется при вызове POST /api/v1/webhooks/test
Проверка подписи
Мы отправляем X-GrowthDaily-Timestamp (Unix-секунды) и X-GrowthDaily-Signature (hex HMAC-SHA256 от `{timestamp}.{rawBody}` с вашим webhook secret).
import { createHmac, timingSafeEqual } from "crypto";
function verify(secret, rawBody, timestamp, signatureHex) {
const expected = createHmac("sha256", secret)
.update(`${timestamp}.${rawBody}`)
.digest("hex");
const a = Buffer.from(expected, "utf8");
const b = Buffer.from(signatureHex, "utf8");
if (a.length !== b.length) return false;
return timingSafeEqual(a, b);
}{
"event": "article.ready",
"siteId": "uuid",
"postId": "uuid",
"slug": "my-post",
"title": "My post",
"trustScore": 94,
"qualityBand": "premium",
"assuranceLabel": "High confidence",
"language": "en",
"sourcePostId": null,
"status": "draft",
"at": "2026-07-21T12:00:00.000Z",
"fetch": {
"path": "/api/v1/sites/{siteId}/posts/{slug}",
"hint": "GET with Bearer token to import contentHtml"
}
}После article.ready
Используйте slug из payload (или fetch.path) для вызова GET /api/v1/sites/{siteId}/posts/{slug}. Импортируйте contentHtml, seo и faqJsonLd в CMS — публикуйте по своему расписанию.
Гарантии доставки
Каждое событие отправляется один раз HTTP POST с таймаутом 8 секунд. Неудачные доставки автоматически не повторяются. Сбой webhook не блокирует новые черновики. Все попытки — в Интеграции → Последние доставки.
Идемпотентные обработчики
Быстро отвечайте HTTP 2xx. Дедуплицируйте импорт по postId (или siteId + slug). Если пропустили событие — GET /posts с updatedAfter, см. справочник API.
Журнал доставки
Успех и ошибка видны в панели интеграций с HTTP-статусом и временем.