Unschedule a campaign
POST/api/v1/email/campaigns/{id}/unschedule
POST /email/campaigns/{id}/unschedule
curl -X POST 'https://www.unitpost.com/api/v1/email/campaigns/cmp_123/unschedule' \
-H 'Authorization: Bearer YOUR_API_KEY' \
-H 'User-Agent: my-app/1.0'Response · 200
{
"object": "campaign",
"id": "id_123",
"name": "Example",
"template_id": "template_123",
"segment_id": "segment_123",
"topic_id": "topic_123",
"from": "you@yourdomain.com",
"subject": "Welcome to Acme",
"preview_text": "string",
"open_tracking": false,
"click_tracking": false,
"status": "draft",
"scheduled_at": "2026-01-01T00:00:00.000Z",
"variable_fallbacks": {},
"excluded_contact_ids": [
"string"
],
"total_recipients": 1,
"projected_recipients": {
"total": 1,
"reachable": 0,
"skipped": 0
},
"sent_count": 1,
"failed_count": 1,
"pause_reason": {
"code": "user",
"message": "string",
"metric": "hard_bounce_rate",
"value": 0,
"threshold": 0,
"sample": {
"events": 0,
"of": 0
},
"window": {
"since": "string"
},
"decided_by": "floor",
"resume": "self_serve",
"paused_at": "2026-01-01T00:00:00.000Z"
},
"created_at": "2026-01-01T00:00:00.000Z",
"updated_at": "2026-01-01T00:00:00.000Z"
}Move a scheduled campaign (or one paused before it started sending) back to draft, same id, so you can edit it. Content, audience and overrides are kept; the saved send time is cleared, so the next Send a campaign needs an explicit scheduled_at (409 send_time_required without one). A campaign that started sending can't be unscheduled: cancel it and duplicate it (the copy goes to the whole segment again, including people the first run reached, unless you set excluded_contact_ids). No body; any key is a 422. Requires the campaigns:send capability.
Parameters1 field
| Field | Type | Description |
|---|---|---|
idrequired | string · path | — |
Response · 200 fields22 fields
| Field | Type | Description |
|---|---|---|
objectrequired | string | — |
idrequired | string | — |
namerequired | string | — |
template_idrequired | string | — |
segment_idrequired | string | — |
topic_idrequired | string | null | — |
fromrequired | string | — |
subjectrequired | string | null | — |
preview_textrequired | string | null | — |
open_trackingrequired | boolean | null | — |
click_trackingrequired | boolean | null | — |
statusrequired | enumdraft | scheduled | sending | paused | sent | canceled | failed | — |
scheduled_atrequired | string | null | — |
variable_fallbacksrequired | object | — |
excluded_contact_idsrequired | string[] | — |
total_recipientsrequired | number | Recipients the engine admitted when the campaign started sending. 0 while it is `draft` or `scheduled`: read `projected_recipients`, or `sendable` from validate. |
projected_recipients | object | null | The audience counted when the campaign was sent or scheduled: `total` segment members, `reachable` who will get it, `skipped` (unsubscribed, suppressed, excluded). Null for a draft that was never sent: read validate. Read-only. |
sent_countrequired | number | — |
failed_countrequired | number | — |
pause_reasonrequired | object | null | — |
created_atrequired | string | — |
updated_atrequired | string | — |
200401404409422