Basics

Triggers & activation

Every trigger step (webhook, schedule, watch, email, text, form, upload, manual, sub-workflow) and what activating a workflow does: snapshots and gates.

A workflow is active or inactive. Active means its triggers fire against the pinned snapshot; inactive means nothing runs unless you click run on the canvas. Every workflow starts from exactly one kind of trigger step, found under Start in the Blocks palette. There are nine.

Webhook

The webhook step gives you a unique URL under /webhooks/… with a per-webhook bearer token (or HMAC signing). POST a JSON body to fire the workflow; the payload becomes the trigger step's output, with the caller's JSON under payload.body. Response mode decides what the caller gets back: immediate (202 at once), last_step (wait for the run and return the final output) or respond_step (a respond to webhook step crafts the reply).

The same step also has an App event source: pick a connected app (Slack, GitHub) and its events start the workflow with no URL at all. See the webhook step.

While building, put the webhook into listening mode and send a real request from the source system. MadMax captures the payload and uses it as the sample every downstream step verifies against.

Schedule

Cron-style schedules (*/15 * * * *) with a timezone, DST included. The schedule fires only while the workflow is active, and always against the pinned snapshot, so edits after activation don't change what runs until you publish them. Plans cap how often a schedule can fire and how many scheduled workflows can be active at once; the activation gate tells you when you're over. See schedule.

Watch

A poll: on a cron schedule the step calls a connected app's list or search operation, remembers what it has seen (deduped by a unique field such as id), and runs the workflow once per new item. The first poll records a baseline without firing, so activating doesn't flood on a backlog. See watch.

Email trigger

The step mints its own address (wf-…@in.madmax.build). Mail from an allowed sender whose domain passes SPF/DKIM/DMARC starts the workflow with the subject, text, html and attachments as payload. See email trigger and email.

Text trigger

Text the platform number from a phone verified in Settings → messaging and the workflow runs with your message as payload. There is nothing to configure on the step. See text trigger.

Form

A hosted web form at a public URL; each submission fires the workflow with one payload key per field. Fields are text, textarea, email, number, dropdown, date or file. See form.

File upload

A public upload page that accepts documents (PDF and images by default, with a per-file size cap) and fires with payload.files, a list of file descriptors ready for an extract step or a loop. See file upload.

Manual

No auto-firing trigger at all: the workflow runs when you click run. Active workflows run their snapshot; add draft: true on an API run (or run an inactive workflow from the canvas) to exercise the live canvas instead. See manual.

Sub-workflow

Makes the workflow callable from another workflow's call workflow step. Internal only, no external URL; Pass payload through decides whether the caller's inputs reach the next step. See sub-workflow.

Activation gates

Activate (the topbar off / live switch) refuses politely when the graph isn't runnable yet:

  • no trigger step at all (a manual trigger counts)
  • steps with missing required config or connections
  • broken references to steps that don't exist or aren't upstream
  • expression errors in a step's config
  • a call workflow step that targets this same workflow
  • schedules tighter than the plan allows, or more active schedules than the plan allows across the workspace

Fix what it names and activate again. Deactivating stops triggers immediately: a webhook URL answers 404, schedules don't run, and other workflows can't call it. The snapshot stays for audit and re-activation is one click.

Related