Skip to content

Step Types

This page lists all workflow step types currently supported by the orchestrator.

Source of truth: the WorkflowStep discriminated union in engine/services/orchestrator/app/workflow_runner.py.

How To Read This Page

  • Every step has id and type.
  • Most steps support when for conditional execution.
  • Many steps support run_after and compensate through shared mixins.

Transformation Steps

xslt

Apply an XSLT transform to XML input.

  • Typical fields: input_from, xslt or xslt_file.
  • Notes: xslt_file is resolved from workflow artifacts when inline xslt is not provided.

xml2json

Convert XML input to JSON output.

  • Typical fields: input_from.

json2xml

Convert JSON input to XML output.

  • Typical fields: input_from.

liquid

Apply a Liquid template to a JSON input.

  • Typical fields: input_from, template or template_file.
  • Notes: template_file is resolved from workflow artifacts when inline template is not provided.

javascript

Run inline JavaScript for custom transformation logic.

  • Typical fields: input_from, code.
  • Notes: execution is controlled by inline JavaScript security settings in orchestrator environment variables.

json_set

Set or replace a value in a JSON payload using a JSON pointer path.

  • Typical fields: input_from, json_path, value_from, mirror_to_context.

xml_set_text

Set text or an attribute value on an XML node selected by XPath.

  • Typical fields: input_from, xpath, value_from, attribute, mirror_to_context.

Integration Steps

http

Call an HTTP endpoint through the egress HTTP service.

  • Typical fields: http.method, http.url or http.path, http.body_from, http.headers, http.timeout_seconds.
  • Optional features: connection, retry_policy, circuit_breaker, async_wait.

ftp

Read from or write to an FTP endpoint through the egress FTP service.

  • Typical fields: ftp.action, ftp.remote_path, ftp.body_from, ftp.body_encoding, connection.

ssh

Execute a command over SSH through the egress SSH service.

  • Typical fields: ssh.command, ssh.timeout_seconds, optional private key fields, connection.

sftp

Read from or write to an SFTP endpoint through the egress SSH/SFTP service.

  • Typical fields: sftp.action, sftp.remote_path, sftp.body_from, sftp.body_encoding, connection.
  • For change polling with sftp.action: list, use:
    • sftp.since_epoch (static cursor)
    • sftp.since_epoch_from (dynamic cursor from context/step)
    • sftp.limit (max list results)

imap_peek

Inspect an IMAP mailbox through the egress IMAP service.

  • Typical fields: connection, action, mailbox, filter.
  • action values:
    • peek: legacy summary (emailsCount + lastSubject)
    • list: list message headers using limit
    • read: load one message (message_id or message_id_from) with optional body/attachments
  • Useful options for read: include_body, include_attachments, attachment_max_bytes, mark_seen.

smtp_send

Send an email through the egress SMTP service.

  • Typical fields: connection, to, subject, body_from, is_html, from_override.
  • Additional fields:
    • recipients: cc, bcc, reply_to
    • dual body: text_body_from, html_body_from
    • attachments: attachments (static list) or attachments_from (JSON list from previous/context)

rabbitmq_publish

Publish a message to RabbitMQ through the egress RabbitMQ service.

  • Typical fields: rabbitmq.message_from, rabbitmq.exchange, rabbitmq.routing_key, rabbitmq.properties, rabbitmq.headers, connection.

Storage Steps

storage_read

Read a value from the runtime storage service.

  • Typical fields: storage_read.bucket, storage_read.key, storage_read.output_field, storage_read.write_context_key.

storage_write

Write a value to the runtime storage service.

  • Typical fields: storage_write.bucket, storage_write.key, storage_write.value_from, storage_write.content_type, storage_write.write_context_key.

Context Steps

context_set

Set a context key from a literal value or a resolved reference.

  • Typical fields: context_key, value or value_from.

context_bind

Parse JSON, XML, or YAML once under a document alias; later steps query fields via path refs (request:json:/field). See Bound documents.

  • Typical fields: alias, input_from, format (auto | json | xml | yaml).

context_extract_json

Extract a value from JSON using a JSON pointer and store it in context.

  • Typical fields: input_from, json_path, context_key.

context_extract_xml

Extract a value from XML using XPath and store it in context.

  • Typical fields: input_from, xpath, context_key.

Control-Flow Steps

if

Branch execution based on a condition.

  • Typical fields: condition, then_steps, else_steps.
  • condition.context_key reads the run context (string compare). Use context_extract_json / context_extract_xml with input_from: <step_id> to branch on service_call or trigger payload fields — see Conditions & Path Expressions.

try

Run nested steps and optionally handle failures with catch substeps.

  • Typical fields: steps, catch (or catch_steps), rethrow (default false), error_context_key.
  • On failure the error message is stored in context before catch substeps run.
  • When rethrow is false, the try step succeeds after catch and the workflow continues.

for_each

Iterate over array items and run nested steps for each item.

  • Typical fields: input_from, items_path, as_key, index_as, steps, max_iterations.

repeat_until

Repeat nested steps until a condition matches or max iterations is reached.

  • Typical fields: steps, until, max_iterations.

parallel

Run nested steps concurrently and merge selected outputs.

  • Typical fields: steps, max_concurrency, fail_fast, outputs_map.

collect

Merge outputs from previous steps into one JSON object or array.

  • Typical fields: from_steps, merge_mode, try_parse_json.

wait

Pause execution for a fixed duration in seconds.

  • Typical fields: seconds.

workflow_call

Invoke another workflow as a nested child run.

  • Typical fields: target, payload, output_key, timeout_seconds.
  • Runtime behavior:
    • Inherits call-chain context for cycle detection.
    • Inherits parent timeout budget (optionally capped by timeout_seconds).
    • Emits parent/child trace linkage metadata.

Operational Steps

log

Write a structured log message and optionally store the rendered message in context.

  • Typical fields: level, message, values, tags, into.

terminate

Stop workflow execution intentionally with a declared run status.

  • Typical fields: status, reason, http_status.

Quick Cheat Sheet

Step Type Category Typical Input Typical Output Side Effects
xslt Transformation XML (input_from) XML/text No external side effect
xml2json Transformation XML JSON string No external side effect
json2xml Transformation JSON string XML string No external side effect
liquid Transformation JSON string + template Rendered text No external side effect
javascript Transformation Any string input + context String result No external side effect
json_set Transformation JSON + value reference Updated JSON string Optional context write
xml_set_text Transformation XML + value reference Updated XML string Optional context write
http Integration Request body reference Response body string Outbound HTTP call
ftp Integration Optional payload data JSON result string FTP read/write
ssh Integration Command + optional key/password JSON result string Remote command execution
sftp Integration Optional payload data JSON result string SFTP read/write
imap_peek Integration Mailbox/filter config IMAP response payload Mailbox query
smtp_send Integration Recipients + body reference Sent body/result Email send
rabbitmq_publish Integration Message reference + routing metadata Publish result payload RabbitMQ publish
storage_read Storage Bucket/key Selected value Runtime storage read
storage_write Storage Bucket/key + value reference Write response payload Runtime storage write
context_set Context Literal value or reference Pass-through previous Context mutation
context_bind Context Document text Pass-through raw text In-memory parsed document registry
context_extract_json Context JSON + json pointer Extracted value Context mutation
context_extract_xml Context XML + xpath Extracted value Context mutation
if Control Flow Condition + nested steps Branch result Branching only
try Control Flow Nested try/catch steps Last substep output Optional error recovery
for_each Control Flow Array source + nested steps JSON array of iteration outputs Context + scoped output mutation
repeat_until Control Flow Until condition + nested steps Last iteration result Repeated execution until match
parallel Control Flow Nested steps Merged JSON object Concurrent execution
collect Control Flow References to prior outputs Merged JSON object/array Aggregation only
wait Control Flow Seconds Pass-through previous Time delay
workflow_call Control Flow Target workflow + optional payload Child workflow final output Nested run invocation + trace linkage
log Operational Message template + values Rendered message Audit/application log write
terminate Operational Status metadata Terminates run Stops workflow immediately