---
title: "Get a campaign"
method: GET
path: "/v1/campaigns/{campaignId}"
tags: ["Campaigns"]
---

# Get a campaign

`GET /v1/campaigns/{campaignId}`

Retrieve a single campaign by ID.

## Response `200`

Successful.

- CampaignResponse
  - `id` string, required — The ID of the campaign.
  - `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`.
            - string
            - number
            - object
              - …
        - 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 `campaignId`.
- `401` — Invalid API key or content API not enabled for this team.
- `404` — Campaign not found.
- `405` — Wrong HTTP request method.

---

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