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

# List campaigns

`GET /v1/campaigns`

Retrieve a paginated list of campaigns.

## Query parameters

- `perPage` string
- `cursor` string

## Response `200`

Successful.

- ListCampaignsResponse
  - `pagination` Pagination, required
    - `totalResults` number, required
    - `returnedResults` number, required
    - `perPage` number, required
    - `totalPages` number, required
    - `nextCursor` string, nullable, required
    - `nextPage` string, nullable, required
  - `data` CampaignResponse[], required
    - `id` string, required — The ID of the campaign.
    - `url` string, uri, required — The URL of the campaign in the Loops app.
    - `name` string, required — The name of the campaign.
    - `status` 'Draft' | 'Scheduled' | 'Sending' | 'Sent', required — The status of the campaign.
    - `createdAt` string, date-time, required — ISO 8601 timestamp for when the campaign was created.
    - `updatedAt` string, date-time, required — ISO 8601 timestamp for when the campaign was last updated.
    - `emailMessageId` string, nullable, required — The associated email message ID.
    - `campaignGroupId` string, nullable, required — The ID of the campaign group this campaign belongs to.
    - `mailingListId` string, nullable, required — The ID of the mailing list this campaign sends to, if set.
    - `audienceSegmentId` string, nullable, required — The ID of the audience segment this campaign targets, if set.
    - `audienceFilter` AudienceFilter, nullable, required — A tree of audience conditions combined with `match`.
      - `match` 'all' | 'any', required
      - `conditions` AudienceFilterCondition[], required
        - union
          - PropertyCondition — Matches contacts by a property value.
            - `type` 'property', required
            - `key` string, required — The contact property name.
            - `operator` 'any' | 'contains' | 'notContains' | 'equals' | 'notEquals' | 'greaterThan' | 'lessThan' | 'isTrue' | 'isFalse' | 'empty' | 'notEmpty' | 'dateEmpty' | 'dateNotEmpty' | 'after' | 'before' | 'between', required
            - `value` union — The comparison value. Omitted for value-less operators (e.g. `isTrue`, `empty`). A `{ from, to }` object for `between`.
              - …
          - OptInCondition — Matches contacts by mailing-list opt-in status.
            - `type` 'optIn', required
            - `status` 'accepted' | 'pending' | 'rejected' | 'null', nullable, required
          - ActivityCondition — Matches contacts by their activity on a campaign or workflow.
            - `type` 'activity', required
            - `action` 'sent' | 'opened' | 'clicked', required
            - `negate` boolean, required
            - `target` 'campaign' | 'workflow' | 'workflowEmail', required
            - `id` string, required — The ID of the campaign, workflow, or workflow email.
    - `scheduling` CampaignScheduling, required — When the campaign is scheduled to send.
      - `method` 'now' | 'schedule', required
      - `timestamp` string, date-time, nullable, required — ISO 8601 send time. Null when the method is `now`.

## Other responses

- `400` — Invalid `perPage` value.
- `401` — Invalid API key or content API not enabled for this team.
- `405` — Wrong HTTP request method.

## Changes

> 9 revisions in range; 1 not diffed, 2 could not be searched.

- **2026-07-26** `72d136d738c3` — 6 info
  - the response property `pagination/nextCursor` became required for the status `200`
  - the response property `pagination/nextPage` became required for the status `200`
  - the response property `pagination/perPage` became required for the status `200`
  - the response property `pagination/returnedResults` became required for the status `200`
  - …2 more
- **2026-07-21** `df77516a130a` — 4 warning
  - added the new `Draft` enum value to the `data/items/status` response property for the response status `200`
  - added the new `Scheduled` enum value to the `data/items/status` response property for the response status `200`
  - added the new `Sending` enum value to the `data/items/status` response property for the response status `200`
  - added the new `Sent` enum value to the `data/items/status` response property for the response status `200`

[Change history](https://skmtc.dev/loops/apis/loops-openapi-spec/changes/v1/campaigns/get.md)

---

[API](https://skmtc.dev/loops/apis/loops-openapi-spec.md) · [All operations](https://skmtc.dev/loops/apis/loops-openapi-spec/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/loops/loops-openapi-spec/revisions/8bd0098300ec/schema)
