---
title: "Get campaign setup"
method: GET
path: "/api/v1/initiatives/{id}/campaign"
tags: ["Initiatives"]
---

# Get campaign setup

`GET /api/v1/initiatives/{id}/campaign`

## Request

- Base URL: `https://www.useboom.ai`
- URL: `https://www.useboom.ai/api/v1/initiatives/{id}/campaign`
- Auth: HTTP bearer

A campaign's setup (audience, send time, its email and WhatsApp messages with their bindings, review before sending) and what still blocks scheduling it with `initiatives_launch`.

## Path parameters

- `id` string, required: The campaign id.

## Response `200`

Success

- object
  - `id` string, required
  - `formBuilt` boolean, required: False when the one-time initiative was built by hand: it has no campaign setup, edit its journey instead.
  - `sendAt` string, nullable, required
  - `audience` union, required: Who gets it. `manual`: people you add with `initiatives_participants_add`. `segment`: a one-time snapshot of that segment. It never keeps enrolling people who join later.
    - object
      - `kind` 'manual', required
    - object
      - `kind` 'segment', required
      - `segmentId` string, required: The segment id (not its slug).
      - `readAtSend` boolean, required: true = read the segment at `sendAt` (someone who leaves it before then drops out); false = read it when the campaign is scheduled.
  - `audienceCount` number, nullable, required: Segment members right now; null for a manual audience.
  - `audienceMissing` object, nullable, required: Segment members with no email / no phone for WhatsApp.
    - `email` number, required
    - `whatsapp` number, required
  - `whatsapp` object, nullable, required
    - `templateId` string, required
    - `channelId` string, nullable, required
    - `templateBindings` object, required
  - `email` object, nullable, required
    - `templateId` string, required
    - `bindings` object, required
    - `fromSenderIdOverride` string, nullable, required
    - `replyToSenderIdOverride` string, nullable, required
  - `reviewBeforeSending` boolean, required
  - `journeyStatus` 'DRAFT' | 'PUBLISHED' | 'STOPPED', nullable, required
  - `readyToSchedule` boolean, required: True when nothing below blocks `initiatives_launch`.
  - `missing` object[], required: What still blocks scheduling, each with how to fix it.
    - `code` string, required
    - `message` string, required

## Other responses

- `400`: Validation failed or the request cannot proceed.
- `401`: Missing, malformed, or revoked API key.
- `404`: The resource does not exist in this organization.
- `409`: Conflicts with the current state (duplicates, wrong lifecycle state).
- `422`: The request is well-formed but semantically invalid.
- `429`: Rate limit exceeded — retry after `Retry-After`.
- `500`: Internal server error.
- `503`: Transient error — retry with a narrower request.

## Changes

- **2026-11-03** `7c7a773b12ce`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/useboom/apis/boom-api/changes/api/v1/initiatives/:id/campaign/get.md)

---

[API](https://skmtc.dev/useboom/apis/boom-api.md) - [All operations](https://skmtc.dev/useboom/apis/boom-api/llms.txt) - [OpenAPI document](https://skmtc.dev/useboom/apis/boom-api/revisions/d596d92ed092?raw)
