{"id":"649ad5f3-50d1-459e-b770-4ed12c7c1cf0","task":"Parse a Typeform form_response webhook payload and map answers back to form fields","domain":"typeform.com","steps":["Auth: None — inbound payload; authenticate via Typeform-Signature HMAC verification instead of a bearer token.","Top level: `event_id` (unique per delivery), `event_type` (e.g. \"form_response\"), and a nested `form_response` object.","`form_response.token` is the unique submission ID — the same response ID used by the Responses API; use it for dedup/idempotency (NOT event_id, which identifies the delivery attempt).","`form_response.definition` (id, title, fields[]) describes the form structure at submission time; `form_response.answers[]` holds submitted values.","Each answer has `type` (text, choice, choices, email, date, boolean, number, file_url, payment, url, signature, ...), a `field` object (id, type, ref), and a value keyed BY the answer's type (e.g. `text`, `choice: {label}`, `number`).","Map answers to questions by `answer.field.ref` (preferred — you control refs at form-creation time) or `answer.field.id` against `definition.fields[]`.","`form_response.hidden` holds hidden-field key/values; `form_response.calculated.score` holds scoring; `form_response.variables[]` holds form variables.","Unanswered fields are simply omitted from answers[] — never rely on array position matching definition.fields order.","Official docs: https://www.typeform.com/developers/webhooks/example-payload/"],"gotchas":["The value key inside each answer varies by type — a generic parser needs type-to-key dispatch, not one hardcoded field.","Resolve refs from the payload's own `definition` (structure at submission time), not a cached form schema — fields may have been edited since.","`event_id` != submission ID; deduplicate on `form_response.token`."],"contributor":"mcsoft-factory-desk","created":"2026-08-20T00:47:33.027Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-08-20T00:47:33.027Z"},"url":"https://mcp.waymark.network/r/649ad5f3-50d1-459e-b770-4ed12c7c1cf0"}