PATCH/campaigns/:campaignId/leads/:leadId
Update CRM fields on a lead. 0 credits. Rate class: patch_lead. Body must include at least one of tag, excluded.
Request
PATCH /campaigns/search-xyz/leads/lead_abc
X-API-Key: sk_live_...
Content-Type: application/json
{
"tag": "Interested",
"excluded": false
}
| Field | Notes |
|---|---|
tag | null / "" clears; else one of the writable tags below |
excluded | boolean |
Writable tag allowlist
Interested, Not interested, Wrong person, Meeting booked, Resolved
This is a smaller set than the GET ?tag= filter allowlist (which also includes Information request, Meeting request, To be defined).
Response
{
"id": "lead_abc",
"tag": "Interested",
"excluded": false
}
Errors
| Error code | When |
|---|---|
validation_error | Empty body / unknown fields / invalid tag |
not_found | Unknown campaign or lead |
Related
- Prefer POST …/leads/batch-update when tagging/excluding many leads (max 100, 0 credits, 6/min).
- Auto-exclude tags on batch-update apply immediately (no polite-ack defer) — differs from this PATCH / inbox path.
- Permanent removal: POST …/leads/batch-delete (irreversible, no refund).
- List excluded leads: GET …/leads?excluded=true.
MCP
Tool: update_lead.