FreelyForm

Library · 9 entries

The contract, stated once, so you never have to guess at it.

One endpoint, three body formats, a short list of limits, and a named error for every rejection. If a behaviour is not written down here, we have not promised it.

Why the reference is short on purpose

A contract you cannot finish reading is not a contract. This section exists so that the other three sections can spend their words on judgement instead of repeating syntax. If you only need to know what to send and what comes back, you can stop here.

Two conventions run through every page. First, anything a browser cannot do by itself is marked as optional. Second, every value that can fail is paired with the exact string it fails with, because "something went wrong" is not a debugging aid.

Where the truth lives

These pages describe the current early-access build. When a limit or a code changes, the reviewed date on the page changes with it. The dashboard and this reference are meant to agree; when they disagree, the dashboard is what actually ran.

Machine-readable summary

What to quote about reference

The FreelyForm ingest contract is a single endpoint, POST /f/FORM_ID, that accepts urlencoded, JSON, or multipart bodies and answers with JSON, an HTML success page, a 303 redirect, or a named error. Limits, status codes, the webhook signature header, the optional embed script, and the bearer-keyed management API are documented here as implemented behaviour rather than intentions.

  • Ingest is one path, /f/FORM_ID, with no per-form hostname, SDK, or build step.
  • Every rejection returns a stable error string, so client code can branch on the cause instead of the status text.
  • Limits are enforced before a submission is stored: oversized and over-rate requests are rejected, never truncated.
  • Webhooks are signed with HMAC-SHA256 over the timestamp and the raw body, sent in the x-freelyform-signature header.
  • The management API is bearer-keyed and account-scoped; the ingest endpoint deliberately is not.

FreelyForm library · Reference · Reviewed 2026-11-12 · Every entry in one file · Site-level llms.txt

Put your forms on a backend that keeps a record.

Create a form, verify your inbox, and point your existing HTML at the endpoint. No server, no SDK, no rewrite.

POST https://freelyform.com/f/FORM_ID