Integraties

Stuur formulierantwoorden via webhooks

Webhooks zijn de algemene manier van YeetForm om antwoorddata overal naartoe te sturen: je eigen backend, een database-synctaak, of een ander automatiseringsplatform. Voeg een HTTPS-endpoint toe onder het tabblad Integraties van een formulier, en YeetForm stuurt bij elk nieuw antwoord een ondertekende JSON-payload via POST, met een geheim waartegen je kunt verifiëren met HMAC-SHA256. Mislukte leveringen worden automatisch opnieuw geprobeerd. Deze pagina behandelt het exacte handtekeningformaat, de vorm van de payload en het retryschema, zodat je met vertrouwen een ontvanger kunt bouwen.

Instellen

1.

Voeg een endpoint toe

Plak in het tabblad Integraties van het formulier je HTTPS-endpoint-URL bij Webhooks en klik op Webhook toevoegen. YeetForm genereert een ondertekeningsgeheim (whsec_...) voor dat endpoint.

2.

Verifieer de handtekening

Elke levering bevat een X-YeetForm-Signature-header: t=<unix ts>,v1=<hex hmac-sha256 van `${t}.${body}`>. Verifieer deze tegen de ruwe request body voordat je de payload vertrouwt.

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);
}
3.

Lees de payload

POSTs worden getriggerd bij response.created (en webhook.test voor de handmatige testknop), met het formulier-id, antwoord-id, aantal antwoorden en antwoorden gesleuteld op veld-id, plus een fields-array met het label van elk veld.

{
  "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"
}
4.

Ga om met retries

Een niet-2xx-respons (of een time-out) triggert een retry: direct, dan na 30 seconden, dan na 5 minuten - 3 pogingen in totaal voordat YeetForm de levering als mislukt markeert. Redirects worden niet gevolgd, richt de URL dus rechtstreeks op je endpoint.

Tips

  • →Veldlabels staan in de fields-array van de payload (id, label, type), zodat je veld-id's niet hoeft te hardcoderen downstream.
  • →Elk antwoord heeft een stabiele response_id - gebruik die als je idempotentiesleutel, want een herhaalde levering hergebruikt hetzelfde id.
  • →Een mislukte levering wordt in totaal maximaal 3 keer opnieuw geprobeerd (direct, 30s, 5 min) voordat hij als mislukt wordt gemarkeerd - een 2xx-respons is vereist om als geslaagd te tellen, en redirects worden niet gevolgd.

Bouw je formulier met AI in seconden

Start gratis

Veelgestelde vragen

Wat triggert een webhook?+
response.created wordt getriggerd bij elk nieuw antwoord; webhook.test wordt getriggerd wanneer je op de testknop van de integratie klikt, zodat je je endpoint kunt verifiëren voordat je live gaat.
Hoe weet ik dat een verzoek echt van YeetForm komt?+
Verifieer de X-YeetForm-Signature-header tegen je endpoint-geheim met HMAC-SHA256 over `${timestamp}.${rawBody}` - zie de verificatiesnippet hierboven.
Wat gebeurt er als mijn endpoint plat ligt?+
YeetForm probeert het in totaal maximaal 3 keer opnieuw: direct, na 30 seconden, dan na 5 minuten. Als alle drie mislukken, wordt de levering als mislukt gemarkeerd en niet verder opnieuw geprobeerd.
Kan ik aangepaste headers toevoegen?+
Ja, bij het instellen van de webhook kun je aangepaste headers instellen - ze worden samengevoegd, maar de eigen Content-Type- en X-YeetForm-*-headers van YeetForm winnen altijd bij een conflict.