HTTP Request
Make an HTTP/HTTPS request to any external API. Supports GET/POST/PUT/DELETE/PATCH, custom headers, JSON or string bodies, templating, and per-request timeout.
Registered Flow canvas node types, source-derived from the workflow-engine node registry.
2 action node types
Make an HTTP/HTTPS request to any external API. Supports GET/POST/PUT/DELETE/PATCH, custom headers, JSON or string bodies, templating, and per-request timeout.
Send a response back to the webhook caller. Sets the HTTP status code, headers, and body for the inbound webhook that triggered this workflow.
21 ai node types
Agent-to-Agent protocol — alias of agent_spawn that takes a 'prompt' (instead of 'task') and routes through openagentic-proxy.
Run a fixed list of agents in parallel through openagentic-proxy. Aggregates their results with the configured strategy (merge/first/vote).
Run one agent through openagentic-proxy with orchestration='parallel'. Returns the unwrapped output plus the per-agent results array.
Spawn a single agent through openagentic-proxy. The proxy resolves the agent role to a DB-backed agent record and runs the task.
Run a supervisor + worker pool through openagentic-proxy with orchestration='supervisor'. The supervisor delegates subtasks to workers.
LLM-driven reduce over an array. Two modes: `reduce` (single LLM call with the entire array serialized into the prompt → one summary string + one usage entry) and `map` (N LLM calls, one per item → array of N results). Uses the SAME /v1/chat/completions endpoint as llm_completion
Send a prompt through Azure OpenAI via the platform's OpenAI-compatible chat-completion endpoint (provider:'azure_openai').
Send a prompt through AWS Bedrock via the platform's OpenAI-compatible chat-completion endpoint (provider:'bedrock').
Read / write / clear / summarize / semantic-search a tenant-scoped chat conversation history. Backs stateful agents and HITL flows that span multiple user turns.
Verify that an LLM-produced claim references only entities that appear in one or more upstream ground-truth sources. Extracts pod-like / component-like tokens from the claim and intersects with tokens present in the truth sources. Deterministic, no LLM round-trip. Use BEFORE noti
Validate content against safety rules (PII, toxicity, prompt-injection). Calls the platform's DLP scanner API; falls back to local regex on failure.
Send a prompt to a chat-completion model via the platform's OpenAI-compatible endpoint. Supports system + user messages, automatic context injection, and Smart Router model selection.
LLM-as-condition. Given a prompt + a configured set of named routes (each with a description), the model picks exactly one route by name. The chosen route is used as the outgoing `sourceHandle` so downstream branches gate naturally. Goes through the SAME /v1/chat/completions endp
Concurrent fan-out across N agents via openagentic-proxy. Falls back to direct LLM batch when openagentic-proxy is unavailable.
Expand one question into N retrieval query variants to widen RAG recall (the 'multi-query retriever' pattern). The default path is a DETERMINISTIC rule-based expander — it derives reformulations (keyword-only, question→statement, synonym/paraphrase prefixes, and the original) wit
Conversational LLM via the platform's Smart Router. Same shape as openagentic_llm — supports modelOverride, sliderPosition, and chain-of-thought thinking.
Build a reusable prompt with {{variable}} placeholders. Outputs either a single rendered string ('prompt' mode) or a structured chat conversation split on {{system}} / {{user}} / {{assistant}} role markers ('messages' mode).
Extended chain-of-thought via the platform's Smart Router. Forces enableThinking:true at max quality (sliderPosition:100). Use for hard problems.
Re-order a list of retrieved chunks by relevance to a query using a deterministic lexical relevance scorer (BM25-style term-overlap with IDF weighting + phrase-match boost). No model round-trip on the default path, so it is deterministic and harness-friendly. Optionally an LLM cr
Force the LLM to emit valid JSON matching the supplied schema. Retries on parse failure.
Send a prompt through Google Vertex AI via the platform's OpenAI-compatible chat-completion endpoint (provider:'vertex').
1 annotation node type
Visual annotation node — passes input through untouched. Useful for documentation/comments embedded in the canvas.
16 control node types
Evaluate a JavaScript expression and route to the matching downstream branch (true/false or custom labels).
Idempotency gate. Computes a key from the configured expression and drops (or errors on) items whose key has already been seen — within the current execution by default, or across executions with an optional TTL window.
Receives routed errors from upstream nodes and handles them via log, notify, transform, or retry actions.
Wrap a saved Flow as a callable tool. Maps caller args to the wrapped flow's trigger input via inputMapping, runs the flow as a sub-execution, and extracts a value at outputExtract from the result. V1: callable from a parent flow; agent dynamic-tool integration is V1.1.
Pause the workflow until a configured approver accepts or rejects. The engine returns control downstream once an approval decision is recorded, or applies the configured timeout action if the timeout elapses first.
Pause the workflow and ask the user to fill a typed form, then resume with their answers. Unlike human_approval (which only yields approve/reject), human_input collects actual values mid-run — a missing parameter, a decision the model can't make, or a credential to bind. Downstre
Iterate over a collection by re-executing the downstream subgraph once per item, with the iteration variable bound in the per-iteration input.
Fan out over an input collection — run the downstream subgraph once per item under a concurrency limit — then reduce the per-item results into a single value (collect, concat, sum, avg, min, max, count).
Combine results from multiple incoming branches into a single output using array, object, or concat strategy.
Fan out to all outgoing branches and execute them in parallel. Returns each branch's result + an aggregate success rate.
Fixed-window throttle for fan-out to rate-limited APIs. Per-(tenant, key) counter; choose block (sleep until reset), drop (return without invoking), or error (throw) on overflow.
Wraps a downstream operation and retries it with exponential backoff on failure. Returns the first successful result; throws a clear error naming the last failure once all retries are exhausted.
Invoke another saved workflow by id and inline its output. Lets you compose flows the way you compose functions.
Evaluate an expression and route to the matching case branch. Supports a default fallback case.
Pause workflow execution for a specified duration. Short waits (< 30 s) sleep in-process; long waits store state and schedule a resume.
Poll an expression until it becomes truthy (or a timeout elapses). Differs from `wait`, which sleeps a fixed duration. Useful for: 'wait until job_status == done', 'wait until pod ready', 'wait until queue depth < N'. Reference: n8n's Wait node 'until condition' variant + the n8n
20 data node types
Statistical anomaly detection over a time-series window. Flags outliers and exposes a top-level hasAnomaly verdict for downstream branch nodes (policy_guard, runbook_executor, etc.).
Parse CSV text into records (objects keyed by header) or rows (string arrays). V1 ships text-mode only; binary/file mode is a follow-up after the binary data plane lands.
Run a vector / collection query against a configured datasource. Returns the matching results so downstream nodes can summarise, rank, or feed an LLM.
Run a query against a configured DataSource. Supports raw SQL/REST queries (mode='raw') and natural-language questions that the platform translates to SQL (mode='nl'). Distinct from data_query which performs vector search.
Fetch a document from a URL (or pass through inline input). Optional parseMode strips HTML or pretty-prints JSON.
Generate vector embeddings for one or more texts via the platform's /api/v1/embeddings endpoint. Falls back to /api/v1/vector/embed on primary failure.
Pull a single value at a dot/bracket path from an object, with optional default. Replaces the transform-extract case for the common 'give me steps.X.data.id' pattern.
Upload content for chunking + embedding into a Milvus collection via the platform's /api/files/embed endpoint.
Filter an array by a typed field predicate. Replaces the JS-expression-only path through `transform` for the common 'keep rows where X' case.
Ingest content into a Milvus knowledge base via the platform's /api/chat/knowledge/ingest endpoint.
Semantic search against the platform knowledge base (shared_knowledge + the calling user's private collection) via /api/chat/knowledge/search. Returns ranked chunks merged across both. Pair this with knowledge_ingest: the ingest endpoint writes to shared_knowledge / user_<id>_pri
Parse a JSON string into a structured object. Replaces the JS-expression-only path through `transform` for the common 'LLM returned a JSON string' case.
Run a semantic search against a Milvus collection via the platform's /api/v1/vector/search endpoint. Returns ranked results with optional score threshold.
Apply a regex pattern to a string. Supports match, replace, and test modes. Replaces the JS-expression-only path through `transform` for pattern extraction and substitution.
Persist arbitrary text content to the artifact store (MinIO/GCS/Azure via the platform's BlobStorageService). Returns {artifactId, url, sizeBytes, mimeType}. Text payloads only for now — binary mode lands when the binary plane (Tier 2 #5) is wired through. For string-valued flow
Pick or omit specific fields by dot-path from an object or each row of an array. Replaces the JS-expression-only path through `transform` for the common 'project these columns' case.
Split text into chunks for embedding. Strategies: recursive (separator-aware) or fixed (fixed-size). Runs in-process, no HTTP.
Apply map, filter, reduce, or extract operations to the input using sandboxed JavaScript expressions.
Inject the calling user's profile, memories, and recent chats into the workflow. Calls the platform's /api/user-context endpoint.
Upsert or delete vectors in a Milvus collection via the platform's /api/v1/vector/store endpoint. Falls back to /api/files/embed when the primary endpoint fails.
10 integration node types
Send a message to a Discord channel via webhook. Supports plain content, custom username, and embeds.
Create a Jira issue via REST API v3. Auth via JIRA_BASE_URL + JIRA_EMAIL + JIRA_API_TOKEN env vars.
Invoke an MCP (Model Context Protocol) tool through the platform's mcp-proxy. Auth runs as the user (OBO federation for AWS/Azure).
Send an email via Microsoft 365 / Outlook SMTP (smtp.office365.com:587). Credentials read from OUTLOOK_USER / OUTLOOK_PASSWORD env vars (or SMTP_USER / SMTP_PASS fallback).
Trigger / acknowledge / resolve a PagerDuty incident via Events API v2. Supports dedupKey, severity, custom_details, and client/client_url fields.
Send email via SMTP. Requires explicit per-node credentials — either literal values or {{secret:NAME}} workflow-secret references. No env-var fallback (2026-05-15 hardening: every flow that sends mail must carry its own credentials).
Create a ServiceNow record via the REST Table API. Defaults to creating an incident; supports any configurable table (change_request, problem, etc).
Send a message to a Slack channel via incoming webhook. Supports templated text, channel override, and Block Kit blocks.
Run SPL searches, acknowledge notable events, or push events via HEC against Splunk Enterprise / Splunk Cloud REST APIs.
Post a message to a Microsoft Teams channel via incoming webhook. Supports plain text or Adaptive Cards.
1 trigger node type
Workflow entry point. Emits the input as the first event so downstream nodes can reference it via {{trigger.body.*}} and {{trigger.<key>}}.