Return a scheduled campaign to draft
Clears scheduledAt and sets status back to draft. No body.
bearerAuthorizationBearer <token>Key issued in Settings → Developer → API key. Inbox methods need the Inbox scope. Campaigns methods need the Campaigns scope.
campaignId*stringCampaign id returned by create or list.
application/json- response
id*stringCampaign id.
name*stringCampaign title.
channelId*stringChannel that sends the campaign.
segmentId*stringSegment used as the audience.
status*stringCampaign status.
"draft""sending""pause""completed""failed""scheduled"content*||Template or session text stored on the campaign.
sentAt*|When sending started, or null if it has not started.
date-timescheduledAt*|UTC instant for a scheduled send, or null.
date-timequeuedRemaining*numberRecipients still waiting to be sent.
sentThisPortion*numberTemplate sends already started in the current tier window.
dailyLimit*|How many template sends this channel may start in a rolling 24 hours. Taken from the channel tier (waba_info.current_limit), not from a campaign setting. Null when the tier is unknown or unlimited. Session text is not counted.
nextPortionAt*|When the next template portion can start after the tier window is full. Null when a portion is not waiting.
date-timecreatedAt*stringWhen the campaign was created.
date-timeupdatedAt*stringWhen the campaign was last updated.
date-timecurl -X POST 'https://api.1msg.io/api/v1/campaigns/string/unschedule'{ "id": "cm3campaign01", "name": "April restock", "channelId": "cm3channel01", "segmentId": "cm3segment01", "status": "draft", "content": { "mode": "text", "text": "Hello" }, "sentAt": "2026-11-01T09:00:00.000Z", "scheduledAt": "2026-11-01T09:00:00.000Z", "queuedRemaining": 0, "sentThisPortion": 0, "dailyLimit": 1000, "nextPortionAt": null, "createdAt": "2026-11-01T09:00:00.000Z", "updatedAt": "2026-11-01T09:00:00.000Z"}