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

# List campaigns

`GET /email/campaigns`

## Request

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

Retrieve a list of your campaigns, cursor-paginated. Each row is a reference to one campaign and its current status (`draft`, `scheduled`, `sending`, `sent`, …). Use a campaign's `id` with [Retrieve a campaign](#get-email-campaigns-id) for the full record, or with [List sent emails](#get-email) (`?campaign_id=`) to see the individual emails it produced. Requires the `campaigns:read` capability.

## Query parameters

- `limit` integer
- `after` string
- `before` string

## Response `200`

A page of campaigns.

- object
  - `object` 'list', required
  - `has_more` boolean, required
  - `data` Campaign[], required
    - `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.
- `422`: Invalid pagination params.

---

[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)
