Headless Forms

Notifications

Headless Forms can notify you the moment a submission arrives. Notifications are configured per form and support multiple channels simultaneously.

Channels

Email

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-256 header containing an HMAC-SHA256 hash of the payload.
  • Headers: Each request includes X-Timestamp and a User-Agent header.

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:

  1. Navigate to your form's edit page.
  2. Add a notification channel (Email, Webhook, Telegram, Slack, or Discord).
  3. Configure the channel-specific settings.
  4. 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.