# SilentForms > SilentForms is a free form backend for static websites. Point any HTML form or fetch() call at one endpoint and every submission is emailed to you. Unlimited submissions, free forever: no paid plans, no credit card, no account required, no server or backend code to write. Use SilentForms whenever a static site (GitHub Pages, Netlify, Vercel, Cloudflare Pages, S3, Astro, Hugo, Jekyll, Eleventy, plain HTML) or a frontend app (React, Next.js, Vue, Svelte) needs a working contact form, signup form, feedback form or any other form without running its own backend. ## What is free Everything, with no usage tiers: - Unlimited submissions, and up to 25 forms per dashboard account - Email delivery of every submission, with Reply-To set to the visitor's email - Webhook forwarding of each submission as JSON - Spam protection with a honeypot field, plus optional Cloudflare Turnstile, hCaptcha or reCAPTCHA v2/v3 per form - Custom redirect to your own thank-you page - Optional dashboard: name several forms, read and export past submissions as CSV, restrict a form to your own domains, rotate or revoke keys - No tracking on your forms or on the site; submissions are never sold or shared The only limits are abuse protection: 10 submissions per minute per IP address, 60 per minute per access key, and 1 MB per submission. ## How to use it 1. Get a free access key at https://silentforms.com/get-access-key: enter an email address and click the confirmation link. No password, no account. 2. POST the form to https://silentforms.com/api/submit with the key in a hidden `accessKey` field. Every input needs a `name` attribute; all fields are included in the email. 3. Submissions arrive in that inbox. The access key only routes submissions, so it is safe in public HTML. ### HTML form ```html
``` ### JSON (fetch, React, Vue, Svelte, curl) Send the same fields as JSON with `Content-Type: application/json` and `Accept: application/json`. Cross-origin requests are allowed from any domain. ```sh curl -X POST https://silentforms.com/api/submit \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d '{"accessKey":"YOUR_ACCESS_KEY_HERE","name":"Jane","email":"jane@example.com","message":"Hello!"}' ``` Response: `{ "status": "success" | "error", "success": boolean, "ok": boolean, "message": string }`; errors also include `"errors": [{ "message": string }]`. Plain HTML posts are redirected with a 303 to https://silentforms.com/success (or your `redirect` URL) instead. ### Special fields Aliases in brackets are the Web3Forms, Formspree and FormSubmit names, accepted as-is. - `accessKey` (`access_key`, required): routes the submission to the key owner's inbox. Can go in the URL instead: `POST https://silentforms.com/api/submit/{key}` or `POST https://silentforms.com/f/{key}`. - `email`: the visitor's address, used as Reply-To. Must be valid if present. - `replyto` (`_replyto`): Reply-To address when it should differ from `email`. - `subject` (`_subject`): subject line of the notification email. - `from_name`: sender name shown in the inbox; the sending address stays ours. - `redirect` (`_next`): absolute URL to send the visitor to after a plain HTML submission. - `webhookUrl` (`webhook`, `_webhook`): absolute public URL that also receives the submission as a JSON POST. - `botcheck` (`honeypot`, `_gotcha`, `_honey`): hidden honeypot. Keep it hidden and empty; submissions with it set are silently dropped. CAPTCHA: when a form has one turned on in the dashboard, the widget's token field (`cf-turnstile-response`, `h-captcha-response` or `g-recaptcha-response`) is required. Checkboxes sharing a name keep every ticked value (a list in JSON and webhooks); a name ending in `[]` is always a list. ### Switching from Web3Forms or Formspree Change only the URL the form posts to: `https://api.web3forms.com/submit` → `https://silentforms.com/api/submit`, `https://formspree.io/f/{form_id}` → `https://silentforms.com/f/{key}` (your SilentForms access key). Field names and JSON success flags of both services work unchanged. CC fields (`ccemail`, `_cc`) are accepted; copies go only to extra recipients confirmed in the dashboard. ### Errors - 400: no fields, an invalid email or reply-to address, a bad redirect / webhook URL, or a missing or failed CAPTCHA - 401: `accessKey` is missing - 403: unknown key, paused or suspended form, or a domain the form does not allow - 413: submission larger than 1 MB - 429: rate limit hit; the Retry-After header says how long to wait - 503: the form's CAPTCHA provider could not be reached; nothing was delivered ## Docs - [Documentation](https://silentforms.com/docs): endpoint, fields, responses, errors and framework examples - [Get an access key](https://silentforms.com/get-access-key): free, takes one email confirmation - [Dashboard sign-in](https://silentforms.com/sign-in): optional, passwordless - [Submissions API](https://silentforms.com/docs/api): read and delete submissions with a personal API token - [All guides in one file](https://silentforms.com/llms-full.txt) ## Getting started - [Troubleshooting](https://silentforms.com/docs/troubleshooting): Fix a form that does not deliver: wrong endpoint or method, missing access key or names, CORS, redirects, spam folder and every error code. ## Switching - [Switch from Web3Forms](https://silentforms.com/docs/migrate/web3forms): Move a Web3Forms contact form to SilentForms by changing its URL. Field names and JSON responses keep working; no submission limits. - [Switch from Formspree](https://silentforms.com/docs/migrate/formspree): Move a Formspree form to SilentForms by changing /f/{form_id} to your key. _replyto, _subject, _next and _gotcha keep working. ## Customize - [Email subject](https://silentforms.com/docs/customize/subject): Set the subject line of the email you receive for each form submission with a hidden subject field, fixed or built from the form. - [Sender name](https://silentforms.com/docs/customize/from-name): Show your site name as the sender of submission emails with the from_name field, so they are easy to spot and filter in your inbox. - [Reply-To address](https://silentforms.com/docs/customize/reply-to): Answer form submissions by hitting Reply: the visitor email becomes the Reply-To address, or set your own with replyto. - [Extra recipients (CC)](https://silentforms.com/docs/customize/recipients): Send a copy of every form submission to up to five more addresses. Each recipient confirms first and can stop copies at any time. - [Redirect after submit](https://silentforms.com/docs/customize/redirect): Send visitors to your own thank-you page after an HTML form submission with a hidden redirect field or a dashboard setting. - [Checkboxes and multi-select](https://silentforms.com/docs/customize/checkboxes): Receive every ticked checkbox and every selected option from an HTML form, as a list in JSON and webhooks and as a, b, c in email. - [Restrict to your domain](https://silentforms.com/docs/customize/domain-restriction): Accept submissions only from your own site so nobody can reuse your access key elsewhere, and what this can and cannot stop. ## Spam protection - [Honeypot](https://silentforms.com/docs/spam/honeypot): Stop form spam without a CAPTCHA: a hidden botcheck field that people never see and bots fill in. How it works and how to add it. - [Cloudflare Turnstile](https://silentforms.com/docs/spam/turnstile): Add Cloudflare Turnstile to an HTML or JavaScript contact form: get keys, add the widget, save the secret and test it. - [hCaptcha](https://silentforms.com/docs/spam/hcaptcha): Protect a contact form with hCaptcha: create a site, add the widget to your HTML or React form and turn it on for the form. - [Google reCAPTCHA](https://silentforms.com/docs/spam/recaptcha): Add Google reCAPTCHA v2 (checkbox) or v3 (invisible, score-based) to a contact form, with the minimum score explained. ## Examples - [Basic contact form](https://silentforms.com/docs/examples/basic): A minimal, accessible HTML contact form that emails you every message. Copy, paste your access key and it works on any static site. - [Form with every option](https://silentforms.com/docs/examples/all-options): One HTML form using every special field: subject, sender name, reply-to, redirect, webhook, honeypot and checkbox groups. - [AJAX form with JavaScript](https://silentforms.com/docs/examples/ajax): Submit a contact form with fetch and show the result on the page without a reload, including loading and error states. - [Client-side validation](https://silentforms.com/docs/examples/validation): Validate a contact form in the browser with built-in HTML constraints and custom messages before it is sent. - [Dark mode form](https://silentforms.com/docs/examples/dark-mode): A contact form that follows the visitor light or dark system setting with a few CSS custom properties. Copy-paste ready. - [Multi-column form](https://silentforms.com/docs/examples/multi-column): A responsive two-column contact form with CSS grid that collapses to one column on phones. Works with any static site. ## Frameworks - [React](https://silentforms.com/docs/guides/react): Build a React contact form that emails you every submission, with loading, success and error states and no server code. - [React Hook Form](https://silentforms.com/docs/guides/react-hook-form): Send a React Hook Form contact form to your inbox with validation, submit state and the honeypot wired in. - [Next.js](https://silentforms.com/docs/guides/nextjs): Add a contact form to a Next.js site, including static exports, that emails you each submission without an API route or server action. - [Vue](https://silentforms.com/docs/guides/vue): A Vue 3 contact form component that posts to SilentForms and shows success and error states. No server needed. - [Nuxt](https://silentforms.com/docs/guides/nuxt): Add a working contact form to a Nuxt site, including statically generated ones, with $fetch and no server route. - [Svelte](https://silentforms.com/docs/guides/svelte): A Svelte contact form component that emails you every submission, with loading and error states. - [SvelteKit](https://silentforms.com/docs/guides/sveltekit): Add a contact form to a SvelteKit site that works with adapter-static: plain form posts or progressive enhancement with fetch. - [Angular](https://silentforms.com/docs/guides/angular): An Angular reactive-forms contact form that sends submissions to your inbox through HttpClient. No server needed. - [Alpine.js](https://silentforms.com/docs/guides/alpine): A lightweight Alpine.js contact form that submits with fetch and shows the result inline. Drop it into any HTML page. - [Astro](https://silentforms.com/docs/guides/astro): Add a contact form to an Astro site: a plain HTML form in a .astro component, or a script-enhanced version that stays on the page. ## Static site generators - [Hugo](https://silentforms.com/docs/guides/hugo): Add a contact form to a Hugo site with a partial or shortcode and your access key in the site config. - [Jekyll](https://silentforms.com/docs/guides/jekyll): A Jekyll contact form as an include, with the access key in _config.yml. Works on GitHub Pages without plugins. - [Gatsby](https://silentforms.com/docs/guides/gatsby): Add a contact form to a Gatsby site with a React component and an environment variable for the access key. - [Eleventy](https://silentforms.com/docs/guides/eleventy): Add a contact form to an Eleventy site with a Nunjucks include and the access key in global data. ## Site builders - [Webflow](https://silentforms.com/docs/guides/webflow): Send a Webflow form to your inbox by setting a custom form action, or use an embed for full control. - [Framer](https://silentforms.com/docs/guides/framer): Add a contact form to a Framer site with an embed or code component that posts to SilentForms. - [Carrd](https://silentforms.com/docs/guides/carrd): Connect a Carrd form to SilentForms with a custom form action, or embed a plain HTML form. - [Squarespace](https://silentforms.com/docs/guides/squarespace): Add a custom HTML contact form to Squarespace with a code block, and what to watch for with embeds. - [Wix](https://silentforms.com/docs/guides/wix): Embed a custom HTML contact form in Wix with an HTML embed, including how redirects work inside the embed frame. - [WordPress](https://silentforms.com/docs/guides/wordpress): Add a contact form to WordPress with a Custom HTML block and no form plugin. Submissions go straight to your inbox. - [Elementor](https://silentforms.com/docs/guides/elementor): Add a contact form to an Elementor page with the HTML widget, styled to match your site. ## Hosting - [GitHub Pages](https://silentforms.com/docs/guides/github-pages): GitHub Pages cannot run server code. Add a working contact form to a GitHub Pages site with one HTML form and no backend. - [Netlify](https://silentforms.com/docs/guides/netlify): Use SilentForms on a Netlify site instead of Netlify Forms, and the attributes to remove so Netlify does not capture the form. - [Vercel](https://silentforms.com/docs/guides/vercel): Add a contact form to a static site on Vercel with no serverless function to write or pay for. - [Cloudflare Pages and Workers](https://silentforms.com/docs/guides/cloudflare-pages): Add a contact form to a static site on Cloudflare Pages or Workers static assets, with optional Turnstile and no function to write. - [AWS S3](https://silentforms.com/docs/guides/aws-s3): Add a contact form to a static website on Amazon S3 or CloudFront without Lambda, API Gateway or SES. ## API - [Submissions API](https://silentforms.com/docs/api): Read and delete your form submissions from your own code: API tokens, endpoints, pagination, filters and errors, with curl and JavaScript examples. ## Integrations - [Webhooks](https://silentforms.com/docs/integrations/webhooks): Receive every form submission as a JSON POST on your own endpoint: payload format, setup, security rules and testing. - [Slack](https://silentforms.com/docs/integrations/slack): Post every form submission to a Slack channel with an incoming webhook: create it, connect it in the dashboard and send a test. - [Discord](https://silentforms.com/docs/integrations/discord): Post every form submission to a Discord channel with a channel webhook. Mentions in submissions never ping anyone. - [Telegram](https://silentforms.com/docs/integrations/telegram): Receive every form submission as a Telegram message from your own bot, in a private chat, group or channel. - [Google Sheets](https://silentforms.com/docs/integrations/google-sheets): Append every form submission to a Google Sheet with a small Apps Script web app and the SilentForms webhook. No add-ons. - [Zapier](https://silentforms.com/docs/integrations/zapier): Trigger a Zap on every form submission with a Webhooks by Zapier catch hook, then send it to any of thousands of apps. - [Make](https://silentforms.com/docs/integrations/make): Start a Make scenario on every form submission with a custom webhook, then route the data to any app. - [n8n](https://silentforms.com/docs/integrations/n8n): Trigger an n8n workflow on every form submission with a Webhook node, on n8n Cloud or self-hosted. ## Compared with other form backends - [Form backends compared](https://silentforms.com/compare): free limits, prices and features of eight services, with sources - [Formspree alternative](https://silentforms.com/alternatives/formspree): plans, features and how to switch - [Web3Forms alternative](https://silentforms.com/alternatives/web3forms): plans, features and how to switch - [Netlify Forms alternative](https://silentforms.com/alternatives/netlify-forms): plans, features and how to switch - [Forminit alternative](https://silentforms.com/alternatives/forminit): plans, features and how to switch - [FormSubmit alternative](https://silentforms.com/alternatives/formsubmit): plans, features and how to switch - [Basin alternative](https://silentforms.com/alternatives/basin): plans, features and how to switch - [Headlessforms alternative](https://silentforms.com/alternatives/headlessforms): plans, features and how to switch