Every submission to a form with a configured Webhook URL fires a single POST request to that URL with a JSON body.
Where to set the URL
Open the form → Settings (gear icon) → Webhook URL. Paste any HTTPS endpoint that accepts POST requests.
Top-level fields
- event — always
response.created - formId — the form's unique ID (UUID)
- formTitle — the form's title at the time the response was submitted
- responseId — the new response's ID (UUID)
- submittedAt — ISO 8601 timestamp in UTC
- answers — an array of answer objects (see below)
Answer objects
Each entry in answers represents one block the respondent answered:
- blockId — the block's UUID, stable across edits to the form
- questionText — the block's question label at the time of submission
- type — one of
SHORT_TEXT,LONG_TEXT,MULTIPLE_CHOICE,SINGLE_SELECT,DROPDOWN,RATING,YES_NO,EMAIL,PHONE,FILE_UPLOAD,CHECKBOX - value — the typed answer (a string, number, array of strings, or array of file URLs depending on the block type)
Example payload
{
"event": "response.created",
"formId": "8a4f...",
"formTitle": "Contact form",
"responseId": "c2e1...",
"submittedAt": "2026-05-31T14:23:11.000Z",
"answers": [
{ "blockId": "b1...", "questionText": "Your name", "type": "SHORT_TEXT", "value": "Alex" },
{ "blockId": "b2...", "questionText": "Email", "type": "EMAIL", "value": "alex@example.com" }
]
}
Delivery semantics
- Webhooks fire asynchronously — submitting respondents see a thank-you screen the moment the response is saved, regardless of webhook success.
- The request is fire-and-forget — there's no automatic retry on failure.
- Headers:
Content-Type: application/json,User-Agent: NodumForms-Webhook/1. - No signing header yet (on the roadmap).
Testing
Paste your URL into webhook.site to capture the schema without writing any code. Then move to your real endpoint once you've confirmed the shape.