Form to webhook: send every submission as signed JSON.
splitforms is a hosted form backend: set your HTML form's action to https://splitforms.com/api/submit and every submission is stored in your dashboard, emailed to you, and — on Starter and above — forwarded as an HMAC-signed JSON POST to any webhook URL you add. One endpoint routes to Slack, Discord, Zapier, Make, n8n, Google Sheets, Notion, Airtable, HubSpot, or your own API, no server code required.
Free stores every submission + emails you, no card needed. Webhook forwarding unlocks on Starter, $1/mo.

The form stays simple. The routing lives in the dashboard.
Keep your website HTML clean. Add, rotate, and test webhook destinations from splitforms without redeploying the site.
<form action="https://splitforms.com/api/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
<input name="email" type="email" required />
<textarea name="message" required></textarea>
<!-- honeypot: must stay empty -->
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" />
<button type="submit">Send</button>
</form>
<!-- In the splitforms dashboard:
Webhooks tab -> Add URL -> https://your-app.com/webhooks/contact
(Starter plan and above) -->What arrives at your webhook
A single HTTP POST with a JSON body — the submitted fields become the payload's keys, no fixed schema to map. The X-Splitforms-Signature header carries an HMAC-SHA256 signature, prefixed sha256=, so you can verify the request actually came from splitforms before trusting it. Delivery is a single attempt with an 8-second timeout — splitforms doesn't retry automatically, but the submission is always safe in your dashboard and inbox either way.
POST https://your-app.com/webhooks/contact HTTP/1.1
Content-Type: application/json
X-Splitforms-Signature: sha256=3f29a1c8e7...
{
"email": "visitor@example.com",
"message": "Hi, I'd like a quote.",
"access_key": "YOUR_ACCESS_KEY"
}How to send an HTML form to a webhook
- 01
Get a free access key
Sign up at splitforms.com and create a form. Your access key appears in the dashboard instantly — no credit card required.
- 02
Point your HTML form at splitforms
Set action="https://splitforms.com/api/submit" and method="POST" on your existing form. No JavaScript required for the base submission.
- 03
Upgrade to Starter for webhook delivery
Free stores every submission and emails you. Webhook forwarding unlocks on Starter ($1/mo, 1,000 submissions) — upgrade from the dashboard in one click.
- 04
Add your webhook URL
Open the Webhooks tab on your form and paste the destination URL — Slack, Discord, your own API, or a Zapier/Make/n8n catch-hook.
- 05
Send a test submission
Submit the form once. Your endpoint should receive a POST with a JSON body and an X-Splitforms-Signature header within seconds.
- 06
Verify the signature
Compute HMAC-SHA256 of the raw request body with your webhook secret and compare it to the sha256=-prefixed header before trusting the payload.
Send form submissions to Slack, Sheets, Notion, and Zapier
Every destination below reads the same signed webhook payload — pick one, several, or wire your own API.
Slack
Send every lead to a sales or support channel.
Google Sheets
Append every submission as a spreadsheet row.
Notion
Create a page in a database for each lead.
Zapier
Use Webhooks by Zapier as universal glue.
Make
Trigger low-cost automation scenarios instantly.
n8n
Run self-hosted workflows from signed webhooks.
Form-to-webhook questions
How do I send an HTML form to a webhook?
Set your form's action to https://splitforms.com/api/submit and add a hidden access_key input. splitforms receives the POST, stores it in your dashboard, and — on Starter and above — forwards the submission as a signed JSON POST to any webhook URL you add under the Webhooks tab.
Can I send the same form submission to multiple webhooks?
Yes. Add more than one webhook URL to the same form. Each destination gets its own delivery attempt, so a Slack outage doesn't stop your other integrations or the copy stored in your dashboard.
Are splitforms webhooks signed?
Yes. Every outbound webhook includes an HMAC-SHA256 signature in the X-Splitforms-Signature header, prefixed sha256=, so your receiving endpoint can verify the payload really came from splitforms.
What happens if my webhook endpoint is down?
splitforms sends each webhook once, with an 8-second timeout, and does not automatically retry a failed delivery. The submission is still stored in your dashboard and emailed to you — email notifications are included on every plan, including Free — so a webhook failure never means a lost lead.
Do webhooks work on the Free plan?
No. Webhook delivery starts on the Starter plan ($1/mo, 1,000 submissions/mo). Free (500 submissions/month) still includes unlimited forms, email notifications, spam filtering, and dashboard storage — upgrade only when you're ready to route submissions automatically.
What does the webhook payload look like?
Your endpoint receives an HTTP POST with a JSON body containing whatever fields the visitor submitted, plus the X-Splitforms-Signature header for verification. There's no separate schema to learn — the form's own fields become the payload's keys.
Can I send form submissions to Zapier, Make, or n8n?
Yes. splitforms doesn't have a native Zapier app, but Zapier's "Webhooks by Zapier" trigger, Make's webhook module, and n8n's Webhook node all accept a splitforms webhook URL directly — paste the catch-hook URL into the Webhooks tab like any other destination.
Will spam submissions reach my webhook?
Rarely. Every submission passes a honeypot field, a time-trap check, and server-side content heuristics before it's stored or forwarded, and splitforms rate-limits incoming submissions to 6 per minute per IP. You can also turn on reCAPTCHA v2 with your own secret for extra filtering.