Calimatic Connect|Documentation
PricingSign In

Flow Step Types

Calimatic Connect flows support 13 step types. Each step processes data from the trigger or previous steps and passes its output to the next step in the chain.

Core Steps

Action

Execute a named operation on a connected provider. Choose a provider type, select an action (e.g. "send_email", "create_contact"), and map input fields using template expressions.

// Input mapping with template expressions
{
  "to": "{{trigger.email}}",
  "subject": "Welcome, {{trigger.name}}!",
  "body": "Thanks for signing up."
}

Filter

Continue the flow only if a condition is true. If the condition is false, the flow stops early (silently, not as an error). Supports ==, !=,>, <, >=, <=.

trigger.email != '' and step_1.success == true

Delay

Pause execution for a specified number of milliseconds (max 30,000ms in serverless mode). Useful for rate limiting between API calls.

Formatter

Transform a value. Operations: identity, uppercase,lowercase, trim, to_number.

Branching & Loops

Branch (N-way Paths)

Route execution down one of multiple paths based on conditions. Define any number of named paths, each with an expression. The first matching path is taken. An elsepath acts as the fallback when no condition matches.

Upgrade note: Branch steps now support N-way paths (not just if/then/else). Legacy binary branches continue to work unchanged.
// config.paths — evaluated in order
[
  { "label": "vip",     "expr": "trigger.plan == 'enterprise'" },
  { "label": "paid",    "expr": "trigger.plan != 'free'" },
  { "label": "else",    "expr": "" }
]

Child steps are assigned to a path via config.parentStepId andconfig.branchPath (set to the path label).

Loop

Iterate over an array from the context. For each item, the loop's child steps execute. Access the current item via {{step_N_item.value}} and the index via{{step_N_item.index}}.

Plan limits: Free: 10 iterations, Starter: 50, Professional: 200, Team+: 1,000.

// config
{ "arrayPath": "trigger.items" }

// Inside the loop, each iteration has:
// step_N_item.value  — the current array element
// step_N_item.index  — 0-based index
// step_N_item.total  — array length

Sub-Flow

Execute another flow as a step. The sub-flow receives this step's resolved input as its trigger data. The sub-flow's output becomes this step's output.

Recursion guard: Sub-flows can nest up to 5 levels deep. Exceeding this limit returns an error.

Data Steps

Table Lookup

Look up a single row in a Table by matching a column value. Output: {{step_N.row.column}} and {{step_N.found}}.

Table Upsert

Insert or update a row by external key. If a row with the same key exists, it's updated; otherwise a new row is created. Output includes {{step_N.created}}.

Table Write

Append a new row unconditionally. Use for event logs, audit trails, and append-only data.

Record to Table

Copy a Record into a user Table via upsert. Useful for materializing ingested webhook data into structured tables.

Advanced Steps

Code

Professional plan required. Code steps are available on Professional, Team, and Enterprise plans.

Run custom JavaScript in a sandboxed environment. The sandbox has access to input(the resolved input mapping) and must set output to return data. Console output is captured in _logs.

Security: No access to require, process,fs, net, or any Node.js globals. 5-second timeout.

// Example: transform and validate data
const name = input.name || 'World';
const email = input.email || '';
const isValid = email.includes('@');

output = {
  greeting: `Hello, ${name}!`,
  isValid,
  normalized_email: email.toLowerCase().trim(),
};

AI

Professional plan required. AI steps call external LLM APIs and count toward your task quota.

Call an AI model (Anthropic Claude or OpenAI GPT) with a prompt template. Supports system prompts, configurable temperature, and model selection.

// config
{
  "provider": "anthropic",
  "model": "claude-sonnet-4-5-20241022",
  "systemPrompt": "You are a lead qualification assistant.",
  "temperature": "0.3"
}

// input (supports templates)
{
  "prompt": "Qualify this lead:\nName: {{trigger.name}}\nCompany: {{trigger.company}}\nScore 1-10."
}

// output
{
  "response": "Score: 8/10. Enterprise company...",
  "usage": { "input_tokens": 45, "output_tokens": 120 }
}

Retry Configuration

Any step (except filter and branch) can be configured with automatic retry on failure. Set via the step's retry config:

  • maxRetries (0-5): number of retry attempts after the first failure
  • backoffMs: initial delay before first retry (milliseconds)
  • backoffMultiplier: multiplier applied to delay after each retry (exponential backoff)
// retry_config on a step
{
  "maxRetries": 3,
  "backoffMs": 1000,
  "backoffMultiplier": 2
}
// Retry 1: 1000ms, Retry 2: 2000ms, Retry 3: 4000ms

Template Expressions

All step inputs support template expressions to reference data from the trigger or previous steps:

  • {{trigger.field}} — data from the trigger event
  • {{step_1.field}} — output from step 1
  • {{step_2.row.email}} — nested field from step 2
  • {{step_N_item.value}} — current loop iteration item