Home / Features / Webhooks
Webhooks nativos

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.

Gratis en todos los planes · Firmado HMAC · Reintentos en cola
POST /webhook
{
  "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.

submission.created

Nueva respuesta

Se dispara en el momento en que se envía un formulario, con el payload completo, los campos y la metadata.

payment.succeeded

Pago exitoso

Cuando un pago de Stripe asociado a una respuesta tiene éxito, el webhook incluye estado del pago, monto y moneda.

draft.resumed

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

USE CASE 01

Sincronización con CRM propio

Empuja leads a tu CRM interno con el mapeo exacto que tu sistema espera.

USE CASE 02

Alertas de Slack / Discord

Más allá de la integración nativa con Slack, construye flujos de alertas con payloads enriquecidos.

USE CASE 03

Procesamiento backend

Dispara jobs en segundo plano, envía email transaccional, valida datos, sincroniza con tu data warehouse.

USE CASE 04

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

¿Los webhooks son gratis?
Sí. Los webhooks están incluidos en todos los planes, incluido el plan gratuito. Sin cobros por llamada.
¿Cuán rápida es la entrega?
La entrega se respalda en cola y suele completarse en segundos tras el envío. No bloqueamos la respuesta del formulario, así que los respondedores ven la confirmación al instante.
¿Cuál es la política de reintentos?
Las entregas fallidas (5xx, timeouts, errores de conexión) reintentan con backoff exponencial a lo largo de varios intentos durante horas. Tras los reintentos máximos, la entrega se marca fallida y queda registrada.
¿Puedo tener múltiples webhooks por formulario?
Sí. Añade tantos endpoints de webhook como necesites en un mismo formulario. Cada uno se dispara independientemente con su propio secreto y estado de reintento.
¿Soportan IP allow-list?
Las entregas de webhook salen desde un conjunto estable de direcciones IP. Contacta a soporte para la lista actual si tu firewall requiere permitir explícitamente.
¿Cómo roto el secreto de firma?
En la configuración del formulario → webhook → Regenerar secreto. El nuevo secreto entra en vigor en la siguiente entrega. Actualiza tu endpoint para verificar con el nuevo secreto antes de regenerar.

¿Listo para conectarlo?

Webhooks nativos. Gratis en todos los planes.

Empieza gratis