This page documents the canonical HTTP contract for this endpoint.
This endpoint stages the update as an asynchronous job and returns queued_count, not completed update count. Selection is organization-scoped from authentication. Poll the job with GET /api/bulk-jobs/{job_id} using the same authenticated user and organization.
Body parameters
statusrequiredstring
One of: new, qualified, contacting, converted, customer, unqualified, bad_data, nurture.
lead_ids· optionalarray<string>
Explicit lead IDs. Provide either lead_ids or selection.
selection· optionalobject
Either {mode:"ids",ids:[non-empty IDs]} or {mode:"descriptor",descriptor:{root:FilterNode}}; extra keys are rejected inside selection.
scope· optionalstring
Optional org or user selection scope.
source_table_id· optionalstring
Optional Research Table context for descriptor selection.
source_table_scope· optionalstring
Optional company or lead Research Table scope.
unqualified_reason· optionalstring
Optional reason used when status is unqualified.
unqualifiedReason· optionalstring
Accepted alias for unqualified_reason.
lead_status_reason· optionalstring
Optional reason used when status is unqualified.
leadStatusReason· optionalstring
Accepted alias for lead_status_reason.
status_reason· optionalstring
Accepted status reason alias.
statusReason· optionalstring
Accepted status reason alias.
note· optionalstring
Optional note attached to queued update.
| Name | Type | Description |
|---|---|---|
| statusrequired | string | One of: new, qualified, contacting, converted, customer, unqualified, bad_data, nurture. |
| lead_ids | array<string> | Explicit lead IDs. Provide either lead_ids or selection. |
| selection | object | Either {mode:"ids",ids:[non-empty IDs]} or {mode:"descriptor",descriptor:{root:FilterNode}}; extra keys are rejected inside selection. |
| scope | string | Optional org or user selection scope. |
| source_table_id | string | Optional Research Table context for descriptor selection. |
| source_table_scope | string | Optional company or lead Research Table scope. |
| unqualified_reason | string | Optional reason used when status is unqualified. |
| unqualifiedReason | string | Accepted alias for unqualified_reason. |
| lead_status_reason | string | Optional reason used when status is unqualified. |
| leadStatusReason | string | Accepted alias for lead_status_reason. |
| status_reason | string | Accepted status reason alias. |
| statusReason | string | Accepted status reason alias. |
| note | string | Optional note attached to queued update. |
Errors
| Status | Meaning |
|---|---|
| 400 | Invalid status or selection. |
| 401 | Invalid API key or missing auth. |
| 403 | Missing leads:write scope. |
