Skip to main content
PUT
Bulk-update rows, SQL-style: UPDATE <list> SET <set> WHERE <where>.

Authorizations

X-API-Key
string
header
required

Company API key - scoped to a specific company. Generate from the Integrations page in your dashboard.

Path Parameters

listId
string
required

Body

application/json

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": [] } }

set
object
required

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).

companyId
string

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.

limit
integer

Optional cap on how many matching rows to update (applied in row-creation order). Omit for no cap.

where
object

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

Result of a bulk row update.

matched
integer

Number of rows that satisfied the WHERE clause (and were within limit).

updated
integer

Number of matched rows that actually changed (at least one cell differed). Re-running an already-applied update reports matched without inflating updated.