Create a campaign draft
name is the campaign title. channelId is the channel that will send. segmentId is the audience. content.mode is template or text. For a template set content.templateName, content.language, and content.params (the sendTemplate array). content.messageSendTtlSeconds is optional, in seconds, and sits beside params. For text set content.text. status, if sent, must be draft.
bearerAuthorizationBearer <token>Key issued in Settings → Developer → API key. Inbox methods need the Inbox scope. Campaigns methods need the Campaigns scope.
application/json- body
name*stringCampaign title shown in the list.
channelId*stringId of the channel that sends. The key must be allowed to use this channel.
segmentId*stringSegment id from POST /campaigns/segments. Members are copied when you send.
content*template or text. For a template set templateName, language, and params.
status?"draft"Only draft is accepted. Omit to store draft.
"draft"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' \ -H 'Content-Type: application/json' \ -d '{ "name": "Spring promo", "channelId": "string", "segmentId": "string", "content": { "mode": "template" }}'{ "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"}