/v2/campaigns/:id/leads/:leadIdUpdates one lead inside a campaign you own — its fields, send status, labels, or scheduled send time. The campaign-scoped counterpart to Update lead, which only reaches leads that aren't in a campaign.
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Campaign ID. |
| leadId | string | Required | Lead ID (lead_...) from List campaign leads. |
| fields | object | Optional | Field values to set, e.g. { company: "Acme Corp" } — up to 100 entries, each value up to 2,000 characters. |
| status | enum | Optional | PENDING | QUEUED | DRAFTED | SENT | FAILED | CANCELLED | IGNORED. |
| labels | object[] | Optional | { labelId, name, color }[] — up to 50; color must be a hex code like #7C3AED. Replaces the lead's current labels. |
| scheduledAt | string | Optional | ISO 8601 timestamp for when this lead's email should send. |
curl -X PUT "https://api.stynar.com/v2/campaigns/cmp_abc123/leads/lead_1a2b3c" \
-H "Authorization: Bearer esk_your_key_here" \
-H "Content-Type: application/json" \
-d '{"fields":{"company":"Acme Corp"},"labels":[{"labelId":"lbl_1","name":"Hot lead","color":"#7C3AED"}]}'{
"lead": {
"leadId": "lead_1a2b3c",
"campaignId": "cmp_abc123",
"status": "PENDING",
"fields": {
"email": "jane@acme.com",
"firstName": "Jane",
"company": "Acme Corp"
},
"labels": [
{
"labelId": "lbl_1",
"name": "Hot lead",
"color": "#7C3AED"
}
],
"updatedAt": "2026-10-03T09:12:00.000Z"
}
}| Status | Code | Meaning |
|---|---|---|
| ✕ 400 Bad Request | VALIDATION_FAILED | Empty body (nothing to update), an unknown status, or a malformed field. |
| ✕ 404 Not Found | NOT_FOUND | Campaign or lead doesn't exist or isn't yours. |
| ✕ 401 Unauthorized | UNAUTHORIZED | Missing, malformed, unknown, revoked, or expired key. |
| ✕ 403 Forbidden | API_ACCESS_DISABLED | API access is turned off for your account. |
| ✕ 403 Forbidden | INSUFFICIENT_SCOPE | The key doesn't have the scope this endpoint requires. |
| ✕ 409 Conflict | CONFLICT | The action can't be applied to the resource's current state. |
| ✕ 429 Too Many Requests | RATE_LIMIT_EXCEEDED | Per-minute or per-second limit hit. |
| ✕ 429 Too Many Requests | QUOTA_EXCEEDED | Monthly quota exhausted. |
| ✕ 500 Internal Server Error | INTERNAL_ERROR | Something broke on Stynar's end. |