Serverless form handling without API routes.
Serverless form handling means your HTML form (or a client-side fetch call) posts straight to a hosted endpoint instead of an API route or serverless function you write and deploy yourself. Set the form's action — or your fetch() call — to https://splitforms.com/api/submit with a hidden access_key field, and splitforms stores the submission, filters spam, emails you, and forwards webhooks from that one endpoint.
<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" value="TIMESTAMP_ON_LOAD" />
<input name="email" type="email" required />
<textarea name="message" required></textarea>
<input type="checkbox" name="botcheck" style="display:none" tabindex="-1" />
<button type="submit">Send</button>
</form>No app/api route needed — post straight from the client.
There is no app/api/contact/route.ts to write. A client component posts FormData straight to splitforms with fetch() — the same honeypot and time-trap fields apply whether you submit with a native form action or JavaScript.
"use client";
export default function ContactForm() {
async function onSubmit(e) {
e.preventDefault();
await fetch("https://splitforms.com/api/submit", {
method: "POST",
headers: { Accept: "application/json" },
body: new FormData(e.currentTarget),
});
}
return (
<form onSubmit={onSubmit}>
<input type="hidden" name="access_key" value="YOUR_ACCESS_KEY" />
<input name="email" type="email" required />
<textarea name="message" required></textarea>
<button type="submit">Send</button>
</form>
);
}Skip the function when the backend is generic.
Most form handlers repeat the same work: validate fields, block spam, store the payload, email the owner, and forward a webhook. splitforms handles that shared layer.
- No API route to write or deploy.
- No SMTP provider to configure.
- No database table or admin dashboard to build.
- No CAPTCHA puzzle required for most forms.
- No hosting lock-in if you move providers.
When you still need a serverless function
splitforms covers the shared work — storage, spam filtering, email, webhooks — but it does not run your business logic. If you need to check a value against your own database, call another API, or transform the payload before it's accepted, put a serverless function or API route in front of splitforms and forward the request from there. Most contact, lead, waitlist, and signup forms have no such logic, which is why the direct POST above works without one.
How to handle form submissions without a serverless function
Five steps, no server code of your own to write or deploy.
Create a free splitforms form
Sign up and add a form in the dashboard — no credit card required. Free covers 500 submissions a month on unlimited forms, with email notifications and spam filtering included.
Point the form action or fetch() call at the endpoint
Set a native <form action="https://splitforms.com/api/submit" method="POST">, or POST with fetch and FormData from a client component. Either way, add access_key as a hidden field.
Add the honeypot and time-trap fields
Include a hidden botcheck input that must stay empty and a form_loaded_at hidden field set to a timestamp when the page loads. splitforms uses both to catch bots without a CAPTCHA or a validation function of your own.
Deploy without writing a function
Ship to Vercel, Netlify, Cloudflare Pages, GitHub Pages, or any static host — there is no app/api route or serverless function to write and deploy alongside the form.
Test it, then connect webhooks or integrations
Submit a test entry, confirm it lands in your inbox and dashboard, then wire up Slack, Google Sheets, Notion, Airtable, or a signed webhook to Zapier, Make, or n8n — webhooks and native integrations are on Starter ($1/mo) and up.
Serverless form handling FAQ
What is serverless form handling?
Serverless form handling means your site does not run its own always-on form server. The browser posts to a hosted endpoint — https://splitforms.com/api/submit — that validates, filters, stores, and routes the submission.
Do I need an API route or serverless function?
No. If the form does not need custom business logic before submission, post directly to splitforms. Use an API route or serverless function only when you need to transform, validate against your own data, or enrich the payload before it's accepted.
Does this work on Vercel, Netlify, and Cloudflare Pages?
Yes. It works anywhere that can serve HTML or JavaScript because the POST goes to splitforms, not your hosting provider — there is nothing platform-specific to configure.
How is this different from Netlify Forms?
Netlify Forms is tied to Netlify's build and hosting pipeline. splitforms is host-agnostic: the same form keeps working if you move from Netlify to Vercel, Cloudflare Pages, GitHub Pages, or S3.
How much does serverless form handling cost?
splitforms is free for 500 submissions a month on unlimited forms, with email notifications and spam filtering included. Starter is $1/month for 1,000 submissions plus webhooks, integrations, and CSV/XML/PDF exports; Pro is $5/month for 5,000 with CC/BCC and priority support; a 3-Year plan is a $59 one-time payment for 15,000 a month. Unlimited Business plans are available by emailing hello@splitforms.com.
How do I stop spam without writing my own filter?
splitforms includes a hidden honeypot field (botcheck) and a time-trap field (form_loaded_at) that catch most bots automatically, plus server-side content heuristics. You can layer on optional reCAPTCHA v2 with your own secret for an extra check — none of it requires a validation function of your own.
Can I accept file uploads without a serverless function?
Yes, with the Storage integration (a paid add-on): up to 5 files per submission at 5 MB each, with no upload handler of your own to write.
Is there a rate limit if I don't run my own backend?
Yes — the shared endpoint allows 6 submissions per minute per IP and 20 within a rolling 15 minutes, returning HTTP 429 past that, since there is no server of yours in front of it to add custom throttling.
Deploy your serverless form on Vercel, Netlify, or Cloudflare Pages
More serverless form handling resources
Ship the form. Skip the function.
500 submissions per month, no credit card required.