Integraciones
Webhooks
Envía cada envío completado como una solicitud POST firmada a cualquier endpoint HTTPS: tu backend, plataforma de automatización o función serverless.
Cómo funciona
Con cada envío, formbase realiza un POST con un cuerpo JSON a tu URL de webhook. La solicitud está firmada con HMAC-SHA256, se reintenta en caso de fallo y se registra en el registro de eventos de la integración. Esta página cubre la configuración. El payload exacto, los encabezados y el algoritmo de firma están en la referencia de webhooks.
Añadir un webhook
- 1
Abre las integraciones del formulario
Formulario → Configuración → Integraciones → Webhook.
- 2
URL
Escribe el host y la ruta — el prefijo https:// es fijo en el campo. Solo se acepta http:// sin cifrar para localhost durante el desarrollo.
- 3
Mapeo
Déjalo vacío para enviar todos los campos. Añade filas para enviar solo esos campos, bajo la clave JSON que elijas. El mapeo da forma a answers y display a la vez, así que una clave renombrada se renombra en ambos. La solicitud completa debajo del mapeo se redibuja a medida que la editas.
- 4
Encabezados
Se genera automáticamente un secreto de firma que empieza con whsec_. No se puede cambiar tras la creación. En el mismo paso, añade hasta 5 encabezados personalizados que necesite tu endpoint, como un token de autorización, y activa Enviar la lista de campos con cada evento si tu receptor no puede llamar a fields.list. Content-Type se establece automáticamente y no se puede sobrescribir.
- 5
Finaliza
Pulsa Enviar un evento de prueba para hacer POST de una respuesta de ejemplo sintetizada, y luego pulsa Crear integración.
Múltiples webhooks
Puedes asociar varios webhooks a un mismo formulario. Cada uno se activa de forma independiente para cada evento.
Qué URLs acepta formbase
https://en todos los casos, ohttp://paralocalhosty*.localhostdurante el desarrollo.- Sin credenciales en la URL, y como máximo 2.048 caracteres.
Sin direcciones privadas o internas. El nombre de host se resuelve y se vuelve a comprobar justo antes de cada entrega, así que un registro DNS redirigido a una dirección interna después de la configuración sigue siendo rechazado.
Una URL rechazada es un problema de configuración, no algo transitorio: la entrega falla de forma permanente en lugar de reintentarse.
Qué recibes
Cada solicitud es el mismo sobre de evento — id, type, createdAt, apiVersion,
test y data. Dentro de data están el formulario, el envío (id, correo del encuestado, hora de
envío, enlace del PDF, idioma), un objeto answers indexado por clave de campo y un
objeto display con las mismas claves como texto legible. Cada respuesta aparece una vez, en cada mapa.
Consulta la referencia para ver la forma completa del payload, answers y display, y cómo se representa un grupo repetible.
Para previsualizar el cuerpo exacto de tu formulario, abre la integración y despliega Payload de ejemplo debajo del secreto de firma. Muestra tu mapeo actual con respuestas de ejemplo.
Verificar firmas
Cada solicitud incluye un encabezado X-formbase-Signature: t=TIMESTAMP,sha256=HEX, un HMAC-SHA256 de
TIMESTAMP.BODY calculado con tu secreto de firma. El secreto en sí nunca se envía. La referencia tiene un
fragmento de verificación listo para copiar y pegar.
Verifica siempre en producción
Sin verificación, cualquiera que descubra tu URL puede enviar envíos falsos. Rechaza las solicitudes en las que la firma falte o sea inválida.
Eventos de respuestas abandonadas
Los webhooks personalizados solo se activan para envíos completados y ediciones — nunca para borradores abandonados. Un webhook personalizado es el único receptor que recibe ambos: una suscripción de Zapier, Make o n8n elige envíos nuevos o ediciones, nunca ambos. Para borradores abandonados, usa un proveedor que tenga un paso Envíos abandonados: Google Sheets, Airtable, Notion, Slack, Discord, Linear o GitHub Issues. Cada uno tiene su propia ventana de inactividad y, cuando aplica, su propia plantilla de mensaje. Ese paso requiere Pro o Business.
Reintentos y fallos
Una entrega tiene éxito con cualquier
2xx.Hasta 5 intentos: el primero se lanza de inmediato, los reintentos esperan al menos 1, 2, 4 y 8 minutos. formbase busca reintentos pendientes cada 30 minutos, así que el último intento llega unas dos horas después del primero. Un encabezado
Retry-Afteren un429o5xxse respeta cuando pide una espera más larga.429,5xx, los tiempos de espera agotados y los fallos de conexión se reintentan. Cualquier otro4xxfalla de inmediato.Tras 5 fallos consecutivos, la integración se pausa automáticamente y la persona que la configuró recibe un correo. Soluciona el endpoint y luego pulsa Reanudar.
401,403y404detienen la integración de inmediato con un estado de error y el mismo correo — no hay que esperar a los cinco fallos.Las entregas que agotan los 5 intentos se acumulan en un banner de la integración. Reintentar todo vuelve a encolarlas y reactiva una integración pausada.
Pruebas
Enviar un evento de prueba aparece en el paso Finaliza y también en la integración guardada. Hace POST de una respuesta
de ejemplo sintetizada — “John Doe” para texto, 42 para números, john@example.com para email —
firmada y con tus encabezados personalizados, igual que una entrega real. Desde la integración guardada también escribe una entrada de
prueba de conexión en el registro de eventos.
Para el desarrollo local, expón tu servidor de desarrollo con un túnel:
# ngrok
ngrok http 3000
# cloudflare tunnel
cloudflared tunnel --url http://localhost:3000Preguntas frecuentes
Sí. Cada uno tiene su propia URL, secreto de firma y cabeceras personalizadas. Todos los webhooks activos se activan de forma independiente para cada envío.
Sí — hasta 5, añadidas durante la configuración o después desde la integración. Content-Type se establece automáticamente y
cualquier intento de sobrescribirlo se ignora.
No. El secreto de firma se genera una sola vez al crear el webhook y no se puede cambiar. Si necesitas un nuevo secreto, elimina el webhook y crea uno nuevo.
Sí. Abre la integración, edita la URL y guarda. El secreto de firma y el historial de eventos se mantienen.
Solo para localhost y *.localhost durante el desarrollo. El resto de URLs deben usar HTTPS.
Elimínala desde Configuración del formulario → Integraciones. formbase deja de enviar solicitudes de inmediato, y el historial de eventos de la integración se elimina con ella.