Configure a feed
1
Add the Webhooks integration
On a form, add a Webhooks feed from the integrations panel.
2
Set the request URL
HTTPS only. Supports
{{field_name}} merge tags for dynamic paths (e.g. https://example.com/hooks/{{plan}}).3
Choose method and format
POST (default), GET, PUT, PATCH, or DELETE. POST/PUT/PATCH send json or form (application/x-www-form-urlencoded) bodies; GET/DELETE always send data as query params.4
Add custom headers (optional)
One
HEADER=value per line. Values support the same {{field_name}} merge tags. Host, Content-Length, and Transfer-Encoding are always stripped for transport safety.5
Pick the body
All fields sends every answer keyed by field name, optionally with submission meta (
form_id, form_title, submission_id, submitted_at). Select fields sends only the KEY=field_name (or literal) pairs you list.Payload shape
SSRF protection
Every resolved URL — after merge-tag interpolation — is validated before a request is sent:HTTPS only, standard ports
HTTPS only, standard ports
Only
https:// is accepted, on port 443 or 8443. Any other scheme or port is rejected.No embedded credentials
No embedded credentials
URLs containing a userinfo component (
https://user:pass@host/...) are rejected outright.Private, loopback, and metadata hosts are blocked
Private, loopback, and metadata hosts are blocked
localhost, *.local, *.localhost, cloud metadata hosts (metadata.google.internal, kubernetes.default, …), and any hostname or literal IP that resolves to a private/reserved range (RFC1918, loopback, link-local) are rejected.DNS is resolved, re-checked, and pinned when possible
DNS is resolved, re-checked, and pinned when possible
A hostname’s resolved A/AAAA records are checked at sanitize time — a public-looking hostname that resolves to a private IP is still blocked. Immediately before the HTTPS request, Flex Forms re-resolves and, when curl is available, pins those public IPs via
CURLOPT_RESOLVE so the connect prefers the audited addresses.Residual TOCTOU: Pinning reduces DNS-rebinding risk but cannot eliminate a theoretical race between the second resolve and the TCP handshake if an authoritative DNS answer changes in that window. Prefer allowlisted, stable HTTPS endpoints you control.