NueForm

Webhook-Payloads

Vollständige Referenz der NueForm-Webhook-Payload-Schemas — inklusive der Struktur des form.submitted-Ereignisses, Antwortformaten je Fragetyp und Quiz-Ergebnissen.

Jede NueForm-Webhook-Anfrage sendet eine JSON-Payload im Anfrage-Body. Diese Seite dokumentiert das vollständige Payload-Schema für jeden Ereignistyp.

Gemeinsame Struktur

Alle Webhook-Payloads teilen sich diese Felder auf oberster Ebene:

FeldTypBeschreibung
eventstringDer Ereignistyp (z. B. form.submitted)
formIdstringDie eindeutige ID des Formulars
formTitlestringDer Titel des Formulars zum Zeitpunkt der Übermittlung
responseIdstringDie eindeutige ID der Response
answersarrayArray von Antwortobjekten
respondentobject oder nullIdentität der angemeldeten befragten Person, wenn das Formular einen Login erforderte. null bei anonymen Übermittlungen. Siehe Identität der Befragten.
submittedAtstringISO-8601-Zeitstempel des Ereignisversands

form.submitted-Payload

Diese Payload wird gesendet, wenn eine befragte Person eine vollständige Formularantwort übermittelt.

Vollständiges Beispiel

json
{
  "event": "form.submitted",
  "formId": "507f1f77bcf86cd799439011",
  "formTitle": "Customer Feedback Survey",
  "responseId": "507f1f77bcf86cd799439022",
  "answers": [
    {
      "questionId": "507f1f77bcf86cd799439033",
      "value": "Jane Doe"
    },
    {
      "questionId": "507f1f77bcf86cd799439044",
      "value": "jane@example.com"
    },
    {
      "questionId": "507f1f77bcf86cd799439055",
      "value": 4
    },
    {
      "questionId": "507f1f77bcf86cd799439066",
      "value": "The onboarding flow was smooth and intuitive."
    },
    {
      "questionId": "507f1f77bcf86cd799439077",
      "value": ["Feature A", "Feature C"]
    },
    {
      "questionId": "507f1f77bcf86cd799439088",
      "value": true
    }
  ],
  "respondent": {
    "id": "507f1f77bcf86cd799439016",
    "name": "Jane Smith",
    "email": "jane@example.com",
    "auth_method": "sso"
  },
  "submittedAt": "2025-03-15T14:32:07.123Z"
}

Feldreferenz

Felder auf oberster Ebene

event --- string

Bei diesem Ereignistyp immer "form.submitted".

formId --- string

Die MongoDB-ObjectId des Formulars. Das ist ein 24-stelliger Hexadezimal-String.

formTitle --- string

Der menschenlesbare Titel des Formulars zum Zeitpunkt des Webhook-Versands. Beachte: Wenn du das Formular später umbenennst, enthalten bereits zugestellte Webhooks weiterhin den alten Titel.

responseId --- string

Die MongoDB-ObjectId der gespeicherten Response. Damit kannst du die vollständige Response über die Responses-API abrufen oder sie als Idempotenzschlüssel zum Deduplizieren von Webhook-Zustellungen verwenden.

submittedAt --- string

ISO-8601-Zeitstempel, der angibt, wann der Webhook versendet wurde. Er wird zum Versandzeitpunkt erzeugt und liegt sehr nah am submittedAt-Feld der Response in der Datenbank (ist aber nicht zwingend identisch).

respondent --- object oder null

Identität des angemeldeten Benutzers, der die Response übermittelt hat — nur enthalten, wenn das Formular einen Login erforderte (requireLogin: true). null bei allen anonymen Übermittlungen. Das vollständige Schema und Verhalten findest du unten unter Identität der Befragten.

Antwortobjekte

Jeder Eintrag im answers-Array steht für die Antwort auf eine einzelne Frage:

FeldTypBeschreibung
questionIdstringDie MongoDB-ObjectId der Frage
valueanyDie Antwort der befragten Person (Format je nach Fragetyp unterschiedlich)

Antwortwerte nach Fragetyp

Das value-Feld in jedem Antwortobjekt hängt vom Fragetyp ab. Hier ist das Format für jeden Typ:

Texteingaben

FragetypWertetypBeispiel
short_textstring"Jane Doe"
long_textstring"I really enjoyed the product..."
emailstring"jane@example.com"
phonestring"+1 (555) 123-4567"
numbernumber42
urlstring"https://example.com"

Auswahlfragen

FragetypWertetypBeispiel
multiple_choice (einfach)string"Option A"
multiple_choice (mehrfach)array<string>["Option A", "Option C"]
dropdownstring"United States"
yes_nobooleantrue
picture_choice (einfach)string"choice_id_abc123"
picture_choice (mehrfach)array<string>["choice_id_abc123", "choice_id_def456"]

Bei multiple_choice-Fragen ist der Wert ein einzelner String, wenn allowMultiple auf false steht, und ein String-Array, wenn allowMultiple auf true steht. Wählt die befragte Person die Option „Sonstiges", enthält das Array ihre Freitexteingabe als String.

Bewertungsfragen

FragetypWertetypBeispielWertebereich
ratingnumber41 bis steps (Standard 5)
opinion_scalenumber7min bis max
npsnumber90 bis 10

Datum und Uhrzeit

FragetypWertetypBeispiel
datestring"2025-03-15"

Das Format des Datums-Strings entspricht der dateFormat-Eigenschaft der Frage (Standard: YYYY-MM-DD).

Rechtliches und Hinweistexte

FragetypWertetypBeispiel
legalbooleantrue
statementstring"" (immer leer --- Hinweistexte erfassen keine Daten)

Ranking

FragetypWertetypBeispiel
rankingarray<string>["Speed", "Price", "Quality"]

Das Array spiegelt die von der befragten Person gewählte Reihenfolge wider, vom ersten bis zum letzten Platz.

Matrix

FragetypWertetypBeispiel
matrixobject{ "Speed": "Satisfied", "Price": "Neutral" }

Das Objekt ordnet jeder Zeilenbeschriftung die gewählte Spaltenbeschriftung zu.

Datei-Upload

FragetypWertetypBeispiel
file_uploadstring"https://storage.nueform.com/uploads/abc123.pdf"

Der Wert ist die URL der hochgeladenen Datei im NueForm-Speicher.

Unterschrift und Zeichnung

FragetypWertetypBeispiel
signaturestring"data:image/png;base64,iVBOR..."
drawingstring"data:image/png;base64,iVBOR..."

Beide liefern eine base64-codierte PNG-Data-URI des erfassten Bildes.

Aufnahme

FragetypWertetypBeispiel
recordingstring"https://storage.nueform.com/recordings/abc123.webm"

Der Wert ist die URL der hochgeladenen Aufnahmedatei.

Zusammengesetzte Fragen

Zusammengesetzte Fragetypen (contact_info, address, question_group, multi_question_page) erzeugen mehrere Antworteinträge im answers-Array --- einen pro Teilfeld. Jede Teilfeld-Antwort verwendet die eigene questionId des Teilfelds.

Eine contact_info-Frage könnte zum Beispiel Folgendes erzeugen:

json
[
  { "questionId": "first_name", "value": "Jane" },
  { "questionId": "last_name", "value": "Doe" },
  { "questionId": "email", "value": "jane@example.com" },
  { "questionId": "phone_number", "value": "+1 555-0100" },
  { "questionId": "company", "value": "Acme Inc." }
]

Identität der Befragten

Wenn ein Formular mit requireLogin: true konfiguriert ist, ist jede angenommene Übermittlung an einen angemeldeten Benutzer gebunden. Webhook-Payloads legen diese Identität den Formularbesitzern über das respondent-Feld offen. Bei allen anderen Übermittlungen ist das Feld null.

Schema

json
{
  "respondent": {
    "id": "507f1f77bcf86cd799439016",
    "name": "Jane Smith",
    "email": "jane@example.com",
    "auth_method": "sso"
  }
}
FeldTypBeschreibung
idstringDie Benutzer-ID der befragten Person.
namestringAnzeigename des Kontos der befragten Person.
emailstringE-Mail-Adresse des Kontos der befragten Person.
auth_methodstringEntweder "sso" oder "login". "sso" bedeutet, die befragte Person ist per Single Sign-On Mitglied des Formular-Teams; "login" steht für jede andere unterstützte Authentifizierungsmethode.

Wann respondent befüllt ist

respondent ist nur befüllt, wenn:

  1. das Formular requireLogin auf true gesetzt hat, und
  2. die übermittelnde Person sich vor dem Absenden angemeldet hat, weil das Formular es verlangte.

Wenn zusätzlich requireSsoLogin auf true steht, erreichen nur Benutzer den Absende-Schritt, die per SSO Mitglied des Formular-Teams sind — jedes befüllte respondent-Objekt hat dann auth_method: "sso".

Wann respondent null ist

Das Feld ist für berechenbares Parsen immer im JSON vorhanden und ist null, sobald einer dieser Punkte zutrifft:

  • Das Formular erforderte keinen Login (requireLogin war false).
  • Die übermittelnde Person war anonym.
  • Die Response wurde über den Einwilligungs-Flow nach dem Absenden gespeichert (die Aufforderung „Diese Antwort übernehmen"). Per Einwilligung gespeicherte Responses erscheinen in Webhook-Payloads niemals mit Identität — sie werden nur in der „Meine Antworten"-Ansicht der Person gespeichert und nicht an Webhook-Empfänger weitergegeben.

Webhook-Payloads legen die Identität nur für Befragte offen, die sich angemeldet haben, weil das Formular es verlangte. Identitäten aus der Einwilligung nach dem Absenden werden Webhooks bewusst vorenthalten, um die Grenze zwischen der Privatsphäre der Befragten und den Einblicken der Formularbesitzer zu wahren.

Quiz-Ergebnisse

Bei Formularen in einem Quiz-Modus (knowledge_quiz, lead_qualification oder match_quiz) enthält die gespeicherte Response ein quizResults-Objekt. Dieses Objekt ist nicht direkt in der Webhook-Payload enthalten, du kannst es aber über die Responses-API mit der responseId aus dem Webhook abrufen.

Das quizResults-Objekt hat folgende Struktur:

json
{
  "formMode": "knowledge_quiz",
  "score": 7,
  "correctAnswers": 7,
  "totalScorableQuestions": 10,
  "maxScore": 10,
  "matchedEndingId": "507f1f77bcf86cd799439099"
}
FeldTypBeschreibung
formModestringDer Quiz-Modus: knowledge_quiz, lead_qualification oder match_quiz
scorenumberDie Gesamtpunktzahl der befragten Person
correctAnswersnumberAnzahl der richtig beantworteten Fragen (nur Wissensquiz; 0 bei anderen Modi)
totalScorableQuestionsnumberGesamtzahl der Fragen, die in die Punktzahl einfließen
maxScorenumberDie maximal erreichbare Punktzahl
matchedEndingIdstring oder undefinedDie ID des Endscreens, der der befragten Person basierend auf ihrer Punktzahl angezeigt wurde
endingTalliesobject oder undefinedNur Match-Quiz: ordnet jeder Endscreen-ID ihren Zählerstand zu

Metadaten

Die gespeicherte Response kann außerdem ein metadata-Objekt mit versteckten Feldern enthalten, die über URL-Parameter übergeben wurden. Diese sind über die Responses-API verfügbar, aber nicht Teil der Webhook-Payload.

json
{
  "hiddenFields": {
    "utm_source": "google",
    "utm_campaign": "spring_sale",
    "user_id": "ext_12345"
  }
}

Um die Metadaten einer per Webhook zugestellten Response abzurufen, hole sie über die responseId:

bash
curl https://app.nueform.com/api/v1/forms/FORM_ID/responses/RESPONSE_ID \
  -H "Authorization: Bearer nf_your_api_key"

HTTP-Header

Jede Webhook-Anfrage enthält diese HTTP-Header:

HeaderWert
Content-Typeapplication/json
X-NueForm-SignatureHMAC-SHA256-Hex-Digest des rohen Anfrage-Bodys

Wie du die Signatur validierst, erfährst du unter Verifizierung.

Payload-Größe

Webhook-Payloads sind in der Regel klein (unter 10 KB). Die Größe hängt vor allem von der Anzahl der Fragen und der Länge der Textantworten ab. Datei-Upload-Antworten enthalten URLs (keine Dateiinhalte) und vergrößern die Payload daher kaum.

Nächste Schritte

Zuletzt aktualisiert: 20. Juli 2026