Webhooks
Reciba notificaciones cuando un nuevo borrador esté listo — luego obtenga el artículo completo vía API.
Configura una URL de webhook y un secreto en Integraciones. Cuando un borrador está listo, enviamos article.ready con slug e indicaciones de fetch. Tu backend verifica HMAC y llama a GET /posts/{slug} para importar contentHtml.
Eventos
article.ready— Hay un borrador con control de calidad listo — obtén el HTML completo vía API usando el slugwebhook.test— Enviado al llamar a POST /api/v1/webhooks/test
Verificación de firma
Enviamos X-GrowthDaily-Timestamp (segundos Unix) y X-GrowthDaily-Signature (HMAC-SHA256 hex de `{timestamp}.{rawBody}` usando su secreto de webhook).
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"
}
}Después de article.ready
Use el slug del payload (o fetch.path) para llamar a GET /api/v1/sites/{siteId}/posts/{slug}. Importe contentHtml, seo y faqJsonLd en su CMS — publique según su calendario.
Garantías de entrega
Cada evento se envía una vez con un POST HTTP y un tiempo de espera de 8 segundos. No reintentamos entregas fallidas automáticamente. Un webhook fallido no bloquea nuevos borradores. Cada intento queda en Integraciones → Entregas recientes.
Manejadores idempotentes
Responde con HTTP 2xx rápido. Deduplica importaciones con postId (o siteId + slug). Si pierdes un evento, consulta GET /posts con updatedAfter — ver referencia API.
Registro de entregas
Éxito y error aparecen en el panel de integraciones con estado HTTP y marca de tiempo.