Webhooks que entregan de verdad
Payloads JSON con firma verificable, entrega encolada, reintentos exponenciales y log de entregas por formulario. Hecho para desarrolladores — sin Zapier de por medio comiéndose tus datos.
{
"event": "submission.created",
"delivery_id": "dlv_8aE2k",
"timestamp": 1730723400,
"form_id": "f_142",
"submission_id": "s_9k3X",
"fields": {
"name": "Sarah Chen",
"email": "[email protected]",
"budget": 25000
}
}
Qué dispara un webhook
Lo configuras una vez por formulario. Nosotros disparamos en cada evento relevante.
Nueva respuesta
Se dispara en el momento en que se envía un formulario, con el payload completo, los campos y la metadata.
Pago exitoso
Cuando un pago de Stripe asociado a una respuesta tiene éxito, el webhook incluye estado del pago, monto y moneda.
Borrador retomado
Cuando alguien vuelve a un borrador guardado (formularios save-and-resume), puedes notificarte para analytics de embudo.
JSON predecible, versionado y bien formado
Sin sorpresas. Mismo envoltorio en cada evento. Tipos de campo preservados como se enviaron.
{
"event": "submission.created",
"delivery_id": "dlv_8aE2kF1Ld9zQ",
"timestamp": 1730723400,
"form_id": "f_142",
"submission_id": "s_9k3XnPq72T",
"fields": {
"name": "Sarah Chen",
"email": "[email protected]",
"company": "Acme Corp",
"budget": 25000,
"message": "Looking for a form solution..."
},
"payment": {
"status": "succeeded",
"amount": 2500,
"currency": "usd"
},
"meta": {
"ip": "203.0.113.42",
"user_agent": "Mozilla/5.0...",
"locale": "en"
}
}
Firma verificada, nunca falsificable
Cada payload se firma con un HMAC-SHA256 del secreto webhook de tu formulario. Verifícalo en tu lado antes de confiar en los datos.
Firma HMAC-SHA256
Cabecera X-FormBuilder-Signature en cada petición. Calcula el HMAC del cuerpo crudo con tu secreto y compáralo en tiempo constante.
Secretos por formulario
Cada formulario tiene su propio secreto. Rótalo cuando quieras desde la configuración del formulario — los payloads antiguos siguen verificables hasta que regeneras.
Solo TLS
Solo aceptamos endpoints HTTPS. Nos negamos a entregar a URLs en texto plano para proteger los datos en tránsito.
Protección contra replay
Cada payload incluye un timestamp y un ID de entrega único. Rechaza entregas más viejas que 5 minutos para evitar replay attacks.
Verifica en 3 líneas
Elige tu stack. El patrón es el mismo: HMAC del cuerpo crudo con tu secreto, comparar con la cabecera de firma.
const crypto = require('crypto'); function verify(rawBody, signature, secret) { const expected = crypto .createHmac('sha256', secret) .update(rawBody) .digest('hex'); return crypto.timingSafeEqual( Buffer.from(expected), Buffer.from(signature) ); }
function verify($rawBody, $signature, $secret) { $expected = hash_hmac('sha256', $rawBody, $secret); return hash_equals($expected, $signature); }
import hmac, hashlib def verify(raw_body: bytes, signature: str, secret: str) -> bool: expected = hmac.new( secret.encode(), raw_body, hashlib.sha256 ).hexdigest() return hmac.compare_digest(expected, signature)
Hecho para el mundo real
Las redes fallan, los endpoints se saturan, los deploys pasan. Los webhooks se encolan, reintentan y exponen el estado de entrega.
Entrega encolada
Las respuestas devuelven inmediatamente al respondedor. La entrega del webhook ocurre en cola en segundo plano — nunca bloquea el formulario.
Backoff exponencial
Las entregas fallidas reintentan con backoff exponencial. No machacamos tu endpoint cuando ya está sufriendo.
Múltiples reintentos
Cada entrega se reintenta varias veces a lo largo de horas. Tienes tiempo de recuperarte de caídas sin perder datos.
Log de entregas
Cada intento queda registrado — petición, código de respuesta, extracto del cuerpo, timestamp. Inspecciona los fallos en la configuración del formulario.
Claves de idempotencia
Cada entrega incluye un ID único. Úsalo como clave de idempotencia en tu lado para deduplicar reintentos con seguridad.
Registrado en auditoría
Cambios de URL, rotaciones de secreto y activación/desactivación quedan registrados en el log de auditoría de tu workspace.
Para qué se usan los webhooks
Sincronización con CRM propio
Empuja leads a tu CRM interno con el mapeo exacto que tu sistema espera.
Alertas de Slack / Discord
Más allá de la integración nativa con Slack, construye flujos de alertas con payloads enriquecidos.
Procesamiento backend
Dispara jobs en segundo plano, envía email transaccional, valida datos, sincroniza con tu data warehouse.
Alternativa a Zapier / Make
Sáltate la tarifa de middleware. Un solo webhook puede repartirse a cualquier número de servicios internos.
Configuración en 4 pasos
Configúralo una vez, entrega para siempre.
Abre la configuración del formulario
En el panel, abre tu formulario y ve a Integraciones → Webhooks.
Añade tu URL de endpoint
Pega la URL HTTPS que debe recibir las respuestas. Validamos que el endpoint responde antes de guardar.
Copia el secreto de firma
Cada formulario obtiene un secreto único. Guárdalo en tu servidor y úsalo para verificar los payloads entrantes.
Envía una prueba
Envía una respuesta de prueba e inspecciona el log de entregas. Verifica que tu endpoint devolvió 2xx y que la verificación de firma pasó.
Preguntas frecuentes
Integraciones relacionadas
Slack
Entrega Slack pre-construida — sin manejar firmas.
Más información →Notion
Empuja a una base de Notion sin escribir una línea de código.
Más información →Pagos con Stripe
Los payloads de webhook incluyen estado de pago cuando hay pagos asociados.
Más información →Todas las Integraciones
Explora Stripe, Notion, Slack, Airtable, Google Forms y más — y mira cómo todo se conecta.
Ver integraciones →