Integration

Website form to webhook: signed JSON for every submission

Formgong team ·

Point a form at any HTTPS URL. Each accepted submission arrives as a JSON POST you can verify, retry and inspect, on the free plan too.

Short answer: Add an HTTPS URL in Form settings and every accepted submission is POSTed to it as JSON, signed with HMAC-SHA256 in the X-Signature header. Failed deliveries are retried 5 times over about 42 minutes, Send test fires a sample event, and Recent deliveries shows every answer. The free plan has three webhooks per form; Pro has five.

What your endpoint receives

  • A POST with Content-Type: application/json and User-Agent: Formgong-Webhook.
  • X-Formgong-Event says what happened: submission.created, or webhook.test for the test button.
  • X-Signature: sha256=<hex> is an HMAC-SHA256 of the raw body with your signing secret, so your code can reject anything Formgong did not send.
  • The body has the form id and name, the submission id, time and page, every field, and is_spam. Spam and held submissions are not sent at all.
  • Your endpoint has 10 seconds to answer with a 2xx status.

Webhooks on other form backends

We read each service's own pricing and docs on 12.10.2026. Where their docs say nothing, the table says so.

Webhook delivery in form backends
FormgongFormspreeWeb3FormsBasinForminitFormcarryFormspark
On the free planYes, 1 per formNo, from Professional at $30 a monthNo, Pro plan onlyNo, from Growth at $24.17 a month billed yearlyNo, from ProNo, paid plansYes
SignedHMAC-SHA256, X-SignatureHMAC-SHA256Not in their docsHMAC-SHA256, on Growth and upHMAC-SHA256HMAC-SHA256No, their docs say they do not sign
Retries5 tries over about 42 minutesNot in their docsAutomatic; count not statedUp to 15 times over 24 to 28 hoursExponential backoff; count not statedFor up to 3 daysNot in their docs
Test buttonYes, Send testNot in their docsSend a test entry yourselfNot in their docsYesNot in their docsSend a test entry yourself
Delivery logYes, Recent deliveriesNot in their docsNoYes, with re-fireYesYes, through their APINot in their docs
Webhooks per form3 on Free, 5 on ProNot in their docsOne URLNot in their docsNot in their docsUp to 10One URL

Two services do better on one row each. Basin keeps retrying for a day and Formcarry for three, against our 42 minutes; Formcarry also allows 10 webhooks per form. None of the others puts a signed webhook with retries on its free plan.

Add a webhook

  1. Open My forms, then your form, then Form settings. If the Webhook tab is hidden, click Open expert mode.
  2. Paste your HTTPS URL and click Add webhook. The form's signing secret is under Signing secret in the same tab.
  3. Click Send test. Your endpoint receives a webhook.test event, and Recent deliveries shows the answer.
  4. Send the form from your site. Each accepted submission arrives as a signed submission.created POST.

The URL must use HTTPS on port 443 and point to a public host, with no password inside it, and be at most 2,048 characters. A Slack Incoming Webhook or a Discord channel webhook URL gets a formatted chat message instead of JSON; see Slack and Discord.

Check the signature

Compute HMAC-SHA256 of the raw request body with your signing secret and compare it with the hex after sha256= in X-Signature, using a constant-time comparison. Read the body as text before parsing it, because re-serialised JSON will not match. Ready-made checks for Node.js, Make, n8n and Zapier are in the webhook reference and the signature guide.

When your endpoint is down

Formgong tries 5 times, waiting 30 seconds, 2 minutes, 10 minutes and 30 minutes between tries. Recent deliveries shows each attempt with its status. After the last failed try the owner gets one email, at most once a day per form and channel. The submission stays in the inbox and is emailed to you on every plan, so nothing is lost while your endpoint is fixed.

For no-code tools, the same JSON feeds Make, n8n and Zapier.

Questions

Are form webhooks free?

Yes. The free plan has three webhooks per form, signed and retried like on paid plans. Pro has five per form.

How do I know a webhook came from Formgong?

Each request carries X-Signature: sha256=<hex>, an HMAC-SHA256 of the raw body with your signing secret. Recompute it and compare before you trust the data.

What happens if my endpoint is down?

Formgong retries 5 times over about 42 minutes and logs every attempt. After the last failure the owner gets one email. The submission stays in the inbox.

Can I send the form to Slack or Discord with a webhook?

Yes. Paste a Slack Incoming Webhook or a Discord channel webhook URL and Formgong sends a formatted chat message instead of JSON.

Are spam submissions sent to the webhook?

No. Spam and held submissions stay in the inbox and are not delivered.

Sources

Checked on 12.10.2026 against these public pages: Formspree: plans, Formspree Help: webhooks, Web3Forms docs: webhooks, Basin docs: webhooks, Basin: pricing, Forminit docs: webhooks, Formcarry API: add a webhook, Formspark docs: webhooks, Formgong webhook reference.

← Formgong