Integraciones
Envía las respuestas de un formulario mediante webhooks
Los webhooks son la forma general que tiene YeetForm de enviar los datos de las respuestas a cualquier lugar: tu propio backend, un trabajo de sincronización con una base de datos u otra plataforma de integración. Añade un endpoint HTTPS en la pestaña Integraciones de un formulario y YeetForm envía por POST un payload JSON firmado con cada nueva respuesta, con un secreto que puedes verificar mediante HMAC-SHA256. Los envíos fallidos se reintentan automáticamente. Esta página cubre el formato exacto de la firma, la estructura del payload y el calendario de reintentos, para que puedas construir un receptor con confianza.
Configuración
Añade un endpoint
En la pestaña Integraciones del formulario, pega la URL de tu endpoint HTTPS en Webhooks y haz clic en Add webhook. YeetForm genera un secreto de firma (whsec_...) para ese endpoint.
Verifica la firma
Cada envío incluye una cabecera X-YeetForm-Signature: t=<unix ts>,v1=<hex hmac-sha256 de `${t}.${body}`>. Verifícala contra el cuerpo sin procesar de la petición antes de fiarte del payload.
import { createHmac, timingSafeEqual } from "crypto";
function verify(secret, signatureHeader, rawBody) {
const [tPart, v1Part] = signatureHeader.split(",");
const timestamp = tPart.split("=")[1];
const signature = v1Part.split("=")[1];
const expected = createHmac("sha256", secret)
.update(`${timestamp}.${rawBody}`)
.digest("hex");
const a = Buffer.from(signature, "hex");
const b = Buffer.from(expected, "hex");
if (a.length !== b.length) return false;
return timingSafeEqual(a, b);
}Lee el payload
Los POST se disparan en response.created (y en webhook.test para el botón de prueba manual), con el id del formulario, el id de la respuesta, el recuento de respuestas y las respuestas indexadas por el id del campo, además de un array fields con la etiqueta de cada campo.
{
"event": "response.created",
"form_id": "<uuid>",
"form_title": "Customer Feedback",
"response_id": "<uuid>",
"response_count": 42,
"answers": { "fld_x": "..." },
"fields": [{ "id": "fld_x", "label": "Your name", "type": "text" }],
"submitted_at": "2026-09-13T12:00:00.000Z"
}Gestiona los reintentos
Una respuesta que no sea 2xx (o un timeout) provoca un reintento: de inmediato, luego a los 30 segundos y luego a los 5 minutos, 3 intentos en total antes de que YeetForm marque el envío como fallido. No se siguen las redirecciones, así que apunta la URL directamente a tu endpoint.
Consejos
- →Las etiquetas de los campos van incluidas en el array fields del payload (id, label, type), así que no necesitas fijar ids de campo en tu sistema.
- →Cada respuesta lleva un response_id estable: úsalo como clave de idempotencia, ya que un envío reenviado reutiliza el mismo id.
- →Un envío fallido se reintenta hasta 3 veces en total (de inmediato, 30 s, 5 min) antes de marcarse como fallido: hace falta una respuesta 2xx para que cuente como éxito, y no se siguen las redirecciones.