Form Backend Documentation
FormWit is a form backend service that lets you add working contact forms to any static website in under 60 seconds. Everything you need to get started is here: setup guides, API reference, spam protection, and more.
Quick Start
Get your first contact form for a static website working in under a minute. No JavaScript, no backend code.
Create your account
Sign up for free. No credit card required. You'll be taken to your dashboard.
Create a form endpoint
Click "New Form" in the dashboard. Give it a name (e.g., "Contact Form") and set your email recipient. You'll get a unique HTML form endpoint URL like:
Add the form to your site
Set your HTML form's action attribute to your FormWit endpoint. Works with Carrd, Astro, Next.js, Hugo, Jekyll, Webflow, and any static site:
<form action="https://app.formwit.com/api/s/your-form-id"
method="POST">
<label for="email">Email</label>
<input type="email" name="email" required />
<label for="message">Message</label>
<textarea name="message" required></textarea>
<button type="submit">Send</button>
</form> You're done
When someone submits the form, you'll receive an email notification and the submission will appear in your dashboard. That's the entire form backend setup.
Form Configuration
Customize how your form backend handles submissions, notifications, and redirects.
Redirect URL
By default, after a successful submission, the user is redirected to a FormWit "thank you" page. You can set a custom redirect URL in your form settings to send users back to your own page:
Set the redirect URL in your dashboard under Form Settings → Redirect URL.
Per-Submission Redirect
You can also set the redirect URL per submission by adding a hidden redirect_to field to your form. This overrides the redirect URL configured in the dashboard.
<input type="hidden" name="redirect_to" value="https://yoursite.com/thank-you" /> The redirect_to field is stripped from the stored submission data. Only valid http or https URLs are accepted.
Email Recipients
Configure who receives email notifications for each form. Free plan supports 1 recipient. Starter plan supports up to 3, and Pro supports up to 10 per account.
Each recipient must verify their email address before receiving notifications.
Form Name
Give each form a descriptive name (e.g., "Homepage Contact Form" or "Newsletter Signup"). This name appears in email notifications and your dashboard to help you identify forms.
Spam Protection
FormWit includes multiple layers of spam protection at no extra cost. No CAPTCHA required. Your contact form for static websites stays user-friendly.
Honeypot Fields
A honeypot is a hidden form field that's invisible to humans but gets filled by spam bots. If the field has a value, the submission is flagged as spam.
FormWit uses _gotcha as the default honeypot field name. Add it to your form as a hidden field:
<!-- Hidden honeypot field — bots fill this, humans don't -->
<input type="hidden" name="_gotcha" style="display:none" /> You can customize the honeypot field name in your form settings.
Keyword Filtering
Submissions containing common spam patterns (cryptocurrency scams, SEO spam, etc.) are automatically flagged. You can review and unflag false positives in your dashboard.
API Reference
Use the form submission API to send data from any frontend framework or static site generator.
Submit a Form
Accepts form submissions via standard HTML form POST or AJAX. This is the core endpoint for your form backend.
Content Types
application/x-www-form-urlencoded- Standard HTML formmultipart/form-data- Forms with file uploadsapplication/json- AJAX/API submissions
HTML Form Example
Standard HTML forms redirect after submission by default:
<form action="https://app.formwit.com/api/s/abc123" method="POST">
<input type="text" name="name" required />
<input type="email" name="email" required />
<textarea name="message"></textarea>
<input type="hidden" name="_gotcha" style="display:none" />
<button type="submit">Send</button>
</form> AJAX / Fetch Example
Send Accept: application/json to get a JSON response instead of redirect:
const response = await fetch("https://app.formwit.com/api/s/abc123", {
method: "POST",
headers: { "Content-Type": "application/json",
"Accept": "application/json" },
body: JSON.stringify({
name: "Jane Doe",
email: "jane@example.com",
message: "Hello!"
})
});
const data = await response.json();
// { success: true, message: "Form submitted successfully", submissionId: "..." } Response Codes
| Code | Description |
|---|---|
| 200 | Submission received (JSON mode) |
| 302 | Redirect after submission (HTML form mode) |
| 400 | Invalid form data or validation failed |
| 404 | Form endpoint not found |
| 429 | Rate limit exceeded |
| 503 | Form is paused or deleted |
Webhooks
Webhooks let you send form submission data to external services in real time. Available on Starter and Pro plans.
Setting Up Webhooks
In your form settings, add a webhook URL. FormWit will send a POST request to this URL every time a new submission is received.
Webhook Payload
{
"event": "submission.created",
"submissionId": "uuid",
"formId": "uuid",
"formName": "Contact Form",
"data": {
"name": "Jane Doe",
"email": "jane@example.com",
"message": "Hello from your website!"
},
"metadata": {
"ipAddress": "192.168.1.1",
"userAgent": "Mozilla/5.0...",
"referrer": "https://example.com/contact",
"timestamp": "2026-02-12T15:30:00Z"
},
"isSpam": false
} Webhook Security
Optionally configure an HMAC secret in your form settings. FormWit will sign each webhook request with an X-Formwit-Signature header so you can verify authenticity.
Retry Policy
If your webhook endpoint returns a 5xx error or times out, FormWit retries up to 3 times with exponential backoff (5 min, 25 min, 2 hours). You can also manually retry from the dashboard.
File Uploads
Accept file attachments through your forms. Available on Starter (1MB) and Pro (5MB) plans. Use multipart/form-data encoding.
<form action="https://app.formwit.com/api/s/your-form-id"
method="POST"
enctype="multipart/form-data">
<input type="text" name="name" required />
<input type="file" name="attachment" />
<button type="submit">Submit</button>
</form> Plans & Limits
All plans include unlimited forms, spam protection, and a submission dashboard.
| Feature | Free | Starter ($39/yr) | Pro ($149/yr) |
|---|---|---|---|
| Forms | Unlimited | Unlimited | Unlimited |
| Submissions/month | 100 | 10,000 | 100,000 |
| Email recipients/form | 1 | 3 | 10 |
| Spam protection | Yes | Yes | Yes |
| File uploads | No | 1MB | 5MB |
| CSV export | No | Yes | Yes |
| Webhooks | No | Yes | Yes |
| Submission retention | 7 days | Unlimited | Unlimited |
| Custom redirects | No | Yes | Yes |
| Search & export | No | Yes | Yes |
| Remove branding | No | Yes | Yes |
| Priority support | No | No | Yes |
Ready to get started?
Create your free account and add a contact form to your static website in under a minute.
Get Started Free