# Creative Selection

After a line item passes eligibility checks, its creatives are filtered based on the impression type and dimensions.

## Banner creative matching

For banner impressions, each creative's width and height must match the impression:

* If `imp.banner.format` is defined, the creative dimensions must match one of the format entries
* Otherwise, the creative must match `imp.banner.w` and `imp.banner.h`

Only creatives with matching dimensions are eligible.

## Native creative matching

For native impressions, the creative's `content` field must be a JSON object with fields that satisfy the **required** assets in the bid request's `imp.native.request`.

The creative content uses a simplified JSON format:

```json
{
  "title": "Ad Title",
  "img": "https://cdn.example.com/main.jpg",
  "icon": "https://cdn.example.com/icon.png",
  "description": "Ad description text",
  "brand": "Advertiser Name",
  "cta": "Learn More",
  "price": "$9.99",
  "clickUrl": "https://advertiser.com/landing"
}
```

Each field maps to an OpenRTB Native 1.2 asset type:

| Creative field | Native asset type           | OpenRTB type ID |
| -------------- | --------------------------- | --------------- |
| `title`        | Title                       | title           |
| `img`          | Main image                  | img type 3      |
| `icon`         | Icon image                  | img type 1      |
| `brand`        | Sponsored (advertiser name) | data type 1     |
| `description`  | Description                 | data type 2     |
| `cta`          | Call to action text         | data type 12    |
| `price`        | Price                       | data type 6     |
| `clickUrl`     | Click-through URL           | link.url        |

**Eligibility:** A creative is eligible if it has content for all assets marked as `required: 1` in the bid request. Optional assets (`required: 0`) do not affect eligibility.

**Response building:** The DSP builds a Native 1.2 response using only the assets present in the bid request and maps each response asset ID to match the corresponding request asset ID (required by Prebid.js).

## Video and audio

For video and audio impressions, all creatives of the line item are eligible regardless of dimensions.

## Creative fields

| Field        | Type                | Description                                                       |
| ------------ | ------------------- | ----------------------------------------------------------------- |
| `id`         | number              | Unique creative identifier                                        |
| `name`       | string              | Creative name                                                     |
| `status`     | string              | `active` or `paused`                                              |
| `isArchived` | boolean             | Whether the creative is archived                                  |
| `w`          | number \| undefined | Width in pixels (required for banner, optional otherwise)         |
| `h`          | number \| undefined | Height in pixels (required for banner, optional otherwise)        |
| `adomain`    | string              | Advertiser domain (e.g. `advertiser.com`)                         |
| `content`    | string              | Ad markup (HTML for banners, VAST XML for video, JSON for native) |
| `mediatype`  | string              | `banner`, `video`, `native`, or `audio`                           |
| `weight`     | number              | Weight for creative rotation (default: 1)                         |

## Creative rotation

When multiple creatives from the same line item match an impression, they are all included as candidates. The final selection is based on bid price (see [Bid Selection](/campaign-delivery/bid-selection.md)).

## Split creatives

When a line item uses splits, each split can have its own set of creatives. If a split is eligible, only that split's creatives are used (subject to the same dimension matching rules). If no split is eligible, the line item's base creatives are used as a fallback.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.nexx360.io/campaign-delivery/creative-selection.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
