Build and connect data
- Choose a manual, scheduled, GitHub, or source-upload trigger.
- Add HTTP, AI, Slack, email, condition, switch, Set, For each, Sequence, or Retry nodes.
- Connect execution order on the canvas.
- Open a node’s Inputs section. Select a typed literal, an upstream field, or a text template. Use Configuration for provider and action settings.
- Review Outputs for expected fields. Test results show actual redacted values.
Summary: {{ nodes.summarize.text }}. Missing required values stop the action. Fields from a conditional branch need an optional binding or fallback because that branch may be skipped.
HTTP JSON responses have an unknown shape until you declare output fields such as json.items with type array. Samples help discover fields but do not guarantee their presence. HTTP bodies can be structured JSON; binding resolution happens before serialization, so quotes and line breaks remain valid JSON. AI nodes can declare structured json.* output fields.
Loops and branching
For each requires an array. Connect Each item to the body, select the body nodes in the inspector, and connect Done to the next step. Body nodes can read the loop’sitem and index. Configure collected output bindings to expose iterationOutputs after the loop. Items run sequentially; an empty array follows Done with an empty result. Nested loops are not supported.
Sequence runs multiple downstream paths in a fixed order. Add named outputs on the node, connect one path to each output handle, and list the outputs in the order they should run. The workflow finishes the first path completely before starting the next. Use it when later steps must wait for earlier paths to finish, for example sending Slack before email.
Retry wraps steps that may fail with transient errors. Connect Attempt to the body (same body-selection pattern as For each). Connect Succeeded when the body finishes without a retryable failure, or Exhausted when all attempts are used. Defaults are 3 attempts, a 1 second initial delay, 2× backoff, and jitter; the cap is 10 attempts. Only configured error codes retry (defaults include HTTP and node execution failures). Delays between attempts use durable backoff so runs survive restarts.
Retry bodies cannot nest another Retry or For each. When the body calls Slack, email, AI, or non-idempotent HTTP actions, enable Acknowledge duplicate risk in the Retry configuration, or make HTTP calls idempotent (GET, or a custom Idempotency-Key header on POST). Publish validation blocks non-idempotent retry bodies without that acknowledgement. Retry outputs include attemptNumber, exhausted, and optional lastErrorCode / lastErrorMessage.
Conditions use true/false connections. Switches use case/default connections. Action failures can stop, continue with a visible handled error, or select an error branch. A merge waits for all incoming connections to settle and runs if any is selected.
Test, save, and publish
Tests default to mock mode. Enter a trigger payload and optional per-action mock outputs. Mock execution follows the same bindings, branches, and loops without calling external services. Select live explicitly to test real integrations. Live testing can send notifications and change external systems. It never publishes your draft. Save updates the draft. Publish validates and activates an immutable version. Active workflows continue using the published version while you edit or test. Concurrent changes return a conflict rather than overwrite another editor’s work. Pause prevents new automatic runs; it does not cancel existing runs.Credentials
Create or select an organization credential for HTTP authentication. Sensitive header and body fields can reference a credential using a destination such asheaders.X-API-Key or body.token. Do not place credentials in URLs or literal authentication fields. Slack and email use the existing organization connections.

