Operion LogoOperion
Nodes

Built-in nodes

Config, ports and output of httprequest, transform, log, conditional, switch, wait and wait_until

Every built-in action has the input port main. A node's output is what later nodes read as {{.node_results.<node_id>...}}, and config strings are templates.

When a node has an error port and fails, the failure goes through it with the reason in error. With nothing connected to error, the execution fails.

httprequest

Calls an HTTP endpoint. It can reach any address the server can, so limit outbound traffic where you run Operion.

{
  "id": "notify",
  "name": "Notify Slack",
  "type": "httprequest",
  "category": "action",
  "config": {
    "url": "https://hooks.slack.com/services/T000/B000/XXXX",
    "method": "POST",
    "body": "{\"text\": \"Welcome, {{.node_results.trigger.body.name}}\"}"
  }
}
ConfigDescription
urlRequired
methodGET (default), POST, PUT, PATCH, DELETE, HEAD or OPTIONS
headersAn object of header names and values
bodyThe request body. When it is set and headers has no Content-Type, the request is sent as application/json
timeoutSeconds, from 1 to 300. Defaults to 30

Ports: success and error.

success sends on status_code, headers, body (the response as text) and json (the response parsed, when it is JSON). A network error, a timeout or a status of 400 or more goes to error.

transform

Builds a value from a template.

{"id": "greet", "name": "greet", "type": "transform", "category": "action", "config": {"expression": "{\"full_name\": \"{{.node_results.trigger.body.first}} {{.node_results.trigger.body.last}}\"}"}}
ConfigDescription
expressionRequired. A template

Ports: success and error. success sends on {"result": <value>}, where the value is an object, a list, a number, a boolean or a string, as described in what a template returns.

log

Writes a line to Operion's log.

{"id": "done", "name": "done", "type": "log", "category": "action", "config": {"message": "order {{.node_results.trigger.body.order_id}} handled", "level": "info"}}
ConfigDescription
messageRequired. A template
leveldebug, info (default), warn or error

Ports: success and error. success sends on message, level and logged.

conditional

Takes one of two paths.

{"id": "big", "name": "Big order?", "type": "conditional", "category": "action", "config": {"condition": "{{gt .node_results.trigger.body.total 1000.0}}"}}
ConfigDescription
conditionRequired. A template

Ports: true, false and error.

The rendered value is true when it is true, a non-zero number, a non-empty list or object, or a non-empty string other than false, 0 and the other spellings of false. Anything else takes false. Both ports send on condition_result and evaluated_value.

switch

Takes the path named after a value.

{
  "id": "route",
  "name": "Route by plan",
  "type": "switch",
  "category": "action",
  "config": {
    "value": "{{.node_results.trigger.body.plan}}",
    "cases": [
      {"value": "basic", "output_port": "basic"},
      {"value": "premium", "output_port": "premium"}
    ]
  }
}
ConfigDescription
valueRequired. A template
casesA list of {"value", "output_port"}. A case matches when the rendered value, as text, equals its value

Ports: one per case output_port, default when no case matches, and error. Connect them as route:premium or route:default. The node sends on matched_value and output_port.

wait

Holds its branch for a duration.

{"id": "cool_off", "name": "Wait three days", "type": "wait", "category": "action", "config": {"duration": "72h"}}
ConfigDescription
durationRequired. A positive Go duration such as 30m or 72h

Port: success, which sends on the data the node received, or the body of an early resume.

wait_until

Holds its branch until a time.

{"id": "on_start", "name": "Wait for the first day", "type": "wait_until", "category": "action", "config": {"until": "{{.node_results.trigger.payload.start_date}}"}}
ConfigDescription
untilRequired. A template that renders an RFC 3339 time, such as 2026-11-03T09:00:00-03:00

Port: success, like wait. A time in the past continues right away. When until does not render a valid time, the execution fails.