Notifications
Headless Forms can notify you the moment a submission arrives. Notifications are configured per form and support multiple channels simultaneously.
Channels
Send formatted email notifications to one or more recipients per form.
- Configure the recipient email address and display name in the dashboard.
- Multiple email notification channels can be added to a single form for different recipients.
Webhooks
Forward submission data to any URL as a JSON POST request.
- Payload: JSON body containing the event type, submission data, and timestamp.
- Signature verification: If a secret is configured, every request includes an
X-Signature-256header containing an HMAC-SHA256 hash of the payload. - Headers: Each request includes
X-Timestampand aUser-Agentheader.
Verifying Webhook Signatures
If you configured a webhook secret, verify the signature to ensure the payload is authentic:
$payload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_SIGNATURE_256'] ?? '';
$expected = hash_hmac('sha256', $payload, $yourWebhookSecret);
if (! hash_equals($expected, $signature)) {
http_response_code(403);
exit('Invalid signature');
}
import { createHmac } from 'crypto';
const payload = JSON.stringify(requestBody);
const expected = createHmac('sha256', yourWebhookSecret)
.update(payload)
.digest('hex');
if (signature !== expected) {
throw new Error('Invalid signature');
}
Telegram
Receive instant messages in a Telegram chat when submissions arrive.
- Connect your Telegram account via OAuth in the dashboard.
Slack
Receive rich notifications in a Slack channel using incoming webhooks.
- Setup: In your Slack workspace, go to Apps > Incoming Webhooks, create a new webhook, and copy the URL.
- Payload: Messages use Slack's Block Kit format with a header for the form name and sections for submission fields (first 5 fields).
Discord
Receive embed notifications in a Discord channel using webhooks.
- Setup: In your Discord server, go to Channel Settings > Integrations > Webhooks, create a new webhook, and copy the URL.
- Payload: Messages use Discord's embed format with the form name as the title and submission fields displayed inline (first 5 fields).
Configuration
Each notification channel is configured independently in the dashboard:
- Navigate to your form's edit page.
- Add a notification channel (Email, Webhook, Telegram, Slack, or Discord).
- Configure the channel-specific settings.
- Enable or disable individual channels without removing them.
Asynchronous Delivery
Notifications are processed in the background. The API returns immediately after a submission is accepted, and notifications are delivered shortly after.