Form Submitted
trigger.typeform_submission
TriggerBusiness appsconnection requiredruns in-engine
Registers a webhook on the form at publish; one run per submission, with the answers flattened by field ref.
Start a run each time a Typeform form is submitted.
Connection
- Required
- Yes — the node will not save without one
- Auth type
- Bearer token
- Providers
- Typeform
- Secret shape
- the Typeform personal access token
- Resolved by
- config.connection_id, else node.connection_id
Configuration
1 field, 1 required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.
| Field | Type | Required | Default | Constraints | Example |
|---|---|---|---|---|---|
form_id The form's id — the code in its edit URL (admin.typeform.com/form/<form_id>/create), not the whole URL. | string | Yes | — | — | lT4Z3j |
Example configuration
Every value below is the contract’s own example or default — nothing invented.
{
"form_id": "lT4Z3j"
}Output
One shape.
submission
| Field | Type | Example |
|---|---|---|
event_id Typeform's own id for this delivery. Used as the run's idempotency key, so a redelivery cannot start a second run. | string | 01HZ8Q2E9J5V7K3M4N6P8R0T2W |
event_type Typeform's event name; today always form_response. | string | — |
form_id The form that was submitted. | string | lT4Z3j |
form_title The form's title, from the response's own definition. | string | — |
token Typeform's id for THIS submission (stable across redeliveries). Use it as the natural key when writing the submission to a sheet, CRM or database. | string | — |
submitted_at When the respondent submitted, ISO-8601 UTC. | string | — |
landed_at When the respondent opened the form, ISO-8601 UTC. | string | — |
hidden Typeform hidden fields — the query-string values passed into the form (utm_source, user_id, …). | object | — |
answers Every answer flattened to one object, keyed by the field's ref (else its id, else a slug of the question title). Read it as {{ $json.answers.email }}. A duplicated ref keeps the first answer and suffixes the rest: email, email__2. | object | — |
form_response Typeform's raw form_response envelope, verbatim — definition, answers array and all. Nothing the provider sent is dropped by the flattening. | object | — |
{
"answers": {},
"event_id": "01HZ8Q2E9J5V7K3M4N6P8R0T2W",
"event_type": "",
"form_id": "lT4Z3j",
"form_response": {},
"form_title": "",
"hidden": {},
"landed_at": "",
"submitted_at": "",
"token": ""
}Notes
- Publishing registers the webhook on the form; unpublishing or disabling the workflow deletes it at Typeform.
- Every delivery is verified against Typeform-Signature (base64 HMAC-SHA256 of the raw body) before any run starts.
- Runs are idempotent per event_id — Typeform retries, and a retry cannot start a second run.
- answers is the flattened view keyed by field ref; form_response is Typeform's raw envelope if you need something the flattening does not carry.
Related Typeform nodes
See Form Submitted run in a workflow.
In a technical demo we add the Typeform connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.