---
title: "List campaigns"
method: GET
path: "/campaigns"
tags: ["Campaigns"]
---

# List campaigns

`GET /campaigns`

Lists campaigns for the authenticated company, optionally filtered by status or label.

## Query parameters

- `status` 'draft' | 'scheduled' | 'sent' | 'sending' | 'cancelled' | 'paused' | 'waiting_approval' | 'rejected'
- `label` string
- `limit` integer
- `offset` integer

## Response `200`

Campaigns returned

- object
  - `success` boolean
  - `campaigns` CampaignSummary[]
    - `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.
    - `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
    - `createdAt` string, date-time
  - `pagination` object
    - `limit` integer
    - `offset` integer
    - `count` integer
    - `total` integer
    - `hasMore` boolean

## Other responses

- `400` — Invalid filter or pagination parameter
- `401` — Unauthorized

## Changes

- **2026-08-03** `c6ff100192cf` — 1 info
  - added the optional property `campaigns/items/emailId` to the response with the `200` status
- **2026-08-02** `36f92fc0caa2` — 2 breaking
  - the response property `success` became optional for the status `400`
  - the response property `success` became optional for the status `401`
- **2026-07-30** `6db218f95cf4` — 1 info
  - added the optional property `campaigns/items/type` to the response with the `200` status
- **2026-07-29** `d03612b5fabd` — 8 warning
  - added the new `cancelled` enum value to the `campaigns/items/status` response property for the response status `200`
  - added the new `draft` enum value to the `campaigns/items/status` response property for the response status `200`
  - added the new `paused` enum value to the `campaigns/items/status` response property for the response status `200`
  - added the new `rejected` enum value to the `campaigns/items/status` response property for the response status `200`
  - …4 more
- **2026-07-18** `09f0c32988fb` — 2 info
  - added the new enum value `rejected` to the `query` request parameter `status`
  - added the optional property `campaigns/items/rejectionComment` to the response with the `200` status

[Full history](https://skmtc.dev/sequenzy/apis/sequenzy-api/changes/campaigns/get.md)

---

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