/v2/campaigns/:idEdits a campaign: copy, senders, send mode, schedule, sending days/hours/daily limit, AI personalisation, A/B variant, meeting auto-booking and follow-ups. Send only the fields you want to change; mail and aiPrompt are merged with what's stored, so changing mail.subject keeps the body. Status never changes here — use start, pause and resume.
| Authorization | Bearer YOUR_API_KEY |
| Content-Type | application/json |
| Field | Type | Required | Description |
|---|---|---|---|
| id | string | Required | Campaign ID. |
| name, senderIds, mail, aiPrompt, aiModel, abTest, sendMode, ... | — | Optional | Same fields as Create a campaign, all optional. At least one is required. |
| scheduleEndDate | string | null | Optional | null removes the end date. |
curl -X PUT "https://api.stynar.com/v2/campaigns/cmp_abc123" \
-H "Authorization: Bearer esk_your_key_here" \
-H "Content-Type: application/json" \
-d '{"mail":{"subject":"{{firstName}}, quick question"},"dailyLimit":40,"followups":[{"waitDays":3,"body":"<p>Bumping this up, {{firstName}}.</p>"},{"waitDays":4,"body":"<p>Last note from me — worth a 15-minute call?</p>"}]}'{
"campaign": {
"campaignId": "cmp_abc123",
"name": "Q3 outbound",
"status": "DRAFT",
"dailyLimit": 40,
"followups": [
{
"waitDays": 3,
"body": "<p>Bumping this up, {{firstName}}.</p>"
},
{
"waitDays": 4,
"body": "<p>Last note from me — worth a 15-minute call?</p>"
}
]
}
}| Status | Code | Meaning |
|---|---|---|
| ✕ 404 Not Found | NOT_FOUND | Campaign doesn't exist or isn't yours. |
| ✕ 409 Conflict | CONFLICT | The field can't change in the campaign's current status — see the note above. |
| ✕ 403 Forbidden | QUOTA_EXCEEDED | Adding follow-ups would exceed your plan's follow-up sequence limit. |
| ✕ 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. |
| ✕ 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. |