---
title: "Create Campaign"
method: POST
path: "/campaigns"
tags: ["campaigns"]
---

# Create Campaign

`POST /campaigns`

Create AND launch a campaign — there is no draft state.

## Request body

- CreateCampaignRequest — A campaign is always created from a completed audience build — either a described audience the agent resolved, or a pasted customer list.
  - `name` string, required
  - `audience_build_id` string, required
  - `campaign_user_id` string, nullable
  - `goal` string, nullable
  - `agent_instructions` string, nullable
  - `audience_limit` integer, nullable
  - `redirect_phone_number` string, nullable
  - `first_message_template` string, nullable
  - `continuous_enrollment` boolean

## Response `200`

Successful Response

- CreateCampaignResponse
  - `campaign` CampaignSummary, required
    - `id` string, required
    - `name` string, required
    - `status` string, required
    - `goal_met_label` string
    - `goal_met_outcome` string
    - `first_message_template` string, nullable
    - `unique_customers` integer, required
    - `unique_locations` integer, required
    - `total_events` integer, required
    - `created_at` string, required
    - `updated_at` string, nullable
    - `owner_name` string
    - `total_sent` integer
    - `total_replied` integer
    - `total_goal_met` integer
    - `total_refused` integer
    - `total_no_response` integer
    - `action_required_count` integer
    - `pending_count` integer
    - `progress` integer
  - `total_customers` integer, required
  - `total_events` integer, required

## Other responses

- `404` — Not found
- `422` — Validation Error

## Changes

- **2026-09-12** `a89ec63b4428` — 5 warning
  - removed the request property `business_unit_id`
  - removed the request property `max_rounds`
  - removed the request property `round_interval_days`
  - removed the optional property `campaign/campaign_topic` from the response with the `200` status
  - …1 more
- **2026-09-09** `a786fa3c27df` — 3 breaking, 5 warning, 1 info
  - the request property `audience_build_id` became required
  - request property `audience_build_id` list-of-types was narrowed by removing types `null` from media type `application/json`
  - the `audience_build_id` request property's minLength was increased from `0` to `1`
  - removed the request property `customer_ids`
  - …5 more
- **2026-09-02** `d96feef8e2ef` — 2 warning
  - removed the optional property `campaign/applied_filters` from the response with the `200` status
  - removed the optional property `campaign/batch_count` from the response with the `200` status

[Change history](https://skmtc.dev/noso/apis/crucible-backend-api/changes/campaigns/post.md)

---

[API](https://skmtc.dev/noso/apis/crucible-backend-api.md) · [All operations](https://skmtc.dev/noso/apis/crucible-backend-api/llms.txt) · [OpenAPI document](https://skmtc.dev/noso/apis/crucible-backend-api/revisions/6242f8ed3b67?raw)
