Form Submitted

trigger.formstack_event
TriggerBusiness appsconnection requiredruns in-engine

Registers a webhook on the tenant's Formstack form at publish and starts one run per submission, verified against the HMAC secret Mantle registered.

Start a run when a Formstack form receives a new submission.

Connection

Required
Yes — the node will not save without one
Auth type
API key
Providers
Formstack
Secret shape
the Formstack personal access token (fs_pat_…)
Resolved by
config.connection_id, else the tenant's single formstack connection
Note
The token needs access to the form's webhooks — a token that can read submissions may still fail to publish. Publishing also needs MANTLE_APP_PUBLIC_BASE_URL set to a URL Formstack can reach.

Configuration

2 fields, 1 required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.

FieldTypeRequiredDefaultConstraintsExample
form_id
The numeric id of the form to listen to — the digits in the form's Formstack URL. A Formstack webhook fires on every submission of one form; there are no event types to choose from.
stringYes—matches ^\d+$2721234
field_keys
How the delivery names each answer: by the field's label (field_names), its numeric id (field_ids), an API-safe label, or the internal label. Pick field_ids when the labels get edited, because a renamed field silently changes every key otherwise.
stringNofield_namesone of "field_names", "field_ids", "api_friendly_field_names", "internal_labels", "internal_labels_api_friendly"—

Example configuration

Every value below is the contract’s own example or default — nothing invented.

{
  "field_keys": "field_names",
  "form_id": "2721234"
}

Output

One shape.

formstack submission

The submitted entry. `fields` keys are the form's own field names, so the shape is open below the declared fields.

Extra keys beyond the ones listed can appear.

FieldTypeExample
form_id
The Formstack form the entry was submitted on, as sent in the delivery's FormID. Useful when several published workflows share a downstream step.
string2721234
submission_id
Formstack's UniqueID for the entry, and this trigger's idempotency key: a redelivery carries the same id and joins the run it already started instead of starting a second one. Pass it to formstack.get_submission to read the entry back with its field metadata.
string1234567890
fields
The submitted values, with the envelope keys (FormID, UniqueID) removed. The key names are whatever 'How fields are named' asked for, which is why this object's own keys are not declared.
object{"Email":"ada@example.com","Message":"Please send the brochure.","Name":"Ada Lovelace"}
payload
The delivery exactly as Formstack sent it, for anything the fields above do not lift out.
object—
{
  "fields": {
    "Email": "ada@example.com",
    "Message": "Please send the brochure.",
    "Name": "Ada Lovelace"
  },
  "form_id": "2721234",
  "payload": {
    "Email": "ada@example.com",
    "FormID": "2721234",
    "Message": "Please send the brochure.",
    "Name": "Ada Lovelace",
    "UniqueID": "1234567890"
  },
  "submission_id": "1234567890"
}

Notes

  • Publishing creates the webhook on the form; unpublishing, disabling or archiving deletes it, so a form never keeps delivering to a dead workflow.
  • One run per submission, idempotent on Formstack's UniqueID — a redelivery cannot start a second run.
  • The webhook is registered with contentType=json; Formstack's own default (urlencoded) would arrive as a body Mantle cannot parse.
  • A Formstack webhook has no event types: every submission of the form starts a run. Use a filter node if only some submissions should continue.

See Form Submitted run in a workflow.

In a technical demo we add the Formstack connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.