---
title: "Pause campaign"
method: POST
path: "/campaigns/{campaignId}/pause"
tags: ["Campaigns"]
---

# Pause campaign

`POST /campaigns/{campaignId}/pause`

Pauses a campaign that is currently sending. In-progress chunk workers stop and remaining recipients are held until resume.

## Path parameters

- `campaignId` string, required

## Response `200`

Campaign paused

- object
  - `success` boolean
  - `campaign` CampaignDetail
    - `id` string
    - `name` string
    - `type` 'email' | 'sms' — Delivery channel. SMS campaigns are created and managed from the dashboard: they carry no email, so `subject` and `blocks` come back empty, and the email-only endpoints (update, schedule, pause, resume, duplicate, resend to non-openers) reject them. Campaign stats and campaign events reject them too, since both read email engagement.
    - `subject` string
    - `emailId` string, nullable — The linked email body. The same record is returned by the templates endpoints and can be passed as `templateId` when creating campaigns to reuse the design. Null for SMS campaigns.
    - `emailPreset` 'branded' | 'minimal', nullable — Per-email Style > Format, derived from the stored blocks. `branded` renders the company logo and the full footer; `minimal` renders no logo and the simple footer. Null when the entire email is a single raw HTML block, which has no Sequenzy format. Sequence steps, campaigns, transactional templates, and saved templates all report this field, so chrome can be compared across emails without rendering them.
    - `status` 'draft' | 'scheduled' | 'waiting_approval' | 'rejected' | 'sending' | 'paused' | 'sent' | 'cancelled' — Campaign status. `waiting_approval` means the campaign is held for safety review and is not sending; this is most common on new accounts and recently registered sending domains. See https://docs.sequenzy.com/concepts/campaigns#safety-review
    - `rejectionComment` string, nullable — Reviewer feedback when the campaign status is rejected. Stays null while a campaign is still in waiting_approval.
    - `trackingCode` string, nullable — Campaign tracking code available to UTM templates as `{{campaign.trackingCode}}`.
    - `labels` string[] — Label names assigned to this campaign.
    - `scheduledAt` string, date-time, nullable
    - `sentAt` string, date-time, nullable — For native sends, when the send finished. It is stamped after the last recipient is handed off, so for a spread or optimal-time send this is the end of the delivery window rather than when sending started. Imported campaigns retain the source provider's timestamp.
    - `createdAt` string, date-time
    - `preheader` string
    - `preheaderText` string — Compatibility alias for preheader.
    - `blocks` EmailBlock[]
      - `id` string
      - `type` 'text' | 'html' | 'heading' | 'list' | 'button' | 'spacer' | 'divider' | 'image' | 'columns' | 'conditional-group' | 'repeat' | 'card' | 'cta' | 'social' | 'logo' | 'header' | 'footer' | 'video' | 'product' | 'discount-code' | 'code' | 'countdown' | 'hero' | 'testimonial' | 'gallery' | 'badge' | 'table' | 'features' | 'image-card' | 'pricing' | 'author' | 'article' | 'rating' | 'stats' | 'steps' | 'product-grid' | 'poll', required
      - `content` string — Content for text, html, and heading-like blocks.
      - `styles` object — Per-block visual styles. For compatibility, style fields such as backgroundColor, backgroundOpacity, borderColor, borderWidth, and borderRadius can also be supplied at the block top level and are normalized into this object.
        - `paddingTop` number
        - `paddingBottom` number
        - `paddingLeft` number
        - `paddingRight` number
        - `backgroundColor` string
        - `backgroundOpacity` number — Background opacity percentage from 0 to 100.
        - `textColor` string
        - `textAlign` 'left' | 'center' | 'right'
        - `borderRadius` number
        - `borderColor` string
        - `borderWidth` number
        - `bleed` boolean — Stretch the block edge-to-edge across the email container. Top-level blocks only.
      - `conditions` object[] — Optional per-block display rules. The block renders only when every rule matches. The same shape is used for a conditional-group block's top-level `conditions`.
        - `id` string, required
        - `field` 'variable' | 'attribute' | 'email' | 'firstName' | 'lastName', required — `variable` resolves a merge-tag path from the transactional send `variables` or an automation `event` payload (nested paths like `order.total` or `event.plan` work). `attribute` reads a stored subscriber attribute. `email`, `firstName`, and `lastName` read core subscriber fields.
        - `operator` 'is' | 'is_not' | 'contains' | 'not_contains' | 'gt' | 'gte' | 'lt' | 'lte' | 'is_empty' | 'is_not_empty', required
        - `value` string, required — For `variable` and `attribute`, use `name:value` - the part before the colon is the variable path or attribute name, and the part after it is the comparison value. For `email`, `firstName`, and `lastName`, provide the plain comparison string.
    - `campaignData` object, nullable
    - `computedLists` object[]
    - `targetLists` object, nullable — Saved campaign audience, or null when targeting is still unset and scheduling will fall back to all active subscribers.
    - `senderProfileId` string
    - `fromName` string, nullable
    - `fromEmail` string, email, nullable
    - `replyProfileId` string, nullable
    - `replyToName` string, nullable
    - `replyToEmail` string, email, nullable
    - `ccEmails` string[], nullable — Addresses CC'd on every recipient's email for this campaign.
    - `bccEmails` string[], nullable — Addresses BCC'd on every recipient's email for this campaign.
    - `spreadOverHours` integer, nullable — Hours the send was (or will be) spread over. Null means there is no fixed spread; inspect sendTimeOptimization to distinguish an optimal-time send from a campaign with no recorded pacing. Imported campaigns may not include source-provider pacing data.
    - `sendTimeOptimization` boolean — Whether each recipient is sent at their best predicted open time. Always false when spreadOverHours is set: setting a spread clears send time optimization.
    - `sendTimeWindowHours` integer, nullable — Window send time optimization may deliver within, in hours. Defaults to 12 and only applies when sendTimeOptimization is true.
    - `shareUrl` string, nullable — Public anonymized view-in-browser link, or null until one is minted via POST /campaigns/{campaignId}/share-link.

## Other responses

- `400` — Campaign is not currently sending
- `401` — Unauthorized
- `404` — Campaign not found
- `409` — Campaign status changed concurrently
- `500` — Campaign could not be paused

---

[API](https://skmtc.net/sequenzy/apis/sequenzy-api.md) · [All operations](https://skmtc.net/sequenzy/apis/sequenzy-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sequenzy/sequenzy-api/revisions/fc5624c7d57a/schema)
