API ReferenceCampaignsUpdate a campaign
PUT/v2/campaigns/:id

Update a campaign

Edits 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.

Stablescope: write API KeyLearn about API scopes →

What can change depends on the status

DRAFT, SCHEDULED and PAUSED campaigns accept every field. A RUNNING campaign only accepts name, dailyLimit, followupsPaused and autoBookMeeting — pause it, edit, then resume. COMPLETED and FAILED campaigns only accept a new name. Anything else returns 409 CONFLICT.

Follow-ups

followups replaces the whole sequence; [] removes it. Adding a sequence to a campaign that had none counts against your plan's follow-up sequence limit (403 QUOTA_EXCEEDED when reached).

Request

AuthorizationBearer YOUR_API_KEY
Content-Typeapplication/json

Parameters

FieldTypeRequiredDescription
idstringRequiredCampaign ID.
name, senderIds, mail, aiPrompt, aiModel, abTest, sendMode, ...—OptionalSame fields as Create a campaign, all optional. At least one is required.
scheduleEndDatestring | nullOptionalnull 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>"}]}'

Response

✓ 200 OK
200 response
{
  "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>"
      }
    ]
  }
}

Response fields

Errors

StatusCodeMeaning
✕ 404 Not FoundNOT_FOUNDCampaign doesn't exist or isn't yours.
✕ 409 ConflictCONFLICTThe field can't change in the campaign's current status — see the note above.
✕ 403 ForbiddenQUOTA_EXCEEDEDAdding follow-ups would exceed your plan's follow-up sequence limit.
✕ 401 UnauthorizedUNAUTHORIZEDMissing, malformed, unknown, revoked, or expired key.
✕ 403 ForbiddenAPI_ACCESS_DISABLEDAPI access is turned off for your account.
✕ 403 ForbiddenINSUFFICIENT_SCOPEThe key doesn't have the scope this endpoint requires.
✕ 429 Too Many RequestsRATE_LIMIT_EXCEEDEDPer-minute or per-second limit hit.
✕ 429 Too Many RequestsQUOTA_EXCEEDEDMonthly quota exhausted.
✕ 500 Internal Server ErrorINTERNAL_ERRORSomething broke on Stynar's end.
Full error reference →