FreelyForm

Reference

The facts, generated from the running service.

Every number below comes from the same configuration the endpoint reads, so this page cannot drift from behaviour. The machine-readable version is /facts.json; the whole corpus in one file is /llms-full.txt.

Ingest endpoint

PropertyValue
method and pathPOST https://freelyform.com/f/:formId
The form id is public; it is not a secret.
accepted payloadsapplication/x-www-form-urlencoded, multipart/form-data, application/json
request body limit65,536 bytes
rate limit120 requests per 1 minute, per form and client IP
Keyed on the client address from CF-Connecting-IP, not on the proxy hop.
response formatsHTML success page, redirect, or JSON when the client sends Accept: application/json

Storage and retention

PropertyValue
every submission is stored firstyes — before any delivery is attempted
archive expirynone on any tier
attachment retention90 days by default, configurable per form
exportCSV per form, filterable by status; management API for the same data
deletionper submission, including its attachments

File uploads

PropertyValue
files per submission5 by default, configurable 1–10 per form
size per file25 MB, also capped by the form’s own setting
content policyMIME type and extension allowlist; images, PDF, text, Office documents and ZIP
tier requirementPersonal and above; the free tier refuses uploads with 402 uploads_require_plan

Delivery

PropertyValue
channelsowner email, autoresponse to the submitter, webhook (HTTP, Discord, Telegram)
per-channel recordsone status per channel, with provider message id and error text
recipient requirementowner addresses must be confirmed; an unconfirmed address leaves the submission pending_verification
webhook attempts5, with backoff, then recorded as failed
webhook signatureHMAC-SHA256 over `.`, header x-freelyform-signature: t=,v1=
replaya failed webhook delivery can be replayed from the dashboard or the API
suppressionhard bounces and complaints are suppressed per account, before the next send

Spam classification

PropertyValue
verdict thresholdscore ≥ 100
time trapsubmissions arriving within 2000 ms of the page render
link floodmore than 2 URLs in the payload
vocabulary signals15 junk phrases and 8 disposable mail domains
what happens to a spam verdictstored with status spam and the reasons attached; never delivered, never counted against the allowance
captchaoptional per form (Cloudflare Turnstile); off by default on new forms

Allowance and over-limit behaviour

PropertyValue
allowance sourceper-account override, otherwise the plan’s monthly submission count
over the allowancesubmissions are stored as over_limit, no notification is sent, nothing is counted
visitor experience over the allowanceidentical to a normal success — visitors are never rejected for the owner’s quota
reprocessingheld submissions can be reprocessed once there is room; that counts them and sends the notification
excluded from the countspam verdicts and unfinished drafts
usage noticesemails at 50%, 75%, 90% and 100% of the allowance, once each per period

Plans

PlanSubmissions / monthMonthlyYearlyYearly per month
Free80$0$0$0
Personal300$12$96$8
Professional2,500$24$192$16
Business30,000$72$576$48
Customcustomquoted——

Billing is not enabled: no tier is charged today, and the monthly allowance still applies.

What each tier unlocks

CapabilityIncluded from
Forms per accountfree
Submission archivefree
Spam controls: honeypot, heuristics, Turnstilefree
Email notifications with delivery recordsfree
Autoresponse to the submitterfree
Custom redirect after submitfree
REST API and CSV exportfree
File uploads (5 × 25 MB per submission)personal
Rules: require, route, blockprofessional
Signed webhooks with retries and replayprofessional
Priority support by emailprofessional
Your own sending domain over SMTPbusiness
Deliverability dashboard, bounces and suppressionsbusiness
Written SLA and named contactcustom

Control fields

FieldEffect
_gotchaHoneypot. A filled value is stored as spam, never delivered.
_tsPage render timestamp in epoch milliseconds; enables the time trap.
_redirectWhere to send the visitor after a successful submission.
_subjectOverrides the notification subject for this submission.
_replytoSets the reply-to address on the notification.
_partialSave a draft and return a resume link instead of delivering.
_resumeResume a draft with its token; the completed answers merge into the original record.
_idempotencyClient-supplied key; a repeat with the same key returns the existing record.
cf-turnstile-responseCaptcha token, required only on forms with captcha enabled.

Ingest error codes

CodeHTTPMeaning
form_not_found404No active form with that id, or the account is suspended.
origin_not_allowed403The Origin header is not in the form’s allowlist.
invalid_submission400The payload could not be parsed into fields.
turnstile_required400The form requires a captcha token and none was sent.
turnstile_failed403A captcha token was sent but did not verify.
rule_rejected422A require rule failed, or a block rule matched.
partial_not_enabled400A draft was sent to a form that does not accept drafts.
resume_not_found404The resume token is invalid, consumed, or expired.
already_completed409The draft was already completed; its resume token was used.
uploads_not_enabled400Files were attached to a form that does not accept them.
uploads_require_plan402The owning account is on a tier without file uploads.
uploads_require_complete_submission400Files were attached to a draft or a resume.
too_many_files400More files than the form allows in one submission.
upload_too_large413A file exceeds the form’s per-file limit.
upload_type_not_allowed400A file’s type or extension is not on the allowlist.
quota_exceeded429Legacy hard-stop path. Current behaviour stores the submission as over_limit instead.

What this service does not provide

  • team roles and multi-user accounts
  • a marketplace of third-party integrations (Sheets, Slack, Zapier, CRM)
  • card payments on a form
  • AI triage of submissions
  • e-signature
  • SSO
  • a public status page
  • a published uptime SLA
  • claims about delivery rates, customer counts, or revenue

No uptime percentage, delivery rate, or customer count is published anywhere on this site, because none of them can be verified by a reader.

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.

One action attribute · urlencoded, JSON, or multipart · no SDK, no build step