Webhooks · Last updated April 23, 2026
Templates & variables
Every webhook picks one of two payload modes. The editor shows a live preview of the exact request as you type, so you can dial the shape in before saving.
Payload modes
| Mode | When to use it |
|---|---|
raw | Sends the full submission wrapped in a small envelope. Best for Zapier, n8n, or your own backend — anywhere you want every field accessible. You can optionally rename or drop fields with the field rename map. |
template | Sends a custom JSON shape that you write, with {{fieldName}} placeholders. Required for Slack and Discord. |
Raw envelope
When raw mode is selected, SaveForm posts this shape — your original submission fields live under data.
{
"submissionId": "sub_01HTXN…",
"formName": "Contact form",
"receivedAt": "2026-04-20T09:12:44.128Z",
"isSpam": false,
"data": {
"name": "Ada Lovelace",
"email": "ada@example.com",
"message": "Hello from SaveForm"
}
}Internal control fields like _honey, _redirect, and _emailTo are stripped before the envelope is built.
Placeholders
Inside a template, use {{fieldName}} to insert any field from the submission. When a placeholder is the entire string, the original JSON type is preserved — numbers stay numbers, booleans stay booleans. When it is mixed with other text, the value is stringified.
{
"text": ":inbox_tray: New submission to *{{_formName}}*",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "{{_allFieldsText}}"
}
},
{
"type": "context",
"elements": [
{ "type": "mrkdwn", "text": "Submission `{{_submissionId}}` · {{_timestamp}}" }
]
}
]
}Helper variables
A handful of meta-variables are always available alongside the submission fields.
| Variable | Description |
|---|---|
{{_submissionId}} | Unique ID for this submission — stable, safe to reference. |
{{_formName}} | Human-readable form name as shown in the dashboard. |
{{_timestamp}} | ISO 8601 timestamp when the submission was received. |
{{_isSpam}} | Boolean spam flag (true / false, not a string). |
{{_allFieldsText}} | Multi-line markdown summary of every field, formatted as *field*: value. Handy for Slack/Discord bodies. |
Field rename map
In raw mode, you can rename or drop fields before they hit the wire without touching your HTML. Open the Field rename section in the editor and map source keys to their new name — set a target to an empty string to drop the field.