Workflows
The query
How a list step selects rows — filters, time, and joins.
A list step carries a query that selects which rows the workflow acts on.
It reads like a set of conditions that all must hold.
Filter by column
query:
where:
status: { in: [confirmed] } # status is one of these
starts_at: { lt: "now-30m" } # started more than 30 min ago
limit: 50Operators: eq, neq, gt, gte, lt, lte, like, ilike, in.
Which columns a feature allows is in the Feature catalog
("Filterable columns").
Relative time
A time value can be now or now±N with unit m / h / d:
now-30m, now-2d, now+1h. Resolved at run time.
Join to a related record (embed)
Select only rows whose related record matches — e.g. open conversations of active customers:
query:
where: { status: { in: [open] }, last_message_at: { lt: "now-1d" } }
embed:
customer_id: { inner: true, where: { status: { eq: active } } }The join uses the feature's declared relationships — no new links are invented, and joined rows still respect the reader's permissions.