> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apostra.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Pause campaign

> Pause a running campaign. Cascades to all active media buys and reports the per-media-buy outcome. The campaign becomes PAUSED only when every media buy confirmed the pause; otherwise the call returns 503 with each buy's outcome in `error.details`. When the only buys outstanding are ones whose seller accepted the pause and is still applying it, the campaign stays ACTIVE and becomes PAUSED on its own once every seller confirms.



## OpenAPI

````yaml /v2/buyer-api-v2.yaml post /campaigns/{campaignId}/pause
openapi: 3.0.0
info:
  title: Scope3 Buyer API
  version: 2.0.0
  description: |-
    REST API for advertisers to manage advertisers, campaigns, and reporting.

    ## Authentication

    All endpoints require a Bearer token in the Authorization header:
    ```
    Authorization: Bearer your-api-key
    ```

    ## Base URL

    `https://api.apostra.com/api/v2/buyer`

    ## For AI Agents

    AI agents can use the MCP endpoint at `/mcp/v2/buyer` with three tools:
    - `initialize`: Start an MCP session
    - `api_call`: Make REST API calls
    - `ask_about_capability`: Learn about API features
servers:
  - url: https://api.apostra.com/api/v2/buyer
    description: Production server
security: []
tags:
  - name: Signup
    description: Request reviewed access to Interchange
  - name: Account
    description: Account management, service tokens, and preferences
  - name: Asks
    description: >-
      What you are waiting on Scope3 for — support, product, and supply asks in
      one list
  - name: Advertisers
    description: Manage advertisers
  - name: Product Discovery
    description: Discover and select products
  - name: Campaigns
    description: Manage advertising campaigns
  - name: Creatives
    description: Build, manage, and sync campaign creatives via AdCP Creative Protocol
  - name: Reporting
    description: Access performance metrics
  - name: Event Sources
    description: >-
      Manage event source configurations and log conversion/marketing events for
      attribution
  - name: Property Lists
    description: Validate property lists against AAO registry
  - name: Sales Agents
    description: View and connect sales agents
  - name: Measurement
    description: Measurement sources, records, context, and freshness
  - name: Syndication
    description: Syndicate resources to ADCP agents
  - name: Tasks
    description: Track async operation status
  - name: Buyer Billing
    description: >-
      Consolidated invoicing for buyers — invoices and pending invoice items
      issued by Scope3 across the buyer customer.
  - name: MCP
    description: Model Context Protocol endpoints for AI agents
paths:
  /campaigns/{campaignId}/pause:
    post:
      tags:
        - Campaigns
      summary: Pause campaign
      description: >-
        Pause a running campaign. Cascades to all active media buys and reports
        the per-media-buy outcome. The campaign becomes PAUSED only when every
        media buy confirmed the pause; otherwise the call returns 503 with each
        buy's outcome in `error.details`. When the only buys outstanding are
        ones whose seller accepted the pause and is still applying it, the
        campaign stays ACTIVE and becomes PAUSED on its own once every seller
        confirms.
      operationId: pauseCampaign
      parameters:
        - in: path
          name: id
          schema:
            type: string
            minLength: 1
            description: Unique identifier for the campaign
            example: cmp_987654321
          required: true
          description: Unique identifier for the campaign
      responses:
        '200':
          description: Pause campaign
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignCascadeResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: >-
            Not every media buy confirmed the pause, so the campaign was not
            shown as PAUSED. `error.details.reason` is
            `campaign_pause_requested` when the remaining sellers accepted the
            pause and are still applying it, otherwise `campaign_pause_partial`
            or `campaign_pause_failed`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security:
        - bearerAuth: []
components:
  schemas:
    CampaignCascadeResponse:
      type: object
      properties:
        campaignId:
          type: string
          description: Campaign ID
          example: cmp_987654321
        campaignName:
          type: string
          description: Campaign name
        previousStatus:
          type: string
          enum:
            - DRAFT
            - ACTIVE
            - PAUSED
            - ENDING
            - COMPLETED
            - CANCELED
            - ARCHIVED
          description: Previous campaign status
        newStatus:
          type: string
          enum:
            - DRAFT
            - ACTIVE
            - PAUSED
            - ENDING
            - COMPLETED
            - CANCELED
            - ARCHIVED
          description: New campaign status
        mediaBuyResults:
          type: array
          items:
            $ref: '#/components/schemas/MediaBuyCascadeResult'
          description: Per-media-buy cascade outcomes
        totalMediaBuys:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Total number of media buys the cascade attempted
        successCount:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Number of media buys updated successfully
        failureCount:
          type: integer
          minimum: -9007199254740991
          maximum: 9007199254740991
          description: Number of media buys that failed to update
      required:
        - campaignId
        - campaignName
        - previousStatus
        - newStatus
        - mediaBuyResults
        - totalMediaBuys
        - successCount
        - failureCount
      additionalProperties: false
      description: >-
        Campaign cascade operation outcome, including the status change result
        for each media buy
    ErrorResponse:
      type: object
      properties:
        data:
          type: string
          nullable: true
          enum:
            - null
        error:
          $ref: '#/components/schemas/ApiError'
      required:
        - data
        - error
      additionalProperties: false
      description: Standard error response
    MediaBuyCascadeResult:
      type: object
      properties:
        mediaBuyId:
          type: string
          description: The media buy ID
        name:
          type: string
          description: The media buy name
        previousStatus:
          type: string
          description: Status of the media buy before the cascade ran
        success:
          type: boolean
          description: Whether the media buy status change succeeded
        error:
          description: Error message when the media buy status change failed
          type: string
        pauseRequestedAt:
          description: >-
            Seller accepted the pause but has not applied it (first request
            time). The buy stays ACTIVE; success is false.
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
        resumeRequestedAt:
          description: >-
            Seller accepted the resume but has not applied it. The buy stays
            PAUSED; success is false.
          type: string
          format: date-time
          pattern: >-
            ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
      required:
        - mediaBuyId
        - name
        - previousStatus
        - success
      additionalProperties: false
      description: Outcome of a single media buy status change in the cascade
    ApiError:
      type: object
      properties:
        code:
          type: string
          description: Machine-readable error code
        message:
          type: string
          description: Human-readable error message
        field:
          description: Field path associated with the error
          type: string
        details:
          description: Additional error context
          type: object
          additionalProperties: {}
      required:
        - code
        - message
      additionalProperties: false
      description: Structured error object
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key or access token

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.