Create a free access key
Sign up for splitforms (no credit card) and create a form in the dashboard. Copy its access_key — a public identifier that goes in your form, not a secret.
Contact form API · REST + webhooks + MCP
A contact form API is a hosted endpoint that receives a website form's POST request, validates the fields, filters spam, stores the submission, and notifies the owner, so the site needs no backend code of its own. splitforms is a contact form API for HTML, React, Next.js, and any other frontend: set the form action to https://splitforms.com/api/submit with a hidden access_key field, or POST the same fields as JSON from fetch, curl, or Python. Responses are JSON, and rate limits of 6 submissions per minute per IP keep abuse out. The free plan covers 500 submissions per month with unlimited forms, a searchable dashboard, and owner email notifications. Paid plans from $5 per month add HMAC-signed webhooks, CSV exports, and integrations, and a free MCP server lets AI agents like Claude create forms and read submissions directly.

Point your form's action at one endpoint. No server, API route, or database to build or maintain.
Honeypot, time-trap, content heuristics, and rate limits screen submissions before they reach you.
One API token powers the read API and a free MCP server, so AI agents can manage forms directly.
Copy-paste ready
splitforms is exactly that: point any HTML, React, or Next.js form at https://splitforms.com/api/submit with a hidden access_key field, and submissions land in your dashboard and inbox in seconds. The same endpoint takes a POST from curl, fetch, or Python — full request and response examples are in the API reference.
<form action="https://splitforms.com/api/submit" method="POST">
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
<input type="hidden" name="form_loaded_at" />
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" />
<input name="name" required />
<input name="email" type="email" required />
<textarea name="message" required></textarea>
<button type="submit">Send</button>
</form>
<script>
// time-trap: stamp the load time so instant bot submits get flagged
document.querySelector('[name="form_loaded_at"]').value = Date.now();
</script>Setup
Works the same way whether your frontend is a React app, plain HTML, or something else — the endpoint doesn't care what rendered the markup.
Sign up for splitforms (no credit card) and create a form in the dashboard. Copy its access_key — a public identifier that goes in your form, not a secret.
Set your HTML form's action to https://splitforms.com/api/submit with method POST, or POST FormData/JSON to the same URL from React, Next.js, Vue, or any HTTP client. Include the access_key as a hidden field.
Add a hidden botcheck input that must stay empty (a honeypot) and a hidden form_loaded_at field stamped with the page-load time. Both are checked automatically before a submission is accepted.
Add subject to customize the email subject line, redirect to send visitors to a thank-you page, and replyto to control the reply-to address on notification emails.
Submit the form once. The owner notification email is free on every plan, and the submission shows up in the dashboard immediately.
Add signed webhooks, native Slack, Notion, or Google Sheets integrations, or an auto-responder on Pro ($5/month) once email alone isn't enough.
Where submissions go
Every submission is emailed to you and saved to a searchable dashboard — spam filtered before it ever reaches you. Pull them back out with the read API (GET /api/submissions), export to CSV, or forward it to a webhook or Slack on paid plans.

No backend needed
Your form POSTs standard FormData or JSON to one URL. splitforms validates the access_key, runs the spam classifier, and forwards it to your email — so there's no server, API route, or database for you to build or maintain.

Spam filtering
Every plan screens submissions with a honeypot, a time-trap, content heuristics, and per-form rate limits before anything reaches you — a reCAPTCHA-free way to keep bots out without a puzzle for real visitors.

REST + MCP
One API token powers both the REST read API and a free MCP server, so agents like Claude and Cursor can create forms and read submissions directly — the same key, no bespoke integration. Full request and response examples live in the API reference.

How SplitForms works
Connect your form, collect every submission, and send data where it needs to go — without building backend infrastructure.

Point your form to your unique SplitForms endpoint. That's it.

We instantly capture and organize every submission in your inbox.

Send data to email, spreadsheets, CRMs, webhooks, and 7,000+ apps.

No credit card required. Set up in under 60 seconds.
Connect & automate
SplitForms works with the destinations you route to and the platforms you build on — from Slack and Sheets to WordPress, Shopify, and Next.js. And with Stripe connected, your forms can take payments too.

Trusted by indie teams and agencies shipping forms worldwide
Testimonials
40 quotes on record — from indie hacks to agency migrations.
“I replaced a Lambda + DynamoDB + SES contact form with six lines of HTML. It took eleven minutes, and the dashboard is better than what I was going to build.”
“We migrated 14 client sites off Formspree in a single weekend. The price is a third of what we paid, the API is more honest, and the spam filter actually works.”
“The webhook payload is signed, idempotent, and well-shaped. It reads like code from a competent team, not a CRUD app held together with duct tape.”
“I stopped reaching for Typeform on small marketing sites. splitforms covers 90% of the use case at none of the bloat.”
“I onboarded our whole agency in an afternoon. The MCP integration meant Cursor literally dropped the form straight into our client repos for us.”
“The free plan gave me 500 submissions before I paid a cent, and Pro is five dollars a month. I've spent more on coffee deciding which backend to use.”
“Spam went from forty junk entries a day to zero, with no reCAPTCHA puzzle ruining the form. The honeypot and time-trap just quietly do their job.”
“Point the form action at one endpoint and you're done. No SDK, no client library, no build step. This is how a form backend should feel.”
“Leads land in Slack the second someone submits, and a copy goes to Google Sheets for the sales team. I wired both up in under ten minutes.”
“I run a static Hugo site on a five-dollar VPS. splitforms gave it a real contact form without me standing up a single server.”
Questions
One POST endpoint (/api/submit) that accepts any HTML form or fetch/JSON request, a read API for pulling submissions back out, a free MCP server for AI agents, Storage-backed file uploads, custom redirects, and a replyto override — plus CC/BCC on Pro and above. Spam filtering (honeypot, time-trap, content heuristics, allowed-domains) and owner notification emails are included on every plan, including Free.
You need two different credentials. Every form has an access_key — a public identifier you put in a hidden field or POST body that tells splitforms which form a submission belongs to. Your account also has one API token, found at Dashboard → MCP, that authenticates the read API (GET /api/submissions) and the MCP server with an Authorization: Bearer header. Only the access_key belongs in client-side HTML.
Yes. Free covers 500 submissions/month, unlimited forms, spam filtering, the dashboard, owner notification emails, and the MCP server — no credit card required. Pro is $5/month for 5,000 submissions and adds CSV/XML/PDF export, webhooks, integrations, and an auto-responder. Pro is $5/month for 5,000 submissions and adds CC/BCC and priority support. The 3-Year plan is $59 for the first 3 years, then $59/year, for 15,000/month.
The endpoint is language-agnostic — POST to https://splitforms.com/api/submit with your access_key and fields. From curl use -F flags; from JavaScript send new FormData(form) with fetch; from Python post a data dict with requests. Every client gets the same JSON back: { success, message, submission_id } on a 200, or { success: false, message, code } on a 4xx validation or auth error.
Submissions are capped at 6 per minute per IP address per form (a sliding 60-second window), plus a sustained limit of 20 per 15 minutes from the same IP. Go over either and you get HTTP 429. The read API (GET /api/submissions) is limited to 60 requests per minute per API token. Real visitors almost never hit the submission limit — it mostly catches bots.
Call GET https://splitforms.com/api/submissions with Authorization: Bearer YOUR_API_TOKEN. Filter with form (a form's id or access_key), and paginate with limit (default 25, max 100), before, and since. The response is { submissions, has_more }. Use it to sync leads into your own database, a CRM, or a script — the same token also powers the MCP server.
Yes, once. Each webhook is an HMAC-SHA256-signed POST (the signature header is prefixed sha256=) with an 8-second timeout; a delivery that fails with a network error, timeout, or 5xx is retried once automatically after a short pause. A 4xx response is not retried — the endpoint understood the request and refused it. Webhooks are on Pro ($5/month) and above; native Slack, Discord, Telegram, WhatsApp, and Mailchimp destinations are also available if you'd rather not run your own endpoint.
MCP (Model Context Protocol) is how AI agents like Claude, Cursor, and Windsurf call external tools directly. splitforms' MCP server is free on every plan and ships 6 tools, including create_form, generate_form, and list_submissions — so an agent can build a form and read its submissions with the same API token as the REST API, without a bespoke integration.
Yes — that's the point of the API. Build the form in the drag-and-drop dashboard (50+ templates) and grab a ready-made embed for WordPress (shortcode), Shopify (Custom Liquid), iframe, plain HTML, or a React component; or wire up your own markup by pointing action at https://splitforms.com/api/submit with the access_key field. Either way there's no server to run — submissions land in the dashboard and your inbox.
Simple pricing
Choose a plan that fits your workflow — from a free form endpoint to full automations, exports, Stripe payments, and higher submission limits.
For side projects and indie devs.
For agencies and growing products.
Pay $59. 3 years sorted.
No credit card required on Free • Cancel anytime