Workflows

Workflows overview

Automate what happens after a form is submitted — approvals, notifications, integrations, and more.

Anatomy of a workflow

  • Triggersubmission.created, schedule, or an inbound webhook.
  • Nodes — discrete units of work: send email, call HTTP, route approval, transform data, etc.
  • Edges — conditional transitions between nodes.
  • Runs — each execution, with structured logs and per-node timing.

Example definition

typescript
{
  trigger: "submission.created",
  nodes: [
    {
      id: "notify",
      type: "email",
      to: "ops@acme.com",
      subject: "New {{form.title}} submission",
    },
    {
      id: "slack",
      type: "slack",
      channel: "#sales",
      message: "New lead from {{data.email}}",
    },
  ],
  edges: [{ from: "notify", to: "slack" }],
}

Execution semantics

Runs are durable and idempotent — if the server restarts mid-run, the engine resumes from the last completed node. Failed nodes are retried with exponential backoff (configurable per node).