# Integration methods

In this chapter, you will find the different ways to integrate with the **Adhese ad server** and **Gateway**, which will allow you to request and display ads across channels.

Both components are **integrated in the same way**. The difference lies in the internal configuration and demand orchestration - not in the way requests are made.

All integrations are secure by design and aligned with Adhese’s **privacy-first** approach. The platform operates **without third-party cookies** and relies on server-side processing of first-party data to deliver targeted advertising.

# Typescript Web SDK

The Adhese TypeScript SDK simplifies ad integration across web environments by handling the underlying request and response logic, allowing you to implement ad placements without dealing with low-level API calls.

At the same time, the SDK remains flexible: it allows you to plug in custom logic where needed, giving you full control for more advanced or tailored integrations.


The [getting started guide](https://adhese.github.io/sdk_typescript/) walks you through:

- Installing the SDK
- Initialising a client
- Making ad requests
- Rendering ad responses

<p class="callout info">The full documentation can be found on [https://adhese.github.io/sdk\_typescript/](https://adhese.github.io/sdk_typescript/)</p>

### Integration options

The SDK supports multiple integration approaches, depending on your environment:

#### NPM 

Install the SDK via NPM and integrate it into modern JavaScript or TypeScript projects.

#### React

Use the SDK within React applications to manage ad slots and lifecycle in a component-based way.

#### Standalone JS script

Include the SDK as a standalone script for simple integrations without a build step. Ideal for quick setups or environments where bundling is not available.

<p class="callout info">The standalone script could be hosted and maintained by the Adhese team. Contact support if you wish to discuss this option in more detail. </p>

### Key Features

#### **Slot Management**

Slots are the fundamental units for ad placement. The SDK supports three slot registration methods:

- **Automatic DOM detection** - scan for elements with `adunit` class
- **Pre-initialization slots** - declare slots before page load for early ad fetching
- **Manual registration** - dynamically add slots via API

Additional slot capabilities include:

- Device-specific format selection (responsive ads via media queries)
- Lazy loading with viewport detection
- Dual render modes (iframe or inline)
- Custom setup hooks for advanced control

##### **Configuration &amp; Parameters**

At initialization, you can set:

- Account ID (required)
- Targeting parameters (2-character prefixes matching your adserver configuration)
- URL and referrer logging preferences
- Lazy loading settings
- Device type detection rules (customizable media queries)

##### **Event System**

Subscribe to lifecycle events:

- Slot lifecycle (add, remove, dispose)
- Request/response events
- Consent &amp; parameter changes
- Debug mode toggles
- Impressions &amp; viewable tracking

##### **Consent Management**

Supports regulatory compliance via:

- Binary consent (yes/no)
- TCF API v2 integration

##### **React Integration**

Dedicated React SDK provides:

- `AdheseProvider` context wrapper
- `useAdhese` hook for instance access
- `useAdheseSlot` hook for slot creation
- `AdheseSlot` component with JSX rendering support
- Placeholder support during ad loading

### SDK Repository

The SDK is actively maintained on GitHub and publicly available: [https://github.com/adhese/sdk\_typescript](https://github.com/adhese/sdk_typescript)

# Prebid

Prebid is a free and fully open source header bidding solution available to any publisher, dedicated to header bidding in the ad tech industry.

Header bidding allows publishers to create a short delay in ad serving to obtain bids from multiple demand partners before deciding on which ad to display, enabling competitive pricing and higher revenue.

<p class="callout info"><span style="white-space: pre-wrap;">More information on </span>[Prebid](https://prebid.org/)<span style="white-space: pre-wrap;"> | </span>[Prebid.js Bidder](https://docs.prebid.org/dev-docs/bidders/adhese.html)<span style="white-space: pre-wrap;"> | </span>[Prebid Server Bidder](https://docs.prebid.org/dev-docs/pbs-bidders.html#adhese)</p>

### How do Adhese and prebid work together

<span style="white-space: pre-wrap;">When a publisher implements Adhese through Prebid, they're participating in a </span>****header bidding auction****<span style="white-space: pre-wrap;"> where multiple demand partners (including Adhese) compete to deliver ads. Here's how the process works:</span>

##### Auction Initiation

When a page loads, Prebid sends simultaneous bid requests to multiple bidders - including Adhese - rather than sequential requests. This concurrent approach is one of Prebid's key features for managing latency. All bidders (including Adhese) receive their request at roughly the same time.

##### Adhese's Role in the Auction

<span style="white-space: pre-wrap;">Adhese acts as a </span>****bidder/SSP****<span style="white-space: pre-wrap;"> within Prebid's ecosystem. Through the Prebid adapter, Adhese receives ad requests and returns competitive bids and creatives. The adapter translates Prebid's standardized request format into Adhese's API requirements and vice versa.</span>

##### Bid Submission &amp; Timeout Management

Publishers set a timeout value (typically 1-3 seconds) that determines how long Prebid waits for responses. Adhese must return its bid within this window. If Adhese doesn't respond in time, Prebid excludes it from that auction round. This timeout mechanism prevents slow bidders from degrading page performance.

##### Ad Selection

After all bidders respond, Prebid passes the winning bid to the publisher's ad server. If Adhese wins, its creative is selected and delivered, leading to an impression in Adhese.

##### Targeting &amp; Parameters

Both Prebid and Adhese support custom targeting. Publishers can pass first-party data (like content categories, user segments, or location) through both systems, giving Adhese context for more accurate bidding.

##### Impression Tracking

After an ad is selected and rendered, Adhese can track impressions and viewability through Prebid's event system, feeding performance data back to their platform.

### Bid Configuration Params

<table class="align-left" id="bkmrk-pbjs-param-namescope" style="box-sizing: border-box; border-collapse: collapse; width: 854px; margin-bottom: 1rem; color: rgb(121, 127, 144); border: 1px solid rgb(221, 223, 227); background: rgb(255, 255, 255); font-size: 16px; line-height: 1.75; font-family: Arial, sans-serif; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: left; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><colgroup><col></col><col></col><col></col><col></col><col></col></colgroup><tbody><tr style="box-sizing: border-box;"><th style="box-sizing: border-box; text-align: -webkit-match-parent; padding: 9px 15px; vertical-align: bottom; border: 1px solid rgb(221, 223, 227); font-weight: 600;">Pbjs param name

</th><th style="box-sizing: border-box; text-align: -webkit-match-parent; padding: 9px 15px; vertical-align: bottom; border: 1px solid rgb(221, 223, 227); font-weight: 600;">Scope

</th><th style="box-sizing: border-box; text-align: -webkit-match-parent; padding: 9px 15px; vertical-align: bottom; border: 1px solid rgb(221, 223, 227); font-weight: 600;">Description

</th><th style="box-sizing: border-box; text-align: -webkit-match-parent; padding: 9px 15px; vertical-align: bottom; border: 1px solid rgb(221, 223, 227); font-weight: 600;">Example

</th><th style="box-sizing: border-box; text-align: -webkit-match-parent; padding: 9px 15px; vertical-align: bottom; border: 1px solid rgb(221, 223, 227); font-weight: 600;">Type

</th></tr><tr style="box-sizing: border-box; background-color: rgb(248, 249, 249);"><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">`<span class="editor-theme-code">account</span>`

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">required

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">Adhese account name

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">`<span class="editor-theme-code">'demo'</span>`

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">`<span class="editor-theme-code">string</span>`

</td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">`<span class="editor-theme-code">location</span>`

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">required

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">Adhese location URL

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">`<span class="editor-theme-code">'_adhese_prebid_demo_'</span>`

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">`<span class="editor-theme-code">string</span>`

</td></tr><tr style="box-sizing: border-box; background-color: rgb(248, 249, 249);"><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">`<span class="editor-theme-code">format</span>`

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">required

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">Adhese format code TAG

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">`<span class="editor-theme-code">'leaderboard'</span>`

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">`<span class="editor-theme-code">string</span>`

</td></tr><tr style="box-sizing: border-box;"><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">`<span class="editor-theme-code">data</span>`

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">optional

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">(PBJS only) Custom target data

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">`<span class="editor-theme-code">{ 'ci': [9000, 9050] }</span>`

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">`<span class="editor-theme-code">object</span>`

</td></tr><tr style="box-sizing: border-box; background-color: rgb(248, 249, 249);"><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">`<span class="editor-theme-code">targets</span>`

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">optional

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">(PBS only) Custom target data

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">`<span class="editor-theme-code">{ 'ci': [9000, 9050] }</span>`

</td><td style="box-sizing: border-box; padding: 0.75rem 15px; vertical-align: top; border: 1px solid rgb(221, 223, 227);">`<span class="editor-theme-code">object</span>`

</td></tr></tbody></table>

# Request API: Headsup endpoint

The headsup endpoint returns **all** the materials for the campaigns running on the requested DOOH position.   
It can be used by the DOOH screens to **retrieve and cache all materials** at the beginning of the day to avoid delays by having to download materials during the day.

<p class="callout warning">To ensure that the assets are included in the response, the *Use in heads-up file* setting **must be enabled at format level**. This action can be performed by all admin users in the Adhese UI.</p>

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

<table id="bkmrk-parameters-value-req" style="width: 100%;"><colgroup><col style="width: 12.7533%;"></col><col style="width: 72.5948%;"></col><col style="width: 14.6519%;"></col></colgroup><thead><tr><td>Parameters</td><td>Value</td><td>Required</td></tr></thead><tbody><tr><td>customer</td><td>The name of your Adhese account</td><td>Yes</td></tr><tr><td>position code</td><td>The code of the position you wish to request: \[location code\]\[optional position code\]-\[format code\]. This value is always prefixed by 'sl'.</td><td>Yes</td></tr></tbody></table>

### Response

 The JSON response consists of a "media" array that may be empty or populated with multiple ad objects, depending on the number of active campaigns. **The structure of an ad object is fixed and can not be customized.**

The ID and URL from which to download the file is identical and is also available in the stack endpoint that will be used to download DOOH playlists during the day.

**Example**

```json
{
    "media":[
        {
            "ad":{
                "id":"https://pool-demo.adhese.com/pool/lib/562_2nd_1.mp4",
                "mime":"video/mp4",
                "curl":"https://pool-demo.adhese.com/pool/lib/562_2nd_1.mp4",
                "filesize": 15470592,
                "checksum":"071f717962db99cc137d138696d33209f2e4818d42a54f70dfa6606eeb1b640b"
            }
        },
        {
            "ad":{
                "id":"https://pool-demo.adhese.com/pool/lib/560_2nd_1.mp4",
                "mime":"video/mp4",
                "curl":"https://pool-demo.adhese.com/pool/lib/560_2nd_1.mp4",
                "filesize": 15470592,
                "checksum":"4e78745a33518ff22c1c9f39852a49c1c0fadd0adf722e3394ad1215d5e5ff5b"
            }
        },
        {
            "ad":{
                "id":"https://pool-demo.adhese.com/pool/lib/561_2nd_1.mp4",
                "mime":"video/mp4",
                "curl":"https://pool-demo.adhese.com/pool/lib/561_2nd_1.mp4",
                "filesize": 6582272,
                "checksum":"64d2eab6d51b208c0cec3fc4d64c53381e5d41ae2a1d4c5b7704b1818bdb6158"
            }
        }
    ]
}
```

# Request API: Stack endpoint

The stack endpoint allows you to request **one position** for which Adhese will return a **list of ads**. There are 2 versions:

1. /m/stack/: returns a limited amount of ads
2. /e/stack/: returns an unlimited<sup>1</sup> amount of ads<sup>2</sup>

<p class="callout warning">**<span style="text-decoration: underline;">1</span>** The adserver rules still apply and will influence which campaigns are part of the response. Not all booked campaigns are necessarily part of the returned array. </p>

<p class="callout warning"><span style="text-decoration: underline;">**2**</span> The **/e/stack/** endpoint must be enabled by Adhese support before it becomes available</p>

### m/stack request

```html
https://ads-[customer].adhese.com/m/stack/sl[positioncode]/[target prefix][target value]?max_ads=[amount]
```

<table id="bkmrk-parameters-value-req-1" style="width: 100%; height: 182.578px;"><thead><tr style="height: 29.7969px;"><td style="width: 11.4422%; height: 29.7969px;">**Parameters**</td><td style="width: 76.405%; height: 29.7969px;">**Value**</td><td style="width: 12.1528%; height: 29.7969px;">**Required**</td></tr></thead><tbody><tr style="height: 29.7969px;"><td class="align-left" style="width: 11.4422%; height: 29.7969px;">customer</td><td class="align-left" style="width: 76.405%; height: 29.7969px;">The name of your Adhese account</td><td class="align-left" style="width: 12.1528%; height: 29.7969px;">Yes</td></tr><tr style="height: 46.5938px;"><td class="align-left" style="width: 11.4422%; height: 46.5938px;">position code</td><td class="align-left" style="width: 76.405%; height: 46.5938px;">The code of the position you wish to request is \[location code\]-\[format code\]. This value is always prefixed by 'sl'.</td><td class="align-left" style="width: 12.1528%; height: 46.5938px;">Yes</td></tr><tr style="height: 46.5938px;"><td style="width: 11.4422%; height: 46.5938px;">custom target</td><td style="width: 76.405%; height: 46.5938px;">Target data can be provided by adding a prefix followed by a value. Multiple values can be added by separating them with a `<strong>;</strong>`</td><td style="width: 12.1528%; height: 46.5938px;">No</td></tr><tr style="height: 29.7969px;"><td class="align-left" style="width: 11.4422%; height: 29.7969px;">max\_ads<sup>1</sup></td><td class="align-left" style="width: 76.405%; height: 29.7969px;">The maximum number of ads you wish to request</td><td class="align-left" style="width: 12.1528%; height: 29.7969px;">Yes</td></tr></tbody></table>


<p class="callout info"><span style="text-decoration: underline;">**1**</span> A configuration on the adserver can be activated to ensure the max\_ads value never exceeds a specific limit. When the parameter is left empty, the configured limit will be used instead. </p>

### e/stack request

```html
https://ads-[customer].adhese.com/e/stack/sl[positioncode]/[target prefix][target value]
```

<table id="bkmrk-%C2%A0-value-required-cus" style="width: 100%; height: 152.781px;"><thead><tr style="height: 29.7969px;"><td style="width: 11.4422%; height: 29.7969px;">**Parameters**</td><td style="width: 76.405%; height: 29.7969px;">**Value**</td><td style="width: 12.1528%; height: 29.7969px;">**Required**</td></tr></thead><tbody><tr style="height: 29.7969px;"><td class="align-left" style="width: 11.4422%; height: 29.7969px;">customer</td><td class="align-left" style="width: 76.405%; height: 29.7969px;">The name of your Adhese account</td><td class="align-left" style="width: 12.1528%; height: 29.7969px;">Yes</td></tr><tr style="height: 46.5938px;"><td class="align-left" style="width: 11.4422%; height: 46.5938px;">position code</td><td class="align-left" style="width: 76.405%; height: 46.5938px;">The code of the position you wish to request is \[location code\]-\[format code\]. This value is always prefixed by 'sl'.</td><td class="align-left" style="width: 12.1528%; height: 46.5938px;">Yes</td></tr><tr style="height: 46.5938px;"><td style="width: 11.4422%; height: 46.5938px;">custom target</td><td style="width: 76.405%; height: 46.5938px;">Target data can be provided by adding a prefix followed by a value. Multiple values can be added by separating them with a `<strong>;</strong>`</td><td style="width: 12.1528%; height: 46.5938px;">No</td></tr></tbody></table>

### Stack response

The response contains JSON code: an **ads** array that will either be empty or populated with one or more objects, depending on the number of active campaigns.

The structure of the objects within the array is determined by the advar template used when setting up the creatives.

<details id="bkmrk-an-example-response-"><summary>Example response</summary>

```json
{
    "ads":[
        {
            "id":"https://pool-demo.adhese.com/pool/lib/562_2nd_1.mp4",
            "dur":28.07,
            "prio":15,
            "booking_prio":0,
            "publisher":"1",
            "key":"",
            "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,
            "prio":15,
            "booking_prio":0,
            "publisher":"1",
            "key":"",
            "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,
            "prio":15,
            "booking_prio":0,
            "publisher":"1",
            "key":"",
            "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"
        }
    ]
}
```

</details>**Common response Fields**

<table id="bkmrk-field-description-id" style="width: 40.2381%; height: 178.781px;"><tbody><tr style="height: 29.7969px;"><td style="width: 29.4702%; height: 29.7969px;">**Field**</td><td style="width: 70.2062%; height: 29.7969px;">**Description**</td></tr><tr style="height: 29.7969px;"><td style="width: 29.4702%; height: 29.7969px;">id</td><td style="width: 70.2062%; height: 29.7969px;">Creative URL</td></tr><tr style="height: 29.7969px;"><td style="width: 29.4702%; height: 29.7969px;">dur</td><td style="width: 70.2062%; height: 29.7969px;">Duration in milliseconds</td></tr><tr style="height: 29.7969px;"><td style="width: 29.4702%; height: 29.7969px;">proofOfPlay</td><td style="width: 70.2062%; height: 29.7969px;">Tracking URL after playback</td></tr><tr style="height: 29.7969px;"><td style="width: 29.4702%; height: 29.7969px;">error</td><td style="width: 70.2062%; height: 29.7969px;">Tracking URL for playback errors</td></tr></tbody></table>

#### Sorting the returned list

The order in which the ads array is populated can be be configured by using the **sequence** property in the [advar template](https://documentation.adhese.org/books/templating/page/advar-templates).  
As value you can use a number that is filled in through the advar form, or use one of the [Adhese macro's](https://documentation.adhese.org/books/templating/page/macros-for-templates-and-advar-templates) that return an ID.   
  
When the **sequence** property is added and given a value, the adserver will sort the available ads based on its value. In the example below we use the CREATIVE ID to sort the array **from lowest ID to highest ID**.

```json
"sequence": <ADHESE_LIB_ID>
```

<p class="callout info">The sequence property is only used by the adserver and will be removed before the response is returned</p>

# Request API: JSON endpoint

The JSON endpoint is the foundation of every display integration with Adhese. It gives you direct access to the ad server and Gateway without an SDK or library: you build the request, and Adhese returns the ads as JSON. Any environment that can send an HTTPS request and parse JSON can use it. A backend service, a CMS, a mobile app, ...

The Typescript Web SDK and the Prebid adapter use this same endpoint under the hood. If you use one of those, you do not need this page for implementation, but it remains the reference for what actually happens under the hood.

The API is public and requires no authentication and cookies are not required for an integration to work.

## POST request

### Host

Each Adhese account has its own endpoint. The default pattern is:

```
https://ads-[account].adhese.com/json/
```

### Request body

The POST body is a JSON object with up to three top-level properties:

```json
{
    "slots": [
        {
            "slotname": "some_slot"
        },
        ...
    ],
    "parameters": {
        "kw": [
        "cheese",
        "wine"
        ],
        ...
    },
    "user": {
      "ext": {
        "eids": []
      }
    }
}
```

<table id="bkmrk-property-required-pu"><thead><tr><th>Property</th><th>Required</th><th>Purpose</th></tr></thead><tbody><tr><td>`slots`</td><td>**Yes**</td><td>The ad placements you are requesting</td></tr><tr><td>`parameters`</td><td>No</td><td>Request-level targeting data (page, user, context)</td></tr><tr><td>`user`</td><td>No</td><td>External user IDs for downstream buyers (open market)</td></tr></tbody></table>

#### slots

An array of slot objects — one per ad placement needed for the current page or application state. **At least one slot is required.**

Each slot object contains at minimum a `slotname`: the unique identifier of the placement as configured in your Adhese account. Campaigns are targeted against these names.

```json
"slots": [
    { "slotname": "some_slot" },
    { "slotname": "another_slot" }
]

```

<p class="callout warning">Each `slotname` may appear only once per request. Duplicates cause the request to be rejected with status `442`.</p>

#### parameters

An object of targeting attributes describing the page, user, or context. Keys are **fixed two-character codes** defined in your Adhese account; values are **always arrays of strings**.

All parameters are optional — omit a key entirely, or send an empty array, when there is nothing to pass.

```json
"parameters": {
    "kw": ["cheese", "wine"],
    "mi": ["ABCDEF123456"]
}

```

In this example, `kw` carries search keywords and `mi` a member ID. Reserved parameter codes are listed on [Request target parameters](https://documentation.adhese.org/books/integration-setup/page/reserved-target-prefixes).

#### Slot-level parameters

A slot object can carry its own `parameters` property with the same structure. For each slot, request-level and slot-level parameters are **merged**. Use this for attributes that differ per placement, such as position on the page:

```json
"slots": [
    {
        "slotname": "some_slot",
        "parameters": { "ps": ["top"] }
    },
    {
        "slotname": "another_slot",
        "parameters": { "ps": ["bottom"] }
    }
]

```

#### user

Reserved for passing identifiers from external ID providers to buyers further down the chain, mainly in an open-market context:

```json
"user": {
    "ext": {
        "eids": []
    }
}

```

If you think you need this, contact [Adhese Support](https://documentation.adhese.org/books/introduction/page/adhese-support) before implementing.

#### Complete request example

```json
{
    "slots": [
        { "slotname": "homepage_banner" },
        { "slotname": "homepage_rectangle_top" },
        { "slotname": "homepage_rectangle_bottom" },
        {
            "slotname": "homepage_halfpage",
            "parameters": { "ps": ["right"] }
        }
    ],
    "parameters": {
        "id": ["1234567890ABCD"],
        "ct": ["computers", "laptops"],
        "kw": ["cheese", "wine"]
    }
}

```

Here `id` is a user ID, `ct` product categories, and `kw` search keywords.

## GET request

The GET version of the ad request contains the same information as the POST version with one limitation:  
**slot level parameters are not supported.**

Example request

```html
https://ads-[account].adhese.com/json/sl_sdk_example_-leaderboard/ctsports;soccer?t=1784033344461
```

<table border="1" id="bkmrk-section-meaning-deta"><thead><tr><td>Section</td><td>Description</td></tr></thead><tbody><tr><td class="align-left"><sub>https://ads-\[account\].adhese.com</sub></td><td class="align-left"><sub>The domain is either the default ads domain for your account or a configured first-party domain. More info on first-party domains can be found here.</sub></td></tr><tr><td class="align-left"><sub>/json/</sub></td><td class="align-left"><sub>Fixed path segment selecting the JSON endpoint</sub></td></tr><tr><td class="align-left"><sub>/sl\[location code\]-\[format code\]/</sub></td><td class="align-left"><sub>This section can be added more than once. Each placement starts with the prefix 'sl', followed by the full slot code. </sub></td></tr><tr><td class="align-left"><sub>/ctsports;soccer/</sub>

</td><td class="align-left"><sub>This section can be added more than once. Each target section starts with its predefined prefix and is followed by either one value or a list of values separated by ';'.</sub></td></tr><tr><td class="align-left"><sub>?t=\[timestamp\]</sub>

</td><td class="align-left"><sub>A timestamp to avoid caching issues</sub></td></tr></tbody></table>

## Response codes

<table id="bkmrk-code-meaning-details" style="width: 100%;"><thead><tr><th style="width: 6.67461%;">Code</th><th style="width: 13.589%;">Name</th><th style="width: 79.7364%;">Description</th></tr></thead><tbody><tr><td style="width: 6.67461%;">`200`</td><td style="width: 13.589%;">OK</td><td style="width: 79.7364%;">Body contains an array of ads. If no ads are available, the array is empty — an empty array is a **successful** response, not an error.</td></tr><tr><td style="width: 6.67461%;">`442`</td><td style="width: 13.589%;">Duplicate slots</td><td style="width: 79.7364%;">One or more `slotname` values appear more than once. Header `x-adhese-bad-request` lists the duplicates.</td></tr><tr><td style="width: 6.67461%;">`454`</td><td style="width: 13.589%;">No slots</td><td style="width: 79.7364%;">The request body contains no slots. Header `x-adhese-bad-request` contains `slots cannot be empty`.</td></tr><tr><td style="width: 6.67461%;">`500`</td><td style="width: 13.589%;">Internal server error</td><td style="width: 79.7364%;">If this was a debug request, check the debug log; otherwise contact Adhese Support.</td></tr></tbody></table>

When handling errors programmatically, read the `x-adhese-bad-request` response header for the specific message.

## Response object

A successful response contains a JSON array with one object per delivered ad. The objects contain many attributes; the complete field reference lives at [General JSON response structure](https://documentation.adhese.org/books/integration-setup/page/json-endpoint-full-response-structure).

The most important attributes required for custom integrations are:

<table id="bkmrk-attribute-descriptio"><thead><tr><th>Attribute</th><th>Description</th></tr></thead><tbody><tr><td>`slotName`</td><td>The slot this ad belongs to. Use it as the key to match responses to the slots in your request when requesting multiple slots at once.</td></tr><tr><td>`tag`</td><td>The ad markup, returned as a string. For display ads this is typically an HTML fragment to insert into the slot's container. For video/audio it is a VAST-compliant XML document; for native ads it is a JSON object (delivered as a string that your application must parse).</td></tr><tr><td>`width`</td><td>Width of the ad container in pixels, required for correct display.</td></tr><tr><td>`height`</td><td>Height of the ad container in pixels, required for correct display.</td></tr><tr><td>`trackedImpressionCounter`</td><td>Unique URL to call when the ad is **added to the page**, even if not yet visible. Registers an IAB *paid impression*. Fire-and-forget: the call can be asynchronous and the response ignored.</td></tr><tr><td>`viewableImpressionCounter`</td><td>Unique URL to call when the ad has been **at least 50% in the viewport for at least one second**. Registers an IAB *viewable impression*. Fire-and-forget.</td></tr><tr><td>`clickTag`</td><td>Unique URL that counts a click and redirects the user to the ad's landing page. Use it as the href wrapping the creative. In applications without links, the URL can be called directly to register the click, ignoring the response.</td></tr></tbody></table>

### Trimmed response example

```json
[
    {
        "slotName": "homepage_banner",
        "adFormat": "714x224",
        "width": "714",
        "height": "224",
        "tag": "<div>…ad markup…</div>",
        "trackedImpressionCounter": "https://ads-[account].adhese.com/track/…",
        "viewableImpressionCounter": "https://ads-[account].adhese.com/track/…-Adhese_IABview/…",
        "clickTag": "https://ads-[account].adhese.com/raylene/…/UR",
        "orderName": "Example Campaign",
        "creativeName": "Example Creative",
        "extension": {
            "mediaType": "banner",
            "prebid": {
                "cpm": { "amount": "13.047", "currency": "EUR" }
            }
        }
    }
]

```

## Rendering and tracking workflow

For each ad in the response, a correct display integration does the following, in order:

1. **Match** the ad to its container using `slotName`.
2. **Render** the `tag` markup inside a container sized by `width` × `height`.
3. **Call** `trackedImpressionCounter` the moment the ad is added to the page.
4. **Observe** viewability (e.g. with an Intersection Observer) and call `viewableImpressionCounter` once the ad has been ≥50% in view for ≥1 second.
5. **Wrap** the creative's landing-page link in the `clickTag` URL so clicks are counted and redirected.

Skipping step 3 or 4 - or executing them at the wrong time - is the most common cause of reporting discrepancies between Adhese and third-party measurement.

## Event tracking

Beyond impressions and clicks, you can register **custom events** (e.g. video quartiles, expansions, interactions) by constructing tracking URLs from the response data.

### Building a custom event tracking URL

```
https://[ad domain]/track-[event label]/[response.id]/sl[response.slotID]/II[impressionID]
```

- `event label` : a name of your choosing for the event; it will appear in reporting
- `response.id`, `response.slotID` : taken from the ad's response object
- `impressionID`: this ID is not provided through a specific object in the response, but can be found in the provided tracking URL's such as the **trackedImpressionCounter**. This value is prefixed by the code `II`

<p class="callout info">The easiest way to build a custom tracking URL is to take the **viewableImpressionCounter** URL and replacing the **Adhese-IABview** label with a custom one. </p>

# Request API: AD endpoint

The **AD endpoint** is used for integrations that can't parse a JSON response and require the response in a specific markup instead. It is typically used for [video and audio setups](https://documentation.adhese.org/books/adhese-products/page/vast-video-audio-advertising), where ads are requested by media players and follow the [VAST](https://iabtechlab.com/standards/vast/) protocol in XML.

The API is public and requires no authentication and **cookies are not required** for an integration to work.

## Request method

The AD endpoint supports **GET requests only**. As with the GET version of the JSON endpoint, **slot-level parameters are not supported**.

<p class="callout warning">Unlike the JSON endpoint, only one placement can be retrieved with each call</p>

## URL structure

A request URL is built from the sections below, in order. Sections marked *repeatable* can appear more than once.

<div class="overflow-x-auto w-full px-2 mb-6" data-sourcepos="13:1-19:71;610-1396" id="bkmrk-section-repeatable-d"><table class="min-w-full border-collapse text-sm leading-[1.7] whitespace-normal" style="width: 100%;"><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" style="width: 19.9021%;">Section</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" style="width: 10.1337%;">Repeatable</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" style="width: 69.9642%;">Description</th></tr></thead><tbody><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 19.9021%;">`https://ads-[account].adhese.com`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 10.1337%;">No</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 69.9642%;">The domain — either the default ads domain for your account or a configured first-party domain. See [First-party domains](#bkmrk-when-handling-errors) for more info.</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 19.9021%;">`/ad/`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 10.1337%;">No</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 69.9642%;">Fixed path segment that selects the AD endpoint.</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 19.9021%;">`/sl[location code]-[format code]/`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 10.1337%;">No</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 69.9642%;">A placement (slot). Starts with the prefix `sl`, followed by the full slot code. </td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 19.9021%;">`/ct[value];[value]/`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 10.1337%;">Yes</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 69.9642%;">A target section. Starts with its predefined prefix (e.g. `ct`) and is followed by a single value or a list of values separated by `;`. Add one section per target group you want to pass.</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 19.9021%;">`?t=[timestamp]`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 10.1337%;">No</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 69.9642%;">A timestamp, used to avoid caching issues.</td></tr></tbody></table>

</div>## Example request

```
https://ads-demo.adhese.com/ad/sldemo.com_kitchen-billboard/dtdesktop
```

Broken down:

<div class="overflow-x-auto w-full px-2 mb-6" data-sourcepos="29:1-34:69;1511-1828" id="bkmrk-part-meaning-https%3A%2F"><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">Part</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">Meaning</th></tr></thead><tbody><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">`https://ads-demo.adhese.com`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Ads domain for the `demo` account</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">`/ad/`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">AD endpoint</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">`/sldemo.com_kitchen-billboard/`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Placement: prefix `sl`, location code `demo.com_kitchen`, format code `billboard`</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">`/dtdesktop/`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top">Target section: prefix `dt` with value `desktop`</td></tr></tbody></table>

</div>## Response

A successful request returns the ads in the requested markup (VAST XML for video/audio setups).  
This markup is determined by the advar template used to create the banner that is returned by the request.

<p class="callout success">If no ads are available, the response contains **no ads**. This is still a successful `200` response, **not** an error.</p>

### Response codes

<div class="overflow-x-auto w-full px-2 mb-6" data-sourcepos="44:1-48:113;2081-2521" id="bkmrk-code-name-descriptio"><table class="min-w-full border-collapse text-sm leading-[1.7] whitespace-normal" style="width: 100%;"><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" style="width: 6.67334%;">Code</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" style="width: 12.7546%;">Name</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" style="width: 80.5721%;">Description</th></tr></thead><tbody><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 6.67334%;">`200`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 12.7546%;">OK</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 80.5721%;">The body contains the ads. If no ads are available, the response contains no ads — an empty response is a successful result, not an error.</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 6.67334%;">`454`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 12.7546%;">No slots</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 80.5721%;">The request contains no slots. The `x-adhese-bad-request` header contains `slots cannot be empty`.</td></tr><tr><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 6.67334%;">`500`</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 12.7546%;">Internal server error</td><td class="border-b-0.5 border-[hsl(var(--border-300)/0.3)] py-2 pr-4 align-top" style="width: 80.5721%;">For a debug request, check the debug log. Otherwise, contact Adhese Support.</td></tr></tbody></table>

</div>### Error handling

When handling errors programmatically, read the **`x-adhese-bad-request`** response header for the specific error message.

# JSON endpoint: full response structure

The following code block is an extracted example of a JSON object. A list of all available JSON fields and their descriptions can be found below the code block.

```
{ 
	...
	"adFormat": "wideskyscraper", 
	"adspaceId": "61721",
	...
    "adspaceStart": "1433714400000",
	"adspaceEnd": "1483225199000",
	"adType": "SKY",
	...
	"creativeName": "Example Billboard News",
	...
    "deliveryMultiples": "free",
	...
 	"ext": "swf",
	...
    "height": "600",
    "id": "295057",
    "libId": "96393",
	"orderId": "16643",
    "orderName": "Example - BillBoard Campaign",
	...
    "priority": "1", 
	...
    "slotName": "_test-site_homepage_-SKY", 
    "swfSrc": "http://1.adhesecdn.be/pool/lib/96393.swf",
    "tag": "<object id='-1756524077' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0' WIDTH=160 HEIGHT=600><param NAME=movie VALUE='http://1.adhesecdn.be/pool/lib/96393.swf?clickTAG=http://host4.adhese.be/295057/http%3A%2F%2Ftrack.adform.net%2FC%2F%3Fbn%3D3515419'/><!--[if !IE]>--><object type='application/x-shockwave-flash' data='http://1.adhesecdn.be/pool/lib/96393.swf?clickTAG=http://host4.adhese.be/295057/http%3A%2F%2Ftrack.adform.net%2FC%2F%3Fbn%3D3515419' width='160' height='600'><!--<![endif]--><param NAME='quality' VALUE='high'/><param NAME='allowScriptAccess' VALUE='always'/><param NAME='wmode' VALUE='transparent'/><a target='_blank' href='http://host4.adhese.be/295057/http://track.adform.net/C/?bn=3515419'><img src='http://1.adhesecdn.be/pool/lib/96394.jpg'></a><!--[if !IE]>--></object><!--<![endif]--></object>",
    ...
	"timeStamp": "1396357433000",
    "tracker": "http://ads.adhese.be/track/295057//sl242///////inadttr12842;adttrbiz;adttrfood;adttrhealth;adttrimmo;adttrlifestyle;adttrmultimedia;adttrsport;adttrtrav;adttrvoetbal;adttrwielrennen/brTelenet N.V./coBE/rgBE11///isTelenet N.V.//////////A2141.135.96.213.1395820307192918/O_/A_/C_", 
    "trackingUrl": "http://track.adform.net/adfserve/?bn=3515419;1x1inv=1;srctype=3;ord=",
    "url": "http://host4.adhese.be/295057/http://track.adform.net/C/?bn=3515419",
    "width": "160",
}
```
<table><colgroup><col style="width: 25.2689%;"></col><col style="width: 74.7311%;"></col></colgroup><tbody><tr style="height: 29.8px;"><td style="height: 29.8px;"><strong>Field name</strong></td><td style="height: 29.8px;"><strong>Description</strong></td></tr><tr style="height: 35px;"><td align="left" data-sheets-value="{ " height="17" style="height: 35px;">additionalCreatives</td><td align="left" data-sheets-value="{ " height="47" style="height: 35px;">Lists the additional creatives</td></tr><tr style="height: 38px;"><td align="left" data-sheets-value="{ " height="17" style="height: 38px;">adDuration</td><td align="left" data-sheets-value="{ " height="62" style="height: 38px;">Duration in seconds of the primary creative</td></tr><tr style="height: 38px;"><td align="left" data-sheets-value="{ " height="17" style="height: 38px;">adDuration2nd</td><td align="left" data-sheets-value="{ " height="62" style="height: 38px;">Duration in seconds of the second creative file</td></tr><tr style="height: 35px;"><td align="left" data-sheets-value="{ " height="17" style="height: 35px;">adDuration3rd</td><td align="left" data-sheets-value="{ " height="62" style="height: 35px;">Duration in seconds of the third creative file</td></tr><tr style="height: 35px;"><td align="left" data-sheets-value="{ " height="17" style="height: 35px;">adDuration4th</td><td align="left" data-sheets-value="{ " height="62" style="height: 35px;">The optional duration of the fourth creative file</td></tr><tr style="height: 34px;"><td align="left" data-sheets-value="{ " height="17" style="height: 34px;">adDuration5th</td><td align="left" data-sheets-value="{ " height="62" style="height: 34px;">The optional duration of the fifth creative file</td></tr><tr style="height: 37px;"><td align="left" data-sheets-value="{ " height="17" style="height: 37px;">adDuration6th</td><td align="left" data-sheets-value="{ " height="62" style="height: 37px;">The optional duration of the sixth creative file</td></tr><tr style="height: 64.9px;"><td align="left" data-sheets-value="{ " height="17" style="height: 64.9px;">adFormat</td><td align="left" data-sheets-value="{ "> the assigned format name determined by your Adhese account, e.g. wideskyscraper (the <strong>Code export</strong> field from the <a href="https://documentation.adhese.org/books/inventory-management/page/formats#bkmrk-create-a-format">Admin &gt; Formats</a> screen)</td></tr><tr style="height: 35px;"><td align="left" data-sheets-value="{ " height="17" style="height: 35px;">adspaceEnd</td><td align="left" data-sheets-value="{ " height="62" style="height: 35px;">The end date of the booking in UNIX timestamp</td></tr><tr style="height: 32px;"><td align="left" data-sheets-value="{ " height="17" style="height: 32px;">adspaceId</td><td align="left" data-sheets-value="{ " height="32" style="height: 32px;">The Adhese booking ID</td></tr><tr style="height: 36px;"><td align="left" data-sheets-value="{ " height="17" style="height: 36px;">adspaceKey</td><td align="left" data-sheets-value="{ " height="47" style="height: 36px;">An optional creative foreign key</td></tr><tr style="height: 37px;"><td align="left" data-sheets-value="{ " height="17" style="height: 37px;">adspaceStart</td><td align="left" data-sheets-value="{ " height="62" style="height: 37px;">The start date of the booking in UNIX timestamp</td></tr><tr style="height: 49px;"><td align="left" data-sheets-value="{ " height="17" style="height: 49px;">adType</td><td align="left" data-sheets-value="{ ">The name of the format as requested, e.g. SKY (the <strong>Code tag</strong> field from the <a href="https://documentation.adhese.org/books/inventory-management/page/formats#bkmrk-create-a-format">Admin &gt; Formats</a> screen)</td></tr><tr style="height: 32px;"><td align="left" data-sheets-value="{ " height="17" style="height: 32px;">advertiserId</td><td align="left" data-sheets-value="{ " height="32" id="" style="height: 32px;">The ID of the advertiser</td></tr><tr style="height: 34px;"><td align="left" data-sheets-value="{ " height="17" style="height: 34px;">altText</td><td align="left" data-sheets-value="{ " height="92" style="height: 34px;">Optional text to be shown as the value of the `` attribute of the container</td></tr><tr style="height: 44px;"><td align="left" data-sheets-value="{ " height="17" style="height: 44px;">auctionable</td><td align="left" data-sheets-value="{ " height="121" style="height: 44px;">The auctionable (compete with RTB) setting of a booking, can be used for header bidding</td></tr><tr style="height: 36px;"><td align="left" data-sheets-value="{ " height="17" style="height: 36px;">body</td><td align="left" data-sheets-value="{ " height="77" style="height: 36px;">The third-party code to be inserted in a container (if applicable)</td></tr><tr style="height: 47.6px;"><td align="left" data-sheets-value="{ " height="17" style="height: 47.6px;">clickTag</td><td align="left" data-sheets-value="{ " height="136" style="height: 47.6px;">The URL of the click tag used for the counting of clicks and which should be followed by the actual target URL</td></tr><tr style="height: 32px;"><td align="left" data-sheets-value="{ " height="17" style="height: 32px;">comment</td><td align="left" data-sheets-value="{ " height="32" style="height: 32px;">Optional free text comment</td></tr><tr style="height: 36px;"><td align="left" data-sheets-value="{ " height="17" style="height: 36px;">creativeName</td><td align="left" data-sheets-value="{ " height="77" style="height: 36px;">The name of the creative as determined in the Adhese interface</td></tr><tr style="height: 38px;"><td align="left" data-sheets-value="{ " height="17" style="height: 38px;">deliveryGroupId</td><td align="left" data-sheets-value="{ " height="92" id="" style="height: 38px;">The ID of the booking or creative group for all-together or one-at-a-time bookings</td></tr><tr style="height: 32px;"><td align="left" data-sheets-value="{ " height="17" style="height: 32px;">deliveryMultiples</td><td align="left" data-sheets-value="{ " height="32" style="height: 32px;">The type of delivery</td></tr><tr style="height: 33px;"><td align="left" data-sheets-value="{ " height="17" style="height: 33px;">dm</td><td align="left" data-sheets-value="{ " height="47" id="" style="height: 33px;">The ID of the delivery limitation</td></tr><tr style="height: 32px;"><td align="left" data-sheets-value="{ " height="17" style="height: 32px;">ext</td><td align="left" data-sheets-value="{ " height="32" style="height: 32px;">The extension of the file type</td></tr><tr style="height: 35px;"><td align="left" data-sheets-value="{ " height="17" style="height: 35px;">extraField1</td><td align="left" data-sheets-value="{ " height="47" style="height: 35px;">Optional field used by the uploader</td></tr><tr style="height: 34px;"><td align="left" data-sheets-value="{ " height="17" style="height: 34px;">extraField2</td><td align="left" data-sheets-value="{ " height="62" style="height: 34px;">Second optional field used by the uploader</td></tr><tr style="height: 38px;"><td align="left" data-sheets-value="{ " height="17" style="height: 38px;">height</td><td align="left" data-sheets-value="{ " height="" style="height: 38px;">The height of the primary creative in pixels</td></tr><tr style="height: 36px;"><td align="left" data-sheets-value="{ " height="17" style="height: 36px;">height3rd</td><td align="left" data-sheets-value="{ " height="" style="height: 36px;">The height of the third creative file in pixels</td></tr><tr style="height: 35px;"><td align="left" data-sheets-value="{ " height="17" style="height: 35px;">height4th</td><td align="left" data-sheets-value="{ " height="" style="height: 35px;">The height of the fourth creative file in pixels</td></tr><tr style="height: 34px;"><td align="left" data-sheets-value="{ " height="17" style="height: 34px;">height5th</td><td align="left" data-sheets-value="{ " height="" style="height: 34px;">The height of the fifth creative file in pixels</td></tr><tr style="height: 32px;"><td align="left" data-sheets-value="{ " height="17" style="height: 32px;">height6th</td><td align="left" data-sheets-value="{ " height="" style="height: 32px;">The height of the sixth creative file in pixels</td></tr><tr style="height: 37px;"><td align="left" data-sheets-value="{ " height="17" style="height: 37px;">heightLarge</td><td align="left" data-sheets-value="{ " height="" style="height: 37px;">The height of the second creative file in pixels</td></tr><tr style="height: 35px;"><td align="left" data-sheets-value="{ " height="17" style="height: 35px;">id</td><td align="left" data-sheets-value="{ " height="92" id="" style="height: 35px;">The traffic ID of the link between an uploaded creative and a booking</td></tr><tr style="height: 32px;"><td align="left" data-sheets-value="{ " height="17" style="height: 32px;">impressionCounter</td><td align="left" data-sheets-value="{ " height="62" style="height: 32px;">The URL to count a tracked impression</td></tr><tr style="height: 32px;"><td align="left" data-sheets-value="{ " height="17" style="height: 32px;">libId</td><td align="left" data-sheets-value="{ " height="47" id="" style="height: 32px;">The ID of the uploaded creative</td></tr><tr style="height: 32px;"><td align="left" data-sheets-value="{ " height="17" style="height: 32px;">orderId</td><td align="left" data-sheets-value="{ " height="32" id="" style="height: 32px;">The ID of the campaign</td></tr><tr style="height: 32px;"><td align="left" data-sheets-value="{ " height="17" style="height: 32px;">orderName</td><td align="left" data-sheets-value="{ " height="32" style="height: 32px;">The name of the campaign</td></tr><tr style="height: 37px;"><td align="left" data-sheets-value="{ " height="17" style="height: 37px;">orderProperty</td><td align="left" data-sheets-value="{ " height="136" style="height: 37px;">An optional comma-separated list of properties containing codes as defined by your Adhese account</td></tr><tr style="height: 33px;"><td align="left" data-sheets-value="{ " height="17" style="height: 33px;">origin</td><td align="left" data-sheets-value="{ " height="77" style="height: 33px;">String identifying the source of the ad: JERLICIA or RUBICON</td></tr><tr style="height: 37px;"><td align="left" data-sheets-value="{ " height="17" style="height: 37px;">originData</td><td align="left" data-sheets-value="{ " height="92" style="height: 37px;">An object containing more info related to the origin of the ad</td></tr><tr style="height: 34px;"><td align="left" data-sheets-value="{ " height="17" style="height: 34px;">poolPath</td><td align="left" data-sheets-value="{ " height="92" style="height: 34px;">An optional path to a CDN where files for this creative can be retrieved</td></tr><tr style="height: 32px;"><td align="left" data-sheets-value="{ " height="17" style="height: 32px;">priority</td><td align="left" data-sheets-value="{ " height="32" style="height: 32px;">The priority of the campaign</td></tr><tr style="height: 36px;"><td align="left" data-sheets-value="{ " height="17" style="height: 36px;">share</td><td align="left" data-sheets-value="{ " height="77" style="height: 36px;">An optional number that indicates the weight of the creative</td></tr><tr style="height: 33px;"><td align="left" data-sheets-value="{ " height="17" style="height: 33px;">slotName</td><td align="left" data-sheets-value="{ " height="47" style="height: 33px;">The value of the prefix `sl` as requested</td></tr><tr style="height: 32px;"><td align="left" data-sheets-value="{ " height="17" style="height: 32px;">swfSrc</td><td align="left" data-sheets-value="{ " height="47" style="height: 32px;">The URL of the primary creative file</td></tr><tr style="height: 30.3px;"><td align="left" data-sheets-value="{ " height="17" style="height: 30.3px;">swfSrc2nd</td><td align="left" data-sheets-value="{ " height="47" style="height: 30.3px;">The URL of the second creative file</td></tr><tr style="height: 30.3px;"><td align="left" data-sheets-value="{ " height="17" style="height: 30.3px;">swfSrc3rd</td><td align="left" data-sheets-value="{ " height="47" style="height: 30.3px;">The URL of the third creative file</td></tr><tr style="height: 31px;"><td align="left" data-sheets-value="{ " height="17" style="height: 31px;">swfSrc4th</td><td align="left" data-sheets-value="{ " height="47" style="height: 31px;">The URL of the fourth creative file</td></tr><tr style="height: 30.3px;"><td align="left" data-sheets-value="{ " height="17" style="height: 30.3px;">swfSrc5th</td><td align="left" data-sheets-value="{ " height="47" style="height: 30.3px;">The URL of the fifth creative file</td></tr><tr style="height: 33px;"><td align="left" data-sheets-value="{ " height="17" style="height: 33px;">swfSrc6th</td><td align="left" data-sheets-value="{ " height="47" style="height: 33px;">The URL of the sixth creative file</td></tr><tr style="height: 31px;"><td align="left" data-sheets-value="{ " height="17" style="height: 31px;">tag</td><td align="left" data-sheets-value="{ " height="62" style="height: 31px;">The complete HTML code for inserting in the container</td></tr><tr style="height: 32px;"><td align="left" data-sheets-value="{ " height="17" style="height: 32px;">tagUrl</td><td align="left" data-sheets-value="{ " height="47" style="height: 32px;">An optional URL of the tag's content</td></tr><tr style="height: 36px;"><td align="left" data-sheets-value="{ " height="17" style="height: 36px;">timeStamp</td><td align="left" data-sheets-value="{ " height="92" style="height: 36px;">The timestamp of the latest change to this creative (can be used for caching)</td></tr><tr style="height: 37px;"><td align="left" data-sheets-value="{ " height="17" style="height: 37px;">tracker</td><td align="left" data-sheets-value="{ " height="92" style="height: 37px;">The tracker URL that needs to be requested for counting an impressions</td></tr><tr style="height: 39px;"><td align="left" data-sheets-value="{ " height="17" style="height: 39px;">trackingUrl</td><td align="left" data-sheets-value="{ " height="121" style="height: 39px;">The third-party tracking URL that needs to be requested when visualising the ad's creative</td></tr><tr style="height: 32px;"><td align="left" data-sheets-value="{ " height="17" style="height: 32px;">url</td><td align="left" data-sheets-value="{ " height="32" style="height: 32px;">The click-through URL</td></tr><tr style="height: 38px;"><td align="left" data-sheets-value="{ " height="17" style="height: 38px;">viewableImpressionCounter</td><td align="left" data-sheets-value="{ " height="62" style="height: 38px;">The URL to count a viewable impression</td></tr><tr style="height: 37px;"><td align="left" data-sheets-value="{ " height="17" style="height: 37px;">width</td><td align="left" data-sheets-value="{ " height="62" style="height: 37px;" width="">The width of the primary creative in pixels</td></tr><tr style="height: 35px;"><td align="left" data-sheets-value="{ " height="17" style="height: 35px;">width3rd</td><td align="left" data-sheets-value="{ " height="62" style="height: 35px;" width="">The width of the third creative file in pixels</td></tr><tr style="height: 33px;"><td align="left" data-sheets-value="{ " height="17" style="height: 33px;">width4th</td><td align="left" data-sheets-value="{ " height="62" style="height: 33px;" width="">The width of the fourth creative file in pixels</td></tr><tr style="height: 34px;"><td align="left" data-sheets-value="{ " height="17" style="height: 34px;">width5th</td><td align="left" data-sheets-value="{ " height="62" style="height: 34px;" width="">The width of the fifth creative file in pixels</td></tr><tr style="height: 37px;"><td align="left" data-sheets-value="{ " height="17" style="height: 37px;">width6th</td><td align="left" data-sheets-value="{ " height="62" style="height: 37px;" width="">The width of the sixth creative file in pixels</td></tr><tr style="height: 35px;"><td align="left" data-sheets-value="{ " height="17" style="height: 35px;">widthLarge</td><td align="left" data-sheets-value="{ " height="62" style="height: 35px;" width="">The width of the second creative file in pixels</td></tr></tbody></table>