Webhooks.
Jede angenommene Einsendung lässt sich als JSON-POST an einen eigenen Endpunkt schicken — signiert, mit Wiederholungen und außerhalb der Anfrage, auf die der Besucher wartet. Einzurichten im Dashboard unter „Integrationen"; mehrere Webhooks pro Formular sind erlaubt.
Die Nutzdaten
Der Body ist die Einsendung, wie sie gespeichert wurde: Name des Formulars, Zeitstempel und deine eigenen Felder. Reservierte Felder fehlen darin — sie haben die Verarbeitung gesteuert und wurden nie gespeichert.
Die Signatur prüfen
Ist ein Secret hinterlegt, trägt jede Zustellung den Header X-Signature: der HMAC-SHA256 des rohen Bodys, hexadezimal kodiert. Berechne ihn über die empfangenen Bytes — nicht über ein neu serialisiertes Objekt, das sich in Leerzeichen und Schlüsselreihenfolge unterscheiden würde.
Vergleiche in konstanter Zeit wie oben. Ein einfacher Zeichenkettenvergleich verrät Byte für Byte, wie viel von einer geratenen Signatur stimmte.
Zustellung und Wiederholungen
Die Zustellung läuft in der Hintergrund-Queue, ein Job je Webhook — ein langsamer oder defekter Endpunkt verzögert also nie die Antwort an den Besucher. Jeder Status außerhalb von 2xx gilt als Fehlschlag und wird bis zu fünfmal mit exponentiellem Backoff wiederholt — eine Sekunde, zwei, vier und so weiter, gedeckelt bei fünf Minuten. Danach wird der Job als fehlgeschlagen abgelegt.
Wegen der Wiederholungen muss dein Endpunkt damit umgehen, dass dieselbe Einsendung zweimal ankommt. Antworte mit 2xx, sobald du die Daten angenommen hast, und erledige die eigentliche Arbeit danach — ein langsamer Handler wird sonst zur Wiederholung und die Wiederholung zum Duplikat.
Andere Ziele
Dasselbe Ereignis speist auch die fertigen Integrationen — für die üblichen Fälle musst du also keinen Empfänger bauen. Jede wird im Dashboard eingerichtet, und ihre Zugangsdaten liegen verschlüsselt; über die API werden sie nie zurückgegeben.
- Slack — die Einsendung als Kanal-Nachricht.
- Discord — dasselbe, in einen Discord-Kanal.
- Google Sheets — eine Zeile je Einsendung, neue Felder werden zu neuen Spalten.
- Notion — eine Seite je Einsendung in einer Datenbank.
- Airtable — ein Datensatz je Einsendung.