HTML form to email
Every submission arrives in your inbox as a clean email with Reply-To set to the sender, so you answer from your mail client.
Free forever · No account · Unlimited submissions
Point any HTML form at one endpoint and every submission lands in your inbox. No server, no backend code, no account.
Confirm your email, paste one hidden input, done.
<form action="https://silentforms.com/api/submit" method="POST">
<input type="hidden" name="accessKey" value="YOUR_ACCESS_KEY_HERE">
<input type="text" name="name" required>
<input type="email" name="email" required>
<textarea name="message" required></textarea>
<button type="submit">Send</button>
</form>$0
Free forever
Unlimited
Form submissions
0 lines
Backend code
2 min
To go live
Features
SilentForms replaces the PHP script, serverless function or third-party widget you would otherwise write to make a contact form on a static site actually send email.
Every submission arrives in your inbox as a clean email with Reply-To set to the sender, so you answer from your mail client.
Post from a plain HTML action, fetch, or curl. Send form-encoded or JSON and get a redirect or a JSON response back.
Add a webhookUrl field and each submission is also sent as JSON to Zapier, Make, Slack, Notion or your own API.
A hidden honeypot field drops bot submissions and per-IP rate limiting stops floods. No CAPTCHA to set up.
Nothing is embedded. No iframe, no widget script, no theme to override. Your form stays exactly how you built it.
Confirm your email and the key is yours — no password, nothing to maintain. There is an optional dashboard if you ever want submission history or a domain lock.
How it works
No install, no build step, no backend to deploy.
Enter your email and click the confirmation link. The key tells us which inbox receives your submissions.
Your email is only used to deliver submissions. No newsletter.
Copy the example for your stack — plain HTML, fetch or React. More in the docs.
<form action="https://silentforms.com/api/submit" method="POST">
<!-- Your access key: tells us which inbox gets the submission -->
<input type="hidden" name="accessKey" value="YOUR_ACCESS_KEY_HERE">
<!-- Any inputs you like. Each one needs a name="" attribute -->
<input type="text" name="name" required>
<input type="email" name="email" required>
<textarea name="message" required></textarea>
<!-- Honeypot: hidden from people, filled in by bots -->
<input type="checkbox" name="botcheck" style="display: none;" tabindex="-1" autocomplete="off">
<!-- Optional: send visitors to your own thank-you page -->
<!-- <input type="hidden" name="redirect" value="https://example.com/thanks.html"> -->
<button type="submit">Send</button>
</form>Replace the placeholder with your key. From the next submission on, messages land in your inbox.
<input type="hidden" name="accessKey" value="YOUR_ACCESS_KEY_HERE">For AI coding agents
Paste it into Cursor, Claude Code, Copilot or ChatGPT and the agent wires the form up correctly the first time: endpoint, access key, honeypot and JSON handling included.
Add a contact form to this website using SilentForms, a free form backend. No server-side code is needed.
Requirements:
1. The form must send a POST request to https://silentforms.com/api/submit
2. Include a hidden field: <input type="hidden" name="accessKey" value="YOUR_ACCESS_KEY_HERE">
(I will replace the value with my own key.)
3. Fields: name (text, required), email (email, required), message (textarea, required).
Every input must have a name attribute; any extra fields are fine.
4. Add a honeypot the user never sees and never fills in:
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" autocomplete="off">
5. Optional hidden fields: "subject" (email subject line) and "redirect"
(absolute URL of a custom thank-you page, used for plain HTML form posts).
6. If this project uses JavaScript / React / Vue / Svelte, submit with fetch instead of a native post:
method POST, headers { "Content-Type": "application/json", "Accept": "application/json" },
body = JSON.stringify of all fields including accessKey.
The response is JSON: { "status": "success" | "error", "message": string }.
Show the message, reset the form on success, and handle loading and error states.
7. Match the existing styling of the site. Do not add other form services or libraries.
Reference: https://silentforms.com/docsFAQ
https://silentforms.com/api/submit; JavaScript frameworks send the same fields as JSON with a Content-Type: application/json header and get a JSON response back. Cross-origin requests are allowed from any domain.redirect input containing the absolute URL of the page. After a successful plain HTML submission the visitor is sent there instead of our default success page.botcheck checkbox in your form. People never see it, bots fill it in, and any submission with it set is silently dropped. Each IP address is limited to 10 submissions per minute and each access key to 60, so a flood from many machines cannot bury your inbox. No CAPTCHA to configure.Origin header this is checked against, so it stops your key being reused on someone else’s site — but a script can leave the header out, so treat it as a deterrent rather than a lock. There is a per-form option to block those requests too.https://silentforms.com/api/submit, the method is POST, the hidden accessKey input holds your key and every input has a name attribute. Sending an Accept: application/json header returns a JSON error message that says exactly what went wrong.Get an access key, paste one hidden input into your form, and start receiving submissions by email.
Get your free access keyNo signup · No credit card · No limits