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

# Create a Campaign

`POST /v1/campaigns/`

## Request

- Base URL: `https://api.monaco.com`
- URL: `https://api.monaco.com/v1/campaigns/`
- Auth: none declared

Creates a campaign that enrolls the contacts of the given audiences onto a template, routing sends according to `distribution`.

## Request body

- CreateCampaignRequest
  - `name` string, required: Name of the campaign; must be unique within the organization
  - `template_id` string, uuid, required: ID of the template enrolled contacts are placed on
  - `audience_ids` string[], required: IDs of the audiences whose contacts are enrolled in this campaign
  - `distribution` union, required: How sends are routed across senders (percentage or account_owner)
    - PercentageDistribution: Split sends across named senders by fixed percentages that sum to 100.
      - `mode` 'percentage', required: Distribution mode discriminator
      - `sender_ids` string[], required: IDs of the users sending on this campaign
      - `percentages` SenderPercentage[], required: Per-sender percentages; must cover every sender_id and sum to 100
        - `sender_id` string, uuid, required: ID of the sending user
        - `percentage` integer, required: Share of sends routed to this sender; must be non-negative
    - AccountOwnerDistribution: Route each contact's sends to the owner of its account. A contact's sends go to its account owner when that owner is one of ``sender_ids``; otherwise they fall back to ``fallback_sender_id``.
      - `mode` 'account_owner', required: Distribution mode discriminator
      - `sender_ids` string[], required: IDs of the users eligible to send on this campaign; a contact is routed to its account owner only when the owner appears in this list
      - `fallback_sender_id` string, uuid, required: Sender used whenever a contact's account is unassigned or its owner is not in `sender_ids`. Required for `account_owner` mode.
  - `end_date` string, date, nullable: Date the campaign stops enrolling; must not be in the past
  - `prioritized` boolean: Whether this campaign moves to the front of the organization's send queue, ahead of every non-prioritized campaign. Reserve it for time-sensitive sends, such as an upcoming conference. Prioritizing many campaigns at once dilutes the effect.
  - `rules_of_engagement` PublicRulesOfEngagementInput: Per-rule overrides layered on the org's default rules of engagement. Only the rules you include are overridden, rules you omit keep their org default.
    - `do_not_contact` PublicToggleRule: A rule controlled by a single on/off switch.
      - `enabled` boolean, required: Whether this rule is enforced for the campaign
    - `allow_sequence_stop_on_meeting_booked` PublicToggleRule: A rule controlled by a single on/off switch.
      - `enabled` boolean, required: Whether this rule is enforced for the campaign
    - `contact_cooldown` PublicCooldownRule: Suppress re-contacting the same contact or account within a cooldown window.
      - `enabled` boolean, required: Whether the cooldown is enforced
      - `days` integer: Length of the cooldown window in days
    - `account_cooldown` PublicCooldownRule: Suppress re-contacting the same contact or account within a cooldown window.
      - `enabled` boolean, required: Whether the cooldown is enforced
      - `days` integer: Length of the cooldown window in days
    - `max_contacts_in_sequence` PublicMaxContactsInSequenceRule: Cap how many contacts from one account can be active in sequences at once.
      - `enabled` boolean, required: Whether the cap is enforced
      - `max_contacts` integer: Maximum contacts per account allowed in sequences simultaneously
    - `allow_non_account_owner_campaigns` PublicToggleRule: A rule controlled by a single on/off switch.
      - `enabled` boolean, required: Whether this rule is enforced for the campaign
    - `allow_stop_and_dismiss_on_account_status` PublicStopAndDismissRule: Stop and dismiss a contact's active sequences when its account transitions into one of the configured statuses.
      - `enabled` boolean, required: Whether to stop and dismiss a contact's active sequences when its account transitions into one of the trigger statuses
      - `statuses` AccountStatusEnum[], nullable: Account statuses whose transition triggers stop-and-dismiss; omit to inherit the org's default set
    - `exclude_sequences_on_account_status` PublicStopAndDismissRule: Stop and dismiss a contact's active sequences when its account transitions into one of the configured statuses.
      - `enabled` boolean, required: Whether to stop and dismiss a contact's active sequences when its account transitions into one of the trigger statuses
      - `statuses` AccountStatusEnum[], nullable: Account statuses whose transition triggers stop-and-dismiss; omit to inherit the org's default set
  - `autopilot_settings` PublicAutopilotSettings: Senders on autopilot for this campaign and their daily send-release cap. Senders omitted here (but present in `distribution`) require manual approval before each send starts. An empty list moves every sender to supervised.
    - `sender_rates` SenderAutopilotRate[]
      - `sender_id` string, uuid, required: ID of the sending user
      - `daily_rate_target` integer, required: Daily cap on auto-released sends for this sender; must be positive

## Response `200`

Successful Response

- PublicItemResponseCampaignDetailResponse
  - `data` CampaignDetailResponse, required: Full campaign resource, as returned by `get_campaign`, `create_campaign`, and `update_campaign`.
    - `id` string, required: Unique identifier for the campaign
    - `name` string, required: Name of the campaign
    - `status` 'active' | 'paused' | 'completed' | 'draft' | 'archived', required: Lifecycle status of a campaign.
    - `prioritized` boolean, required: Whether this campaign takes priority over non-prioritized campaigns
    - `end_date` string, date, nullable: Date the campaign stops enrolling
    - `template_id` string, required: ID of the template enrolled contacts are placed on
    - `template_name` string, nullable: Title of the template
    - `audiences` CampaignAudienceRef[]: Audiences enrolled in this campaign
      - `id` string, required: Unique identifier for the audience
      - `name` string, required: Name of the audience
    - `enrollment_status` 'pending' | 'running' | 'enriching' | 'completed' | 'failed', required: Progress of the async audience-enrollment task behind create/update. ``enriching``: the sequences exist and are listed, but their contacts' emails are still being found and verified. Edits are rejected until it completes.
    - `created_at` string, date-time, required: Date and time the campaign was created
    - `updated_at` string, date-time, required: Date and time the campaign was last updated
    - `distribution` union: How sends are routed across senders (percentage or account_owner)
      - PercentageDistribution: Split sends across named senders by fixed percentages that sum to 100.
        - `mode` 'percentage', required: Distribution mode discriminator
        - `sender_ids` string[], required: IDs of the users sending on this campaign
        - `percentages` SenderPercentage[], required: Per-sender percentages; must cover every sender_id and sum to 100
          - `sender_id` string, uuid, required: ID of the sending user
          - `percentage` integer, required: Share of sends routed to this sender; must be non-negative
      - AccountOwnerDistribution: Route each contact's sends to the owner of its account. A contact's sends go to its account owner when that owner is one of ``sender_ids``; otherwise they fall back to ``fallback_sender_id``.
        - `mode` 'account_owner', required: Distribution mode discriminator
        - `sender_ids` string[], required: IDs of the users eligible to send on this campaign; a contact is routed to its account owner only when the owner appears in this list
        - `fallback_sender_id` string, uuid, required: Sender used whenever a contact's account is unassigned or its owner is not in `sender_ids`. Required for `account_owner` mode.
    - `rules_of_engagement` PublicRulesOfEngagementOutput: Per-rule overrides layered on the org's default rules of engagement. Only the rules you include are overridden, rules you omit keep their org default.
      - `do_not_contact` PublicToggleRule: A rule controlled by a single on/off switch.
        - `enabled` boolean, required: Whether this rule is enforced for the campaign
      - `allow_sequence_stop_on_meeting_booked` PublicToggleRule: A rule controlled by a single on/off switch.
        - `enabled` boolean, required: Whether this rule is enforced for the campaign
      - `contact_cooldown` PublicCooldownRule: Suppress re-contacting the same contact or account within a cooldown window.
        - `enabled` boolean, required: Whether the cooldown is enforced
        - `days` integer: Length of the cooldown window in days
      - `account_cooldown` PublicCooldownRule: Suppress re-contacting the same contact or account within a cooldown window.
        - `enabled` boolean, required: Whether the cooldown is enforced
        - `days` integer: Length of the cooldown window in days
      - `max_contacts_in_sequence` PublicMaxContactsInSequenceRule: Cap how many contacts from one account can be active in sequences at once.
        - `enabled` boolean, required: Whether the cap is enforced
        - `max_contacts` integer: Maximum contacts per account allowed in sequences simultaneously
      - `allow_non_account_owner_campaigns` PublicToggleRule: A rule controlled by a single on/off switch.
        - `enabled` boolean, required: Whether this rule is enforced for the campaign
      - `allow_stop_and_dismiss_on_account_status` PublicStopAndDismissRule: Stop and dismiss a contact's active sequences when its account transitions into one of the configured statuses.
        - `enabled` boolean, required: Whether to stop and dismiss a contact's active sequences when its account transitions into one of the trigger statuses
        - `statuses` AccountStatusEnum[], nullable: Account statuses whose transition triggers stop-and-dismiss; omit to inherit the org's default set
      - `exclude_sequences_on_account_status` PublicStopAndDismissRule: Stop and dismiss a contact's active sequences when its account transitions into one of the configured statuses.
        - `enabled` boolean, required: Whether to stop and dismiss a contact's active sequences when its account transitions into one of the trigger statuses
        - `statuses` AccountStatusEnum[], nullable: Account statuses whose transition triggers stop-and-dismiss; omit to inherit the org's default set
    - `autopilot_mode` 'autopilot' | 'supervised' | 'hybrid', required
    - `autopilot_settings` PublicAutopilotSettings, required: Senders on autopilot for this campaign and their daily send-release cap. Senders omitted here (but present in `distribution`) require manual approval before each send starts. An empty list moves every sender to supervised.
      - `sender_rates` SenderAutopilotRate[]
        - `sender_id` string, uuid, required: ID of the sending user
        - `daily_rate_target` integer, required: Daily cap on auto-released sends for this sender; must be positive
  - `meta` ResponseMeta
    - `timestamp` string, date-time: Server timestamp of the response

## Other responses

- `400`: Invalid campaign request
- `404`: Template not found
- `4XX`: Client error

## Changes

- **2026-11-03** `fc720ada2a81`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/monaco/apis/monaco-public-api/changes/v1/campaigns/post.md)

---

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