Pro - das Konfigurieren und Empfangen von Webhook-Zustellungen erfordert Pro.
POST an eine URL deiner Wahl senden,
signiert, damit du überprüfen kannst, dass sie tatsächlich von Formpaste stammt.
Einen Webhook aktivieren
- Öffne ein Formular im Dashboard → Einstellungen → Webhooks.
- Gib die
https://-URL deines Endpunkts (webhook_url) ein und speichere. - Das Dashboard zeigt ein Signaturgeheimnis (
whsec_…) für dieses Formular, kopiere es; du brauchst es, um eingehende Anfragen zu verifizieren.
Wann er ausgelöst wird
Ein Webhook wird für jede zugestellte, nicht als Spam eingestufte Einsendung ausgelöst, dieselben Einsendungen, die eine Benachrichtigungs-E-Mail erzeugen. Unter Quarantäne stehende (Spam-)Einsendungen lösen keinen Webhook aus. Die Zustellung erfolgt nach bestem Bemühen und unabhängig von der E-Mail: Ein Webhook-Fehler blockiert oder beeinträchtigt niemals deine E-Mail-Benachrichtigung.Anfrage
POST an deine konfigurierte URL, Content-Type: application/json.
Payload
Der Body ist ein versioniertes JSON-Envelope. Deine eingesendeten Felder liegen unterdata:
type/version: das Envelope. Heute existiert nursubmission.received(Version1); neue Event-Typen können später hinzukommen.data: deine eingesendeten Felder, bereits bereinigt:access_key, dasbotcheck-Honeypot und jedesredirect-Steuerfeld werden entfernt und nie einbezogen.
Felder sind unter
data verschachtelt, nicht auf der obersten Ebene abgeflacht, in Zapier,
Make, Pipedream oder n8n bildest du data.email, data.name usw. ab.Die Signatur verifizieren
Die Signatur istHMAC-SHA256 über die Zeichenkette ${timestamp}.${rawBody}, geschlüsselt
mit dem Signaturgeheimnis deines Formulars (whsec_…, im Dashboard angezeigt; du kannst es
jederzeit neu generieren). Vergleiche sie mit X-Formpaste-Signature (sha256=<hex>), und
lehne Anfragen ab, deren X-Formpaste-Timestamp für deine Toleranz zu alt ist.
Wiederholungen, Backoff & Zustellungsprotokoll
Wenn dein Endpunkt keinen2xx zurückgibt, wiederholt Formpaste mit exponentiellem Backoff,
ungefähr 10 s → 60 s → 5 min → 30 min, bis zu 5 Versuche insgesamt über etwa 35
Minuten, dann wird die Zustellung als endgültig markiert (Dead-Letter). Eine 4xx-Antwort
wird als dauerhafter Fehler behandelt und nicht wiederholt, behebe deinen Endpunkt und spiele
sie dann manuell erneut ab. Netzwerkfehler und Timeouts (10 s) werden genauso wiederholt wie
ein 5xx/429.
Dein Endpunkt sollte schnell mit 2xx antworten und langsame Arbeit asynchron erledigen.
Das Dashboard zeigt ein Zustellungsprotokoll pro Formular (Event, Status, HTTP-Code,
Zeitstempel) mit einer Replay-Aktion, um eine vergangene Zustellung erneut zu senden,
sobald dein Endpunkt repariert ist.
Anforderungen & Limits
- Die URL muss
https://sein, einfaches HTTP wird abgelehnt. Loopback-, privates-Netzwerk-, Link-Local- und Cloud-Metadaten-Adressen werden als SSRF-Schutz abgelehnt, sowohl beim Speichern als auch erneut vor jedem Versand. - Eine Webhook-URL pro Formular.
An Slack / Discord senden
Ein roher Formpaste-Webhook kann nicht direkt an eine Slack- oder Discord-Webhook-URL posten, diese erwarten ihre eigene Body-Form (Slack:{"text": …}, Discord:
{"content": …}) und lehnen das obige Envelope ab. Richte deinen Formpaste-Webhook auf eine
Automatisierungsplattform (Zapier, Make, Pipedream, n8n), die das Payload in das Format des
Chat-Dienstes umformt, und lass diese Automatisierung dann an Slack/Discord posten. Es gibt
noch keine eingebaute, direkt einsatzbereite Slack-/Discord-Integration, siehe die
Slack- und Discord-Anleitungen
für das Webhook-Relay-Rezept.
Google Sheets ist eine echte, native Integration: Tabelle
verbinden und die Zeilen kommen automatisch an, ganz ohne Webhook. “Native”
Zapier-Trigger, Notion und direkte Airtable-Integrationen sind noch nicht gebaut, dafür
ist der generische Webhook oben heute der funktionierende Weg.
Free vs. Pro
Free-Formulare können keinen Webhook konfigurieren. Der Versuch, einewebhook_url bei Free
zu speichern, liefert:
Ohne Konfiguration nutzbar
Kein Webhook wird ausgelöst, bis du explizit einewebhook_url auf einem Pro-Formular
festlegst, ein neues Formular sendet nichts.