# WebForms > WebForms.to is a form backend: POST from any HTML form or fetch call > and it fans out to email, Slack, Discord, Telegram, webhooks and more, > with spam filtering, file uploads, and routing rules. A REST API, > a write API and an MCP server make every part of it scriptable, so > an AI agent can use it as fully as a person in a browser. Every page on this site is also available as Markdown: append `.md` to its URL (https://webforms.to/docs/webhooks.md, https://webforms.to/index.md for the homepage) or request it with `Accept: text/markdown`. The full documentation in one file is at https://webforms.to/llms-full.txt. ## Key facts - Category: form backend (also called a form endpoint or contact form API). It is not a form builder: the form stays in the customer's own HTML and design. - Free plan: 300 submissions a month, unlimited forms, email delivery, spam filtering including an AI classifier, no card required. - Pro: $5 a month or $49 a year, 12,000 submissions a month, all destinations, routing rules, file uploads, autoresponder, Submissions API. - Agency: $12 a month or $119 a year, 25,000 submissions a month, 10 team members, clients with free read-only client logins on one shared pool, priority support. - A plan at its limit refuses further submissions; there are no overage charges. Full prices and limits: https://webforms.to/pricing.md - Delivery: one submission can go to several destinations at once, each retried on its own, with a per-destination delivery log. Webhooks are HMAC-SHA256 signed. - Data: hosted in Germany (EU). Submissions are kept for a set period per plan, exportable as CSV or through the API. - Launched in 2026. ## When to use WebForms Reach for WebForms when a task needs to collect structured input from a website (or any HTTP client) and deliver it somewhere, without standing up a backend. Concretely, this is the right tool for: - Wiring a contact/signup/waitlist/application HTML form on a static site or SPA to email, Slack, Discord, Telegram, a webhook, or Zapier, with zero server code: POST the form to a WebForms endpoint. - Accepting file uploads attached to a form submission (resumes, screenshots, attachments) without provisioning storage. - Filtering spam/bot submissions (honeypot, timing heuristics, and an AI classifier on every plan) before they reach a human inbox. - Conditionally routing a single form's submissions to different destinations based on field values (e.g. plan=enterprise to Slack, everything else to email). - Reading or managing submissions, forms, destinations and routes programmatically, via the REST API (api.webforms.to) for writes, or the MCP server (agents.webforms.to, one-click OAuth sign-in) for assistants that read submissions, create and update forms and replay failed deliveries over Model Context Protocol. - Telling people, AI agents and bots apart: every submission is tagged human, browser_agent, verified_agent (Web Bot Auth signature) or bot, and routing rules can act on it. One script tag (webforms.js) makes a form agent-ready with WebMCP, generated from the form's schema, which also yields validation, TypeScript, Zod, JSON Schema and OpenAPI. Not the right tool for: building a full application backend, storing data you need to query relationally, or anything that is not shaped like a form submission. ## Docs - [Quickstart](https://webforms.to/docs): One endpoint, any stack. Fields, JSON, responses. - [Using the dashboard](https://webforms.to/docs/dashboard): Every screen, tab and setting: forms, destinations, routing, spam, team, billing. - [File uploads](https://webforms.to/docs/uploads): Attach files from a multipart form, size and type limits. - [Spam protection](https://webforms.to/docs/spam): Spam review queue, Pitches lane, sensitivity, blocklists, AI classifier, captcha. - [Autoresponder](https://webforms.to/docs/autoresponder): Auto-reply to submitters with merge fields, two layouts and other languages. - [Double opt-in](https://webforms.to/docs/double-opt-in): Confirm the sender's email before a submission is delivered. - [Form schema](https://webforms.to/docs/form-schema): One field list: validation, TypeScript, Zod, JSON Schema, OpenAPI. - [Agent-ready forms (WebMCP)](https://webforms.to/docs/agent-ready-forms): One script tag lets AI agents fill your form and get JSON back. - [Human, agent or bot](https://webforms.to/docs/submission-origin): Every submission tagged by who sent it; route on the tag. - [Unfinished forms](https://webforms.to/docs/partial-submissions): Keep what visitors typed but never sent, with one script tag. - [Email digests and quiet hours](https://webforms.to/docs/notifications): Hourly or daily digest emails, and no notifications at night. - [Agency clients](https://webforms.to/docs/clients): Group forms per client, read-only client logins, one shared pool. - [Webhook signing](https://webforms.to/docs/webhooks): HMAC signature verification for webhook destinations. - [Routing rules](https://webforms.to/docs/routing): Send a submission to different destinations by condition. - [Options reference](https://webforms.to/docs/options): Every field, header and config option in one lookup table. - [Submissions API](https://webforms.to/docs/api): Read submissions, forms and usage from your own code. - [Write API](https://webforms.to/docs/write-api): Create and configure forms, destinations and routes by API. - [MCP server](https://webforms.to/docs/mcp): Connect an AI agent to your workspace over MCP. - [Error reference](https://webforms.to/docs/errors): Every error code the ingest and REST endpoints return. - [FAQ & troubleshooting](https://webforms.to/docs/faq): Common issues: missing emails, CORS, spam, failed webhooks. ## Product - [About](https://webforms.to/about) - [Pricing](https://webforms.to/pricing) ([Markdown](https://webforms.to/pricing.md)) - [Integration guides](https://webforms.to/integrations) - [Destination guides](https://webforms.to/destinations) - [Examples](https://webforms.to/examples) - [Form templates](https://webforms.to/templates) - [Free tools](https://webforms.to/tools) - [Alternatives comparison](https://webforms.to/alternatives) - [Blog](https://webforms.to/blog) - [Changelog](https://webforms.to/changelog): what changed, newest first - [Status](https://status.webforms.to): live uptime, checked every minute from outside, and daily deliverability (JSON: https://status.webforms.to/status.json) ## Destinations - [Email](https://webforms.to/email) - [Slack](https://webforms.to/slack) - [Discord](https://webforms.to/discord) - [Telegram](https://webforms.to/telegram) - [Webhooks](https://webforms.to/webhook) - [Zapier, Make and n8n](https://webforms.to/zapier) - [Notion](https://webforms.to/notion) (native adapter in progress; webhook route works today) - [Airtable](https://webforms.to/airtable) (native adapter in progress; webhook route works today) - [Google Sheets](https://webforms.to/google-sheets) (native adapter in progress; webhook route works today) ## Platform guides - [Next.js](https://webforms.to/integrations/nextjs) - [React](https://webforms.to/integrations/react) - [Vue](https://webforms.to/integrations/vue) - [Svelte](https://webforms.to/integrations/svelte) - [Astro](https://webforms.to/integrations/astro) - [Nuxt](https://webforms.to/integrations/nuxtjs) - [Gatsby](https://webforms.to/integrations/gatsby) - [Remix / React Router](https://webforms.to/integrations/remix) - [Alpine.js](https://webforms.to/integrations/alpinejs) - [HTML](https://webforms.to/integrations/html) - [JavaScript](https://webforms.to/integrations/javascript) - [TypeScript](https://webforms.to/integrations/typescript) - [Node.js](https://webforms.to/integrations/nodejs) - [PHP](https://webforms.to/integrations/php) - [Hugo](https://webforms.to/integrations/hugo) - [Jekyll](https://webforms.to/integrations/jekyll) - [Eleventy](https://webforms.to/integrations/eleventy) - [Vite](https://webforms.to/integrations/vite) - [Bootstrap](https://webforms.to/integrations/bootstrap) - [Vercel](https://webforms.to/integrations/vercel) - [Netlify](https://webforms.to/integrations/netlify) - [Cloudflare Pages](https://webforms.to/integrations/cloudflare-pages) - [GitHub Pages](https://webforms.to/integrations/github-pages) - [Webflow](https://webforms.to/integrations/webflow) - [Framer](https://webforms.to/integrations/framer) - [WordPress](https://webforms.to/integrations/wordpress) - [Shopify](https://webforms.to/integrations/shopify) - [Squarespace](https://webforms.to/integrations/squarespace) ## Form templates - [Contact form](https://webforms.to/templates/contact-form) - [Waitlist signup](https://webforms.to/templates/waitlist-signup) - [Job application form](https://webforms.to/templates/job-application) - [Event RSVP form](https://webforms.to/templates/event-rsvp) - [Bug report form](https://webforms.to/templates/bug-report) - [Customer feedback form](https://webforms.to/templates/customer-feedback) - [Support ticket form](https://webforms.to/templates/support-ticket) - [Newsletter signup form](https://webforms.to/templates/newsletter-signup) - [Quote request form](https://webforms.to/templates/quote-request) - [Booking / appointment request form](https://webforms.to/templates/booking-request) - [Survey form](https://webforms.to/templates/survey-form) - [Beta signup form](https://webforms.to/templates/beta-signup) - [AJAX contact form](https://webforms.to/templates/ajax-contact-form) - [Form with JavaScript validation](https://webforms.to/templates/js-validation-form) - [Tailwind CSS contact form](https://webforms.to/templates/tailwind-contact-form) - [Dark mode contact form](https://webforms.to/templates/dark-mode-form) - [Popup contact form](https://webforms.to/templates/popup-contact-form) ## Platform to destination guides - [Webflow Form to Slack](https://webforms.to/integrations/webflow/slack) - [WordPress Contact Form to Slack](https://webforms.to/integrations/wordpress/slack) - [Shopify Form to Slack](https://webforms.to/integrations/shopify/slack) - [Next.js Form to Discord](https://webforms.to/integrations/nextjs/discord) - [GitHub Pages Form to Telegram](https://webforms.to/integrations/github-pages/telegram) - [Framer Form to Email](https://webforms.to/integrations/framer/email) - [Astro Form to a Webhook](https://webforms.to/integrations/astro/webhook) - [Squarespace Form to Zapier](https://webforms.to/integrations/squarespace/zapier) ## Glossary - [Form backend](https://webforms.to/glossary/form-backend): A form backend is a hosted service that receives submissions from an HTML form, stores them, checks them for spam and delivers them somewhere useful such as an inbox, a chat channel or a webhook. It replaces the small server you would otherwise write and maintain yourself. - [Form endpoint](https://webforms.to/glossary/form-endpoint): A form endpoint is the URL you put in a form's action attribute. Each endpoint belongs to one form, and the key inside it identifies that form so submissions land in the right place. - [Honeypot field](https://webforms.to/glossary/honeypot-field): A honeypot field is an input that is hidden from people but visible to automated scripts reading the HTML. A human never sees it and leaves it empty, so any submission that fills it in was almost certainly a bot. - [Spam score](https://webforms.to/glossary/spam-score): A spam score is a single number, usually between 0 and 1, that combines several independent signals about a submission into one verdict. A threshold turns that number into a decision: deliver it, hold it for review, or reject it outright. - [Quarantine](https://webforms.to/glossary/quarantine): Quarantine means a submission the filter thinks is spam is stored but not delivered. It stays visible in a separate view where you can read it, and it does not count toward your monthly quota. - [Webhook signature](https://webforms.to/glossary/webhook-signature): A webhook signature is a hash sent alongside a webhook payload, computed from the payload and a shared secret. The receiver recomputes it and compares. If the two match, the payload came from someone holding the secret and has not been altered in transit. - [Webhook retry and replay](https://webforms.to/glossary/webhook-retry): A webhook retry is a sender trying a failed delivery again after a delay, usually with exponential backoff. A replay is sending deliveries that already gave up once the receiving endpoint has been fixed, so no events are lost to an outage. - [Form abandonment](https://webforms.to/glossary/form-abandonment): Form abandonment is a visitor starting a form and leaving before sending it. Recovering it means saving what they typed, usually once an email address is entered, so the business can follow up with someone who was interested but did not finish. - [WebMCP](https://webforms.to/glossary/webmcp): WebMCP is a proposed web standard, previewing in Chrome, that lets a page describe its actions to AI agents as tools. For an HTML form that means two attributes on the form (toolname and tooldescription) and an optional description per field, from which the browser builds a tool the agent can call. - [Web Bot Auth](https://webforms.to/glossary/web-bot-auth): Web Bot Auth is a proposed standard for AI agents and crawlers to prove their identity: each request carries an HTTP Message Signature (RFC 9421) made with a key the operator publishes at its own domain, named in the Signature-Agent header. - [SPF](https://webforms.to/glossary/spf): SPF, or Sender Policy Framework, is a DNS record that lists which servers are allowed to send email for your domain. A receiving mail server checks the sending server's address against that list and uses the result to decide whether the message is plausible. - [DKIM](https://webforms.to/glossary/dkim): DKIM, or DomainKeys Identified Mail, adds a cryptographic signature to an outgoing message using a private key, with the matching public key published in your DNS. The receiving server verifies the signature to confirm the message really came from your domain and was not modified along the way. - [DMARC](https://webforms.to/glossary/dmarc): DMARC is a DNS record that does two things: it requires SPF or DKIM to match the domain in the visible From address, and it tells receiving servers what to do when that check fails. It also asks them to report failures back to you. - [Reply-To](https://webforms.to/glossary/reply-to): Reply-To is an email header that tells the recipient's mail client where a reply should be addressed, independently of the From address that identifies the sender. - [multipart/form-data](https://webforms.to/glossary/multipart-form-data): multipart/form-data is the encoding a browser uses to send a form that includes files. Each field becomes its own part with its own headers, separated by a boundary string, which lets binary file content travel alongside ordinary text fields. - [CORS preflight](https://webforms.to/glossary/cors-preflight): A CORS preflight is an OPTIONS request a browser sends before certain cross-origin requests, asking the destination whether the real request is allowed. Only if the response permits the method and headers does the browser send the actual request. - [Idempotency key](https://webforms.to/glossary/idempotency-key): An idempotency key is a unique token attached to a request so the server can recognise a repeat. If the same key arrives twice, the server returns the original result instead of performing the action again. - [Rate limiting](https://webforms.to/glossary/rate-limiting): Rate limiting caps how many requests one client may make in a given window. Past the cap, further requests are refused, usually with HTTP 429, until the window rolls over. - [Disposable email address](https://webforms.to/glossary/disposable-email): A disposable email address is a temporary inbox, often valid for minutes, used to receive a confirmation message without handing over a real address. Dozens of services hand them out instantly and for free. - [Double opt-in](https://webforms.to/glossary/double-opt-in): Double opt-in means a sign-up only counts once the person confirms it: after submitting a form, they get an email with a link, and clicking it proves they own the address and meant to sign up. - [Routing rule](https://webforms.to/glossary/routing-rule): A routing rule is a condition evaluated against a submission's contents that decides which destinations receive it. Submissions matching the rule go one way, everything else goes another. - [Fan-out](https://webforms.to/glossary/fan-out): Fan-out is delivering a single input to several destinations at once. One form submission becomes an email, a Slack message and a webhook call, each dispatched and retried on its own. ## Free tools - [Mailto link generator](https://webforms.to/tools/mailto-link-generator): Subject, body, cc, bcc: correctly encoded, with the HTML ready to paste. - [Email address obfuscator](https://webforms.to/tools/email-obfuscator): Three ways to publish an address that humans can read and scrapers mostly can't. - [HTML form generator](https://webforms.to/tools/html-form-generator): Contact form or any fields, 11 input types. Semantic markup with real labels, free. - [Form migration converter](https://webforms.to/tools/form-migration): Paste a Formspree, Web3Forms, FormSubmit or Netlify form. Get it back rewired, field by field. - [HTML form converter](https://webforms.to/tools/html-form-converter): Plain HTML in, a React, Vue or Svelte component out. Or the JSON Schema of the fields. - [Form to email code generator](https://webforms.to/tools/form-to-email-code): Pick your stack, copy working code that emails you form submissions. No SMTP. - [Form spam defense checker](https://webforms.to/tools/form-spam-test): Paste a form, get a pass/warn/fail audit of its spam defenses. Nothing uploaded. - [JSON to form converter](https://webforms.to/tools/json-to-form): Paste the JSON you want, get the form that produces it. Types inferred, free. - [Webhook signature tester](https://webforms.to/tools/webhook-signature-tester): HMAC-SHA256 over timestamp.body, computed locally. Debug signed webhooks fast. - [Form backend pricing calculator](https://webforms.to/tools/form-backend-pricing-calculator): Your monthly volume in, the cheapest plan on each form backend out. Every price dated. - [Disposable email checker](https://webforms.to/tools/disposable-email-checker): Paste addresses or domains, see which are throwaway. Almost 10,000 domains, checked locally. - [Honeypot field generator](https://webforms.to/tools/honeypot-field-generator): Hidden-field HTML that screen readers skip, plus the server-side check. Copy and paste. - [HTML form debugger](https://webforms.to/tools/form-debugger): Paste a broken form, get the reason it fails: names, method, enctype, buttons. - [Email regex tester](https://webforms.to/tools/email-regex-tester): Run addresses through the common email regexes and see where each one breaks. - [HTML input pattern generator](https://webforms.to/tools/input-pattern-generator): Pick a rule, get the pattern attribute, test it against your own values. - [GDPR contact form notice generator](https://webforms.to/tools/gdpr-consent-text-generator): The privacy notice a contact form needs, and when a consent checkbox is really required. ## Who it is for - [Agencies](https://webforms.to/for/agencies) - [Freelance developers](https://webforms.to/for/freelancers) - [Nonprofits and charities](https://webforms.to/for/nonprofits) - [Startups](https://webforms.to/for/startups) - [Designers on no-code builders](https://webforms.to/for/designers) - [Hiring teams](https://webforms.to/for/hiring) ## Head-to-head comparisons of other services - [Formspree vs Web3Forms: Free Tier, Price, Verdict](https://webforms.to/compare/formspree-vs-web3forms) - [Formspree vs Netlify Forms Compared](https://webforms.to/compare/formspree-vs-netlify-forms) - [Web3Forms vs FormSubmit: Free Form Email](https://webforms.to/compare/web3forms-vs-formsubmit) - [Formspree vs Getform (Forminit)](https://webforms.to/compare/formspree-vs-getform) - [Formspree vs Basin: Form Backend Compared](https://webforms.to/compare/formspree-vs-basin) - [Formspark vs Formspree: Pay Once or Monthly](https://webforms.to/compare/formspark-vs-formspree) - [Netlify Forms vs Web3Forms](https://webforms.to/compare/netlify-forms-vs-web3forms) - [Basin vs Getform (Forminit) Compared](https://webforms.to/compare/basin-vs-getform) - [Formcarry vs Formspree Compared](https://webforms.to/compare/formcarry-vs-formspree) - [KwesForms vs Formspree Compared](https://webforms.to/compare/kwesforms-vs-formspree) - [Formspark vs Web3Forms: Cheapest Option](https://webforms.to/compare/formspark-vs-web3forms) - [FormBackend vs Formcarry Compared](https://webforms.to/compare/formbackend-vs-formcarry) - [Formspree vs EmailJS: Backend or Email SDK](https://webforms.to/compare/formspree-vs-emailjs) - [Directory of form backends](https://webforms.to/form-backends) ## Comparisons - [vs Web3Forms](https://webforms.to/alternatives/web3forms) - [vs Formspree](https://webforms.to/alternatives/formspree) - [vs Formspark](https://webforms.to/alternatives/formspark) - [vs Basin](https://webforms.to/alternatives/basin) - [vs Formkeep](https://webforms.to/alternatives/formkeep) - [vs Formcarry](https://webforms.to/alternatives/formcarry) - [vs KwesForms](https://webforms.to/alternatives/kwesforms) - [vs Slapform](https://webforms.to/alternatives/slapform) - [vs FormBackend](https://webforms.to/alternatives/formbackend) - [vs FormBucket](https://webforms.to/alternatives/formbucket) - [vs FormSubmit](https://webforms.to/alternatives/formsubmit) - [vs Netlify Forms](https://webforms.to/alternatives/netlify-forms) - [vs Typeform](https://webforms.to/alternatives/typeform) - [vs Jotform](https://webforms.to/alternatives/jotform) - [vs SurveyMonkey](https://webforms.to/alternatives/surveymonkey) - [vs Wufoo](https://webforms.to/alternatives/wufoo) - [vs Paperform](https://webforms.to/alternatives/paperform) - [vs Tally](https://webforms.to/alternatives/tally) - [vs Cognito Forms](https://webforms.to/alternatives/cognito-forms) - [vs Zoho Forms](https://webforms.to/alternatives/zoho-forms) - [vs Google Forms](https://webforms.to/alternatives/google-forms) - [vs Microsoft Forms](https://webforms.to/alternatives/microsoft-forms) - [vs Getform](https://webforms.to/alternatives/getform) - [vs EmailJS](https://webforms.to/alternatives/emailjs) - [vs splitforms](https://webforms.to/alternatives/splitforms) - [vs Contact Form 7](https://webforms.to/alternatives/contact-form-7) - [vs WPForms](https://webforms.to/alternatives/wpforms) ## Start - [Create a free account](https://app.webforms.to/signup) - Ingest endpoint: https://send.webforms.to/wft_your_key - Submissions API / write API: https://api.webforms.to - OpenAPI spec: https://webforms.to/openapi.json - API catalog (RFC 9727): https://webforms.to/.well-known/api-catalog - Full documentation in one file: https://webforms.to/llms-full.txt - MCP server (Streamable HTTP, JSON-RPC 2.0): https://agents.webforms.to - MCP manifest: https://agents.webforms.to/.well-known/mcp.json