A free contact form API for any frontend.
A contact form API is a hosted endpoint that receives your form's POST request, filters spam, stores the submission, and emails you — without you writing or hosting a backend. 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. Free covers 500 submissions/month; Starter ($1/mo) adds signed webhooks and integrations.
Send a submission from curl, fetch, Python, or plain HTML
How to connect a contact form to the splitforms API
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.
- 1
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.
- 2
Point your form at the endpoint
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.
- 3
Add the spam-prevention fields
Add a hidden
botcheckinput that must stay empty (a honeypot) and a hiddenform_loaded_atfield stamped with the page-load time. Both are checked automatically — see the full spam stack, including a reCAPTCHA-free option. - 4
Set optional control fields
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.
- 5
Test it and check your inbox
Submit the form once. The owner notification email is free on every plan, and the submission shows up in the dashboard immediately.
- 6
Automate what happens next
Add signed webhooks, native integrations, or an auto-responder on Starter ($1/month)once email alone isn't enough.
What ships in the contact form API
Submit endpoint
POST /api/submit — accepts multipart/form-data and application/x-www-form-urlencoded. Returns JSON { success, message }.
Read API
GET /api/submissions — Authorization: Bearer <API token>. Filter with form (id or access_key), paginate with limit (default 25, max 100), before, since. Returns { submissions, has_more }.
Signed webhooks
POST any URL you choose, on every submission. HMAC-SHA256 signed (sha256= prefix). One attempt, 8-second timeout — no automatic retries, so keep your endpoint fast. Starter and above.
MCP server
Free on every plan. 6 tools, including create_form, generate_form, and list_submissions, so Claude, Cursor, and any MCP-aware agent can manage forms and read submissions directly.
File uploads
Multipart/form-data with Storage-backed attachments (paid add-on) — up to 5 MB per file, 5 files per submission.
Redirects, CC/BCC, and reply-to
Set a redirect URL per form, override the reply-to address with replyto, and add CC/BCC recipients on Pro and above.
Full request/response examples and error codes live in the API reference. Webhook payload shape and signature verification are covered in the webhook docs, and AI agents can call tools directly through the MCP server.
Contact form API response shape
// 200 OK — submission accepted
{
"success": true,
"message": "Submission received",
"submission_id": "sub_01HXY3..."
}
// 4xx — validation or auth error
{
"success": false,
"message": "Invalid access key",
"code": "auth_invalid_key"
}Contact form API pricing
Every plan includes the submit endpoint, spam filtering, and free owner notification emails. See the full plan comparison for details.
Free
$0500 submissions/mo, unlimited forms, email notifications, spam filtering, dashboard.
Starter
$1/mo1,000/mo. Adds CSV/XML/PDF export, webhooks + integrations, auto-responder.
Pro
$5/mo5,000/mo. Adds CC/BCC and priority support.
3-Year
$59 once15,000/mo for three years, one payment.
Need more than 15,000/month? Business plans (unlimited) are available at hello@splitforms.com.
Contact form API FAQ
What's included in the splitforms contact form API?
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.
Do I need an API key to use it?
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.
Is the contact form API really free?
Yes. Free covers 500 submissions/month, unlimited forms, spam filtering, the dashboard, owner notification emails, and the MCP server — no credit card required. Starter is $1/month for 1,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 a $59 one-time payment for 15,000/month.
What are the API's rate limits?
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.
How do I read submissions from another app or service?
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.
Do webhooks retry if my endpoint is down?
No. Each webhook is a single POST attempt with an 8-second timeout, HMAC-SHA256 signed (the signature header is prefixed sha256=). There's no automatic retry, so your endpoint needs to be up and fast. Webhooks are on Starter ($1/month) and above; native Slack, Discord, Telegram, WhatsApp, and Mailchimp destinations are also available if you'd rather not run your own endpoint.
What's the MCP server for?
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.
Can I connect a form without writing backend code?
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.
Free API. Real free tier.
500 submissions/month, REST reads, and the MCP server are free. Owner notification emails are included. Starter is $1/month when you want signed webhooks, exports, and integrations. Sign up in 30 seconds, no credit card.
Get your free access key →