WebForm3 is a form backend you never have to build. Here is what that means.
Share
WebForm3 turns any HTML form into an email. Point a form at our endpoint, add your access key, and every submission is validated, spam-filtered and delivered to your inbox β with no server, database or deploy step on your side.
Because it is an API and not a widget, you keep full control of your markup and styling. We only handle what happens after a visitor hits submit: delivery, storage, spam protection and forwarding.
!No backend, no npm install. If your site can render a form and make an HTTPS request, it already works with WebForm3.
Next β
Quickstart
Getting started
Quickstart
A working contact form in under a minute β three steps, no tooling.
Share
1 Β· Get your access key
Create a free account and copy the access key from your dashboard. It identifies which project a submission belongs to, so keep it handy.
2 Β· Point your form at the endpoint
Set the form action to our submit URL and add your key as a hidden field. Every named input is captured automatically.
That is the whole setup. The next submission lands in your inbox instantly and stays searchable in your dashboard.
β Previous
Introduction
Next β
Access keys
Getting started
Access keys
How keys identify your forms and how to keep them safe.
Share
An access key maps a submission to one of your forms. You can create a separate key per form or per project from the dashboard β handy for agencies running many client sites.
Keys are safe to ship in client-side HTML. They can only be used to send submissions to your account, never to read them back, so exposing one in your markup does not leak data.
Rotate a key anytime β the old one stops accepting submissions immediately.
Restrict a key to specific domains so it only works on your own sites.
Pause a form to reject new submissions without deleting its history.
!Want to read submissions programmatically? Use a dashboard API token instead β those are secret and must stay server-side.
β Previous
Quickstart
Next β
HTML form
Guides
Plain HTML
The simplest integration β no JavaScript at all.
Share
For a static site, a plain form is all you need. The browser posts the fields for you and we redirect back to a thank-you page when you add an optional redirect field.
Drop a hidden field named _honeypot into the form and leave it blank β bots that fill it are silently rejected before they ever reach your inbox.
β Previous
Access keys
Next β
React
Guides
React
Handle the submit yourself for inline success and error states.
Share
In a single-page app you usually want to keep the user on the page. Post the form data with fetch and render your own success state from the JSON response.
jsx
async function onSubmit(e) {
e.preventDefault();
const data = new FormData(e.target);
data.append("access_key", "YOUR_ACCESS_KEY");
const res = await fetch("https://api.webform3.com/submit", {
method: "POST",
body: data,
});
const json = await res.json();
if (json.success) setSent(true);
}
FormData sends every named field automatically, including file inputs on paid plans. No content-type header is needed β the browser sets the multipart boundary for you.
β Previous
HTML form
Next β
Fetch / JSON
Guides
Fetch with JSON
Send a structured JSON body when you are not using a form element.
Share
If you are collecting data outside a form β say from app state β post a JSON body instead. Set the content type and include your access key in the payload.
Any extra keys you include are captured and shown in the dashboard, so you can attach context like a plan name or page URL without changing anything on our side.
β Previous
React
Next β
Spam protection
Guides
Spam protection
Two layers keep bots out without annoying real people.
Share
Every form gets a built-in honeypot plus optional free hCaptcha. Suspicious submissions are filtered into a separate Spam view so your real responses stay clean β and blocked spam never counts against your monthly quota.
Honeypot: add a hidden _honeypot field; any submission that fills it is rejected.
hCaptcha: enable it per form for an invisible challenge on suspicious traffic.
Blocklist: add addresses or domains you never want to hear from.
!Tuned too aggressively? Every filtered message stays in the Spam view for 30 days, so nothing is ever lost.
β Previous
Fetch / JSON
Next β
Webhooks
Guides
Webhooks
Forward the raw submission to your own backend or CRM.
Share
Add a webhook URL to any form and we POST the submission as JSON the moment it arrives β before or after email, your choice. Use it to sync leads into your CRM or trigger your own automations.
Each request is signed with a secret so you can verify it really came from us. Failed deliveries are retried with backoff for up to 24 hours.
β Previous
Spam protection
Next β
Response format
Reference
Response format
What the submit endpoint returns.
Share
A successful submission returns HTTP 200 with a small JSON body. When you include a redirect field on a plain HTML form, we 303-redirect to that URL instead of returning JSON.