Collecting Form Submissions from a JAMstack Site
JAMstack gives you speed and simplicity but no server to handle forms. Here's the clean way to capture submissions from a static frontend.
Jason Warner
July 7, 2026
Collecting Form Submissions from a JAMstack Site
The JAMstack model — prebuilt markup served from a CDN — is wonderful for performance and painful for anything that needs a server. Forms are the classic example. Your beautifully static site has nowhere to send a POST.
The Options
You have three realistic choices: write a serverless function for every form, use your host's built-in form handling and accept its limits, or post directly to a dedicated form backend. The third keeps your forms portable across hosts and gives you the most control.
Posting from Fetch
You don't even need a full page reload. Submit with fetch and handle the response in JavaScript:
await fetch('https://api.bluejayrelay.com/f/frm_yourtoken', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ email, message })
});
The endpoint accepts JSON, URL-encoded, and multipart form posts, so it works whether you submit with fetch or a plain HTML form.
Portability Matters
If you tie every form to one host's proprietary form feature, migrating away means rebuilding all of them. A standalone endpoint is just a URL — move your static site to any CDN and the forms keep working untouched.
Built-in Essentials
Spam filtering, submission storage, email notifications, and an origin allowlist come with the endpoint, so your JAMstack site stays a pure frontend while still capturing leads reliably.
Add portable forms to any JAMstack site. Try Bluejay Forms free.
Build more reliable webhook workflows.
Capture, transform, and retry webhooks with full observability. Free to start, no credit card.