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

# List campaigns

`GET /campaigns`

List campaigns with filtering, sorting, and cursor-based pagination.

**Scopes:**
`campaigns.read`

**Pagination:**
This endpoint uses cursor-based pagination.
- Use the `paging.cursors.after` value from the response to get the next page
- Use the `paging.cursors.before` value to get the previous page
- The `paging.hasMore` field indicates if more results are available
- Maximum page size is 250 items. Default: 100

## Query parameters

- `limit` integer
- `after` string
- `before` string
- `sort` 'createdAt' | 'updatedAt' | 'name'
- `direction` 'asc' | 'desc'
- `status` string[]
- `nameContains` string
- `channel` string[]
- `type` 'regular' | 'booster' | 'abTest'
- `parentCampaignID` string
- `createdAtFrom` string, date-time
- `createdAtTo` string, date-time
- `updatedAtFrom` string, date-time
- `updatedAtTo` string, date-time

## Headers

- `Omnisend-Version` string, required

## Response `200`

List of campaigns with pagination

- CampaignsResponse — Paginated list of campaigns
  - `campaigns` Campaign[] — List of campaigns
    - `abTest` ABTest — A/B test configuration. Variants are keyed by "a" and "b"; the parent campaign's `content` field is omitted because variants carry their own content. `result` is populated once a winner is selected and is `null` otherwise.
      - `result` ABTestResult — A/B test result (read-only).
        - `isManuallySelected` boolean — Whether the winner was manually selected (read-only)
        - `selectedAt` string — When the winner was selected (read-only)
        - `winnerVariantID` string — Campaign ID of the winning variant (read-only). Matches variants.a.id or variants.b.id.
      - `settings` ABTestSettings — A/B test settings.
        - `decisionTime` ABTestDecisionTime — Decision time before selecting a winner. Same shape as booster delay.
          - `amount` integer — Amount of time units to wait
          - `unit` 'h' | 'd' — Time unit: "h" for hours, "d" for days
        - `testSizePercent` integer — Percentage of audience for the test phase (10-100)
        - `winningMetric` 'openRate' | 'clickRate' — Winner determination metric
      - `variants` ABTestVariants — A/B test variants object with keys "a" and "b".
        - `a` ABTestVariant — A/B test variant. Email-specific fields live under `content.email`.
          - `content` ABTestVariantContent — A/B test variant content grouped by channel.
            - `email` ABTestVariantEmail — Email content fields for an A/B test variant.
              - …
          - `id` string — Variant campaign ID (read-only). Used for reporting API access.
        - `b` ABTestVariant — A/B test variant. Email-specific fields live under `content.email`.
          - `content` ABTestVariantContent — A/B test variant content grouped by channel.
            - `email` ABTestVariantEmail — Email content fields for an A/B test variant.
              - …
          - `id` string — Variant campaign ID (read-only). Used for reporting API access.
    - `audience` Audience — Campaign audience
      - `excludedSegmentIDs` string[] — Segments to exclude from the audience
      - `includedSegmentIDs` string[] — Segments to include. Empty includes all subscribers
    - `boosterSettings` BoosterSettings — Booster-specific settings.
      - `campaignID` string, required — Parent campaign ID this booster follows up on
      - `delay` BoosterDelay — Delay between the parent campaign send and the booster send.
        - `amount` integer — Amount of time units before the booster is sent
        - `unit` 'h' | 'd' — Time unit: "h" for hours, "d" for days
      - `sendTo` 'nonOpeners' | 'nonClickers', required — Audience selector. The booster targets recipients of the parent who did NOT perform the implied action (`nonOpeners` did not open; `nonClickers` did not click).
    - `brandID` string — Brand unique identifier (read-only)
    - `channel` 'email' | 'push' | 'sms' — Campaign message channel
    - `content` Content — Campaign content
      - `email` Email — Email content
        - `contentID` string — Email content unique identifier referencing the campaign's email design
        - `preheader` string — Email preheader text displayed after the subject line in the recipient's inbox
        - `replyToEmail` string — Reply-to email address for recipient responses
        - `senderEmail` string — Sender email address shown in the recipient's inbox
        - `senderName` string — Sender display name shown in the recipient's inbox
        - `subject` string — Email subject line displayed in the recipient's inbox
      - `sms` SMS — SMS message content
        - `compliance` SMSCompliance — SMS compliance text settings
          - `stopKeywordText` string — STOP keyword text for US/CA recipients. Max 250 chars
          - `unsubscribeLinkText` string — Unsubscribe link text for non-US/CA recipients. Max 250 chars
        - `imageID` string — Image ID obtained from the Images API. When set, the message is delivered as MMS to US/CA recipients; other countries receive SMS without the image. Image must be JPEG, JPG, PNG, or GIF and not exceed 500 KB
        - `isLinkShorteningEnabled` boolean — Auto-shorten links in message body
        - `message` string — SMS message body. When sent as SMS, the message (including the appended compliance text and unsubscribe link/keyword) must not exceed 9 SMS segments for either US/CA or other-country recipients. When sent as MMS, the message (including the appended compliance text) must not exceed 1600 characters for US/CA recipients.
        - `senderName` string — Sender display name. Max 250 chars
    - `createdAt` string — Campaign creation timestamp (read-only)
    - `endedAt` string — Campaign end timestamp (read-only)
    - `id` string — Campaign unique identifier (read-only)
    - `language` string — Campaign language locale in xx_XX format
    - `name` string — Campaign name
    - `sendingSettings` SendingSettings — Campaign sending settings
      - `isTZOptimizationEnabled` boolean — Whether timezone optimization is enabled. Only available with scheduled strategy, and only in email campaigns
      - `scheduledAt` string — Scheduled send time in RFC 3339 format. Present when strategy is scheduled
      - `strategy` 'immediate' | 'scheduled' — Sending strategy
    - `startedAt` string — Campaign start timestamp (read-only)
    - `status` 'draft' | 'scheduled' | 'started' | 'sent' | 'error' | 'canceled' | 'paused' | 'onHold' | 'expired' | 'stopped' — Campaign status
    - `type` 'regular' | 'abTest' | 'booster' — Campaign type
    - `updatedAt` string — Campaign last update timestamp (read-only)
  - `paging` PagingResponse — Cursor-based pagination metadata
    - `cursors` CursorsResponse — Cursor pointers for paginating forward and backward through results
      - `after` string, nullable — Opaque cursor for fetching the next page of results
      - `before` string, nullable — Opaque cursor for fetching the previous page of results
    - `hasMore` boolean — Whether there are more items available beyond the current page
    - `limit` integer — Maximum number of items returned per page

## Other responses

- `400` — Request contains invalid or missing fields
- `401` — Authentication is missing or invalid
- `403` — Insufficient permissions for this operation
- `410` — API version has been retired
- `429` — Rate limit exceeded
- `500` — Unexpected error occurred

---

[API](https://skmtc.net/omnisend/apis/events-api.md) · [All operations](https://skmtc.net/omnisend/apis/events-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/omnisend/events-api/versions/50214fbc283f/schema)
