FreelyForm

API reference

Submission and management API.

Authenticate with an account API key, then use the same operations that power the dashboard.

Authentication

Create an API key in the dashboard. Send it as a bearer token:

HTTP headers
Authorization: Bearer <API_KEY>
Content-Type: application/json

Keys are shown once at creation. Revoke a key from the dashboard when it is no longer needed. The public ingest endpoint does not use an API key; it is protected by the form id, origin allowlist, rate limits, and optional captcha.

Public ingest

MethodPathPurpose
POST/f/:formIdAccept a form submission as urlencoded, JSON, or multipart.

Forms

MethodPathPurpose
GET/api/formsList forms for the account.
POST/api/formsCreate a form.
GET/api/forms/:idRead one form.
PATCH/api/forms/:idUpdate settings.
DELETE/api/forms/:idDelete a form.

Submissions and deliveries

MethodPathPurpose
GET/api/forms/:id/submissionsList submissions with pagination and status filter.
GET/api/forms/:id/submissions.csvExport submissions as CSV.
GET/api/submissions/:id/deliveriesList delivery attempts for a submission.
POST/api/submissions/:id/deliveries/retryRe-queue failed delivery channels.

Rules

MethodPathPurpose
GET/api/forms/:id/rulesList rules.
POST/api/forms/:id/rulesCreate a require, block, spam, or route rule.
PATCH/api/forms/:id/rules/:ruleIdUpdate a rule.
DELETE/api/forms/:id/rules/:ruleIdDelete a rule.

Webhooks

MethodPathPurpose
GET/api/webhooksList endpoints, optionally filtered by form.
POST/api/webhooksCreate an HTTP, Discord, or Telegram endpoint.
PATCH/api/webhooks/:idUpdate URL, events, or active state.
DELETE/api/webhooks/:idDelete an endpoint.
GET/api/webhooks/:id/deliveriesInspect delivery attempts.
POST/api/webhooks/deliveries/:deliveryId/replayReplay an event.

Suppressions and sending domains

MethodPathPurpose
GET / POST/api/suppressionsList or add suppressed addresses.
DELETE/api/suppressions/:idRemove a suppression.
GET / POST/api/sending-domainsList or create BYO SMTP domains.
POST/api/sending-domains/:id/verifyRun the TXT and SMTP verification.
POST/api/sending-domains/:id/defaultMake the domain the account default.
DELETE/api/sending-domains/:idDelete the domain.

Verification status

Recipient verification is exposed at GET /api/verifications and POST /api/verifications/resend. The resend operation has a 60-second cooldown per recipient.

Idempotency

Send an Idempotency-Key header on ingest when a retry must not create a second submission. Reusing the same key returns the existing record instead of duplicating it.

Errors

Errors are JSON with an error code and, where relevant, a message or field list. Authentication failures return 401; validation failures return 422; rate limits return 429.

This reference reflects the current early-access build. Verify payload shapes in the dashboard or the source before relying on a field in production automation.

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