Qwenvo

Form Webhooks: How to Send Submissions to Your Own Server

By the Qwenvo team · · 3 min read

A form webhook posts each new submission to a URL you control as JSON. In Qwenvo, open the form's Integrations tab, choose Webhooks and add an https:// URL. Every delivery is signed with an HMAC in the x-qwenvo-signature header.

What you can do with it

  • Create a record in your own database or CRM.
  • Start a workflow: send a welcome email, open a ticket, post a message.
  • Check values on your server, for example recalculating a price before you charge.
  • Fan out to tools Qwenvo has no direct integration with.

If you do not write code, use Zapier or Make, or the Google Sheets, Notion, Airtable, Slack, Discord and Linear integrations on the same tab.

Add a webhook

  1. Build the endpoint first. It needs a public https:// URL that accepts POST requests with a JSON body.
  2. Open the form's Integrations tab and choose Webhooks.
  3. Add your endpoint URL.
  4. Submit a test response on the live form.
  5. Open the webhook's list of deliveries to see what was sent and what your server answered.

What the payload looks like

This is an illustrative example of the idea, not the exact schema. The real field names and the full payload are documented on the developers page. One detail is fixed: hidden fields arrive under hidden.

// Example only - see /developers for the real payload
{
  "form": "FORM_ID",
  "answers": { "Email": "ada@example.com" },
  "hidden": { "utm_source": "newsletter" }
}

Verify the signature

Anyone can post to a public URL, so check that a request really came from Qwenvo. Each delivery carries an HMAC signature in the x-qwenvo-signature header. Compute the same signature on your server with your secret and reject requests that do not match. The verification code is on /developers; do not skip this step.

Retries and replays

Failed deliveries are retried five times with backoff. Deliveries and your server's responses are listed under the webhook, so you can see what failed and replay it after you fix the problem. Because retries can arrive more than once, make your handler safe to run twice: for example, ignore a submission you already stored.

Good practice

  • Respond quickly. Acknowledge first, do slow work afterwards.
  • Return a success status only when you have really stored the data.
  • Log what you receive while you set it up, then remove sensitive data from the logs.
  • Use a test endpoint before you point a live form at production.
  • Keep your secret out of the front end and out of public code.

Webhooks or the API?

A webhook pushes new submissions to you. The REST API (with an API key from Settings) lets you pull data when you want it: forms, submissions and webhooks. Many setups use both. See webhooks, the API help and the developers page. There is also an MCP server so an AI assistant can list forms, read a form, list submissions and create a form from a prompt.

Mistakes to avoid

  • Skipping signature checks. Anyone could fake a request.
  • Trusting hidden fields. They come from the link and can be edited, so validate server-side.
  • Slow handlers. A timeout looks like a failure and triggers a retry.
  • Using an `http://` URL. Webhook URLs must be https://.

An honest note: webhooks are a developer tool. If you just want responses in a spreadsheet or Slack, the built-in integrations are faster to set up, as in form to Google Sheets.

A testing checklist

  1. Point the webhook at a temporary endpoint from a request-inspector service to see a real payload first.
  2. Submit one response with every hidden field filled, and one with them empty.
  3. Check that your handler stores the data and answers with a success status.
  4. Break the endpoint on purpose and watch the failed delivery and its retries in the list.
  5. Fix it, replay the delivery, and confirm you did not store the submission twice.
  6. Only then switch the URL to your production endpoint.

Questions people ask

What is a form webhook?

A request that the form sends to your URL every time someone submits, with the answers as JSON.

How do I know a request is genuine?

Check the HMAC signature in the x-qwenvo-signature header.

What if my server is down?

Qwenvo retries five times with backoff, and you can replay a failed delivery from the list.

Is it free?

Yes, for every account, with no plan to unlock it.

Every feature, $0, no card.

Set up a webhook free