Actions Overview

Built-in, dynamic, and logic actions in B3OS

Actions Overview

Actions are the building blocks of workflows. Each action node performs a specific operation and passes its result to downstream nodes.

Action Categories

Execute directly within the workflow engine. Fast, no external calls.

ActionDescription
logLog a message with timestamp
delayPause execution for a duration
filterFilter an array using MongoDB-style DSL
formatFormat data into strings using templates
pluckExtract a field from each object in an array
regexExtract named capture groups from text
storageSet workflow-scoped key-value pairs
org-storage-getRead organization-scoped storage
org-storage-setWrite organization-scoped storage
org-storage-listList organization storage keys
code-transformExecute custom JavaScript transformations
send-webhookSend HTTPS POST to an external URL
trigger-workflowTrigger another workflow (fire-and-forget)
deploy-contractDeploy a smart contract
verify-contractVerify contract source code
db-queryExecute SQL on org's D1 database
x402-endpointCall a payment-gated API endpoint

See Built-in Actions for full details.

Control flow actions that determine execution order.

ActionDescription
ifConditional branching (then/else)
for-eachLoop over an array, running a subgraph per item
waitPause execution until an external event resumes it

Note
The for-each action has hard limits: 100 iterations per loop, 10,000 total nodes, and 10 nesting levels.

Execute via the b3os-actions service. These interact with external APIs and blockchain networks.

CategoryExamples
EVM On-ChainSend tokens, swap, deploy contracts, read/write contracts
DeFiAerodrome, Morpho, CoW Swap, Uniswap
DataCoinGecko, Coinglass, DeBank, Dune, Zerion
MessagingSlack, Discord, Telegram, Email
Prediction MarketsPolymarket trading, positions, orderbook
UtilityHTTP requests, AI chat, math operations

See the Actions tab for provider-by-provider reference.

Using Actions

Props

Actions are configured via props -- key-value pairs passed to the executor:

json
{ "type": "log", "props": { "message": "Current price: {{trigger.result.price}}" } }

Connectors

Actions that need credentials reference a connector (encrypted stored credentials):

json
{ "type": "send-slack-message", "connector": "my-slack-bot", "props": { "channel": "#alerts", "text": "New event detected" } }
Tip

Connectors keep sensitive credentials out of workflow definitions. See Connectors for details.

Results

Every action produces a result stored in ExecutionState. Access it from downstream nodes:

text
{{node-id.result.fieldName}}
Ask a question... ⌘I