Bulk-update rows, SQL-style: UPDATE <list> SET <set> WHERE <where>.
Apply the same column→value assignments (set) to every row matching the
where conditions tree in a single call — instead of fetching ids and
looping single-row updates. where uses the same conditions shape as action
run-conditions, and may filter on the virtual rowId field to target a
single row by id. Omit where to update every row; a present-but-malformed
where is a 400, not a match-all. Returns how many rows matched and how many
actually changed.
Authorizations
Company API key - scoped to a specific company. Generate from the Integrations page in your dashboard.
Path Parameters
Body
SET assignments and WHERE conditions
Bulk-update rows in one request, like SQL UPDATE SET WHERE . set is the column→value assignment applied to every matching row; where is a conditions tree (the SAME shape used for action run-conditions) selecting which rows to update. Omit where entirely to update every row — a where that is present but is not a conditions tree is REJECTED with a 400, never treated as match-all.
Example — set Status and Tier on all tech-industry rows: { "set": {"Status": "qualified", "Tier": "A"}, "where": { "combinator": "AND", "filters": [{"field": "Company Industry", "operator": "contains", "value": "Tech"}], "groups": [] } }
Example — update exactly ONE row by its id. Use the virtual rowId field inside a normal filter; do NOT pass a bare {"rowId": "..."} shorthand as where:
{
"set": {"Status": "CANNOT SUBMIT"},
"where": {
"combinator": "AND",
"filters": [{"field": "rowId", "operator": "equals", "value": "6c9a36cc-0dae-41fd-9ccb-c5688c46bc7c"}],
"groups": []
}
}
Column→value assignments applied to each matching row, e.g. {"Status": "qualified", "Tier": "A"}. Keys are column NAMES (as in the list headers). Only data columns are writable — action and lookup columns are computed and rejected. An unknown column name returns a 400 listing the valid columns (no silent no-op).
Company ID that owns the list. Required when authenticating with a personal access key (pak_…) — the key is not tied to a specific company so the server cannot infer it. Required when authenticating with a company API key only if the key belongs to a user who has access to multiple companies; otherwise it defaults to the key's company. Optional for JWT (dashboard) auth — defaults to the user's active company.
Optional cap on how many matching rows to update (applied in row-creation order). Omit for no cap.
Which rows to update — a conditions tree ({combinator, filters, groups}); see ConditionsSchema for operators and examples. Filters may target any column NAME plus the virtual field "rowId", which matches a row by its primary key (use operator "equals" with the row id as value). Omitted or null matches every row (UPDATE with no WHERE); a present-but-unrecognized where (e.g. the shorthand {"rowId": "..."}) returns a 400 instead of matching everything.
Response
Counts of matched and updated rows

