Webhook integration

Send Form Responses to Any URL

Edesy Forms sends each new response as JSON to the endpoint you choose. Add custom headers, send a test event and check recent deliveries. Included on the Free plan.

How Edesy Forms webhooks work

Simple, predictable delivery of each new response

One request per response

Each new response is sent to your URL as soon as it is saved. Nothing to poll.

JSON body

Form details, answers keyed by question ID and source details in one JSON object.

Method and headers

POST by default, or PUT or PATCH. Add custom headers such as an API key or bearer token.

Test events

Send a sample request from the app to check your endpoint before going live.

Recent deliveries

See the last 20 attempts with status, time, duration and any error message.

All forms or some

Apply one webhook to all your forms, or connect it to the forms you choose.

Set up a webhook

Five steps in the Edesy Forms app

Add a webhook
In Integrations, add a new integration and choose Webhook
Paste your URL
Enter the https:// endpoint that should receive responses
Method and headers
Keep POST or pick PUT or PATCH, and add headers if needed
Pick forms
Choose all your forms or only selected ones
5
Test and go live
Send a test event, then submit the form once yourself

What your endpoint receives

Each request has the header Content-Type: application/json plus any custom headers you added. The body looks like this (values are illustrative):

{
  "formId": "form id",
  "formTitle": "Contact us",
  "responseId": "response id",
  "submissionId": "readable submission reference",
  "submittedAt": "2026-09-17T10:30:00.000Z",
  "responses": {
    "<question id 1>": "Priya Sharma",
    "<question id 2>": "[email protected]",
    "<question id 3>": "I would like a callback"
  },
  "metadata": {
    "userAgent": "Mozilla/5.0 ...",
    "ipAddress": "203.0.113.10",
    "referrer": "https://example.com/contact",
    "utm": { "utm_source": "google", "utm_campaign": "diwali" },
    "embedOrigin": "https://example.com"
  }
}
  • responses holds only the questions that were answered, keyed by question ID. Map the IDs to your own field names once, after you submit a real test response.
  • utm and embedOrigin are included only when that source information was recorded for the response, for example when the form was opened from an embed or a link with UTM tags.
  • The body includes the respondent's IP address, so treat stored requests as personal data.

A minimal receiver

This Node.js (Express) example checks a secret header, saves the lead and replies with 200 straight away:

import express from "express";

const app = express();
app.use(express.json());

app.post("/hooks/edesy-forms", (req, res) => {
  if (req.get("X-Api-Key") !== process.env.FORMS_WEBHOOK_KEY) {
    return res.sendStatus(401);
  }

  const { formTitle, responseId, submittedAt, responses, metadata } = req.body;

  // Reply first; anything outside 2xx is logged as a failed delivery.
  res.sendStatus(200);

  saveLead({ formTitle, responseId, submittedAt, responses, source: metadata?.utm });
});

app.listen(3000);

In the webhook settings, add the header as JSON: {"X-Api-Key": "your-long-random-secret"}.

To see the exact body before writing any code, point the webhook at a request inspector such as webhook.site, then submit your form once.

Why use a webhook

Full control over what happens to each response

For developers

  • Plain JSON

    Parse it in Node, Python, PHP, Go or anything else

  • Your logic

    Decide what happens to each response

  • Visible failures

    Errors show up in Recent deliveries

  • Non-blocking

    A failing endpoint never breaks the form

For security

  • Custom headers

    Send a secret your endpoint can check

  • HTTPS endpoints

    Use an https:// URL for encryption in transit

  • Scoped to forms

    Only the forms you choose send to the URL

  • Test first

    Check your endpoint with a sample request

Common uses

Where teams send their form responses

Your own backend

Validate, enrich or store responses with your own logic, in any language that can accept an HTTP request.

Your database

Write each response to Postgres, MySQL or any data store through a small endpoint you control.

Edesy CRM

Send new leads into Edesy CRM so your sales team can pick them up right away.

WhatsApp follow-up

Trigger a WhatsApp message through WAFlow when someone fills in your form.

AI voice call

Start a call from the Edesy AI voice agent minutes after a lead submits.

Internal alerts

Pass responses to an internal tool, ticket queue or chat bot that accepts webhooks.

Webhook integration FAQ

Common questions about Edesy Forms webhooks

Prefer no code?

Use Zapier to pass responses to other apps, or see every integration

Start sending responses to your stack

Sign up free, build a form and add a webhook in a few minutes.