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.

1

Create your account

Sign up for free. No credit card required. You'll be taken to your dashboard.

2

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:

https://app.formwit.com/api/s/your-unique-form-id
3

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:

HTML
<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>
4

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.

HTML
<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:

HTML
<!-- 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

POST https://app.formwit.com/api/s/{formId}

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 form
  • multipart/form-data - Forms with file uploads
  • application/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:

JavaScript
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
200Submission received (JSON mode)
302Redirect after submission (HTML form mode)
400Invalid form data or validation failed
404Form endpoint not found
429Rate limit exceeded
503Form 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

JSON
{
  "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.

HTML
<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)
FormsUnlimitedUnlimitedUnlimited
Submissions/month10010,000100,000
Email recipients/form1310
Spam protectionYesYesYes
File uploadsNo1MB5MB
CSV exportNoYesYes
WebhooksNoYesYes
Submission retention7 daysUnlimitedUnlimited
Custom redirectsNoYesYes
Search & exportNoYesYes
Remove brandingNoYesYes
Priority supportNoNoYes

Ready to get started?

Create your free account and add a contact form to your static website in under a minute.

Get Started Free