Campaigns

List campaigns with filtering, sorting, and cursor pagination

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

Scopes: campaigns.read

Rate Limiting: This endpoint is rate limited to 400 requests per minute.

Filtering & sorting: Supported query parameters: nameContains, status, channel, type, parentCampaignID, createdAtFrom/createdAtTo, updatedAtFrom/updatedAtTo, sort, direction, limit, after, before, view, include. Only these documented parameters are accepted; any unknown parameter returns 400.

  • sort accepts createdAt, updatedAt, or name; direction (asc/desc) is only valid together with sort.

Response shape: Items are always CampaignDTO. With view=summary the heavy sections content and abTest are omitted from every item unless requested with include; all other fields are unchanged. include has no effect without view=summary.

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
  • Do not send after and before together, and keep filters and sorting unchanged while paginating with a cursor
get/campaigns

Request

  • Base URL
    https://api.omnisend.com/api
  • URL
    https://api.omnisend.com/api/campaigns
  • Auth
    • OAuth 2
      Client credentials
      Token URL: https://app.omnisend.com/oauth2/token scopes: campaigns.read
    • or API key in header Authorization

Query parameters

limitinteger

Number of items per page. Range: 1-250. Default: 100

afterstring

Opaque cursor for the next page

beforestring

Opaque cursor for the previous page

sort'createdAt' | 'updatedAt' | 'name'

Sort field. Default: createdAt

direction'asc' | 'desc'

Sort direction. Default: desc

statusstring[]

Filter by status (repeatable for OR logic)

nameContainsstring

Filter by name (partial match, max 200 characters)

channelstring[]

Filter by message channel (repeatable for OR logic)

type'regular' | 'booster' | 'abTest'

Filter by campaign type. Use booster to list only boosters, abTest to list only A/B test parents.

parentCampaignIDstring

Filter to boosters of the given parent campaign ID. Implies type=booster.

createdAtFromstring date-time

Filter campaigns created after this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)

createdAtTostring date-time

Filter campaigns created before this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)

updatedAtFromstring date-time

Filter campaigns updated after this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)

updatedAtTostring date-time

Filter campaigns updated before this timestamp (ISO 8601, e.g. 2026-01-01T00:00:00Z)

view'summary'

Response shape. summary omits the heavy content and abTest sections from every item. Omit for the full representation.

includestring[]

Heavy sections to keep in summary view (repeatable or comma-separated): content (full email/SMS/push content), abTest (A/B variants, settings and result). Only meaningful together with view=summary.

Headers

Omnisend-Versionstring required

API version that specifies the response format and behaviour

Response

List of campaigns with pagination

Example response

{
  "campaigns": [
    {
      "abTest": {
        "result": {
          "selectedAt": "2026-01-15T10:30:00Z",
          "winnerVariantID": "000000000000000000000011"
        },
        "settings": {
          "decisionTime": {
            "amount": 4,
            "unit": "h"
          },
          "testSizePercent": 30,
          "winningMetric": "openRate"
        },
        "variants": {
          "a": {
            "content": {
              "email": {
                "contentID": "000000000000000000000001",
                "preheader": "Check it out",
                "replyToEmail": "support@example.com",
                "senderEmail": "hello@example.com",
                "senderName": "My Store",
                "subject": "Welcome!"
              }
            },
            "id": "000000000000000000000010"
          },
          "b": {
            "content": {
              "email": {
                "contentID": "000000000000000000000001",
                "preheader": "Check it out",
                "replyToEmail": "support@example.com",
                "senderEmail": "hello@example.com",
                "senderName": "My Store",
                "subject": "Welcome!"
              }
            },
            "id": "000000000000000000000010"
          }
        }
      },
      "boosterSettings": {
        "campaignID": "000000000000000000000001",
        "delay": {
          "amount": 48,
          "unit": "h"
        },
        "sendTo": "nonOpeners"
      },
      "brandID": "000000000000000000000001",
      "content": {
        "email": {
          "contentID": "000000000000000000000001",
          "preheader": "Discover what we have in store for you",
          "replyToEmail": "support@example.com",
          "senderEmail": "hello@example.com",
          "senderName": "My Store",
          "subject": "Welcome to Omnisend!"
        },
        "sms": {
          "compliance": {
            "stopKeywordText": "Reply STOP to opt out",
            "unsubscribeLinkText": "Unsubscribe [[unsubscribe_link]]"
          },
          "imageID": "000000000000000000000001",
          "isLinkShorteningEnabled": true,
          "message": "Hi! Check out our new deals",
          "senderName": "My Store"
        }
      },
      "createdAt": "2026-01-15T10:30:00Z",
      "endedAt": "2026-01-15T10:30:00Z",
      "id": "000000000000000000000001",
      "language": "en_US",
      "name": "Welcome Email Campaign",
      "sendingSettings": {
        "optimizeFor": "opens",
        "respectQuietHours": true,
        "scheduledAt": "2026-03-01T10:00:00Z",
        "strategy": "immediate"
      },
      "startedAt": "2026-01-15T10:30:00Z",
      "updatedAt": "2026-01-15T10:30:00Z",
      "url": "https://app.omnisend.com/campaign/email/000000000000000000000001/settings"
    }
  ],
  "paging": {
    "cursors": {
      "after": "eyJpZCI6ImNhbXAtNDU2In0",
      "before": "eyJpZCI6ImNhbXAtMTIzIn0"
    },
    "hasMore": true,
    "limit": 50
  }
}

Changes

No recorded changes to this operation across all 1 revision of this API.