HTML FormsNotifications & integrations
Webhooks
POST every submission as JSON to your own endpoint, Zapier, Make or n8n.
A webhook sends each new submission to a URL you choose. Use it to trigger automations in Zapier, Make or n8n, or to save submissions in your own backend.
Starter, Pro and Business plans
Webhooks are available on all paid plans.
Setup
- Open your form → Integrations → Webhooks.
- Enter your endpoint URL and a name, and choose the HTTP method.
- Optionally add custom headers, e.g. an
Authorizationtoken your endpoint checks. - Send a test submission and check your endpoint receives it.
You can add several webhooks to one form; each one receives every new submission. AI assistants can also add and remove webhooks with the MCP add_webhook and remove_webhook tools.
Options
| Option | Values |
|---|---|
| URL | Any public https:// or http:// address. Private and internal addresses are rejected. |
| Method | POST (default), PUT, PATCH or GET. GET sends no body. |
| Headers | Any custom headers, e.g. Authorization: Bearer … or an API key your endpoint expects. |
| Events | submission.created: sent once for each new, non-spam submission. |
Payload
{
"submissionId": "7f6c2b8e-…",
"formId": "0d1a4f3c-…",
"data": {
"name": "Jane Smith",
"email": "jane@example.com",
"message": "Hi! Could we book a demo next week?"
},
"fromName": "Jane Smith",
"fromEmail": "jane@example.com",
"submittedAt": "2026-11-08T10:24:31.000Z"
}Requests are sent with Content-Type: application/json and User-Agent: Formclick-Webhook/1.0, plus any custom headers you set.
Receiving it
app.post('/formclick', express.json(), (req, res) => {
if (req.get('Authorization') !== 'Bearer ' + process.env.WEBHOOK_TOKEN) {
return res.sendStatus(401);
}
const { submissionId, data } = req.body;
console.log('New submission', submissionId, data.email);
res.sendStatus(200);
});Respond with any
2xx status quickly. Failed deliveries are retried automatically.Still need help? Contact support or email support@formclick.io.