---
title: "Resume a campaign"
method: POST
path: "/email/campaigns/{id}/resume"
tags: ["Campaigns"]
---

# Resume a campaign

`POST /email/campaigns/{id}/resume`

## Request

- Base URL: `https://www.unitpost.com/api/v1`
- URL: `https://www.unitpost.com/api/v1/email/campaigns/{id}/resume`
- Auth: HTTP bearer

Resume a `paused` campaign. Sending continues with the recipients that hadn't been reached yet — only them: contacts who joined the segment after the campaign started are not added, and anyone already delivered to is skipped, so nobody receives the campaign twice. After an automatic quality pause (`pause_reason.code` `hard_bounce_rate`, `complaint_rate` or `quality_review`) the quality check measures only sends made after the resume. A campaign whose `scheduled_at` is still in the future waits for it; otherwise it sends immediately. Resume runs the same checks as [Send a campaign](#post-email-campaigns-id-send) and answers with the same errors; the campaign stays `paused` when one fails. Pause a send with [Pause a campaign](#post-email-campaigns-id-pause). Requires the `campaigns:send` capability.

## Response `200`

The resumed campaign.

- Campaign
  - `object` 'campaign', required
  - `id` string, required
  - `name` string, required
  - `template_id` string, required
  - `segment_id` string, required
  - `topic_id` string, nullable, required
  - `from` string, required
  - `subject` string, nullable, required
  - `preview_text` string, nullable, required
  - `open_tracking` boolean, nullable, required
  - `click_tracking` boolean, nullable, required
  - `status` 'draft' | 'scheduled' | 'sending' | 'paused' | 'sent' | 'canceled' | 'failed', required
  - `scheduled_at` string, nullable, required
  - `variable_fallbacks` object, required
  - `excluded_contact_ids` string[], required
  - `total_recipients` number, required
  - `sent_count` number, required
  - `failed_count` number, required
  - `pause_reason` object, nullable, required: Why the campaign is paused, or null when it isn't. `code` is `user` for a pause you made; `hard_bounce_rate` / `complaint_rate` when the per-campaign quality check paused it (with `metric`, `value`, `threshold`, `sample` and `window`); `quality_review` when the delivery reviewer did. `resume`: `self_serve` (resume after cleaning the list), `review_required` (a repeat pause; Resume answers 409 `review_required`), `account_review` (staff are reviewing the account), `resume_slowly` (a provider is limiting the sender).
    - `code` 'user' | 'hard_bounce_rate' | 'complaint_rate' | 'quality_review' | 'provider_limit' | 'failure_streak' | 'sender_unavailable' | 'template_unavailable' | 'billing' | 'not_drained' | 'sending_restricted' | 'workspace_suspended', required
    - `message` string, nullable, required
    - `metric` 'hard_bounce_rate' | 'complaint_rate', nullable, required
    - `value` number, nullable, required
    - `threshold` number, nullable, required
    - `sample` object, nullable, required
      - `events` number, required
      - `of` number, required
    - `window` object, nullable, required
      - `since` string, nullable, required
    - `decided_by` 'floor' | 'unit', nullable, required
    - `resume` 'self_serve' | 'review_required' | 'account_review' | 'resume_slowly', nullable, required
    - `paused_at` string, nullable, required
  - `created_at` string, required
  - `updated_at` string, required

## Other responses

- `401`: Missing or invalid API key.
- `402`: `quota_exceeded` / `limit_reached`: the remaining recipients exceed the plan's allowance.
- `403`: `workspace_suspended`, `subscription_inactive`, or a verified-identity requirement.
- `404`: Campaign not found.
- `409`: Campaign is not `paused`, or a configuration blocker (template, domain, segment, schedule window) — reasons in `error.details[]`. `review_required`: the campaign was paused automatically for its delivery quality, and it is a repeat: this campaign was paused automatically before (at any time), or the workspace had another automatic pause in the last 90 days (see the campaign's `pause_reason.resume`). Staff review it before it can resume.
- `429`: `quota_exceeded`: the workspace is under review and its daily send allowance is smaller than the remaining recipients. Includes a `Retry-After` header.

---

[API](https://skmtc.dev/unitpost/apis/unitpost-api.md) · [All operations](https://skmtc.dev/unitpost/apis/unitpost-api/llms.txt) · [OpenAPI document](https://skmtc.dev/unitpost/apis/unitpost-api/revisions/86ff7c890967?raw)
