Triggers

All trigger types available in B3OS

Triggers

Every workflow starts with a trigger -- the event that initiates a run. B3OS supports several trigger types across different detection methods.

Detection Methods

TriggerDetectionLatency
Token PriceWebSocket (Stork Oracle)Real-time push
EVM LogsHTTP polling + filter100ms loop
ERC-20 TransfersHTTP polling + filter100ms loop
Cron ScheduleCron expression scan100ms loop
WebhookHTTP endpoint listenerOn-demand
Slack / GmailWebhook adapter / pollingOn-demand / periodic
PolymarketWebSocket subscriptionReal-time push

Manual

Trigger a workflow on demand via the dashboard or API.

json
{ "type": "manual", "props": {} }

Cron Schedule

Run a workflow on a recurring schedule using cron syntax.

json
{ "type": "cronjob", "props": { "schedule": "0 */6 * * *" } }
FieldDescription
scheduleStandard cron expression (minute hour day month weekday)

Webhook

Trigger via HTTP POST to a unique webhook URL. The request body becomes the trigger result.

json
{ "type": "webhook", "props": {} }

Tip
A unique webhook URL is generated when the workflow is published.

EVM Log

Fire when a smart contract emits a specific event log on any supported EVM chain.

json
{ "type": "evm-log", "props": { "chainId": 8453, "address": "0x...", "eventSignature": "Transfer(address,address,uint256)", "filter": { "from": "0x..." } } }
FieldDescription
chainIdEVM chain ID (e.g., 8453 for Base)
addressContract address to watch
eventSignatureEvent signature with types
filterOptional filter DSL on decoded log fields

Note
The handler polls eth_getLogs with block cursor persistence and supports multiple chains concurrently.

ERC-20 Receive

Fire when a specific address receives ERC-20 tokens.

json
{ "type": "erc20-receive", "props": { "chainId": 8453, "address": "0x...", "tokenAddress": "0x..." } }

ERC-20 Send

Fire when a specific address sends ERC-20 tokens.

json
{ "type": "erc20-send", "props": { "chainId": 8453, "address": "0x...", "tokenAddress": "0x..." } }

Token Price

Fire when a token's price crosses a threshold. Powered by real-time WebSocket from Stork Oracle.

json
{ "type": "token-price-cexes", "props": { "asset": "BTCUSD", "operator": ">", "price": 100000 } }
FieldDescription
assetAsset pair (e.g., BTCUSD, ETHUSD)
operatorComparison: >, <, >=, <=, ==
priceTarget price threshold

Slack Mentions

Fire when your bot is mentioned in a Slack channel.

json
{ "type": "slack-mentions", "props": { "channelId": "C0123456789" } }

Info
Requires a Slack connector with bot token.

Gmail

Fire on new emails or emails matching a search query.

TypeDescription
gmail-new-email-receivedAny new email in inbox
gmail-new-email-matching-searchEmails matching a Gmail search query

Note
Powered by Pipedream polling integration.

Polymarket

B3OS includes several Polymarket-specific triggers:

TypeDescription
polymarket-market-closeWhen a prediction market resolves
polymarket-market-tradeReal-time trades on a market
polymarket-new-marketNew market creation (with keyword filters)
polymarket-user-betWhen a specific user places a bet

Market Trade Filters

json
{ "type": "polymarket-market-trade", "props": { "conditionId": "0x...", "outcome": "Yes", "side": "BUY", "minSize": 100 } }

User Bet Filters

json
{ "type": "polymarket-user-bet", "props": { "username": "trader123", "side": "BUY", "minSize": 50, "keywords": ["election", "bitcoin"] } }
Ask a question... ⌘I