ready, active, or paused campaign. Ending is permanent:ended.draft has not started, so it cannot be ended and returns 409 campaign_is_draft. Cancel the draft with Cancel Campaign or leave it unsent.DELETE /v1/mail/campaigns/{id}) ends a started campaign the same way and returns the same response. Unlike End, it also cancels drafts and returns an already ended campaign with 200 instead of 409.403.path idstringrequireddata is the campaign, with status set to ended. Two counts describe the mail:| Field | Description |
stopped_mail_count | Pieces that were stopped and will not be sent |
already_printed_count | Pieces already printed or with the carrier, which will still be delivered |
| Status | Code | When |
| 403 | permission_denied | The API key's owner does not have permission to manage mail |
| 404 | campaign_not_found | No campaign with this ID in your workspace |
| 409 | campaign_ended | The campaign has already ended |
| 409 | campaign_is_draft | The campaign is a draft and has not started |
123456789101112131415161718{ "data": { "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", "organization_id": 42, "name": "Spring Seller Campaign", "status": "ended", "type": "one_off", "is_accepting_properties": true, "can_add_properties": false, "total_recipients": 150, "total_sent": 120, "total_delivered": 115, "created_at": "2026-03-01T14:23:45Z", "launched_at": "2026-03-02T10:00:00Z" }, "stopped_mail_count": 12, "already_printed_count": 3 }