Monaco Campaigns API

The Campaigns API from Monaco — 7 operation(s) for creating campaigns that enroll the contacts of one or more audiences onto a sequence template, and for attaching, detaching, and enrolling into them.

OpenAPI Specification

monaco-campaigns-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Monaco Public Campaigns API
  description: Public API for Monaco
  version: 1.0.0
servers:
- url: https://api.monaco.com
tags:
- name: Campaigns
paths:
  /v1/campaigns/list:
    post:
      tags:
      - Campaigns
      summary: List Campaigns
      description: Returns a paginated list of campaigns.
      operationId: list_campaigns
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicListRequest'
            examples:
              paginated:
                value:
                  page: 1
                  page_size: 50
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicListResponse_CampaignResponse_'
              example:
                data:
                - id: cmp_abc123
                  name: Q3 Enterprise Outbound
                  status: active
                  prioritized: false
                  end_date: '2026-12-31'
                  template_id: seqt_789ghi
                  template_name: Enterprise Onboarding
                  audiences:
                  - id: aud_abc123
                    name: Enterprise West
                  created_at: '2026-01-15T10:30:00Z'
                  updated_at: '2026-05-10T14:22:00Z'
                pagination:
                  page: 1
                  page_size: 50
                  total_count: 7
                  total_pages: 1
                meta:
                  timestamp: '2026-05-11T17:00:00Z'
        4XX:
          description: Client error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
  /v1/campaigns/{campaign_id}:
    get:
      tags:
      - Campaigns
      summary: Get a Campaign
      description: Gets a single campaign by its `campaign_id`, including its attached audiences.
      operationId: get_campaign
      parameters:
      - name: campaign_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Campaign Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicItemResponse_CampaignDetailResponse_'
              example:
                data:
                  id: cmp_abc123
                  name: Q3 Enterprise Outbound
                  status: active
                  prioritized: false
                  end_date: '2026-12-31'
                  template_id: seqt_789ghi
                  template_name: Enterprise Onboarding
                  audiences:
                  - id: aud_abc123
                    name: Enterprise West
                  created_at: '2026-01-15T10:30:00Z'
                  updated_at: '2026-05-10T14:22:00Z'
                meta:
                  timestamp: '2026-05-11T17:00:00Z'
        4XX:
          description: Client error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
    patch:
      tags:
      - Campaigns
      summary: Update a Campaign
      description: 'Updates a campaign''s content fields and/or transitions its lifecycle via `status`. Returns the refreshed campaign.


        To attach or detach audiences, use `add_audiences_to_campaign` / `remove_audiences_from_campaign`.'
      operationId: update_campaign
      parameters:
      - name: campaign_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Campaign Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCampaignRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicItemResponse_CampaignDetailResponse_'
              example:
                data:
                  id: cmp_abc123
                  name: Q3 Enterprise Outbound (revised)
                  status: paused
                  prioritized: true
                  end_date: '2027-01-31'
                  template_id: seqt_789ghi
                  template_name: Enterprise Onboarding
                  audiences:
                  - id: aud_abc123
                    name: Enterprise West
                  created_at: '2026-01-15T10:30:00Z'
                  updated_at: '2026-05-10T14:22:00Z'
                meta:
                  timestamp: '2026-05-10T14:22:00Z'
        4XX:
          description: Client error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '400':
          description: Invalid campaign update
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '404':
          description: Campaign not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '409':
          description: Campaign is being processed and can't be updated right now
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
  /v1/campaigns/:
    post:
      tags:
      - Campaigns
      summary: Create a Campaign
      description: Creates a campaign that enrolls the contacts of the given audiences onto a template, routing sends according to `distribution`.
      operationId: create_campaign
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCampaignRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicItemResponse_CampaignDetailResponse_'
              example:
                data:
                  id: cmp_abc123
                  name: Q3 Enterprise Outbound
                  status: active
                  prioritized: true
                  end_date: '2026-12-31'
                  template_id: seqt_789ghi
                  template_name: Enterprise Onboarding
                  audiences:
                  - id: aud_abc123
                    name: Enterprise West
                  created_at: '2026-01-15T10:30:00Z'
                  updated_at: '2026-01-15T10:30:00Z'
                meta:
                  timestamp: '2026-01-15T10:30:00Z'
        4XX:
          description: Client error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '400':
          description: Invalid campaign request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '404':
          description: Template not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
  /v1/campaigns/{campaign_id}/enroll:
    post:
      tags:
      - Campaigns
      summary: Enroll Contacts in a Campaign
      description: 'Enrolls contacts into a campaign by creating a new audience named `audience_name`, attaching it to the campaign, and adding the contacts to it. The campaign must be `active` or `paused`.


        This always creates a new audience. Audiences can be shared across campaigns, so a contact added to one is enrolled in every campaign using it.'
      operationId: enroll_contacts_in_campaign
      parameters:
      - name: campaign_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Campaign Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EnrollContactsInCampaignRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicItemResponse_EnrollContactsInCampaignResponse_'
              example:
                data:
                  success_count: 3
                  failure_count: 1
                  failure_reasons:
                  - code: contact_not_found
                    description: contact not found
                    count: 1
                meta:
                  timestamp: '2026-07-09T10:30:00Z'
        4XX:
          description: Client error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '400':
          description: Campaign is not enrollable or the audience name is taken
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '404':
          description: Campaign not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
  /v1/campaigns/{campaign_id}/audiences:
    post:
      tags:
      - Campaigns
      summary: Add Audiences to a Campaign
      description: 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.
      operationId: add_audiences_to_campaign
      parameters:
      - name: campaign_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Campaign Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CampaignAudiencesRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicItemResponse_CampaignDetailResponse_'
              example:
                data:
                  id: cmp_abc123
                  name: Q3 Enterprise Outbound
                  status: active
                  prioritized: false
                  end_date: '2026-12-31'
                  template_id: seqt_789ghi
                  template_name: Enterprise Onboarding
                  audiences:
                  - id: aud_abc123
                    name: Enterprise West
                  - id: aud_def456
                    name: Enterprise East
                  created_at: '2026-01-15T10:30:00Z'
                  updated_at: '2026-05-10T14:22:00Z'
                meta:
                  timestamp: '2026-05-10T14:22:00Z'
        4XX:
          description: Client error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '400':
          description: Invalid audiences
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '404':
          description: Campaign not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '409':
          description: Campaign is being processed and can't be updated right now
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
  /v1/campaigns/{campaign_id}/audiences/remove:
    post:
      tags:
      - Campaigns
      summary: Remove Audiences from a Campaign
      description: 'Detaches the given audiences from a campaign, keeping the rest.


        WARNING: detaching an audience tears down in-flight sequences for its contacts — they stop receiving the campaign''s sends.


        Audiences not attached are ignored, so retries are safe, but a campaign must keep at least one audience — a request that would remove them all is rejected.


        Returns the refreshed campaign.'
      operationId: remove_audiences_from_campaign
      parameters:
      - name: campaign_id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          title: Campaign Id
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CampaignAudiencesRequest'
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicItemResponse_CampaignDetailResponse_'
              example:
                data:
                  id: cmp_abc123
                  name: Q3 Enterprise Outbound
                  status: active
                  prioritized: false
                  end_date: '2026-12-31'
                  template_id: seqt_789ghi
                  template_name: Enterprise Onboarding
                  audiences:
                  - id: aud_abc123
                    name: Enterprise West
                  - id: aud_def456
                    name: Enterprise East
                  created_at: '2026-01-15T10:30:00Z'
                  updated_at: '2026-05-10T14:22:00Z'
                meta:
                  timestamp: '2026-05-10T14:22:00Z'
        4XX:
          description: Client error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '400':
          description: Request would leave the campaign with no audiences
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '404':
          description: Campaign not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
        '409':
          description: Campaign is being processed and can't be updated right now
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicErrorResponse'
components:
  schemas:
    AccountOwnerDistribution:
      properties:
        mode:
          type: string
          const: account_owner
          title: Mode
          description: Distribution mode discriminator
          examples:
          - account_owner
        sender_ids:
          items:
            type: string
            format: uuid
          type: array
          minItems: 1
          title: Sender Ids
          description: 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
          examples:
          - - 550e8400-e29b-41d4-a716-446655440001
        fallback_sender_id:
          type: string
          format: uuid
          title: Fallback Sender Id
          description: Sender used whenever a contact's account is unassigned or its owner is not in `sender_ids`. Required for `account_owner` mode.
          examples:
          - 550e8400-e29b-41d4-a716-446655440002
      type: object
      required:
      - mode
      - sender_ids
      - fallback_sender_id
      title: AccountOwnerDistribution
      description: '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``.'
    AccountStatusEnum:
      type: string
      enum:
      - NEW
      - PROSPECTING
      - OPPORTUNITY
      - CUSTOMER
      - DISQUALIFIED
      - NURTURE
      - INBOUND
      - CHURNED
      title: AccountStatusEnum
      description: 'Represents the status of an account in the sales process.

        These are suggested values, but the field accepts any string for flexibility.'
    CampaignAudienceRef:
      properties:
        id:
          type: string
          title: Id
          description: Unique identifier for the audience
          examples:
          - aud_abc123
        name:
          type: string
          title: Name
          description: Name of the audience
          examples:
          - Enterprise West
      type: object
      required:
      - id
      - name
      title: CampaignAudienceRef
      description: An audience attached to a campaign.
    CampaignAudiencesRequest:
      properties:
        audience_ids:
          items:
            type: string
            format: uuid
          type: array
          minItems: 1
          title: Audience Ids
          description: IDs of the audiences to add to (or remove from) the campaign
          examples:
          - - 550e8400-e29b-41d4-a716-446655440010
      type: object
      required:
      - audience_ids
      title: CampaignAudiencesRequest
    CampaignDetailResponse:
      properties:
        id:
          type: string
          title: Id
          description: Unique identifier for the campaign
          examples:
          - cmp_abc123
        name:
          type: string
          title: Name
          description: Name of the campaign
          examples:
          - Q3 Enterprise Outbound
        status:
          $ref: '#/components/schemas/CampaignStatus'
          description: Current lifecycle status of the campaign
          examples:
          - active
        prioritized:
          type: boolean
          title: Prioritized
          description: Whether this campaign takes priority over non-prioritized campaigns
          examples:
          - false
        end_date:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          title: End Date
          description: Date the campaign stops enrolling
          examples:
          - '2026-12-31'
        template_id:
          type: string
          title: Template Id
          description: ID of the template enrolled contacts are placed on
          examples:
          - seqt_789ghi
        template_name:
          anyOf:
          - type: string
          - type: 'null'
          title: Template Name
          description: Title of the template
          examples:
          - Enterprise Onboarding
        audiences:
          items:
            $ref: '#/components/schemas/CampaignAudienceRef'
          type: array
          title: Audiences
          description: Audiences enrolled in this campaign
        enrollment_status:
          $ref: '#/components/schemas/PublicEnrollmentStatus'
          description: Progress of the async task enrolling this campaign's audiences
          examples:
          - completed
        created_at:
          type: string
          format: date-time
          title: Created At
          description: Date and time the campaign was created
          examples:
          - '2026-01-15T10:30:00Z'
        updated_at:
          type: string
          format: date-time
          title: Updated At
          description: Date and time the campaign was last updated
          examples:
          - '2026-05-10T14:22:00Z'
        distribution:
          anyOf:
          - oneOf:
            - $ref: '#/components/schemas/PercentageDistribution'
            - $ref: '#/components/schemas/AccountOwnerDistribution'
            discriminator:
              propertyName: mode
              mapping:
                account_owner: '#/components/schemas/AccountOwnerDistribution'
                percentage: '#/components/schemas/PercentageDistribution'
          - type: 'null'
          title: Distribution
          description: How sends are routed across senders (percentage or account_owner)
        rules_of_engagement:
          anyOf:
          - $ref: '#/components/schemas/PublicRulesOfEngagement-Output'
          - type: 'null'
          description: The campaign's effective rules of engagement; null when the campaign uses the org defaults with no campaign-level config
        autopilot_mode:
          $ref: '#/components/schemas/PublicAutopilotMode'
          description: '`autopilot` when every sender auto-sends, `supervised` when none do, `hybrid` when it''s a mix'
          examples:
          - hybrid
        autopilot_settings:
          $ref: '#/components/schemas/PublicAutopilotSettings'
          description: Senders currently on autopilot and their daily send-release cap
      type: object
      required:
      - id
      - name
      - status
      - prioritized
      - template_id
      - enrollment_status
      - created_at
      - updated_at
      - autopilot_mode
      - autopilot_settings
      title: CampaignDetailResponse
      description: 'Full campaign resource, as returned by `get_campaign`, `create_campaign`,

        and `update_campaign`.'
    CampaignResponse:
      properties:
        id:
          type: string
          title: Id
          description: Unique identifier for the campaign
          examples:
          - cmp_abc123
        name:
          type: string
          title: Name
          description: Name of the campaign
          examples:
          - Q3 Enterprise Outbound
        status:
          $ref: '#/components/schemas/CampaignStatus'
          description: Current lifecycle status of the campaign
          examples:
          - active
        prioritized:
          type: boolean
          title: Prioritized
          description: Whether this campaign takes priority over non-prioritized campaigns
          examples:
          - false
        end_date:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          title: End Date
          description: Date the campaign stops enrolling
          examples:
          - '2026-12-31'
        template_id:
          type: string
          title: Template Id
          description: ID of the template enrolled contacts are placed on
          examples:
          - seqt_789ghi
        template_name:
          anyOf:
          - type: string
          - type: 'null'
          title: Template Name
          description: Title of the template
          examples:
          - Enterprise Onboarding
        audiences:
          items:
            $ref: '#/components/schemas/CampaignAudienceRef'
          type: array
          title: Audiences
          description: Audiences enrolled in this campaign
        enrollment_status:
          $ref: '#/components/schemas/PublicEnrollmentStatus'
          description: Progress of the async task enrolling this campaign's audiences
          examples:
          - completed
        created_at:
          type: string
          format: date-time
          title: Created At
          description: Date and time the campaign was created
          examples:
          - '2026-01-15T10:30:00Z'
        updated_at:
          type: string
          format: date-time
          title: Updated At
          description: Date and time the campaign was last updated
          examples:
          - '2026-05-10T14:22:00Z'
      type: object
      required:
      - id
      - name
      - status
      - prioritized
      - template_id
      - enrollment_status
      - created_at
      - updated_at
      title: CampaignResponse
      description: Campaign summary, as returned by `list_campaigns`.
    CampaignStatus:
      type: string
      enum:
      - active
      - paused
      - completed
      - draft
      - archived
      title: CampaignStatus
      description: Lifecycle status of a campaign.
    CreateCampaignRequest:
      properties:
        name:
          type: string
          minLength: 1
          title: Name
          description: Name of the campaign; must be unique within the organization
          examples:
          - Q3 Enterprise Outbound
        template_id:
          type: string
          format: uuid
          title: Template Id
          description: ID of the template enrolled contacts are placed on
          examples:
          - 550e8400-e29b-41d4-a716-446655440000
        audience_ids:
          items:
            type: string
            format: uuid
          type: array
          minItems: 1
          title: Audience Ids
          description: IDs of the audiences whose contacts are enrolled in this campaign
          examples:
          - - 550e8400-e29b-41d4-a716-446655440010
        distribution:
          oneOf:
          - $ref: '#/components/schemas/PercentageDistribution'
          - $ref: '#/components/schemas/AccountOwnerDistribution'
          title: Distribution
          description: How sends are routed across senders (percentage or account_owner)
          discriminator:
            propertyName: mode
            mapping:
              account_owner: '#/components/schemas/AccountOwnerDistribution'
              percentage: '#/components/schemas/PercentageDistribution'
        end_date:
          anyOf:
          - type: string
            format: date
          - type: 'null'
          title: End Date
          description: Date the campaign stops enrolling; must not be in the past
          examples:
          - '2026-12-31'
        prioritized:
          type: boolean
          title: Prioritized
          description: Whether this campaign takes priority over non-prioritized campaigns
          default: false
          examples:
          - false
        rules_of_engagement:
          anyOf:
          - $ref: '#/components/schemas/PublicRulesOfEngagement-Input'
          - type: 'null'
          description: Per-rule overrides on the org's default rules of engagement
          examples:
          - max_contacts_in_sequence:
              enabled: true
              max_contacts: 3
        autopilot_settings:
          anyOf:
          - $ref: '#/components/schemas/PublicAutopilotSettings'
          - type: 'null'
          description: Initial autopilot roster. Senders listed here auto-send up to their daily cap; senders in `distribution` but omitted here require manual approval per send. Omit to leave every sender supervised.
      type: object
      required:
      - name
      - template_id
      - audience_ids
      - distribution
      title: CreateCampaignRequest
    EnrollContactsInCampaignRequest:
      properties:
        audience_name:
          type: string
          maxLength: 255
          minLength: 1
          title: Audience Name
          description: Name for the new audience created to hold these contacts; pick something short and relevant to the enrollment. Must be unique within the organization — a duplicate name is rejected, so vary it and retry.
          examples:
          - Q3 Enterprise Outbound — July batch
        contact_ids:
          items:
            type: string
            format: uuid
          type: array
          maxItems: 10000
          minItems: 1
          title: Contact Ids
          description: IDs of the contacts to enroll in the campaign
          examples:
          - - 550e8400-e29b-41d4-a716-446655440020
      type: object
      required:
      - audience_name
      - contact_ids
      title: EnrollContactsInCampaignRequest
    EnrollContactsInCampaignResponse:
      properties:
        success_count:
          type: integer
          title: Success Count
          description: Contacts added to the campaign's new audience
          examples:
          - 2
        failure_count:
          type: integer
          title: Failure Count
          description: Contacts that could not be added (e.g. not found in the organization)
          examples:
          - 1
        failure_reasons:
          items:
            $ref: '#/components/schemas/EnrollFailureReason'
          type: array
          title: Failure Reasons
          description: Failure reasons with the number of contacts affected by each
      type: object
      required:
      - success_count
      - failure_count
      title: EnrollContactsInCampaignResponse
      description: 'Aggregate outcome of enrolling contacts into a campaign.


        Counts reflect contacts added to the campaign''s new audience. Sequence

        creation happens asynchronously, so contacts already enrolled in the

        campaign are deduplicated later and still count as successes here.'
    EnrollFailureReason:
      properties:
        code:
          type: string
          title: Code
          description: Failure reason code (e.g. contact_has_active_sequence,)
          examples:
          - contact_has_active_sequence
        description:
          type: string
          title: Description
          description: Human-readable description of the failure reason
          examples:
          - existing active sequence
        count:
          type: integer
          title: Count
          description: Number of contacts that hit this failure
          examples:
          - 1
      type: object
      required:
      - code
      - description
      - count
      title: EnrollFailureReason
      description: A categorized enrollment failure with the count of affected contacts.
    ErrorDetail:
      properties:
        code:
          type: string
          title: Code
          description: Machine-readable error code
          examples:
          - not_found
        message:
          type: string
          title: Message
          description: Human-readable error message
          examples:
          - Resource not found
      type: object
      required:
      - code
      - message
      title: ErrorDetail
    FilterExpression:
      properties:
        operator:
          $ref: '#/components/schemas/LogicalOperatorEnum'
          default: and
        filters:
          items:
            oneOf:
            - $ref: '#/components/schemas/FilterRule'
            - $ref: '#/components/schemas/FilterExpression'
          type: array
          title: Filters
          default: []
      additionalProperties: false
      type: object
      title: FilterExpression
      description: 'A filter expression with an explicit operator.


        Contains filters that can be either FilterRule objects (leaf nodes) or

        nested FilterExpression objects (branch nodes), allowing for arbitrarily

        nested filter structures.'
    FilterRule:
      properties:
        field:
          type: string
          title: Field
        condition:
          type: string
          title: Condition
        value:
          anyOf:
          - {}
          - type: 'null'
          title: Value
      additionalProperties: false
      type: object
      required:
      - field
      - condition
      title: FilterRule
    LogicalOperatorEnum:
      type: string
      enum:
      - and
      - or
      title: LogicalOperatorEnum
      description: Logical operators to combine filters or filter expressions.
    PaginationInfo:
      properties:
        page:
          type: integer
          title: Page
          description: Current page number
          examples:
          - 1
        page_size:
          type: integer
          title: Page Size
          description: Number of results per page
          examples:
          - 25
        total_count:
          type: integer
          title: Total Count
          description: Total number of matching records
          examples:
          - 142
        total_pages:
          type: integer
          title: Total Pages
          description: Total number of pages
          examples:
          - 6
      type: object
      required:
      - page
      - page_size
      - total_count
      - total_pages
      title: PaginationInfo
    PercentageDistribution:
      properties:
        mode:
          type: string
          const: percentage
          title: Mode
          description: Distribution mode discriminator
          examples:
          - percentage
        sender_ids:
          items:
            type: string
            format: uuid
          type: array
          minItems: 1
          title: Sender Ids
          description: IDs of the users sending on this campaign
          examples:
          - - 550e8400-e29b-41d4-a716-446655440001
        percentages:
          item

# --- truncated at 32 KB (48 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/monaco/refs/heads/main/openapi/monaco-campaigns-api-openapi.yml