Static Forms - Secure form backend and form endpoint for contact formsStatic Forms - Secure form backend and form endpoint for contact forms
  • Home
  • Features
  • Docs
  • Blog
  • Pricing
Register
  • Home
  • Features
  • Docs
  • Blog
  • Pricing
Documentation

Learn how to use Static Forms

  • Introduction
  • Quick Start
  • Basic Setup
  • How It Works
  • Form Basics
  • API Key
  • Redirects
  • Overview
  • Honeypot Field
  • reCAPTCHA
  • Cloudflare Turnstile
  • hCaptcha
  • ALTCHA
  • Overview
  • Application Forms
  • Form Submissions
  • Webhooks
  • Auto Responders
  • Custom Email Templates
  • AI Reply
  • CC Emails
  • Branding & Custom Domain
  • File Uploads
  • Domain Restriction
  • Custom Subjects
  • Reply-To Address
  • Overview
  • Slack
  • Discord
  • Make
  • n8n
  • Google Sheets
  • Notion
  • Airtable
  • Overview
  • React
  • Next.js
  • Vue.js
  • Angular
  • Svelte
  • Astro
  • Plain HTML
  • Netlify
  • Vercel
  • Cloudflare Pages
  • GitHub Pages
  • WordPress
  • Webflow
  • Wix
  • Complete Reference
  • Account Settings
  • Pricing Plans
  • Overage Billing
  • Common Issues
  • Debugging
  • CORS Issues
  • Email Delivery
  • FAQ
  • Get Support
  • Changelog
Support
Advanced

Webhooks

Receive real-time notifications when someone submits your form

Webhooks allow you to send form submission data to any URL in real-time. This enables you to integrate Static Forms with thousands of services like Slack, Discord, Zapier, Make (Integromat), n8n, or your own custom applications.

Paid Feature

Webhooks are available on paid plans (Pro or Advanced). View pricing to unlock this feature.

How Webhooks Work

When a form is submitted, Static Forms sends an HTTP POST request to your webhook URL with the form data. Your endpoint receives the data in real-time and can process it however you want.

  1. 1User submits your form
  2. 2Static Forms processes the submission
  3. 3We send a POST request to your webhook URL
  4. 4Your endpoint receives and processes the data

Setting Up a Webhook

To configure webhooks for your account:

  1. Log in to your dashboard
  2. Navigate to Settings → Webhooks
  3. Click Add Webhook
  4. Enter your webhook URL
  5. Click Save

HTTPS Recommended

HTTPS is strongly recommended for security. HTTP URLs are supported but should be used only in trusted environments.

Webhook Payload

When a form is submitted, we send a POST request with the following JSON payload:

webhook-payload.json

Payload Fields

FieldTypeDescription
eventstringEvent name (e.g., form.submitted)
timestampnumberUnix timestamp (seconds)
dataobjectSubmission details (see below)
data.submissionIdstringUnique submission ID
data.formDataobjectAll form fields submitted by the user
data.apiKeystringAPI key associated with the submission
data.recipientEmailstringEmail that receives the submission
data.replyTostringReply-to email (when available)
data.attachmentsarrayFile attachment metadata (if any)

Webhook Security

We recommend verifying webhook requests to ensure they're coming from Static Forms. You can do this by:

  • Checking data.apiKey in the payload matches your expected key
  • Using a secret token in your webhook URL (e.g., https://yoursite.com/webhook?token=SECRET)
  • Requiring a custom header or bearer token on your endpoint

Response & Retry Logic

Your webhook endpoint should respond with a 2xx status code (like 200 or 204) to indicate successful receipt. Static Forms delivers webhooks with retries:

  • Timeout: 10 seconds per attempt
  • Retries: Up to 3 attempts with exponential backoff
  • Idempotency: We send an Idempotency-Key header using staticforms:{event}:{submissionId}
  • Failure Scope: Downstream webhook failures do not fail the form submission itself

Best Practice

Return 200 quickly, process asynchronously, and make your endpoint idempotent using data.submissionId or Idempotency-Key.

Example Implementations

Node.js / Express

webhook-server.js

Next.js API Route

app/api/webhook/route.ts

Python / Flask

webhook_server.py

Popular Integrations

Zapier

Connect to 5000+ apps with no code

Make (Integromat)

Visual automation platform

n8n

Self-hosted workflow automation

Slack

Send submissions to Slack channels

Testing Your Webhook

You can test your webhook configuration from the dashboard:

  1. Go to Settings → Webhooks
  2. Click Test Webhook next to your webhook URL
  3. We'll send a test payload to your endpoint
  4. Check your endpoint logs to verify it received the test

Webhook Logs

View webhook delivery attempts and debug issues in your dashboard under Settings → Webhook Logs. Logs include:

  • Timestamp of each attempt
  • HTTP status code returned
  • Response time
  • Error messages (if any)

Log Retention

Webhook logs are retained for 14 days and include each retry attempt so you can debug downstream endpoint failures.

Troubleshooting

Webhook Not Receiving Requests

  • Verify your webhook URL is correct and uses HTTPS
  • Check your webhook logs in the dashboard for errors
  • Ensure your endpoint is publicly accessible (not localhost)
  • Check firewall rules allow inbound traffic

Timeouts

  • Return a 200 response within 10 seconds
  • Process webhook data asynchronously if it takes longer
  • Optimize database queries and external API calls

Duplicate Webhooks

  • Implement idempotency using data.submissionId or the Idempotency-Key header
  • Store processed submission IDs to prevent duplicate processing
  • Still return 200 even if you've seen the submission before
Previous
Form Submissions
Next
Auto Responders

Documentation

  • Introduction
  • Quick Start
  • Basic Setup
  • How It Works
  • Form Basics
  • API Key
  • Redirects
  • Overview
  • Honeypot Field
  • reCAPTCHA
  • Cloudflare Turnstile
  • hCaptcha
  • ALTCHA
  • Overview
  • Application Forms
  • Form Submissions
  • Webhooks
  • Auto Responders
  • Custom Email Templates
  • AI Reply
  • CC Emails
  • Branding & Custom Domain
  • File Uploads
  • Domain Restriction
  • Custom Subjects
  • Reply-To Address
  • Overview
  • Slack
  • Discord
  • Make
  • n8n
  • Google Sheets
  • Notion
  • Airtable
  • Overview
  • React
  • Next.js
  • Vue.js
  • Angular
  • Svelte
  • Astro
  • Plain HTML
  • Netlify
  • Vercel
  • Cloudflare Pages
  • GitHub Pages
  • WordPress
  • Webflow
  • Wix
  • Complete Reference
  • Account Settings
  • Pricing Plans
  • Overage Billing
  • Common Issues
  • Debugging
  • CORS Issues
  • Email Delivery
  • FAQ
  • Get Support
  • Changelog
Static Forms - Secure form backend and form endpoint for contact formsStatic Forms - Secure form backend and form endpoint for contact forms

The fastest way to add working contact forms to any website. No backend required.

Product

  • Features
  • Pricing
  • Documentation
  • Changelog

Resources

  • Blog
  • Examples
  • Templates
  • Tools
  • Integrations
  • reCAPTCHA Guide
  • FAQ

Alternatives

  • All Alternatives
  • Formspree
  • Netlify Forms
  • Typeform
  • Formspark

Company

  • Contact
  • About

Legal

  • Privacy Policy
  • Terms of Service
  • Cookie Policy
  • DPA

© 2026 Static Forms. All rights reserved.

Committed to sustainability