---
title: "Create a new display ad"
method: POST
path: "/measurement/campaigns/{campaign_id}/display_ads"
tags: ["Display ads"]
---

# Create a new display ad

`POST /measurement/campaigns/{campaign_id}/display_ads`

## Request

- Base URL: `https://api.magellan.ai/v2`
- URL: `https://api.magellan.ai/v2/measurement/campaigns/{campaign_id}/display_ads`
- Auth: API key in header `Authorization`

Generates a tag to be fired when DAI exposures occur.

## Path parameters

- `campaign_id` string, required

## Request body

- object
  - `measurementDisplayAd` object, required
    - `name` string, required: The name of the ad.
    - `uid` string: The unique identifier for the ad.
    - `defaultAdServer` 'acast' | 'adarcade' | 'adswizz' | 'amperwave' | 'art19' | 'audioboom' | 'audiohook' | 'audiomeans' | 'barstool' | 'basis' | 'beeswax' | 'beeswax_pod' | 'beeswax_stream' | 'dax' | 'dovetail' | 'dv_360' | 'frequency_ads' | 'gam' | 'gt_impression' | 'iheart_pd' | 'iheart_stream' | 'mediamath' | 'megaphone' | 'omny' | 'podbean' | 'redcircle' | 'sas' | 'simplecast' | 'soundcast' | 'soundstack' | 'spgam' | 'spotify' | 'spreaker' | 'tap' | 'transistor' | 'triton' | 'triton_pd' | 'triton_streaming' | 'ttd' | 'xandr' | 'xandr_pod' | 'xandr_stream'
    - `redirectUrl` string, uri, required: Where Magellan AI will redirect people after their response has been recorded.
    - `cohortsAttributes` AdCohort[]: Cohort and sub-cohort pairs to assign to this ad's line item, processed in the order given. Each pair's cohort and sub-cohort are created if they do not already exist. Assigning a sub-cohort replaces any sub-cohort already assigned from the same cohort, since a line item holds at most one sub-cohort per cohort. This field is additive: pairs omitted from the request are left assigned, so there is no way to un-assign a pair through it.
      - `cohortName` string, required: Name of the cohort (shown as a Group in the dashboard), unique within the ad's campaign. Created on first use if no cohort of this name exists for the campaign.
      - `subCohortName` string, required: Name of the sub-cohort (shown as a Sub-group in the dashboard), unique within the cohort. Created on first use if no sub-cohort of this name exists in the cohort.
    - `flightsAttributes` Flight[]
      - `id` integer
      - `startDate` string, date, required
      - `endDate` string, date, required
      - `expectedImpressions` integer
      - `impressionCap` integer
      - `cpm` number
      - `costPerSpot` number
      - `uid` string
  - `echo` string

## Response `200`

OK

- object
  - `measurementDisplayAd` object
    - `id` string
    - `name` string
    - `uid` string
    - `adServer` 'acast' | 'adarcade' | 'adswizz' | 'amperwave' | 'art19' | 'audioboom' | 'audiohook' | 'audiomeans' | 'barstool' | 'basis' | 'beeswax' | 'beeswax_pod' | 'beeswax_stream' | 'dax' | 'dovetail' | 'dv_360' | 'frequency_ads' | 'gam' | 'gt_impression' | 'iheart_pd' | 'iheart_stream' | 'mediamath' | 'megaphone' | 'omny' | 'podbean' | 'redcircle' | 'sas' | 'simplecast' | 'soundcast' | 'soundstack' | 'spgam' | 'spotify' | 'spreaker' | 'tap' | 'transistor' | 'triton' | 'triton_pd' | 'triton_streaming' | 'ttd' | 'xandr' | 'xandr_pod' | 'xandr_stream'
    - `redirectUrl` string, uri: Where Magellan AI will redirect people after their response has been recorded.
    - `cohorts` AdCohort[]: The cohorts and sub-cohorts currently assigned to this ad's line item.
      - `cohortName` string, required: Name of the cohort (shown as a Group in the dashboard), unique within the ad's campaign. Created on first use if no cohort of this name exists for the campaign.
      - `subCohortName` string, required: Name of the sub-cohort (shown as a Sub-group in the dashboard), unique within the cohort. Created on first use if no sub-cohort of this name exists in the cohort.
    - `campaign` CampaignWithParent
      - `id` string
      - `name` string
      - `startDate` string, date
      - `endDate` string, date
      - `attributionMethodology` 'last_touch' | 'equal_credit'
      - `operativeId` string
      - `salesforceId` string
      - `customEvents` CustomViewEvent[]
        - `id` integer: Magellan AI's ID for the custom view event.
        - `label` string
        - `pattern` string
      - `pixel` Pixel
        - `id` string
        - `name` string
        - `brand` object
          - `crmBrandId` string
          - `name` string
          - `domain` string, nullable: The domain from the pixel owner's CRM brand sync for this brand (the value the owning client sent to `POST /crm_brand_syncs`). Null when the owning client has no CRM brand sync for the brand.
    - `displayUrl` string, uri: The URL to enter into the ad server (GAM) to deliver impressions to Magellan AI whenever this ad is served.
    - `clickUrl` string, uri: The click-through URL to wrap your ad in, which will redirect people to the provided `redirectUrl`.
    - `meta` Metadata
      - `pagination` object
        - `currentPage` integer
        - `totalPages` integer
        - `count` integer
        - `links` object
          - `first` string, uri
          - `prev` string, uri
          - `next` string, uri
          - `last` string, uri
  - `echo` string

## Other responses

- `400`: The request body is missing its top-level resource key, such as `measurementCampaign`, or that key is empty.
- `401`: Unauthorized. When the access token is missing, invalid, expired or revoked, the body is empty. When the token is valid but its user may not access the resource, the body is an `Error`.
- `403`: The access token has a scope, such as an MCP token. The v2 API only accepts unscoped tokens.
- `404`: Not Found
- `422`: Unprocessable Content

## Changes

- **2026-11-03** `beceb462c707`: 1 breaking, 7 info
  - added `#/components/schemas/AdCohortsWritableAttributes` to the `measurementDisplayAd/allOf[#/components/schemas/DisplayAdUpdatableAttributes]/` request property `allOf` list
  - added the media type `application/json` for the response with the status `401`
  - added the media type `application/json` for the response with the status `404`
  - added the media type `application/json` for the response with the status `422`
  - …4 more

[Operation history](https://skmtc.dev/magellan/apis/magellan-ai-api/changes/measurement/campaigns/:campaign_id/display_ads/post.md)

---

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