Webhooks
Webhooks allow you to connect Lucid Forms to custom server backends, database pipelines, or internal software. Every time a clean form submission is received, Lucid Forms dispatches an HTTP POST request containing the submission payload in JSON format to your configured endpoint URL.
Configuring Webhooks
Section titled “Configuring Webhooks”To set up a webhook endpoint:
- Open your Lucid Forms Dashboard and select your form.
- Navigate to the Integrations tab in the sidebar.
- Scroll to Webhooks (available on the Pro Plan).
- Enter your public endpoint URL (e.g.,
https://api.yourdomain.com/webhooks/lucidforms). - Click Enable Webhook and click Save.
Webhook JSON Payload Schema
Section titled “Webhook JSON Payload Schema”The webhook sends an HTTP POST request with a header of Content-Type: application/json. Below is an example payload representing a form submission:
{ "event": "submission.created", "form_id": "frm_72j9aK9x38s", "form_name": "Landing Page Contact Form", "submission_id": "sub_92kLp823mX", "submitted_at": "2026-05-31T05:07:00.000Z", "data": { "name": "Jane Doe", "email": "jane@example.com", "message": "Hi, I'd like a custom demo of your product.", "phone": "+1 (555) 019-2834" }, "spam": false, "score": 0.02}Receiving Webhooks (Node.js & Express)
Section titled “Receiving Webhooks (Node.js & Express)”Here is a simple example of how to handle the webhook POST request on a Node.js/Express backend server:
const express = require('express');const app = express();
// Parse JSON payloadsapp.use(express.json());
app.post('/webhooks/lucidforms', (req, res) => { const { event, form_id, submission_id, data } = req.body;
// 1. Verify the event type if (event !== 'submission.created') { return res.status(400).send('Unsupported event type'); }
console.log(`Received submission ${submission_id} for form ${form_id}`); console.log('Submission data:', data);
// 2. Perform custom database saving or email notifications here // e.g., db.users.create({ name: data.name, email: data.email });
// 3. Always return a 200 OK status to let Lucid Forms know the webhook succeeded res.status(200).send('Webhook processed successfully');});
const PORT = process.env.PORT || 3000;app.listen(PORT, () => console.log(`Server listening on port ${PORT}`));Retries & Security
Section titled “Retries & Security”- Success Response: Your server must respond with a
2xxHTTP status code (such as200 OK) within 10 seconds. If your endpoint responds with a 4xx or 5xx code or times out, we mark the delivery as failed. - Failures: Failed webhooks are retried up to 3 times with exponential backoff before being disabled.