Skip to content

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.


To set up a webhook endpoint:

  1. Open your Lucid Forms Dashboard and select your form.
  2. Navigate to the Integrations tab in the sidebar.
  3. Scroll to Webhooks (available on the Pro Plan).
  4. Enter your public endpoint URL (e.g., https://api.yourdomain.com/webhooks/lucidforms).
  5. Click Enable Webhook and click Save.

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
}

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 payloads
app.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}`));

  • Success Response: Your server must respond with a 2xx HTTP status code (such as 200 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.