> ## Documentation Index
> Fetch the complete documentation index at: https://agenticadvertisingorg-snap-format-preview-links.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Audio Ads

> Audio ad formats in AdCP cover streaming audio, podcast dynamic ad insertion, VAST/DAAST tags, and companion banner specifications.

This guide covers how AdCP represents audio advertising formats for streaming audio, podcasts, and radio.

## Audio Format Characteristics

Audio formats include:

* **Hosted Audio** - Direct audio file URLs (MP3, M4A)
* **VAST Audio** - DAAST/VAST tags for programmatic audio
* **With Companion Banners** - Audio + synchronized display companion
* **Podcast Insertion** - Dynamic ad insertion (DAI) for podcasts
* **Broadcast Radio Spots** - Scheduled spot files identified by traffic or clearance IDs and measured through audience currency rather than pixels

Audio ads are typically non-skippable and play during natural content breaks. Streaming and podcast inventory may support impression trackers, completion events, and companion clickthroughs. Broadcast radio does not have a renderer that can fire pixels; buyers reconcile it through spot logs, station affidavits, and audience measurement sources declared on the product or package.

## Standard Audio Formats

### Streaming Audio (15s, 30s, 60s)

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "audio_30s"
  },
  "type": "audio",
  "assets": [
    {
      "asset_id": "audio_file",
      "asset_type": "audio",
      "asset_role": "hero_audio",
      "required": true,
      "requirements": {
        "duration": "30s",
        "format": ["MP3", "M4A"],
        "bitrate_min": "128kbps",
        "max_file_size_mb": 5
      }
    }
  ]
}
```

### Audio with Companion Banner

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "audio_30s_companion"
  },
  "type": "audio",
  "assets": [
    {
      "asset_id": "audio_file",
      "asset_type": "audio",
      "asset_role": "hero_audio",
      "required": true,
      "requirements": {
        "duration": "30s",
        "format": ["MP3", "M4A"],
        "bitrate_min": "128kbps"
      }
    },
    {
      "asset_id": "companion_banner",
      "asset_type": "image",
      "asset_role": "companion_banner",
      "required": false,
      "requirements": {
        "width": 640,
        "height": 640,
        "file_types": ["jpg", "png", "webp"],
        "notes": "Displays during audio playback on screen-enabled devices"
      }
    }
  ]
}
```

### Podcast Mid-Roll (60s)

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "podcast_midroll_60s"
  },
  "type": "audio",
  "assets": [
    {
      "asset_id": "audio_file",
      "asset_type": "audio",
      "asset_role": "hero_audio",
      "required": true,
      "requirements": {
        "duration": "60s",
        "format": ["MP3", "M4A"],
        "bitrate_min": "128kbps",
        "max_file_size_mb": 10
      }
    }
  ]
}
```

### Broadcast Radio Spot (30s)

Broadcast radio uses the same canonical `audio_hosted` creative asset shape as streaming audio, narrowed to the `radio` channel. The spot is scheduled into a station or network log, and the creative is usually referenced by an Ad-ID or ISCI.

The canonical product-format declaration is the preferred 3.1+ shape:

```json theme={null}
{
  "format_kind": "audio_hosted",
  "format_option_id": "broadcast_radio_30s",
  "display_name": "Broadcast radio :30 spot",
  "applies_to_channels": ["radio"],
  "params": {
    "duration_ms_exact": 30000,
    "audio_codecs": ["mp3", "wav"],
    "audio_sample_rates": [44100, 48000],
    "audio_channels": ["mono", "stereo"],
    "loudness_lufs": -16,
    "loudness_tolerance_db": 2,
    "true_peak_dbfs": -2,
    "asset_source": "buyer_uploaded",
    "composition_model": "deterministic",
    "slots": [
      {
        "asset_group_id": "audio_main",
        "asset_type": "audio",
        "required": true
      }
    ]
  }
}
```

Legacy named-format catalogs can still expose the equivalent shape through `format_id`:

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "broadcast_radio_30s"
  },
  "type": "audio",
  "assets": [
    {
      "asset_id": "audio_file",
      "asset_type": "audio",
      "asset_role": "hero_audio",
      "required": true,
      "requirements": {
        "duration": "30s",
        "format": ["MP3", "WAV"],
        "sample_rates": [44100, 48000],
        "channels": ["stereo", "mono"],
        "loudness_lufs": -16,
        "loudness_tolerance_db": 2,
        "true_peak_dbfs": -2
      }
    }
  ]
}
```

### Dynamic Audio Creative (DAC)

Multi-segment audio assembled dynamically:

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "audio_dynamic_30s"
  },
  "type": "audio",
  "assets": [
    {
      "asset_id": "intro_audio",
      "asset_type": "audio",
      "asset_role": "intro",
      "required": true,
      "requirements": {
        "duration": "5s",
        "format": ["MP3"]
      }
    },
    {
      "asset_id": "product_audio",
      "asset_type": "audio",
      "asset_role": "product_message",
      "required": true,
      "requirements": {
        "duration": "15s",
        "format": ["MP3"]
      }
    },
    {
      "asset_id": "cta_audio",
      "asset_type": "audio",
      "asset_role": "call_to_action",
      "required": true,
      "requirements": {
        "duration": "10s",
        "format": ["MP3"]
      }
    }
  ],
  "delivery": {
    "method": "server_side_stitching"
  }
}
```

## Creative Manifests

### Hosted Audio Manifest

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "audio_30s"
  },
  "assets": {
    "audio_file": {
      "asset_type": "audio",
      "url": "https://cdn.brand.com/audio_spring_30s.mp3",
      "duration": 30,
      "format": "audio/mpeg"
    },
    "impression_tracker": {
      "asset_type": "url",
      "url_type": "tracker_pixel",
      "url": "https://track.brand.com/imp?buy={MEDIA_BUY_ID}&station={APP_BUNDLE}&cb={CACHEBUSTER}"
    },
    "landing_url": {
      "asset_type": "url",
      "url_type": "clickthrough",
      "url": "https://brand.com/spring?campaign={MEDIA_BUY_ID}"
    }
  }
}
```

### VAST Audio Tag Manifest

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "audio_30s_vast"
  },
  "assets": {
    "vast_tag": {
      "asset_type": "vast",
      "delivery_type": "url",
      "url": "https://ad-server.brand.com/audio-vast?campaign={MEDIA_BUY_ID}&cb={CACHEBUSTER}"
    }
  }
}
```

### Audio with Companion Banner Manifest

```json theme={null}
{
  "format_id": {
    "agent_url": "https://creative.adcontextprotocol.org",
    "id": "audio_30s_companion"
  },
  "assets": {
    "audio_file": {
      "asset_type": "audio",
      "url": "https://cdn.brand.com/audio_spring_30s.mp3",
      "duration": 30,
      "format": "audio/mpeg"
    },
    "companion_banner": {
      "asset_type": "image",
      "url": "https://cdn.brand.com/companion_640x640.jpg",
      "width": 640,
      "height": 640
    },
    "landing_url": {
      "asset_type": "url",
      "url_type": "clickthrough",
      "url": "https://brand.com/spring-sale?source=audio&cb={CACHEBUSTER}"
    }
  }
}
```

### Broadcast Radio Manifest

Use the protocol `creative_id` for the seller/buyer library object, and use the existing `industry_identifiers` field for the traffic or clearance identifier that the radio workflow expects. Ad-ID is appropriate when that is the identifier the buyer, agency, or broadcaster uses. Broadcast radio also still sees ISCI and Ad-ID/ISCI labels used interchangeably, and non-US markets may require other identifiers such as Clearcast clock numbers or IDcrea.

For canonical 3.1+ manifests, slot keys come from the `audio_hosted` declaration:

```json theme={null}
{
  "creative_id": "nova_spring_radio_30s",
  "name": "Nova Spring Campaign :30 Radio",
  "format_kind": "audio_hosted",
  "format_option_ref": {
    "scope": "product",
    "format_option_id": "broadcast_radio_30s"
  },
  "industry_identifiers": [
    { "type": "isci", "value": "NOVA123430" }
  ],
  "assets": {
    "audio_main": {
      "asset_type": "audio",
      "url": "https://cdn.nova-brands.example/radio/spring_30s.wav",
      "duration_ms": 30000,
      "container_format": "wav",
      "codec": "pcm",
      "sampling_rate_hz": 48000,
      "channels": "stereo",
      "loudness_lufs": -16,
      "true_peak_dbfs": -2
    }
  }
}
```

When the same source creative has different cuts (:15, :30, :60), assign the traffic identifier at the manifest level so each cut can carry its own Ad-ID, ISCI, clock number, or IDcrea. `creative-identifier-type` is intentionally limited to shared industry or market-standard schemes. If an adopter needs another scheme, add it to the enum by PR with evidence that it is a real shared workflow identifier rather than a seller-local traffic code.

## Audio-Specific Macros

In addition to [universal macros](/docs/creative/universal-macros), audio formats support:

### Content Context

* `{CONTENT_GENRE}` - podcast, music, news, talk
* `{CONTENT_RATING}` - Explicit, Clean
* `{COLLECTION_NAME}` - Podcast or collection name
* `{INSTALLMENT_ID}` - Episode identifier
* `{ARTIST_NAME}` - Currently playing artist (music platforms)
* `{TRACK_GENRE}` - Music genre of current track

### Platform Context

* `{APP_BUNDLE}` - Streaming app ID (Spotify, Apple Music, etc.)
* `{STATION_ID}` - Radio station ID
* `{LISTENING_MODE}` - Free tier, Premium, Trial
* `{DEVICE_TYPE}` - Mobile, Desktop, Smart Speaker, Auto

### Ad Insertion

* `{INSERTION_TYPE}` - preroll, midroll, postroll
* `{TIME_OF_DAY}` - morning, afternoon, evening, night
* `{DAY_PART}` - Commute, Workout, Work, Relaxation

## Platform-Specific Requirements

### Streaming Music (Spotify, Pandora, Apple Music)

* Free tier: Non-skippable audio between songs
* Typical durations: 15s or 30s
* Optional companion banner on screen-enabled devices

### Podcast Insertion

* **Baked-in**: Permanently encoded in installment
* **Dynamic insertion (SSAI)**: Personalized, with targeting and reporting

### Broadcast Radio

* Station or network logs provide spot-level proof that the creative was scheduled or aired
* Station affidavits may be used for invoice reconciliation
* Audience size, GRPs, reach, and frequency come from the product's measurement source rather than creative-embedded tracking

### Companion Banners

Appear alongside audio on screen-enabled devices:

* Mobile apps, desktop players, smart speakers with displays
* Common sizes: 640x640 (square), 320x50 (mobile banner)

## Common File Specifications

### Audio Files

* **Format**: MP3 or M4A
* **Bitrate**: Minimum 128kbps, recommended 192kbps
* **Sample Rate**: 44.1kHz or 48kHz
* **Channels**: Stereo or mono
* **Loudness**: A target around -16 LUFS/LKFS with +/- 2 dB tolerance is a practical cross-audio recommendation; sellers may normalize final playout for their platform or transmitter chain

### Durations

* **15s**: Quick message, high frequency
* **30s**: Standard, most common
* **60s**: Story-driven, common in podcasts

## Measurement and Reporting

Audio measurement depends on the distribution context:

| Context                | Typical evidence                                                | Typical metrics                                                               |
| ---------------------- | --------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| Streaming audio / SSAI | Ad-server logs, DAAST/VAST tracking, completion events          | impressions, starts/views, completed\_views, completion\_rate, quartile\_data |
| Podcast DAI            | Download or insertion logs, platform reporting windows          | downloads, impressions, reach, frequency, completed\_views where available    |
| Broadcast radio        | Station affidavits, playout logs, audience measurement currency | plays, impressions or measured impressions, grps, reach, frequency            |

For broadcast radio, the protocol should receive the reliable audience number and its basis, not a made-up digital completion surrogate. Sellers can expose forecasted audience through `DeliveryForecast` with `measurement_source`, `demographic_system`, `demographic`, `reach_unit`, and metrics such as `grps`, `reach`, `frequency`, `impressions`, or `measured_impressions`. After the buy runs, delivery reports use the standard delivery metrics (`plays`, `impressions`, `grps`, `reach`, `frequency`) plus `vendor_metric_values` when the authoritative audience source provides a named metric outside the standard delivery-metrics list.

If billing depends on a third-party or audience-currency count, set `measurement_terms.billing_measurement.vendor` and, when needed, `measurement_window` or a vendor metric commitment on the package. Station affidavits and playout logs prove that scheduled spots aired; audience measurement sources turn those plays into the audience-size number used for planning, guarantees, and reconciliation.

## Related Documentation

* [Universal Macros](/docs/creative/universal-macros) - Complete macro reference
* [Creative Manifests](/docs/creative/creative-manifests) - Manifest structure and validation
* [Asset Types](/docs/creative/asset-types) - Audio asset specifications
* [Product Discovery](/docs/media-buy/product-discovery/media-products#broadcast-audio-spot-plan) - Broadcast audio spot-plan forecasts
