Webhook de contactos
Propietarios y administradores con correo verificado. Configuración de la organización → Integraciones → Webhook de contactos envía cada contacto nuevo de un formulario de contacto a una dirección, como un disparador de Zapier, Make o n8n o tu propio servidor. Los contactos también siguen en Análisis → Contactos. Con Enviar también las aperturas y finalizaciones de enlaces personales, también informa de los enlaces personales.
La dirección
La dirección debe usar HTTPS en el puerto predeterminado y ser accesible desde internet. Se rechazan las direcciones que apuntan a una red privada y no se siguen redirecciones, así que introduce la dirección final. Desmarcar Enviar los contactos nuevos pausa el envío sin eliminar la dirección; los contactos recibidos mientras tanto no se envían después, y los reintentos pendientes se reanudan al volver a marcarlo.
Enviar evento de prueba envía una vez un contacto de ejemplo, sin reintentos, y muestra el resultado en Envíos recientes.
Qué se envía
Cada contacto nuevo se envía como JSON:
{
"id": "6c0a4f8e-…",
"event": "lead.created",
"createdAt": "2026-10-25T12:00:00Z",
"organization": { "id": "…", "name": "Northstar Studio" },
"demo": { "id": "…", "title": "Approve a release", "url": "https://demo-creator.com/demo/…" },
"lead": {
"id": "…",
"name": "Grace Hopper",
"email": "grace@example.com",
"screen": "start",
"language": "en"
}
}
screen es start o end, según la pantalla cuyo formulario se envió, y language es el idioma de la demo que eligió quien la veía, o vacío. Los eventos de prueba tienen "event": "webhook.test", "demo": null y un contacto de ejemplo. Cada solicitud lleva además los encabezados X-Demo-Creator-Event, X-Demo-Creator-Delivery (el mismo valor que id) y X-Demo-Creator-Signature.
Los eventos de enlaces personales, recipient.opened y recipient.completed, se envían una vez por enlace y llevan un objeto recipient en lugar de lead:
{
"event": "recipient.opened",
"recipient": {
"id": "…",
"name": "Grace Hopper",
"email": "grace@example.com",
"firstViewedAt": "2026-10-25T12:00:00Z",
"views": 1,
"completedAt": null
}
}
Comprobar la firma
X-Demo-Creator-Signature tiene este aspecto: t=1792931200,v1=5f2b…. Calcula un HMAC-SHA256 de la marca de tiempo, un punto y el cuerpo sin modificar de la solicitud, con el Secreto de firma como clave, y compáralo con v1 en tiempo constante. Rechaza las solicitudes cuya marca de tiempo tenga más de cinco minutos.
import { createHmac, timingSafeEqual } from 'node:crypto';
function verify(rawBody, header, secret) {
const { t, v1 } = Object.fromEntries(header.split(',').map((part) => part.split('=')));
const expected = createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
const fresh = Math.abs(Date.now() / 1000 - Number(t)) < 300;
return (
fresh &&
v1?.length === expected.length &&
timingSafeEqual(Buffer.from(v1), Buffer.from(expected))
);
}
Renovar el secreto firma las solicitudes con un secreto nuevo de inmediato, así que actualiza tu receptor justo después.
Envío y reintentos
Una respuesta con estado 2xx cuenta como entregada. Cualquier otro estado, la falta de respuesta en 10 segundos o la falta de conexión se reintenta después de 1 minuto, 5 minutos, 30 minutos, 2 horas y 6 horas; después, el envío aparece como fallido. Un reintento tras una respuesta perdida puede repetir un contacto, así que usa id para ignorar duplicados.
Un contacto cuya demo se mueve a la papelera antes del envío no se envía, y Eliminar webhook cancela los envíos que siguen pendientes. Se muestran los 20 envíos más recientes; los envíos terminados se eliminan a los 30 días.