send.webforms.toRead the docs →

Documentation

Options reference

Every field, header and configuration option in one place - what it does, where it goes, and what type it expects. Use this as a lookup; the other pages explain the reasoning behind each one.

Submission fields

Sent in the body of a POST to your form's endpoint. Field names starting with an underscore are directives, not stored as submission data - see special fields for the fuller explanation.

NameTypeWhereDescription
access_keystringbodyYour form's public key, if not already in the URL path. Prefer the URL form (send.webforms.to/wft_...) - this exists for clients that can't easily set a dynamic action URL.
_nextURLbodyRedirect the browser here after a successful submission. Must be a full https:// URL.
_redirectURLbodyAlias for _next. Also used on a validation failure to redirect back with ?wf_error=... appended, so you can show the error inline on your own page.
_subjectstring, max 300bodyOverrides the notification email's subject line.
_from_namestring, max 120bodyOverrides the display name the notification email appears to come from.
_replytoemailbodySets Reply-To on the notification email, so replying goes straight to your visitor.
_cccomma-separated emails, max 10bodyExtra recipients on the notification email.
_templatestring, max 60bodySelects a notification template id for just this submission, overriding the form's default.
_pageURL, max 2000bodyFull URL of the page the form is on. Shown as “Submitted from” in the notification email. Falls back to the Referer header if omitted, but a cross-origin POST's Referer is stripped to bare origin by the browser - set this to get the actual page instead of just the domain.
_gotchaanybodyHoneypot field. Leave it out of your visible markup, hidden with CSS. If a bot fills it in, the submission is silently dropped and the bot still sees a normal success response. Field name is configurable per form.
_start_timeunix msbodySet via JS when the form renders. Submissions arriving faster than the configured minimum fill time are treated as bots.
_testbooleanbodyMarks the submission as a test. Stored and delivered normally, but excluded from quota and from the default Submissions API listing.
_captcha, cf-turnstile-response, h-captcha-response, g-recaptcha-responsestringbodyCaptcha verification token - whichever field name your captcha provider's widget produces.

Headers

NameTypeWhereDescription
content-typeheaderrequestapplication/x-www-form-urlencoded, multipart/form-data (required for file uploads), or application/json.
acceptheaderrequestSend application/json to get a JSON response instead of the default HTML success/redirect flow.
Idempotency-Keyheader, any stringrequestA repeat POST with the same key returns the original result instead of creating a second submission - safe to set on every request from a client that might retry on a network error.
Authorization / X-API-Keyheader, Bearer wf_live_...request (APIs)Required on every Submissions API, write API and MCP request. Never required on the public ingest endpoint.
X-RateLimit-Limit / -Remaining / -ResetheaderresponsePresent on every authenticated API response, so a client can back off before it gets a 429 rather than after.
X-WebForms-Timestamp / X-WebForms-Signatureheaderwebhook deliveryPresent on signed webhook deliveries. See webhook signing.

Form settings

Configured once in the dashboard, or via PATCH /v1/forms/:id.

NameTypeWhereDescription
name, description, isActivestring / string / booleanformBasic identity. An inactive form's endpoint refuses submissions with form_not_found.
fieldsarrayformDeclared field schema (name, type, required, min/max, pattern, options). Drives server-side validation. An empty array plus allowExtraFields accepts anything.
allowExtraFieldsbooleanformWhether fields not declared in fields are accepted (true) or rejected as validation_failed (false).
confirmation.redirectUrlURLformWhere a browser submission redirects on success. Same effect as _next but set once on the form instead of per-request. Free on every plan.
confirmation.successMessagestringformCustom text shown on the default HTML success page when no redirect is set. Free on every plan.
confirmation.thankYouTitlestring, max 100form (Pro/Agency)Replaces the default “Thanks!” heading on the built-in confirmation page.
confirmation.forceJsonbooleanform (Pro/Agency)Always respond with JSON on a successful plain-form submit, even without an Accept header. A redirect (from _redirect, _next, or confirmation.redirectUrl) still wins over this.
confirmation.customJsonSuccessobject of string:string, up to 20 entriesform (Pro/Agency)Extra fields merged into the JSON response on a successful submit. Key names cannot collide with a field the response already sends (ok, id, alert, message, and so on).
confirmation.customJsonErrorobject of string:string, up to 20 entriesform (Pro/Agency)Same as customJsonSuccess, merged into the JSON body on validation failure or another error response.
notificationTemplateIdstringformWhich template renders the delivery email - a built-in id, or a custom template's id.
autoResponder.enabled / subject / body / fromNameboolean / string / string / stringformThe confirmation email sent back to the person who submitted, separate from your own notification.
allowedOriginsstring[]form (Pro/Agency)Hostnames (or *.example.com wildcards) allowed to submit to this form. A request from anywhere else is refused before it is validated or stored.
uploads.allowFileUploads / maxFileSizeMb / allowedFileTypesboolean / number / string[]formSee file uploads for limits and blocked-extension detail.

Spam configuration

The spamConfig object accepted by the same PATCH endpoint. Full scoring model and worked examples on the spam protection page.

NameTypeWhereDescription
honeypot / honeypotFieldboolean / stringspamConfigTurn the honeypot trap on/off and name the field. Default field name is _gotcha.
timeTrapMsnumber, default 2000spamConfigMinimum time between the form rendering (_start_time) and the submission arriving. Faster is treated as a bot.
captcha"none" | "turnstile" | "hcaptcha" | "recaptcha"spamConfigWhich captcha provider's token to verify server-side, if any.
aiClassifierbooleanspamConfigRun submission content through the AI spam classifier as an additional signal.
thresholdnumber 0-1, default 0.6spamConfigCombined score at or above this is quarantined rather than delivered.
blockedDomains / blockedKeywordsstring[]spamConfigExact-match email domains and keywords that add to the score.
blockDisposableEmailboolean, default truespamConfigFlag known disposable/temporary email domains.

Get your endpoint

Free for 300 submissions a month. No card required.

Start free