connections array at the root of your YAML file and fire once, when the submission status becomes completed — that is, when the user submits the final section.
Connections do not fire for partial saves. If a user submits section 1 of a multi-section form and then abandons it, no connections fire.
Webhook
Sends an HTTP POST to a URL with the full submission as the request body.| Property | Type | Required | Description |
|---|---|---|---|
type | "webhook" | Yes | Must be webhook. |
url | string | Yes | The endpoint to POST to. |
Content-Type: application/json:
{{variable}} interpolation in to, subject, and body.
| Property | Type | Required | Description |
|---|---|---|---|
type | "email" | Yes | Must be email. |
to | string | Yes | Recipient address. Supports Handlebars. |
subject | string | LocaleMap | Yes | Email subject. Supports Handlebars. |
body | string | LocaleMap | No | Email body. HTML is supported. Supports Handlebars. |
include_responses | boolean | No | Auto-appends an HTML table of all field responses to the body. |
data— submission data object (one key per field ID)form— form object
subject and body support LocaleMap. When using locale maps with Handlebars:
Airtable
Creates a new row in an Airtable base. Setup: Navigate tohttps://app.declarativeforms.com/oauth/airtable — you’ll be redirected through an OAuth2 flow to authorize access to your Airtable workspace. After authorizing, you’ll receive a connection_id to use in your YAML.
| Property | Type | Required | Description |
|---|---|---|---|
type | "airtable" | Yes | Must be airtable. |
connection_id | string | Yes | OAuth connection ID from the setup flow. |
base_id | string | Yes | Airtable base ID — starts with app. |
table_id_or_name | string | Yes | Table name (e.g., "Applications") or table ID. |
submission.data as the Airtable fields object. Your form field IDs must match Airtable column names exactly. For example, if your form has full_name, role, and email, your Airtable table must have columns named full_name, role, and email.