Upsert lead field values
POST/v1/open-api/lead/:leadId/field/list
Batch upsert of a lead's custom (CRM) field values — update or add one or more
fields in a single request. Processed asynchronously — the endpoint returns a
requestId to poll for the outcome.
Partial by design. Only the fields present in the array are updated or added;
every other field value on the lead is left untouched. This is deliberately
different from the fields list in POST /v1/open-api/lead, where the array is
taken as the complete set and any value not listed is deleted. Use this endpoint
whenever you only want to change some of a lead's fields.
⚠️ Lead fields only. This endpoint updates lead-level fields exclusively — fields whose
infoTypeisLED(seeGET /v1/open-api/crm-field). Items that reference a contact field (infoType: CONTACT) or an unknown fieldidare silently skipped: no error is returned and the request still completes asSUCCESS. To update a contact's fields, use thecontacts[].fieldskey ofPOST /v1/open-api/leadinstead.
Per-item rules:
id(the CRM field identifier) is required on every item; missing it returns400(NOT_NULL).- Send an explicit
"value": nullto clear (delete) that field's value. - For multi-select fields send the selected values in
valueList({ "id": 172, "valueList": ["A", "B"] }); the server expands each value into its own entry. The list fully replaces the field's previous selection.
See FieldValueRequestDTO for the full per-key semantics.
Requires grant PERMISSION_OPEN_API_LEAD:SAVE.
Request
Responses
- 200
- 400
- 401
- 403
- 429
Request accepted and enqueued. Poll requestId for the result.
Validation error (400).
Invalid, revoked or expired token (401).
The token lacks the required permission:scope grant (403).
Rate limit of 60 requests/minute exceeded (429).