Plain HTML
A working HTML form that posts to gopigeon. Zero JavaScript, zero dependencies — the simplest possible integration.
One-liner
<!-- Create the endpoint once (agent-time, not request-time): curl -X POST https://api.gopigeon.dev/new -d '[email protected]' → returns { "endpoint_url": "https://api.gopigeon.dev/f/f_abc123def456xyz0", ... } --> <form action="https://api.gopigeon.dev/f/f_abc123def456xyz0" method="POST"> <input type="text" name="name" placeholder="Name" required> <input type="email" name="email" placeholder="Email" required> <textarea name="message" placeholder="Message" required></textarea> <!-- Honeypot: DO NOT include a field named _gotcha in real forms --> <button type="submit">Send</button> </form>
How it works
Point the action of a native <form> at your endpoint URL and pick method="POST". The browser form-encodes every named input and sends it as application/x-www-form-urlencoded. gopigeon accepts it, relays to the destination(s), and returns a JSON body or a 303 redirect depending on whether a redirect_url is configured.
Create the endpoint once (agent-time, not request-time) via the curl shown in the comment block above. That curl response is where the endpoint_url you paste into action comes from — do not try to synthesize or rewrite the form ID.
The email you passed as recipient above gets a one-click claim link on the first real submission — that is how you become the authenticated owner. See the claim flow for the full sequence.
Configure a thank-you redirect
Without a redirect_url, the submitter lands on raw JSON after submission. To send them to a thank-you page instead, claim the endpoint (above), then set redirect_url on the endpoint’s detail page in the dashboard. Once set, every successful submission responds with HTTP 303 to that URL — no change to your <form> markup needed.
Suppress spam bots with a honeypot
Drop this hidden field anywhere inside your <form>. Real users can’t see or focus it; most spam bots fill every input they find. Gopigeon silently drops any submission where _gotcha is non-empty:
<input type="text" name="_gotcha" tabindex="-1" autocomplete="off"
style="position:absolute;left:-9999px" aria-hidden="true">