---
title: "Add Audiences to a Campaign"
method: POST
path: "/v1/campaigns/{campaign_id}/audiences"
tags: ["Campaigns"]
---

# Add Audiences to a Campaign

`POST /v1/campaigns/{campaign_id}/audiences`

## Request

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

Attaches the given audiences to a campaign, keeping its existing ones. Their contacts are enrolled asynchronously. Audiences already attached are ignored, so retries are safe. Returns the refreshed campaign.

## Path parameters

- `campaign_id` string, uuid, required

## Request body

- CampaignAudiencesRequest
  - `audience_ids` string[], required: IDs of the audiences to add to (or remove from) the campaign

## 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 audiences
- `404`: Campaign not found
- `409`: Campaign is being processed and can't be updated right now
- `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/:campaign_id/audiences/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)
