Every site needs a contact form, and every contact form needs somewhere for the message to go. Lanes Forms gives you the endpoint and the delivery, without a backend.
The shape of the problem never changes: a name, an email, a message, and a route to your inbox. Lanes Forms hosts that as a POST endpoint you create in one request. Your page posts to it, the visitor lands on a hosted thank-you page, and the message is stored and forwarded. The create call is one POST /v1/forms with a schema, described in provisioning.
How Lanes Forms does it
- One endpoint. Provision a form with the fields you need: name, email, message. Schemas support text, email, textarea, number, checkbox, and hidden fields, and required fields are enforced at submit time with a
422that lists exactly which fields were missing. - Email forwarding. Add recipients and every submission lands in your inbox. A form forwards to up to 5 recipients, each confirmed by a verification link before any mail reaches them, and spam is never forwarded. When you claim the form, your first recipient is verified for you. Delivery is covered in integrating.
- Spam defense. Honeypots, rate limits, and disposable-email blocking, on by default. The hidden
_gotchafield silently absorbs bots while still returning success, submissions are limited to 10 per minute per IP, and request bodies are capped at 64 KB. The full endpoint contract is in submitting. - Origin rules. Lock submissions to your own domain so nobody abuses the endpoint.
allowed_originsis a hostname allowlist for browser posts; anything else gets a403. Forms that only your server submits to can require an API key instead. See securing your endpoints.
Where it goes
Forward by email, keep it stored in Lanes, or route to a webhook or Supabase. Your choice, changeable anytime.
Two of those destinations are live today: email forwarding and Lanes-hosted storage, which keeps every submission viewable and exportable from the dashboard. Webhook and Supabase delivery are on the roadmap; selecting them currently returns 422 action_not_available. The full destination picture, live and planned, is in route submissions to email, Supabase, or webhooks.
Set it up
- Provision the form. One
POST /v1/formswith your schema and your inbox as the recipient returns a liveendpoint_url. - Drop the form on your page. The browser posts straight to the endpoint and the visitor is redirected to a hosted thank-you page, no JavaScript required.
<form action="https://api.lanes.sh/v1/f/YOUR_FORM_ID" method="POST">
<input type="email" name="email" required />
<textarea name="message"></textarea>
<!-- honeypot: bots fill this, humans never see it -->
<input type="text" name="_gotcha" style="display:none" tabindex="-1" />
<button type="submit">Send</button>
</form>- Claim it. Open the claim link, sign in, and forwarding turns on with your first recipient already verified. Support mail starts arriving in your inbox, and everything held before the claim is released to the dashboard.
mailto: link exposes your address to scrapers and depends on the visitor having a mail client configured. A hand-rolled handler means a server, a mail integration, and your own spam filtering, all for a form that carries a few messages a week.Further reading
- Integrating a form: HTML, fetch, and server-side wiring, plus where submissions go.
- Securing your endpoints: origin allowlists versus API-key mode, and per-form CORS.
- Submitting data: the endpoint contract, the honeypot, and the limits.
- Route submissions to email, Supabase, or webhooks: what is live today and what is on the roadmap.