# Advertising types



# Display ads

Display advertising with Adhese can be delivered through several integration routes, ranging from a drop-in web SDK to a fully server-side API. All routes ultimately talk to the same adserver engine, so the choice of integration method is about *how your platform requests and renders ads*, not about what campaigns can run.

Display advertising covers visual ad formats rendered in a reserved container. Adhese delivers all common display creative types through every integration method described in this document:

- **Image banners** - a hosted image with a click-through link; the simplest and most common display format.
- **Rich media** - rich, animated or interactive creatives built as HTML5 bundles and delivered as an HTML fragment.
- **Third-party tags** - ad markup hosted by an external ad server or demand partner. Adhese returns the tag; the creative itself is loaded from the third party at render time.

#### Where can display ads run?

Anywhere the platform can request ads and render the returned markup or image:

- **Websites** - desktop and mobile web, whether ads are requested in the browser (SDK, tags, Prebid) or server-side by your CMS or backend before the page is delivered.
- **Apps** - retrieve ads using the Request API and render them in a webview or native component.
- **Newsletters** - set up a server side connection to retrieve ads, download the material and put it in the newsletter before sending them out

#### Most common display formats

- **300×600** Half Page
- **300×250** Medium Rectangle
- **336×280** Large Rectangle
- **728×90** Leaderboard
- **970×250** Billboard — large-format desktop top slot
- **320×100** Large Mobile Banner
- **320×50** Mobile Leaderboard
- **120×600** Skyscraper
- **160×600** Wide Skyscraper

#### Integration methods

<table id="bkmrk-method-best-for-type" style="width: 94.6429%;"><thead><tr><th style="width: 37.9747%;">Method</th><th style="width: 62.0253%;">Best for</th></tr></thead><tbody><tr><td style="width: 37.9747%;">[TypeScript SDK](https://documentation.adhese.org/books/integration-setup/page/typescript-web-sdk)</td><td style="width: 62.0253%;">Modern websites and web apps</td></tr><tr><td style="width: 37.9747%;">[Prebid.js / Prebid Server](https://documentation.adhese.org/books/integration-setup/page/prebid)</td><td style="width: 62.0253%;">Publishers running header bidding</td></tr><tr><td style="width: 37.9747%;">[Request API](https://documentation.adhese.org/books/integration-setup/page/request-api-json-endpoint)</td><td style="width: 62.0253%;">CMS, apps, custom stacks</td></tr></tbody></table>

# DOOH: Digital Out Of Home

## What is Digital Out of Home?

**Digital Out of Home (DOOH)** is digital advertising shown on screens in physical, public spaces - think digital billboards along a motorway, screens in shopping malls and supermarkets, displays in lifts and lobbies, transit and airport panels, and menu boards in quick-service restaurants.

It's the digital evolution of traditional "out of home" advertising (printed billboards and posters). Instead of a static printed sheet, content is delivered electronically to a screen, so it can be scheduled, rotated, and updated remotely.

DOOH works quite differently from web or in-app advertising, and those differences shape how the integration below is built:

- **There's no browser, cookie, or logged-in user.** Ads are targeted to a *screen* (and its location), not to an individual person.
- **Content is played, not clicked.** Success is measured by *proof-of-play -* confirmation that a creative actually appeared on screen - instead of clicks or impressions in regular advertising.
- **The network can be unreliable.** A screen in a lift or a remote billboard may lose connectivity, so players are expected to cache content and keep running offline.

### Where Adhese fits in

Adhese acts as the **ad server** for your DOOH network. It decides what should play on each screen and provides the building blocks a player needs to run:

- **Media asset distribution:** delivering the video and image files to be played.
- **Playlist generation:** telling each screen or player what to play, and in what order.
- **Proof-of-play tracking:** recording that each creative was shown.
- **Player-level targeting and reporting:** targeting and measuring by individual screen or location.

## How an Adhese DOOH integration works

A typical DOOH setup involves the following components working together:

- **Screens:** the physical displays that show the ads.
- **Digital Signage CMS / Player:** the software driving the screens; it fetches content from Adhese and plays it.
- **Adhese Ad Server:** decides what plays and serves assets, playlists, and tracking URLs.
- **Server-side data mapping:** links each player to metadata (such as its store or location) for targeting and reporting.
- **Reporting and Proof-of-Play tracking:** captures what actually played, for measurement and billing.

In short: the **player** asks Adhese for a playlist, Adhese responds with the ads to show, the player plays them from its local cache, and it fires tracking URLs back to confirm each play.

---

## Before you start

Make sure the following are in place before beginning the integration.

### Adhese requirements

- An active Adhese account.
- The DOOH feature enabled by Adhese support.
- Configured inventory and templates.
- A configured player ID target.

### Player / CMS requirements

Your player or CMS must be able to:

- Perform HTTP `GET` requests.
- Parse JSON.
- Cache assets locally.
- Play back video and images.
- Fire tracking URLs.

---

## The DOOH endpoints

There are two things a player fetches from Adhese:

1. **Assets**: the creative files to download and cache in advance *(optional)*.
2. **A playlist:** the list of ads to play *(required)*. The playlist comes in two variants: one with a capped number of ads, and one with no cap.

<div class="overflow-x-auto w-full px-2 mb-6" data-sourcepos="70:1-74:102;3322-3693" id="bkmrk-purpose-endpoint-ass"><table class="min-w-full border-collapse text-sm leading-[1.7] whitespace-normal"><thead class="text-left"><tr><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">Purpose</th><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">Endpoint</th></tr></thead><tbody><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Assets download (Heads-up)</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">`https://headsup-[customer].adhese.org/api/headsup/download-list/sl[positioncode]`</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Playlist - limited number of ads</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">`https://ads-[customer].adhese.com/m/stack/sl[positioncode]?max_ads=[amount]`</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Playlist - unlimited number of ads</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">`https://ads-[customer].adhese.com/e/stack/sl[positioncode]`</td></tr></tbody></table>

</div>### Assets Download Endpoint (Heads-up)

The heads-up endpoint is **optional**. Use it to retrieve and cache all active creative assets for a DOOH position ahead of time. The response structure is fixed and cannot be customised.

**Request example**

```
https://headsup-[customer].adhese.org/api/headsup/download-list/sl[positioncode]
```

**Response example**

```json
{
  "media": [
    {
      "ad": {
        "id": "https://pool-demo.adhese.com/pool/lib/ad1.mp4",
        "mime": "video/mp4",
        "curl": "https://pool-demo.adhese.com/pool/lib/ad1.mp4",
        "checksum": "abc123"
      }
    }
  ]
}
```

<p class="callout info">Detailed information on the heads-up endpoint is available [here](https://documentation.adhese.org/books/integration-setup/page/request-api-headsup-endpoint).</p>

### Playlist Endpoint

Adhese provides two **stack** endpoints for retrieving a playlist:

- **`/m/stack/`:** returns a list with a **limit** on the number of ads (`max_ads`).
- **`/e/stack/`:** returns a list with **no predefined limit**.

**Request example**

```ini
/m/stack/: https://ads-[customer].adhese.com/m/stack/sl[positioncode]/pi[player ID]?max_ads=[amount]
/e/stack/: https://ads-[customer].adhese.com/e/stack/sl[positioncode]/pi[player ID]
```

**Response example**

```json
{
    "ads":
      [
        {
            "id":"https://pool-demo.adhese.com/pool/lib/562_2nd_1.mp4",
            "dur":28.07,
            "proofOfPlay":"https://ads-demo.adhese.com/track/3474/sl357/tlnone/piplayer_id/A2?1746011926824",
            "error":"https://ads-demo.adhese.com/track/3474-PLAY_ERROR_[ERRORCODE]/sl357/tlnone/piplayer_id/A2/?1746011926824"
        },
        {
            "id":"https://pool-demo.adhese.com/pool/lib/561_2nd_1.mp4",
            "dur":11.45,
            "proofOfPlay":"https://ads-demo.adhese.com/track/3444/sl357/tlnone/piplayer_id/A2?1746011926824",
            "error":"https://ads-demo.adhese.com/track/3444-PLAY_ERROR_[ERRORCODE]/sl357/tlnone/piplayer_id/A2/?1746011926824"
        },
        {
            "id":"https://pool-demo.adhese.com/pool/lib/560_2nd_1.mp4",
            "dur":18.85,
            "proofOfPlay":"https://ads-demo.adhese.com/track/3455/sl357/tlnone/piplayer_id/A2?1746011926824",
            "error":"https://ads-demo.adhese.com/track/3455-PLAY_ERROR_[ERRORCODE]/sl357/tlnone/piplayer_id/A2/?1746011926824"
        }
    ]
}
```

<p class="callout info">Detailed information on the stack endpoint is available [here](https://documentation.adhese.org/books/integration-setup/page/request-api-stack-endpoint).</p>

---

## Targeting and reporting

### Player ID target

You can add extra targeting information to a request by appending target sections to the URL, in the form `/[prefix][value]/`.

The **player ID** is one such target. It uses the prefix `pi` (as shown in the examples above) and can be used for:

- Player / screen-level targeting and reporting.
- Location-based targeting and reporting.

### Providing extra target / reporting data

Player and store location, plus any other custom metadata, can be supplied **server-side** by uploading a **player → metadata mapping** in Adhese.

Each metadata property is linked to its own target prefix. Adhese maps this data automatically to incoming requests based on the player ID, making it available for both targeting and reporting.

<p class="callout warning">The player ID prefix - and any other target prefixes - must be configured by Adhese support.</p>

---

## Operational recommendations

### Asset caching

Always cache assets locally to:

- Reduce bandwidth usage.
- Avoid playback interruptions.
- Improve offline resilience.

### Offline mode

If connectivity is lost, players should keep playing using:

- The last valid playlist.
- Cached creatives.

---

## Troubleshooting

<div class="overflow-x-auto w-full px-2 mb-6" data-sourcepos="199:1-205:51;8056-8424" id="bkmrk-issue-possible-cause"><table class="min-w-full border-collapse text-sm leading-[1.7] whitespace-normal"><thead class="text-left"><tr><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">Issue</th><th class="text-text-100 border-b-0.5 border-[hsl(var(--border-300)/0.6)] py-2 pr-4 align-top font-bold" scope="col">Possible cause</th></tr></thead><tbody><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Empty media array</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">No active campaigns, or a targeting-related issue</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Endpoint redirects</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">DOOH endpoints not enabled</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Heads-up endpoint empty</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">No active campaigns, or *Use in heads-up* format config disabled</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Playback errors</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Unsupported codec or corrupt file</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">No reporting</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Proof-of-play URL not triggered</td></tr></tbody></table>

</div>

# VAST: Video & Audio Advertising

### What is VAST?

VAST - the Video Ad Serving Template - is the standard IAB introduced to make video and audio ad serving work across players from different vendors. It uses an XML schema to carry an ad's metadata from the ad server to the video or audio player.

Adhese fully supports VAST: we are compliant with VAST 2.0, 3.0, and 4.0 and can help you adopt its guidelines.

VAST offers a set of features intended to make online video advertising easy.

- **Platform—and device-agnostic:** Nothing about the protocol of VAST is specific to the functioning of a certain device or platform. This allows Adhese to serve ads across several video and audio players in different situations, such as websites, mobile websites and applications, Internet-connected TVs, or set-top box environments.
- **Support for different ad types:** VAST supports different video and audio ad formats. Next to the well-known linear and non-linear video ad formats, VAST enables the delivery of companion ads, skippable linear ads, and ad pods.
- \*\*Tracking:\*\*To provide details about the delivered ads, VAST enables the simultaneous tracking of several user events related to the video ad. That is to say, VAST can tell you, for example, whether a video ad was completely viewed or if the user has muted the sound. VAST can also notify you if a user skipped a linear ad by explicitly closing it before completion, or if the user clicked a non-linear ad away.
- **Detailed error reporting:** When a video player cannot display an ad, VAST enables the player to provide specific feedback to the ad server about why the ad can not be served.

<p class="callout info">More information on VAST can be found on the [IAB's website](https://www.iab.com/guidelines/vast/). Detailed documentation on the latest version can be found in this [PDF](https://iabtechlab.com/wp-content/uploads/2022/09/VAST_4.3.pdf).   
</p>

### How does a VAST setup work?

The player requests an ad from the ad server using a simple URL. This is usually done using the [**AD endpoint**](https://documentation.adhese.org/books/integration-setup/page/request-api-ad-endpoint). Adhese then answers with a VAST XML document the player knows how to read. That document is assembled from two building blocks: [**advar templates**](https://documentation.adhese.org/books/templating/page/advar-templates), which supply the static VAST markup, and [**creatives**](https://documentation.adhese.org/books/campaign-management/page/creatives), which are used to provide the media itself together with other META data.  
  
The media can be provided in three ways:

1. By uploading the material in Adhese
2. By providing a link to material hosted on a different domain
3. By providing a link to an external VAST tag. Adhese will in that case redirect to the external tag while maintaining the ability to track events

<p class="callout warning">Because a template holds static VAST markup, each type or version of media you want to serve, will require its own template.</p>

**Simplified response example**

```xml
<VAST version="4.0">
  <Ad id="19787">
    <InLine>
      <AdSystem>Adhese</AdSystem>
      <AdTitle>Your creative</AdTitle>
      <Impression><![CDATA[ …/impression ]]></Impression>
      <Creatives>
        <Creative>
          <Linear>
            <Duration>00:00:15</Duration>     
            <TrackingEvents>              
              <Tracking event="start"> … </Tracking>
              <Tracking event="firstQuartile"> … </Tracking>
              <Tracking event="complete"> … </Tracking>
            </TrackingEvents>
            <VideoClicks>
              <ClickThrough><![CDATA[ …/click ]]></ClickThrough>
            </VideoClicks>
            <MediaFiles>                  
              <MediaFile type="video/mp4" width="640" height="360">
                <![CDATA[ …/creative.mp4 ]]>
              </MediaFile>
            </MediaFiles>
          </Linear>
        </Creative>
      </Creatives>
    </InLine>
  </Ad>
</VAST>
```

---

### Video ad types

##### Video | Linear `Since VAST 1.0`

In-stream video ads that interrupt the main video content. <span class="T286Pc" data-copy-service-computed-style="font-family: "Google Sans", Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);" data-sfc-cb="" data-sfc-cp="" data-sfc-root="ep">They include Pre-rolls (playing before the video), Mid-rolls (playing during), and Post-rolls (playing after). </span><span class="T286Pc" data-copy-service-computed-style="font-family: "Google Sans", Arial, sans-serif; font-size: 16px; font-weight: 400; margin: 0px; text-decoration: none; border-bottom: 0px rgb(230, 232, 240);" data-sfc-cb="" data-sfc-cp="" data-sfc-root="ep">These usually include skippable or non-skippable formats (introduced in VAST 3.0). </span>

##### Video | Companion ads `Since VAST 2.0`

A companion ad is a image ad shown alongside a linear video ad, usually displayed on top of the player or on its side. It is displayed at the same time as the video ad and can continue to be displayed after the video has finished playing.<sup class="mw-ref reference" data-mw="{"name":"ref","attrs":{},"body":{"id":"mw-reference-text-cite_note-1"}}" id="bkmrk--1"></sup>

##### Video | Outstream `Since VAST 2.0`

The video ad appears in non-video environments, typically embedded in text-based content such as articles or news feeds. An outstream video could for example be shown in typical display placements such as a 'medium rectangle'.

##### Video | Non-linear `Since VAST 2.0`

The ad runs alongside the content, typically as an overlay, without interrupting playback.

##### Video | Ad pods `Since VAST 3.0`

A group of ads that play in sequence during a commercial break during long-form video content. Specifically, using IAB VAST, an ad pod is a group of sequential ads that can be served in one VAST tag.

##### Video | SIMID `Since VAST 4.0`

VAST can carry interactive ads, not just straight playback. The current standard for that is SIMID - Secure Interactive Media Interface Definition - IAB's successor to the now-deprecated VPAID.   
  
The interactive layer is an HTML creative that the player loads into a sandboxed iframe and talks to over the postMessage API, so it can drive clickable overlays, menus or dynamic calls to action without ever touching the player itself.

<p class="callout warning">An Adhese templates can provide the option to add a link to an externally hosted HTML layer. Creating and hosting the interactive layer in Adhese is not possible. </p>

<p class="callout info">More info on the SIMID standard: [https://iabtechlab.com/wp-content/uploads/2022/09/SIMID-1.2.pdf](https://iabtechlab.com/wp-content/uploads/2022/09/SIMID-1.2.pdf)</p>

---

### Audio ad types

##### Audio | Linear `Since VAST 4.1`

Audio ads that play in a vendor's digital audio player. They are handled similarly to video creatives, except they only have audio and no video component.

Native audio arrived in VAST 4.1, when the separate audio spec (DAAST) was folded back into VAST - before that, audio was served through DAAST as its own template.

##### Audio | Companion ads `Since VAST 4.1`

An audio companion ad pairs a linear audio ad with a synchronized image on a screen. This setup allows advertisers to deliver a voice-driven message while providing a clickable asset for direct response. Ideal for music or podcast applications.

# DCO

<h3>What is DCO?</h3>
<p>DCO, or Dynamic Creative Optimisation, is a feature that enables the dynamic fetching and updating of components within a banner.</p>
<p>For example, we have a banner advertising a product that is currently on sale.</p>
<p><a href="https://documentation.adhese.org/uploads/images/gallery/2025-08/Ujq2P0ekUgBZz2SW-schermafdruk-20250822-112849-1.png" target="_blank" rel="noopener"><img src="https://documentation.adhese.org/uploads/images/gallery/2025-08/scaled-1680-/Ujq2P0ekUgBZz2SW-schermafdruk-20250822-112849-1.png" alt="Schermafdruk_20250822_112849-1.png"></a></p>
<p>This banner can consist of multiple parts:</p>
<ul id="bkmrk-title-product-descri">
<li>Title</li>
<li>Product description</li>
<li>Order button</li>
<li>CTA</li>
<li>Pricing information</li>
<li>Special offer information</li>
<li>Product Image(s)</li>
<li>Company Image</li>
</ul>
<p>With a regular banner, if any part needs to be changed, it must be done manually. This can be achieved by either creating a new banner or accessing the creative and updating it.</p>
<p>With DCO, these fields can be linked to a feed, enabling automatic updates. For example, the price of a product changes. This change is implemented in the feed, which then updates the banner automatically.</p>
<p>If the title of the advertisement is changed, it can also be updated via the feed without requiring manual intervention.</p>
<p>Changes can also be made based on contextual or audience information. Let&rsquo;s say a user sees this banner in Europe. They do not need American financing options. Since we know that this user is from a European country, we can automatically update the banner they see with information from the feed.</p>
<p>A simple example of DCO is the automatic rotation of multiple product banners on a single position, which creates a product carousel:</p>
<p><video src="https://documentation.adhese.org/attachments/3?open=true" controls="controls" width="480" height="270"></video></p>
<p>DCO is used to change banner content based on context, audience and up-to-date product information. It enables the automatic assembly and updating of various banner elements, such as images, headlines, and calls to action, to create and deliver personalised ad creatives in real time.</p>
<p>This can significantly reduce the workload for AdOps by decreasing the number of manual actions required to keep banners up to date and reducing the number of banners that need to be set up in the first place.</p>
<p>Targeting can also be taken into account. If a user has shown interest in a specific product category, the feed can assemble banners based on that category, even if the user is viewing other products (provided the user has granted consent or is logged in). This means that all products and information can be bundled into one feed and displayed to the user based on either known audience information or contextual page information.</p>
<p>Furthermore, feeds can take external information into account. For example, if you want to display a banner advertising barbecues in the summer, but only when it&rsquo;s relatively sunny, you can connect the feed to a weather service to ensure that BBQ-related banners are only displayed when the conditions are right.</p>
<p>Information about stores, such as their location and stock levels, can also be connected to the feed. This ensures that products that aren&rsquo;t available at a particular store aren&rsquo;t shown.</p>
<h3>How does DCO work?</h3>
<p>A DCO setup consists of two parts:</p>
<ul id="bkmrk-one-or-more-product-">
<li>One or more product feeds</li>
<li>An HTML5 or an Advar creative</li>
</ul>
<p>Advertisers can administer the feed either by syncing a custom feed to Adhese locally every time it is updated or by hosting files directly on Adhese.</p>
<p>When someone visits a site with inventory connected to a DCO campaign, our Content Delivery Network (CDN) system will display banners based on up-to-date information synced from the advertiser's feed.</p>
<p>To give an example setup related to the feed shown above, we have three items in a Product Feed format:</p>
<p id="bkmrk--2"><a href="https://documentation.adhese.org/uploads/images/gallery/2025-08/o9pMlBTAbVcbskeM-schermafdruk-20250822-113912.png" target="_blank" rel="noopener"><img src="https://documentation.adhese.org/uploads/images/gallery/2025-08/scaled-1680-/o9pMlBTAbVcbskeM-schermafdruk-20250822-113912.png" alt="Schermafdruk_20250822_113912.png" width="500" height="318"></a></p>
<p>These creatives are defined by an Advar template that contains elements such as the image, call to action (CTA) and price.</p>
<p id="bkmrk--3"><a href="https://documentation.adhese.org/uploads/images/gallery/2025-08/ckNyexekyERf94v9-schermafdruk-20250822-113946.png" target="_blank" rel="noopener"><img src="https://documentation.adhese.org/uploads/images/gallery/2025-08/scaled-1680-/ckNyexekyERf94v9-schermafdruk-20250822-113946.png" alt="Schermafdruk_20250822_113946.png"></a></p>
<p>In a second campaign, we have a product carousel creative that links to these three feed items:</p>
<p id="bkmrk--4"><a href="https://documentation.adhese.org/uploads/images/gallery/2025-08/kpwwag47SCcKAixT-schermafdruk-20250822-114530.png" target="_blank" rel="noopener"><img src="https://documentation.adhese.org/uploads/images/gallery/2025-08/scaled-1680-/kpwwag47SCcKAixT-schermafdruk-20250822-114530.png" alt="Schermafdruk_20250822_114530.png" width="500" height="218"></a></p>
<p id="bkmrk--5"><a href="https://documentation.adhese.org/uploads/images/gallery/2025-08/gpRCOakyIM0taow9-schermafdruk-20250822-114510.png" target="_blank" rel="noopener"><img src="https://documentation.adhese.org/uploads/images/gallery/2025-08/scaled-1680-/gpRCOakyIM0taow9-schermafdruk-20250822-114510.png" alt="Schermafdruk_20250822_114510.png"></a></p>
<p>And this carousel is what's displayed on the actual position. Every time one of the feed items is updated, the carousel will change accordingly.</p>
<p id="bkmrk--6"><video style="width: 834px; height: 469px;" src="https://documentation.adhese.org/attachments/2?open=true" controls="controls" width="834" height="469"></video></p>
<p>If you would like to implement a DCO banner either on Adhese or on your own CDN, please <a href="https://documentation.adhese.org/books/introduction/page/adhese-support">contact support</a>.</p>
<h3>Reporting</h3>
<p>As always, the default reporting on campaign, booking and creative levels is available in Adhese. For more granular reporting on DCO banners, custom reporting with custom trackers can be set up using BQ/Looker Studio. With this, we can take into account information such as:</p>
<ul id="bkmrk-product-id-pricing-c">
<li>Product ID</li>
<li>Pricing</li>
<li>Codes</li>
<li>Etc&hellip;</li>
</ul>