---
title: "Get a campaign by ID"
method: GET
path: "/campaigns/{id}"
tags: ["Campaigns"]
---

# Get a campaign by ID

`GET /campaigns/{id}`

## Request

- Base URL: `https://api.emailchaser.com/r`
- URL: `https://api.emailchaser.com/r/campaigns/{id}`
- Auth: HTTP bearer

Retrieves detailed information about a specific campaign including settings, schedule, statistics, and email counts. schedule.daysSchedule is one comma-separated string of weekday numbers, such as "1,2,3,4,5", not an array. minimumHealth lists each connected email account on the campaign with its health score and whether the campaign's minimum health score (settings.minimumHealthScore) holds it back; when every account is held back, allHeldBack is true and message says the campaign is sending nothing.

## Path parameters

- `id` integer, required

## Response `200`

Campaign details

- ModelsGetCampaignResponse
  - `createdAt` string
  - `emails` ModelsCampaignEmailCounts
    - `blocked` integer
    - `bounced` integer
    - `canceled` integer
    - `catchAll` integer
    - `deferred` integer
    - `delivered` integer
    - `draft` integer
    - `dropped` integer
    - `errorOnSent` integer
    - `followUp` integer
    - `followUpCanceled` integer
    - `followUpDraft` integer
    - `invalid` integer
    - `pending` integer
    - `replied` integer
    - `scheduled` integer
    - `sent` integer
    - `spamReport` integer
    - `total` integer
    - `waitingForReschedule` integer
  - `emoji` string
  - `flow` string
  - `id` integer
  - `launchAt` string: "0001-01-01T00:00:00Z" until the campaign is first launched.
  - `minimumHealth` ModelsCampaignMinimumHealth
    - `accounts` ModelsCampaignAccountHealth[]: Accounts are the campaign's connected email accounts, the held-back ones first.
      - `address` string
      - `healthScore` integer: Health score 0-100, higher is better: the share of this account's warm-up emails over the last 7 full days that landed in the inbox rather than spam. Null while warm-up is off or before 20 warm-up emails were checked.
      - `heldBack` boolean: HeldBack is true when the campaign's minimum holds this account back: it sends nothing in this campaign until its score is back at or above the minimum.
      - `reason` string: Reason says why it is held back, in plain words. Null when it sends.
      - `senderEmailId` integer
    - `allHeldBack` boolean: AllHeldBack is true when a minimum is set and every connected account is below it, so the campaign sends nothing.
    - `heldBackCount` integer: HeldBackCount is how many of those accounts the minimum holds back.
    - `message` string: Message says what the minimum is doing, in plain words. Null when it holds nothing back.
    - `minimumHealthScore` integer: MinimumHealthScore is the campaign's minimum, 1-100. Null when it has none.
  - `name` string
  - `schedule` ModelsCampaignSchedule
    - `cronSchedule` string
    - `daysSchedule` string: DaysSchedule is the sending days as one comma-separated string of weekday numbers, where Sunday is 0: "1,2,3,4,5" is Monday to Friday. It is not an array. Empty until days are set with PUT /campaigns/{id}/schedule.
    - `endSchedule` string
    - `everySchedule` integer
    - `maximumTimeBetweenEmails` integer
    - `minimumTimeBetweenEmails` integer
    - `startSchedule` string
  - `sendAt` string: "0001-01-01T00:00:00Z" while not set.
  - `settings` ModelsCampaignSettings
    - `allowNonBusinessEmails` boolean
    - `dailyLimit` integer: DailyLimit is the campaign-level cap on total emails scheduled per calendar day (campaign timezone). null means no campaign-level cap.
    - `ignoreOutOfOfficeReplies` boolean
    - `isEnabledCatchallValidated` boolean
    - `isEnabledEmailVerifier` boolean
    - `isEnabledIgnoreHardBouncedLeads` boolean
    - `isEnabledIgnoreLeadsWhoAlreadyResponded` boolean
    - `isEnabledLlm` boolean
    - `isEnabledSkipLeadIfAlreadyExists` boolean
    - `isEnabledStopFollowUpsAcrossCampaigns` boolean
    - `isEnabledStopFollowUpsForSameCompany` boolean
    - `isEnabledStopFollowUpsOnReply` boolean
    - `maximumSendingLimitPerSenderEmail` integer
    - `maximumSendingLimitPerSenderEmailVariation` integer
    - `minimumHealthScore` integer: MinimumHealthScore is the lowest email account health score that may send in this campaign, 1-100. null means no minimum.
  - `stats` ModelsCampaignDetailStats
    - `bouncedLeadsCount` integer
    - `contactedLeadsCount` integer
    - `emailsSentCount` integer
    - `leadsRespondedPositivelyCount` integer
    - `repliedLeadsCount` integer
  - `status` string
  - `timezone` string
  - `updatedAt` string

## Other responses

- `400`: Invalid campaign ID
- `401`: Unauthorized - invalid or missing API key
- `404`: Campaign not found
- `500`: Failed to retrieve campaign

---

[API](https://skmtc.dev/emailchaser/apis/emailchaser-api.md) · [All operations](https://skmtc.dev/emailchaser/apis/emailchaser-api/llms.txt) · [OpenAPI document](https://skmtc.dev/emailchaser/apis/emailchaser-api/revisions/8b114990abb7?raw)
