MNTN Campaigns API

Campaign list, lookup, and lifecycle.

Operations 9

GET /api/v1/campaigns List campaigns #
POST /api/v1/campaigns Create a campaign #
GET /api/v1/campaigns/{id} Get a campaign #
PATCH /api/v1/campaigns/{id} Update a campaign #
DELETE /api/v1/campaigns/{id} Delete a campaign #
POST /api/v1/campaigns/{id}/recommended-audience Create and link a recommended audience for a campaign #
POST /api/v1/campaigns/{id}/launch Launch a campaign #
POST /api/v1/campaigns/{id}/pause Pause a campaign #
GET /api/v1/audiences/{id}/campaigns List campaigns linked to an audience #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/mntn-campaigns-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

mntn-campaigns-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: PTV Campaigns API
  description: PTV API authoritative source of truth for PTV data.
  version: '1.0'
  contact:
    name: MNTN Platform
    url: https://api.mountain.com
    email: support@mountain.com
  license:
    name: Proprietary
servers:
- url: https://api.mountain.com/ptv
  description: MNTN Performance TV API gateway
security:
- Bearer: []
- API Key: []
tags:
- name: campaigns
  description: Campaign list, lookup, and lifecycle.
paths:
  /api/v1/campaigns:
    get:
      description: 'Returns campaigns the caller is authorized to see, filtered by advertiser, campaign, status, objective, or search text.


        **Filters:** `advertiserId`, `campaignId` (repeatable), `objective`, `search`, `status` (repeatable).


        **Sorting:** `sortBy` (`name`, `status`, `objective`, `totalBudget`, `monthlyBudget`, `spend`, `startTime`, `endTime`, `createdAt`, `updatedAt`) with `sortOrder` (`asc`/`desc`, default `asc`).


        **Notes:** Each campaign carries `creativeIds` for its attached creatives; fetch a single campaign with `expand=creatives` for click URLs and weights.'
      operationId: campaigns.list
      parameters:
      - name: page
        required: false
        in: query
        description: 1-based page number.
        schema:
          minimum: 1
          type: number
      - name: perPage
        required: false
        in: query
        description: Results per page (maximum 100).
        schema:
          minimum: 1
          maximum: 100
          type: number
      - name: status
        required: false
        in: query
        description: Repeatable campaign status filter.
        schema:
          type: array
          items:
            type: string
      - name: objective
        required: false
        in: query
        description: Campaign objective filter.
        schema:
          type: string
      - name: sortBy
        required: false
        in: query
        description: 'Field to sort by: `name`, `status`, `objective`, `totalBudget`, `monthlyBudget`, `spend`, `startTime`, `endTime`, `createdAt`, `updatedAt`.'
        schema:
          type: string
          enum:
          - name
          - status
          - objective
          - totalBudget
          - monthlyBudget
          - spend
          - startTime
          - endTime
          - createdAt
          - updatedAt
      - name: sortOrder
        required: false
        in: query
        description: Sort order (default `asc` when `sortBy` is set).
        schema:
          type: string
          enum:
          - asc
          - desc
      - name: search
        required: false
        in: query
        description: Case-insensitive substring match on campaign name. Numeric values also match campaign ID and advertiser ID.
        schema:
          type: string
      - name: campaignId
        required: false
        in: query
        description: Repeatable campaign ID filter.
        schema:
          type: array
          items:
            type: string
      - name: advertiserId
        required: false
        in: query
        description: Advertiser ID to retrieve campaigns for.
        schema:
          exclusiveMinimum: true
          type: number
          minimum: 0
      responses:
        '200':
          description: Paginated campaign list.
          content:
            application/json:
              example:
                data:
                - id: '501'
                  name: Spring prospecting
                  status: live
                  objective: PROSPECTING
                  totalBudget: 10000
                  monthlyBudget: 2500
                  spend: 1250.5
                  startTime: '2026-01-01T00:00:00.000Z'
                  endTime: '2026-03-31T23:59:59.000Z'
                  goalType: CPA
                  goalValue: 25
                  createdAt: '2025-12-01T10:00:00.000Z'
                  updatedAt: '2026-01-15T14:30:00.000Z'
                  snapshotUrl: https://c.mountain.com/storage/video/44821/poster/poster.jpg
                  videoPreview:
                    name: Spring prospecting creative
                    videoUrl: https://c.mountain.com/storage/video/44821/video/video.mp4
                    posterUrl: https://c.mountain.com/storage/video/44821/poster/poster.jpg
                  campaignGoal: Traffic & Sales
                  advertiserId: 44
                  currentFlightId: 88001
                  audienceId: 9001
                  creativeIds:
                  - 44821
                  - 44900
                pagination:
                  total: 42
                  perPage: 25
                  page: 1
                  previousPageUrl: null
                  nextPageUrl: https://api.example.com/api/v1/campaigns?page=2&advertiserId=44
        default:
          description: Unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedCampaignsResponseDto_Output'
      summary: List campaigns
      tags:
      - campaigns
    post:
      description: 'Creates a campaign for an advertiser with the given objective, optionally linking an existing audience, opening an initial budget, and attaching library creatives in the same call.


        **Notes:** Creation is a multi-step operation against the campaign provider and is not idempotent, so a client retry may create a duplicate. `audienceIds` accepts at most one audience; an optional `budget` opens the campaign''s first flight.


        **Creatives:** `creatives` attaches library creatives after the campaign is created — each entry carries the creative `id`, an optional `clickUrl`, and an optional serving `weight`. Explicit weights are used verbatim and creatives without one split the remaining share of 100 equally, so the attached set always totals 100 (launch-ready). A creative attached without a click-through URL cannot be approved or launched until one is set. Creatives still processing or in review may be attached; they serve once approved. If any creation step fails, the campaign is rolled back and its creatives are released — no partially-created campaign survives.'
      operationId: campaigns.create
      parameters: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateCampaignDto'
      responses:
        '201':
          description: Created campaign.
          content:
            application/json:
              example:
                data:
                  id: '501'
                  name: Spring prospecting
                  status: live
                  objective: PROSPECTING
                  totalBudget: 10000
                  monthlyBudget: 2500
                  spend: 1250.5
                  startTime: '2026-01-01T00:00:00.000Z'
                  endTime: '2026-03-31T23:59:59.000Z'
                  goalType: CPA
                  goalValue: 25
                  createdAt: '2025-12-01T10:00:00.000Z'
                  updatedAt: '2026-01-15T14:30:00.000Z'
                  snapshotUrl: https://c.mountain.com/storage/video/44821/poster/poster.jpg
                  videoPreview:
                    name: Spring prospecting creative
                    videoUrl: https://c.mountain.com/storage/video/44821/video/video.mp4
                    posterUrl: https://c.mountain.com/storage/video/44821/poster/poster.jpg
                  campaignGoal: Traffic & Sales
                  advertiserId: 44
                  currentFlightId: 88001
                  audienceId: 9001
                  creativeIds:
                  - 44821
                  - 44900
                  creatives:
                  - id: 44821
                    clickUrl: https://example.com/spring
                    weight: 60
                  - id: 44900
                    clickUrl: https://example.com/spring
                    weight: 40
                  currentFlight:
                    id: 88001
                    campaignGroupId: 501
                    budget: 10000
                    startTime: '2026-01-01T00:00:00.000Z'
                    endTime: '2026-03-31T23:59:59.000Z'
                    status: LIVE
                    budgetTypeId: 1
                  audience:
                    id: 9001
                    name: Holiday shoppers
                    totalUsers: 50000
                    createdAt: '2025-11-01T12:00:00.000Z'
                    geoLists: null
                    geo: null
                    updatedTime: null
                    isTest: false
        default:
          description: Unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignSingleResponseDto_Output'
      summary: Create a campaign
      tags:
      - campaigns
  /api/v1/campaigns/{id}:
    get:
      description: 'Returns the canonical campaign representation for a given campaign ID, including its primary audience link.


        **Notes:** Attached creative ids are always present as `creativeIds`. Pass `expand=currentFlight` for the active flight (Gary), `expand=audience` for the full audience record, and `expand=creatives` for the full attached-creative records (click URL, weight).'
      operationId: campaigns.get
      parameters:
      - name: id
        required: true
        in: path
        description: Campaign identifier.
        schema:
          type: string
      - name: expand
        required: false
        in: query
        description: 'Expand relations: `currentFlight`, `audience`, `creatives`. Use `expand=value`, repeat, or `expand[]=value`.'
        schema:
          type:
          - array
          - 'null'
          items:
            type: string
            enum:
            - currentFlight
            - audience
            - creatives
      responses:
        '200':
          description: Single campaign.
          content:
            application/json:
              example:
                data:
                  id: '501'
                  name: Spring prospecting
                  status: live
                  objective: PROSPECTING
                  totalBudget: 10000
                  monthlyBudget: 2500
                  spend: 1250.5
                  startTime: '2026-01-01T00:00:00.000Z'
                  endTime: '2026-03-31T23:59:59.000Z'
                  goalType: CPA
                  goalValue: 25
                  createdAt: '2025-12-01T10:00:00.000Z'
                  updatedAt: '2026-01-15T14:30:00.000Z'
                  snapshotUrl: https://c.mountain.com/storage/video/44821/poster/poster.jpg
                  videoPreview:
                    name: Spring prospecting creative
                    videoUrl: https://c.mountain.com/storage/video/44821/video/video.mp4
                    posterUrl: https://c.mountain.com/storage/video/44821/poster/poster.jpg
                  campaignGoal: Traffic & Sales
                  advertiserId: 44
                  currentFlightId: 88001
                  audienceId: 9001
                  creativeIds:
                  - 44821
                  - 44900
                  creatives:
                  - id: 44821
                    clickUrl: https://example.com/spring
                    weight: 60
                  - id: 44900
                    clickUrl: https://example.com/spring
                    weight: 40
                  currentFlight:
                    id: 88001
                    campaignGroupId: 501
                    budget: 10000
                    startTime: '2026-01-01T00:00:00.000Z'
                    endTime: '2026-03-31T23:59:59.000Z'
                    status: LIVE
                    budgetTypeId: 1
                  audience:
                    id: 9001
                    name: Holiday shoppers
                    totalUsers: 50000
                    createdAt: '2025-11-01T12:00:00.000Z'
                    geoLists: null
                    geo: null
                    updatedTime: null
                    isTest: false
        default:
          description: Unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignSingleResponseDto_Output'
      summary: Get a campaign
      tags:
      - campaigns
    patch:
      description: 'Updates an existing campaign''s editable fields. Only the fields present in the request body are changed; omitted fields are left untouched.


        **Notes:** A campaign''s `objective` is immutable and any attempt to change it is rejected. `audienceIds` accepts at most one audience; sending an empty array clears the assigned audience.


        **Creatives:** `creatives` is the campaign''s desired full creative set — entries not yet attached are attached, attached creatives missing from the array are detached, and weights are applied to the survivors. Explicit weights are used verbatim; entries without one split the remaining share of 100 equally, so the resulting set always totals 100 (a weightless array means an even split, replacing any previous weights). A creative attached without a click-through URL cannot be approved or launched until one is set. Unlike `audienceIds`, an empty array is rejected. The reconcile is not atomic: additions apply one at a time (detachments and weights apply together), so a failure can leave the set partially updated — retrying the same request converges. If creatives are changed concurrently by another client, the request may fail or a concurrently-attached creative may survive; retrying resolves both.'
      operationId: campaigns.update
      parameters:
      - name: id
        required: true
        in: path
        description: Campaign (campaign group) ID.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCampaignDto'
      responses:
        '200':
          description: Updated campaign.
          content:
            application/json:
              example:
                data:
                  id: '501'
                  name: Spring prospecting
                  status: live
                  objective: PROSPECTING
                  totalBudget: 10000
                  monthlyBudget: 2500
                  spend: 1250.5
                  startTime: '2026-01-01T00:00:00.000Z'
                  endTime: '2026-03-31T23:59:59.000Z'
                  goalType: CPA
                  goalValue: 25
                  createdAt: '2025-12-01T10:00:00.000Z'
                  updatedAt: '2026-01-15T14:30:00.000Z'
                  snapshotUrl: https://c.mountain.com/storage/video/44821/poster/poster.jpg
                  videoPreview:
                    name: Spring prospecting creative
                    videoUrl: https://c.mountain.com/storage/video/44821/video/video.mp4
                    posterUrl: https://c.mountain.com/storage/video/44821/poster/poster.jpg
                  campaignGoal: Traffic & Sales
                  advertiserId: 44
                  currentFlightId: 88001
                  audienceId: 9001
                  creativeIds:
                  - 44821
                  - 44900
                  creatives:
                  - id: 44821
                    clickUrl: https://example.com/spring
                    weight: 60
                  - id: 44900
                    clickUrl: https://example.com/spring
                    weight: 40
                  currentFlight:
                    id: 88001
                    campaignGroupId: 501
                    budget: 10000
                    startTime: '2026-01-01T00:00:00.000Z'
                    endTime: '2026-03-31T23:59:59.000Z'
                    status: LIVE
                    budgetTypeId: 1
                  audience:
                    id: 9001
                    name: Holiday shoppers
                    totalUsers: 50000
                    createdAt: '2025-11-01T12:00:00.000Z'
                    geoLists: null
                    geo: null
                    updatedTime: null
                    isTest: false
        default:
          description: Unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignSingleResponseDto_Output'
      summary: Update a campaign
      tags:
      - campaigns
    delete:
      description: 'Archives a campaign so it no longer runs or appears in active listings. This is a soft delete: the campaign moves to the `archived` status rather than being permanently removed.


        **Notes:** Archiving a live campaign pauses it first, and the campaign''s creatives are disassociated. The archived campaign is returned so the caller can confirm the new status.'
      operationId: campaigns.archive
      parameters:
      - name: id
        required: true
        in: path
        description: Campaign (campaign group) ID.
        schema:
          type: string
      responses:
        '200':
          description: Archived campaign.
          content:
            application/json:
              example:
                data:
                  id: '501'
                  name: Spring prospecting
                  status: live
                  objective: PROSPECTING
                  totalBudget: 10000
                  monthlyBudget: 2500
                  spend: 1250.5
                  startTime: '2026-01-01T00:00:00.000Z'
                  endTime: '2026-03-31T23:59:59.000Z'
                  goalType: CPA
                  goalValue: 25
                  createdAt: '2025-12-01T10:00:00.000Z'
                  updatedAt: '2026-01-15T14:30:00.000Z'
                  snapshotUrl: https://c.mountain.com/storage/video/44821/poster/poster.jpg
                  videoPreview:
                    name: Spring prospecting creative
                    videoUrl: https://c.mountain.com/storage/video/44821/video/video.mp4
                    posterUrl: https://c.mountain.com/storage/video/44821/poster/poster.jpg
                  campaignGoal: Traffic & Sales
                  advertiserId: 44
                  currentFlightId: 88001
                  audienceId: 9001
                  creativeIds:
                  - 44821
                  - 44900
                  creatives:
                  - id: 44821
                    clickUrl: https://example.com/spring
                    weight: 60
                  - id: 44900
                    clickUrl: https://example.com/spring
                    weight: 40
                  currentFlight:
                    id: 88001
                    campaignGroupId: 501
                    budget: 10000
                    startTime: '2026-01-01T00:00:00.000Z'
                    endTime: '2026-03-31T23:59:59.000Z'
                    status: LIVE
                    budgetTypeId: 1
                  audience:
                    id: 9001
                    name: Holiday shoppers
                    totalUsers: 50000
                    createdAt: '2025-11-01T12:00:00.000Z'
                    geoLists: null
                    geo: null
                    updatedTime: null
                    isTest: false
        default:
          description: Unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignSingleResponseDto_Output'
      summary: Delete a campaign
      tags:
      - campaigns
  /api/v1/campaigns/{id}/recommended-audience:
    post:
      description: Creates a new audience for the campaign's advertiser whose keywords are derived server-side from the advertiser's AI-recommended keywords, and links it to the campaign. Rejects with 422 if the campaign already has an audience or if the advertiser has no recommendations available. On link failure after a successful audience-create, the error surfaces the underlying cause (e.g. 403 authz, upstream failure) and reports the orphan audience id so it can be reconciled out-of-band.
      operationId: CampaignsController_createRecommendedAudience_v1
      parameters:
      - name: id
        required: true
        in: path
        description: Campaign identifier.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRecommendedAudienceDto'
      responses:
        '201':
          description: Created audience in envelope shape `{ data }`.
          content:
            application/json:
              example:
                data:
                  id: 1001
                  name: High-intent shoppers
                  totalUsers: 125000
                  createdAt: '2025-11-01T09:00:00.000Z'
                  geoLists:
                    include:
                    - 200
                    exclude: []
                  geo:
                    include:
                    - 237
                    exclude: []
                  updatedTime: '2025-11-02T12:00:00.000Z'
                  isTest: false
                  geoLocations:
                    include:
                    - id: 237
                      name: Los Angeles
                      geoType:
                        id: 4
                        name: Media Market
                    exclude: []
        default:
          description: Unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AudienceSingleResponseDto_Output'
      summary: Create and link a recommended audience for a campaign
      tags:
      - campaigns
  /api/v1/campaigns/{id}/launch:
    post:
      description: 'Launches a campaign so it begins delivering.


        **Notes:** Only a campaign in a launchable state can be launched; an `incomplete` campaign is rejected with `422` before anything is sent upstream (it needs an active budget, a goal, an audience, installed pixels, and approved creatives). The launched campaign is returned so the caller can confirm the new status. If the campaign''s budget schedule already started (elapsed or in-flight budget periods will not be recovered), the launch proceeds without additional confirmation — calling this endpoint is the confirmation.'
      operationId: campaigns.launch
      parameters:
      - name: id
        required: true
        in: path
        description: Campaign (campaign group) ID.
        schema:
          type: string
      responses:
        '200':
          description: Launched campaign.
          content:
            application/json:
              example:
                data:
                  id: '501'
                  name: Spring prospecting
                  status: live
                  objective: PROSPECTING
                  totalBudget: 10000
                  monthlyBudget: 2500
                  spend: 1250.5
                  startTime: '2026-01-01T00:00:00.000Z'
                  endTime: '2026-03-31T23:59:59.000Z'
                  goalType: CPA
                  goalValue: 25
                  createdAt: '2025-12-01T10:00:00.000Z'
                  updatedAt: '2026-01-15T14:30:00.000Z'
                  snapshotUrl: https://c.mountain.com/storage/video/44821/poster/poster.jpg
                  videoPreview:
                    name: Spring prospecting creative
                    videoUrl: https://c.mountain.com/storage/video/44821/video/video.mp4
                    posterUrl: https://c.mountain.com/storage/video/44821/poster/poster.jpg
                  campaignGoal: Traffic & Sales
                  advertiserId: 44
                  currentFlightId: 88001
                  audienceId: 9001
                  creativeIds:
                  - 44821
                  - 44900
                  creatives:
                  - id: 44821
                    clickUrl: https://example.com/spring
                    weight: 60
                  - id: 44900
                    clickUrl: https://example.com/spring
                    weight: 40
                  currentFlight:
                    id: 88001
                    campaignGroupId: 501
                    budget: 10000
                    startTime: '2026-01-01T00:00:00.000Z'
                    endTime: '2026-03-31T23:59:59.000Z'
                    status: LIVE
                    budgetTypeId: 1
                  audience:
                    id: 9001
                    name: Holiday shoppers
                    totalUsers: 50000
                    createdAt: '2025-11-01T12:00:00.000Z'
                    geoLists: null
                    geo: null
                    updatedTime: null
                    isTest: false
        default:
          description: Unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignSingleResponseDto_Output'
      summary: Launch a campaign
      tags:
      - campaigns
  /api/v1/campaigns/{id}/pause:
    post:
      description: 'Pauses a live campaign so it stops delivering.


        **Notes:** Only a live campaign can be paused. An optional `pause_reason` records why the campaign was paused. The paused campaign is returned so the caller can confirm the new status.'
      operationId: campaigns.pause
      parameters:
      - name: id
        required: true
        in: path
        description: Campaign (campaign group) ID.
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PauseCampaignBodyDto'
      responses:
        '200':
          description: Paused campaign.
          content:
            application/json:
              example:
                data:
                  id: '501'
                  name: Spring prospecting
                  status: live
                  objective: PROSPECTING
                  totalBudget: 10000
                  monthlyBudget: 2500
                  spend: 1250.5
                  startTime: '2026-01-01T00:00:00.000Z'
                  endTime: '2026-03-31T23:59:59.000Z'
                  goalType: CPA
                  goalValue: 25
                  createdAt: '2025-12-01T10:00:00.000Z'
                  updatedAt: '2026-01-15T14:30:00.000Z'
                  snapshotUrl: https://c.mountain.com/storage/video/44821/poster/poster.jpg
                  videoPreview:
                    name: Spring prospecting creative
                    videoUrl: https://c.mountain.com/storage/video/44821/video/video.mp4
                    posterUrl: https://c.mountain.com/storage/video/44821/poster/poster.jpg
                  campaignGoal: Traffic & Sales
                  advertiserId: 44
                  currentFlightId: 88001
                  audienceId: 9001
                  creativeIds:
                  - 44821
                  - 44900
                  creatives:
                  - id: 44821
                    clickUrl: https://example.com/spring
                    weight: 60
                  - id: 44900
                    clickUrl: https://example.com/spring
                    weight: 40
                  currentFlight:
                    id: 88001
                    campaignGroupId: 501
                    budget: 10000
                    startTime: '2026-01-01T00:00:00.000Z'
                    endTime: '2026-03-31T23:59:59.000Z'
                    status: LIVE
                    budgetTypeId: 1
                  audience:
                    id: 9001
                    name: Holiday shoppers
                    totalUsers: 50000
                    createdAt: '2025-11-01T12:00:00.000Z'
                    geoLists: null
                    geo: null
                    updatedTime: null
                    isTest: false
        default:
          description: Unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CampaignSingleResponseDto_Output'
      summary: Pause a campaign
      tags:
      - campaigns
  /api/v1/audiences/{id}/campaigns:
    get:
      description: Returns campaigns attached to the given audience. Same response shape as GET /campaigns.
      operationId: audiences.campaigns.list
      parameters:
      - name: id
        required: true
        in: path
        description: Audience identifier.
        schema:
          type: number
      - name: page
        required: false
        in: query
        description: 1-based page number.
        schema:
          minimum: 1
          type: number
      - name: perPage
        required: false
        in: query
        description: Results per page (maximum 100).
        schema:
          minimum: 1
          maximum: 100
          type: number
      responses:
        '200':
          description: Paginated campaign list.
          content:
            application/json:
              example:
                data:
                - id: '501'
                  name: Spring prospecting
                  status: live
                  objective: PROSPECTING
                  totalBudget: 10000
                  monthlyBudget: 2500
                  spend: 1250.5
                  startTime: '2026-01-01T00:00:00.000Z'
                  endTime: '2026-03-31T23:59:59.000Z'
                  goalType: CPA
                  goalValue: 25
                  createdAt: '2025-12-01T10:00:00.000Z'
                  updatedAt: '2026-01-15T14:30:00.000Z'
                  snapshotUrl: https://c.mountain.com/storage/video/44821/poster/poster.jpg
                  videoPreview:
                    name: Spring prospecting creative
                    videoUrl: https://c.mountain.com/storage/video/44821/video/video.mp4
                    posterUrl: https://c.mountain.com/storage/video/44821/poster/poster.jpg
                  campaignGoal: Traffic & Sales
                  advertiserId: 44
                  currentFlightId: 88001
                  audienceId: 9001
                  creativeIds:
                  - 44821
                  - 44900
                pagination:
                  total: 42
                  perPage: 25
                  page: 1
                  previousPageUrl: null
                  nextPageUrl: https://api.example.com/api/v1/campaigns?page=2&advertiserId=44
        default:
          description: Unexpected error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedCampaignsResponseDto_Output'
      summary: List campaigns linked to an audience
      tags:
      - campaigns
components:
  schemas:
    CreateCampaignDto:
      type: object
      properties:
        name:
          description: Optional campaign display name. A provider default is used when omitted.
          type: string
        objective:
          type: string
          enum:
          - CONVERSIONS
          - RETARGETING
          - PROSPECTING
          - AWARENESS
          description: Campaign objective used for optimization strategy.
        advertiserId:
          type: number
          exclusiveMinimum: true
          description: Owning advertiser identifier for the campaign.
          minimum: 0
        audienceIds:
          description: Optional audience assignment. At most one audience is supported.
          maxItems: 1
          type: array
          items:
            type: number
            exclusiveMinimum: true
            description: Positive integer entity identifier.
            minimum: 0
        goalType:
          description: Optional optimization goal type.
          type: string
        goalValue:
          description: Optional numeric target value for goalType.
          type: number
        budget:
          type: object
          properties:
            type:
              type: string
              enum:
              - TOTAL
              - MONTHLY
              description: Budget mode for the created campaign.
            amount:
              type: number
              exclusiveMinimum: true
              description: Budget amount in currency USD (dollars only).
              minimum: 0
            schedule:
              type: object
              properties:
                startTime:
                  type: string
                  desc

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