---
title: "Get a campaign (with steps)"
method: GET
path: "/campaigns/{id}"
tags: ["Campaigns"]
---

# Get a campaign (with steps)

`GET /campaigns/{id}`

## Request

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

Returns a single campaign including its ordered steps array. Steps of type "condition" additionally carry conditionType, conditionTrueNext, conditionFalseNext, conditionTimeoutDays and conditions (read-only). Email and multichannel campaigns also carry `sendingMailboxes` — every mailbox the campaign sends from (up to 200), each with `state`, `dailyLimit` (the mailbox's own limit), `campaignDailyLimit` (the most this campaign sends from it per day) and `sentToday` (campaign emails it sent today, from any campaign) — plus the exact `sendingMailboxCount` and `sendingMailboxStateCounts`. `heldBack` counts the contacts this campaign held back and will not email, per reason (`code`: failed_email_check, bounced_before, unsubscribed, do_not_contact, suppression_list, blocked_list, domain_excluded or unknown, with a plain `label`).

Required scope: `campaigns:read`.

## Path parameters

- `id` string, required

## Response `200`

Success

## Other responses

- `401`: `unauthorized` — Missing or invalid API key.
- `403`: `insufficient_scope` — The API key lacks the scope this endpoint requires.
- `404`: `not_found` — Campaign not found.
- `429`: `rate_limited` — Too many requests — slow down and retry after the Retry-After delay.

---

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