← Back to Blog
Tutorial typeform webhooks tutorial integration forms

How to Receive Typeform Webhooks Reliably

Receive Typeform submissions as webhooks — verify the Typeform-Signature, flatten the answers, route to Slack/CRM/your API, and replay failures — no backend required.

JW

Jason Warner

August 5, 2026

How to Receive Typeform Webhooks Reliably

Typeform can send each completed submission to a URL the moment it's finished, which is far better than polling its API. But a raw Typeform payload is a deeply nested form_response object with an answers array — and Typeform expects your endpoint to respond quickly and correctly every time, or it'll consider the delivery failed. This guide covers receiving, verifying, reshaping, and routing Typeform webhooks using Bluejay Relay, without standing up a server.

What You'll Build

Typeform → Bluejay Relay (verify + flatten + route) → your API, Slack, a CRM, or a spreadsheet.

1. Create the Webhook Endpoint

In Bluejay Relay, create a webhook named Typeform Submissions. You'll get a unique capture URL:

https://in.bluejayrelay.com/api/webhooks/{your-token}

Every submission is logged in full the instant it lands, so you always have the raw record even while you're still setting up routing.

2. Connect It in Typeform

In your Typeform, open Connect → Webhooks, add a webhook, and paste your Bluejay capture URL. Add a secret in the same panel — you'll use it to verify authenticity in the next step. Send a test delivery; you'll see it appear in your Relay log immediately.

3. Verify the Typeform-Signature

When you set a secret, Typeform signs each request with an HMAC-SHA256 of the raw body, base64-encoded, in the Typeform-Signature header (prefixed sha256=). Enable signature verification for this webhook in Relay and paste the same secret. Relay recomputes the HMAC and does a timing-safe comparison, rejecting anything that doesn't match — so nobody can forge a submission by POSTing to your URL.

If the secret is missing or wrong, the request is refused, not forwarded downstream.

4. Flatten the Answers

This is where a receiving layer earns its keep. Typeform's answers array is awkward to consume directly — each answer is typed (text, email, choice, ...) and keyed by field. With Relay's field mapping you can pull the specific answers you care about into a clean, flat payload:

{ "email": "...", "name": "...", "plan": "..." }

Map once, and every future submission arrives in exactly that shape. You can produce a different shape per destination, too.

5. Route to Wherever It Needs to Go

Add destinations:

  • Your application API — a slim JSON body your handler already understands.
  • Slack — "New signup: {{ email }}".
  • A CRM or spreadsheet — via their inbound endpoints.

A single submission fans out to all of them, each transformed independently.

6. Reliability Without Running a Queue

If a destination is unavailable, Relay retries with backoff and dead-letters anything that keeps failing. Recovered? Replay the missed submissions individually or in bulk by date range. Combined with the permanent raw log, that means a broken deploy on your side never costs you a lead — you just replay once you're back up.

Typeform → Forms, or Typeform → Relay?

If you're choosing a form tool from scratch, Bluejay Forms gives you hosted forms with storage and spam filtering built in. But if you're committed to Typeform for its UX and just need its submissions to flow reliably into your stack, Relay is the receiving and routing layer that makes that dependable.


Receive your first Typeform webhook free on Bluejay Relay — 10,000 events/month on the free tier, no card required.

#typeform #webhooks #tutorial #integration #forms

Build more reliable webhook workflows.

Capture, transform, and retry webhooks with full observability. Free to start, no credit card.