# 비디오 광고

## 1. **REQUEST**

{% hint style="info" %}
SSP :arrow\_right: DSP
{% endhint %}

CJ 메조미디어 SSP 는 HTTP POST 방식으로 아래 정의된 객체를 JSON 형태로 작성해 DSP 인터페이스를 호출합니다.\
요청 객체 정의는 [OPEN RTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) 규격을 따릅니다.

### **Request object**

<table><thead><tr><th width="116">필드</th><th width="129">유형</th><th width="80">필수</th><th>설명</th></tr></thead><tbody><tr><td>id</td><td>string</td><td>Y</td><td>요청 유니크 아이디</td></tr><tr><td>cur</td><td>string array</td><td>N</td><td>ISO-4217-alpha 경매에 사용할 수 있는 통화 입니다. <br>예: “KRW”</td></tr><tr><td>test</td><td>integer</td><td>N</td><td>경매가 테스트 모드(1)건 실시간 모드(0)건, 테스트 경매에는 입찰할 수 없습니다</td></tr><tr><td>at</td><td>integer</td><td>Y</td><td>0 : fixed price, 1: first price, 2: second price</td></tr><tr><td>tmax</td><td>integer</td><td>Y</td><td>최대허용시간 (ms).</td></tr><tr><td>imp</td><td>object array</td><td>Y</td><td><a href="#imp"><code>Imp</code></a> 객체를 참고하십시오.</td></tr><tr><td>app</td><td>object</td><td>Y</td><td><a href="#app"><code>App</code></a> 객체를 참고하십시오.</td></tr><tr><td>device</td><td>object</td><td>Y</td><td><a href="#device"><code>Device</code></a> 객체를 참고하십시오.</td></tr><tr><td>user</td><td>object</td><td>Y</td><td><a href="#user"><code>User</code></a> 객체를 참고하십시오.</td></tr><tr><td>bcat</td><td>string array</td><td>N</td><td>IAB 카테고리 기준으로 광고주 카테고리를 차단합니다.</td></tr><tr><td>badv</td><td>string array</td><td>N</td><td>광고주의 도메인을 차단합니다.</td></tr><tr><td>bapp</td><td>string array</td><td>N</td><td>App의 번들이나 패키지명을 차단합니다.</td></tr><tr><td>ext</td><td>object</td><td>Y</td><td><a href="#ext"><code>Ext</code></a> 객체를 참고하십시오.</td></tr></tbody></table>

### **Imp**

<table><thead><tr><th width="205">필드</th><th width="126">유형</th><th width="68">필수</th><th>설명</th></tr></thead><tbody><tr><td>id</td><td>string</td><td>Y</td><td>노출에 대한 유니크 아이디</td></tr><tr><td>bidfloor</td><td>float</td><td>Y</td><td>입찰로 인정받을 수 있는 최소 가격. 예) 4.12</td></tr><tr><td>bidfloorcur</td><td>string</td><td>Y</td><td>통화, 예) ‘KRW’</td></tr><tr><td>secure</td><td>integer</td><td>Y</td><td>0 : http, 1 : https</td></tr><tr><td>video</td><td>object</td><td>Y</td><td><a href="#video"><code>Video</code></a> 객체를 참고하십시오.</td></tr><tr><td>instl</td><td>integer</td><td>Y</td><td>전면광고 여부를 전달합니다. (default: 0)<br>* 1 = the ad is interstitial or full screen<br>* 0 = not interstitial.</td></tr><tr><td>displaymanager</td><td>string</td><td>Y</td><td>SSP 플랫폼명 또는 SDK명을 의미합니다.</td></tr><tr><td>displaymanagerver</td><td>string</td><td>Y</td><td>SSP 플랫폼 또는 SDK 버전을 의미합니다.</td></tr></tbody></table>

### **Video**

> [`Imp`](#imp) / video

<table><thead><tr><th width="145">필드</th><th width="142">유형</th><th width="59">필수</th><th>설명</th></tr></thead><tbody><tr><td>mimes</td><td>string array</td><td>Y</td><td>MIME 타입. 예) “video/mp4”</td></tr><tr><td>w</td><td>integer</td><td>Y</td><td>비디오의 가로 크기</td></tr><tr><td>h</td><td>integer</td><td>Y</td><td>비디오의 세로 크기</td></tr><tr><td>minduration</td><td>integer</td><td>Y</td><td>비디오가 재생되어야 하는 최소 시간(초)</td></tr><tr><td>maxduration</td><td>integer</td><td>Y</td><td>비디오가 재생될 수 있는 최대 시간(초)</td></tr><tr><td>protocols</td><td>integer array</td><td>Y</td><td>VAST 버전. “3” 을 전달합니다.</td></tr><tr><td>startdelay</td><td>integer</td><td>Y</td><td>프리롤, 미드롤, 포스트롤 광고 구분값을 전달합니다.<br>* 0 = 프리롤<br>* -1 = 일반 미드롤<br>* -2 = 일반 포스트롤</td></tr><tr><td>linearity</td><td>integer</td><td>Y</td><td>1: in stream, 2: out stream</td></tr><tr><td>delivery</td><td>integer array</td><td>Y</td><td>2 (Progressive) 로 전달합니다.</td></tr><tr><td>placement</td><td>integer</td><td>Y</td><td>비디오 게재 위치<br>* 1 = 플레이어 내<br>* 2 = 배너 내<br>* 3 = 기사 내<br>* 4 = 피드 내<br>* 5 = 전면/슬라이드/플로팅</td></tr><tr><td>ext</td><td>object</td><td>N</td><td>표준 항목 외에 필요한 정보를 전달합니다.(ex, rewarded)</td></tr></tbody></table>

### **Video / ext**

> [`Imp`](#imp) / video / ext

<table><thead><tr><th width="118">Field</th><th width="117">Type</th><th width="152">Required</th><th>Description</th></tr></thead><tbody><tr><td>rewarded</td><td>integer</td><td>N</td><td>Reward 광고 여부를 전달합니다.<br>* 0 = no(non-reward)<br>* 1 = yes(reward)</td></tr></tbody></table>

### **App**

<table><thead><tr><th width="177">필드</th><th width="101">유형</th><th width="101">필수</th><th>설명</th></tr></thead><tbody><tr><td>id</td><td>string</td><td>Y</td><td>퍼블리셔 ID</td></tr><tr><td>name</td><td>string</td><td>N</td><td>애플리케이션 이름</td></tr><tr><td>bundle</td><td>string</td><td>Y</td><td>번들 이름, 패키지 이름</td></tr><tr><td>storeurl</td><td>string</td><td>N</td><td>앱스토어 URL</td></tr><tr><td>cat</td><td>string array</td><td>N</td><td>카테고리</td></tr><tr><td>publisher</td><td>object</td><td>Y</td><td><a href="#publisher"><code>Publisher</code></a> 객체를 참고하십시오.</td></tr></tbody></table>

### **Publisher**

> [`App`](#app) / publisher

| 필드   | 유형           | 필수 | 설명      |
| ---- | ------------ | -- | ------- |
| id   | string       | Y  | 퍼블리셔 ID |
| name | string       | N  | 퍼블리셔 명  |
| cat  | string array | N  | 카테고리    |

### **Device**

<table><thead><tr><th width="142">필드</th><th width="112">유형</th><th width="87">필수</th><th>설명</th></tr></thead><tbody><tr><td>ua</td><td>string</td><td>Y</td><td>디바이스의 User Agent 정보</td></tr><tr><td>dnt</td><td>integer</td><td>N</td><td>위치 추적 금지 활성화 여부. 0: 추적 가능, 1: 추적 금지.</td></tr><tr><td>ip</td><td>string</td><td>Y</td><td>IPV4 주소</td></tr><tr><td>model</td><td>string</td><td>N</td><td>모델명</td></tr><tr><td>os</td><td>string</td><td>Y</td><td>운영체제. 예) iOS, Anroid</td></tr><tr><td>osv</td><td>string</td><td>Y</td><td>운영체제 버전. 예) 8.1, 9.2</td></tr><tr><td>js</td><td>integer</td><td>N</td><td>RTB 프로토콜에 1로 정의되어 있습니다.</td></tr><tr><td>ifa</td><td>string</td><td>Y</td><td>Apple IFA 또는 Google 의 ADID</td></tr></tbody></table>

### **User**

{% hint style="info" %}
RTB 프로토콜에는 없는 CJ 메조미디어의 확장 필드 입니다.
{% endhint %}

| 필드 | 유형     | 필수 | 설명         |
| -- | ------ | -- | ---------- |
| id | string | Y  | 사용자의 고유 ID |

### **Ext**

{% hint style="info" %}
RTB 프로토콜에는 없는 CJ 메조미디어의 확장 필드 입니다.
{% endhint %}

&#x20;

| 필드          | 유형      | 필수 | 설명             |
| ----------- | ------- | -- | -------------- |
| Price\_type | integer | N  | 0: CPM, 2: CPC |

### **요청 예제 (APP)**

{% code lineNumbers="true" %}

```json
{
  "id": "eb713f5a-3773-4ae7-9a33-884164172255$1277830896$KKHSVVWN",
  "test": 1,
  "cur": [
    "USD"
  ],
  "source": {
    "ext": {
      "schain": {
        "ver": "1.0",
        "nodes": [
          {
            "asi": "mman.kr",
            "sid": "31998",
            "rid": "eb713f5a-3773-4ae7-9a33-884164172255$1277830896$KKHSVVWN",
            "hp": 1
          }
        ],
        "complete": 1
      }
    }
  },
  "regs": {
    "ext": {
      "us_privacy": "1---"
    }
  },
  "tmax": 500,
  "at": 2,
  "imp": [
    {
      "tagid": "805010_com.test.mezzo",
      "secure": 0,
      "clickbrowser": 1,
      "displaymanager": "ManSDK",
      "displaymanagerver": "200",
      "instl": 0,
      "video": {
        "mimes": [
          "video/mp4"
        ],
        "w": 1920,
        "h": 1080,
        "placement": 1,
        "skip": 1,
        "playbackmethod": [
          2
        ],
        "protocols": [
          2,
          3
        ],
        "delivery": [
          2
        ],
        "ext": {
          "rewarded": 0
        },
        "minduration": 7,
        "maxduration": 60,
        "startdelay": 1,
        "linearity": 1
      },
      "bidfloorcur": "USD",
      "bidfloor": 0.008411677387431964,
      "id": "166330732500"
    }
  ],
  "app": {
    "publisher": {
      "id": "31998",
      "name": "31998_%EC%9D%B4%EA%B2%83%EC%9D%B4 %ED%85%8C%EC%8A%A4%ED%8A%B8",
      "product_attr": 4
    },
    "id": "805010_com.test.mezzo",
    "name": "805010_%EC%9D%B4%EA%B2%83%EC%9D%B4 %ED%85%8C%EC%8A%A4%ED%8A%B8",
    "bundle": "com.test.mezzo",
    "storeurl": "https://play.google.com/store/apps/details?id=com.mz.mezzomediaapp",
    "cat": [
      "IAB9"
    ]
  },
  "user": {
    "id": "2d634ecd-c577-48bd-a76c-10ca1ad1abe1"
  },
  "device": {
    "geo": {
      "country": "KOR"
    },
    "adid": "2d634ecd-c577-48bd-a76c-10ca1ad1abe1",
    "ifa": "2d634ecd-c577-48bd-a76c-10ca1ad1abe1",
    "dnt": 0,
    "ua": "Mozilla/5.0 (Linux; Android 9; SM-G955N Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/105.0.5195.79 Mobile Safari/537.36",
    "ip": "58.231.40.30",
    "make": "samsung",
    "os": "Android",
    "osv": "9",
    "model": "SM-G955N",
    "language": "ko",
    "js": 1,
    "devicetype": 1,
    "ext": {
      "gain": "2d634ecd-c577-48bd-a76c-10ca1ad1abe1"
    }
  },
  "ext": {
    "limit_duration": 30,
    "price_type": 0
  }
}
```

{% endcode %}

### **요청 예제 (WEB)**

{% code lineNumbers="true" %}

```json
{
  "id": "b051cef2-cc87-4c31-9288-c1c8faec3c58$1277830694$KKHSVVWN",
  "test": 1,
  "cur": [
    "USD"
  ],
  "source": {
    "ext": {
      "schain": {
        "ver": "1.0",
        "nodes": [
          {
            "asi": "mman.kr",
            "sid": "31998",
            "rid": "b051cef2-cc87-4c31-9288-c1c8faec3c58$1277830694$KKHSVVWN",
            "hp": 1
          }
        ],
        "complete": 1
      }
    }
  },
  "regs": {
    "ext": {
      "us_privacy": "1---"
    }
  },
  "tmax": 500,
  "at": 2,
  "imp": [
    {
      "tagid": "805010_com.test.mezzo",
      "secure": 0,
      "instl": 0,
      "video": {
        "mimes": [
          "video/mp4"
        ],
        "w": 1080,
        "h": 1920,
        "placement": 1,
        "skip": 1,
        "playbackmethod": [
          2
        ],
        "protocols": [
          2,
          3
        ],
        "delivery": [
          2
        ],
        "ext": {
          "rewarded": 0
        },
        "minduration": 7,
        "maxduration": 60,
        "startdelay": 1,
        "linearity": 1
      },
      "bidfloorcur": "USD",
      "bidfloor": 0.008411677387431964,
      "id": "166330750000"
    }
  ],
  "site": {
    "publisher": {
      "id": "31998",
      "name": "31998_com.test.mezzo",
      "domain": "com.test.mezzo",
      "product_attr": 4
    },
    "id": "805010_com.test.mezzo",
    "name": "805010_com.test.mezzo",
    "domain": "com.test.mezzo",
    "page": "http://mtagdev.mman.kr:9300/V2/video_step2.html",
    "ref": "http://mtagdev.mman.kr:9300/",
    "mobile": 1,
    "cat": [
      "IAB9"
    ]
  },
  "user": {
    "id": "2ca990ef-7e72-4fc1-91bc-24cb11dc2b8d"
  },
  "device": {
    "geo": {
      "country": "KOR"
    },
    "adid": "2ca990ef-7e72-4fc1-91bc-24cb11dc2b8d",
    "ifa": "",
    "dnt": 0,
    "ua": "Mozilla/5.0 (Linux; Android 10; SM-G981B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Mobile Safari/537.36",
    "ip": "203.248.117.195",
    "make": "",
    "os": "Android",
    "osv": "",
    "model": "",
    "language": "ko",
    "js": 1,
    "devicetype": 1
  },
  "ext": {
    "limit_duration": 30,
    "price_type": 0
  }
}
```

{% endcode %}

## **2. RESPONSE**

{% hint style="info" %}
DSP :arrow\_right: SSP
{% endhint %}

DSP 는 아래 정의된 객체를 HTTP body 에 포함해 응답합니다.\
객체 정의는 [OPEN RTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) 규격을 따릅니다.

### **Bid Response**

{% hint style="info" %}
JSON 형식의 응답 객체입니다.
{% endhint %}

<table><thead><tr><th>필드</th><th>유형</th><th width="111">필수</th><th>설명</th></tr></thead><tbody><tr><td>id</td><td>string</td><td>Y</td><td>Bid Request 의 ID</td></tr><tr><td>bidid</td><td>string</td><td>Y</td><td>Bid 오브젝트의 ID</td></tr><tr><td>cur</td><td>string array</td><td>Y</td><td>입찰시 사용할 통화. <br>예) KRW</td></tr><tr><td>seatbid</td><td>object array</td><td>Y</td><td><a href="#bid"><code>Bid</code></a> 객체 에 대한 배열</td></tr></tbody></table>

### **Bid**

<table><thead><tr><th width="117">필드</th><th width="128">유형</th><th width="64">필수</th><th>설명</th></tr></thead><tbody><tr><td>id</td><td>string</td><td>Y</td><td>입찰 정보를 관리하는 ID</td></tr><tr><td>price</td><td>float</td><td>Y</td><td>입찰 가격</td></tr><tr><td>adm</td><td>string (XML)</td><td>Y</td><td><a href="#adm"><code>ADM</code></a> 객체를 참고하십시오.</td></tr><tr><td>nurl</td><td>string</td><td>N</td><td>낙찰 알림 url (win URL)<br>낙찰가를 {AUCTION_PRICE} 매크로에 치환하여 전달합니다.</td></tr><tr><td>burl</td><td>string</td><td>N</td><td>낙찰 청구 알림 url (Billing notice URL)<br>낙찰가를 {AUCTION_PRICE} 매크로에 치환하여 전달합니다.</td></tr><tr><td>lurl</td><td>string</td><td>N</td><td>유찰 알림 url (Loss notice URL)<br>{AUCTION_LOSS} 매크로에 유찰 사유 코드를 치환하여 전달합니다.</td></tr><tr><td>adomain</td><td>string array</td><td>Y</td><td>광고주 도메인</td></tr><tr><td>cid</td><td>string</td><td>Y</td><td>광고주 캠페인명 / id</td></tr><tr><td>crid</td><td>string</td><td>Y</td><td>광고주 광고물명 / id</td></tr><tr><td>cat</td><td>string array</td><td>Y</td><td>카테고리</td></tr><tr><td>ext</td><td>object</td><td>Y</td><td><a href="https://docs.meba.kr/s-plus/api/ssp/delivery/video/#video_ext-response"><code>ext</code></a> 객체를 참고하십시오.</td></tr></tbody></table>

### **ADM**

&#x20;XML 로 정의되는 객체입니다.\
객체 정의는 [VAST 3.0](https://www.iab.com/wp-content/uploads/2015/06/VASTv3_0.pdf) 규격을 따릅니다.

| 요소 / 속성 | 유형      | 필수 | 설명                          |
| ------- | ------- | -- | --------------------------- |
| VAST    | element | Y  | [`VAST`](#vast) 정의를 참고하십시오. |

### **VAST**

> [`adm`](#adm) / VAST

<table><thead><tr><th>요소 / 속성</th><th>유형</th><th width="74">필수</th><th>설명</th></tr></thead><tbody><tr><td>version</td><td>integer (속성)</td><td>Y</td><td>VAST 규약 버전. 3.0 인 경우,<br>3으로 작성합니다.</td></tr><tr><td>Ad</td><td>element array</td><td>Y</td><td><a href="#a-d"><code>Ad</code></a> 정의를 참고하십시오.</td></tr></tbody></table>

### **Ad**

[`adm`](#adm) / Ad

| 요소 / 속성  | 유형           | 필수 | 설명                              |
| -------- | ------------ | -- | ------------------------------- |
| id       | integer (속성) | N  | 광고 ID                           |
| sequence | integer (속성) | N  | 광고의 sequence 번호                 |
| Inline   | element      | Y  | [`Inline`](#inline) 정의를 참고하십시오. |

### **Inline**

> [`ADM`](#adm) / [`Ad`](#a-d) / Inline

<table><thead><tr><th width="162">요소 / 속성</th><th width="157">유형</th><th width="124">필수</th><th>설명</th></tr></thead><tbody><tr><td>AdSystem</td><td>integer</td><td>N</td><td><a href="#a-dsystem"><code>Adsystem</code></a> 정의를 참고하십시오.</td></tr><tr><td>AdTitle</td><td>integer</td><td>N</td><td>광고 이름</td></tr><tr><td>Extensions</td><td>element</td><td>N</td><td><a href="#extensions"><code>Extensions</code></a> 정의를 참고하십시오.</td></tr><tr><td>Error</td><td>element</td><td>N</td><td>Player 에러 발생시 호출할 트래킹 URL</td></tr><tr><td>Impression</td><td>element</td><td>Y</td><td>동영상 시작시 호출할 트래킹 URL</td></tr><tr><td>Creatives</td><td>element array</td><td>Y</td><td><a href="#creative"><code>Creative</code></a> element 에 대한 배열</td></tr></tbody></table>

### **AdSystem**

> [`ADM`](#adm) / [`Ad`](#a-d) / [`Inline`](#inline) / AdSystem

| 요소 / 속성 | 유형           | 필수 | 설명       |
| ------- | ------------ | -- | -------- |
| version | integer (속성) | N  | 광고 엔진 버전 |

{% hint style="info" %}
요소 값은 광고 엔진 이름입니다.
{% endhint %}

### **Extensions**

> [`ADM`](#adm) / [`Ad`](#a-d) / [`Inline`](#inline) / Extensions

| 요소 / 속성   | 유형     | 필수 | 설명          |
| --------- | ------ | -- | ----------- |
| requestID | string | N  | 광고 요청 고유 코드 |

### **Creative**

> [`ADM`](#adm) / [`Ad`](#a-d) / [`Inline`](#inline) / Creatives / Creative

<table><thead><tr><th width="181">요소 / 속성</th><th width="192">유형</th><th width="74">필수</th><th>설명</th></tr></thead><tbody><tr><td>id</td><td>integer (속성)</td><td>N</td><td>광고 번호</td></tr><tr><td>sequence</td><td>integer (속성)</td><td>N</td><td>광고 시퀀스</td></tr><tr><td>Linear</td><td>element</td><td>Y</td><td><a href="#linear"><code>Linear</code></a> 정의를 참고하십시오.</td></tr></tbody></table>

### **Linear**

> [`ADM`](#adm) / [`Ad`](#a-d) / [`Inline`](#inline) / Creatives / [`Creative`](#creative) / Linear

<table><thead><tr><th width="182">요소 / 속성</th><th width="187">유형</th><th width="54">필수</th><th>설명</th></tr></thead><tbody><tr><td>Duration</td><td>string</td><td>N</td><td>영상 길이 / 재생 시간. <br>hh:mm:ss 형태로 지정합니다.</td></tr><tr><td>TrackingEvents</td><td>element array</td><td>N</td><td><a href="#tracking"><code>Tracking</code></a> element 대한 배열</td></tr><tr><td>VideoClicks</td><td>element</td><td>N</td><td><a href="#videoclicks"><code>VideoClicks</code></a> 정의를 참고하십시오.</td></tr><tr><td>MediaFiles</td><td>element array</td><td>Y</td><td><a href="#mediafile"><code>MediaFile</code></a> element 대한 배열</td></tr></tbody></table>

### **Tracking**

> [`ADM`](#adm) / [`Ad`](#a-d) / [`Inline`](#inline) / Creatives / [`Creative`](#creative) /  [`Linear`](#linear) / TrackingEvents / Tracking

{% hint style="info" %}
요소 값은 트래킹 이벤트 전달을 위한 HTTP(s) URL 입니다.
{% endhint %}

<table><thead><tr><th width="123">요소 / 속성</th><th width="157">유형</th><th width="72">필수</th><th>설명</th></tr></thead><tbody><tr><td>event</td><td>string (속성)</td><td>Y</td><td>이벤트 이름을 지정합니다. <br>예) start, firstQuartile, midpoint</td></tr><tr><td>offset</td><td>element array</td><td>N</td><td>이벤트 발생 조건이 되는 재생 시간을 지정합니다. hh:mm:ss 형태로 지정.</td></tr></tbody></table>

{% hint style="info" %}
요소 값은 트래킹 이벤트 전달을 위한 HTTP(s) URL 입니다.
{% endhint %}

<table><thead><tr><th width="199">이벤트 값</th><th>설명</th></tr></thead><tbody><tr><td>start</td><td>동영상이 시작된 경우 호출하는 트래킹 URL</td></tr><tr><td>firstQuartile</td><td>동영상이 25% 재생된 경우 호출하는 트래킹 URL</td></tr><tr><td>midpoint</td><td>동영상이 50% 재생된 경우 호출하는 트래킹 URL</td></tr><tr><td>thirdQuartile</td><td>동영상이 75% 재생된 경우 호출하는 트래킹 URL</td></tr><tr><td>complete</td><td>동영상 재생이 완료된 경우 호출하는 트래킹 URL</td></tr><tr><td>progress</td><td>동영상이 지정된 offset 속성만큼 재생된 경우 호출하는 트래킹 URL</td></tr></tbody></table>

{% hint style="info" %}
&#x20;(이벤트 값과 offset 값이 같은) 동일한 이벤트에 서로 다른 트래킹 URL 을 지정할 수 있습니다.
{% endhint %}

### **VideoClicks**

> [`ADM`](#adm) / [`Ad`](#a-d) / [`Inline`](#inline) / Creatives / [`Creative`](#creative) /  [`Linear`](#linear) / VideoClicks

{% hint style="info" %}
요소 값은 클릭 이벤트를 처리하기 위한 HTTP(s) URL 입니다.
{% endhint %}

<table><thead><tr><th width="182">요소 / 속성</th><th width="95">유형</th><th width="76">필수</th><th>설명</th></tr></thead><tbody><tr><td>ClickThrough</td><td>string</td><td>Y</td><td>광고 랜딩 페이지 URL</td></tr><tr><td>ClickTracking</td><td>string</td><td>N</td><td>광고 클릭 이벤트 트래킹 URL</td></tr><tr><td>offset</td><td>string</td><td>N</td><td>지정된 시간까지 재생된 이후에 광고 클릭이 가능합니다.</td></tr></tbody></table>

{% hint style="info" %}
ClickThrough : DSP 에서 클릭 이벤트를 처리한 뒤, 최종 광고 랜딩으로 리다이렉트 하도록 구성할 수 있습니다.
{% endhint %}

### **MediaFile**

> [`ADM`](#adm) / [`Ad`](#a-d) / [`Inline`](#inline) / Creatives / [`Creative`](#creative) /  [`Linear`](#linear) / MediaFiles / MediaFile

<table><thead><tr><th width="121">요소 / 속성</th><th width="131">유형</th><th width="82">필수</th><th>설명</th></tr></thead><tbody><tr><td>delivery</td><td>string (속성)</td><td>N</td><td>동영상 소재 재생 방식. progressive 를 지원합니다.</td></tr><tr><td>type</td><td>string (속성)</td><td>N</td><td>동영상 소재 타입. 예) video/mp4</td></tr><tr><td>width</td><td>integer (속성)</td><td>N</td><td>동영상 소재의 폭</td></tr><tr><td>height</td><td>integer (속성)</td><td>N</td><td>동영상 소재의 높이</td></tr><tr><td>bitrate</td><td>integer (속성)</td><td>N</td><td>동영상 소재의 비트레이트</td></tr></tbody></table>

{% hint style="info" %}
요소 값은 비디오 콘텐츠의 경로입니다. (HTTP, HTTPS)
{% endhint %}

### **Bid response 예제**

{% code lineNumbers="true" %}

```json
{
   "id": "req-12345-abcde",
   "bidid": "5508",
   "cur": "KRW",
   "seatbid": [
      {
         "bid": [
            {
               "id": "147704390800",
               "price": "60",
               "adm": "%3CVAST+version%3D%223.0%22%3E%0D%0A%3CAd+id%3D%2250096%22+sequence%3D%221%22%3E%0D%0A%3CInLine%3E%0D%0A%3CAdSystem+version%3D%222%22%3EMAN%3C%2FAdSystem%3E%0D%0A%3CAdTitle%3E%0D%0A%3C%21%5BCDATA%5B+20160217_%ED%99%88%ED%94%8C%EB%9F%AC%EC%8A%A4_%ED%99%88%ED%94%8C%EB%9F%AC%EC%8A%A4_%EB%8F%99%EC%98%81%EC%83%81_%ED%85%8C%EC%8A%A4%ED%8A%B8+%5D%5D%3E%0D%0A%3C%2FAdTitle%3E%0D%0A%3CExtensions%3E%0D%0A%3CrequestID%3E%0D%0A%3C%21%5BCDATA%5B+-+%5D%5D%3E%0D%0A%3C%2FrequestID%3E%0D%0A%3C%2FExtensions%3E%0D%0A%3CError%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fd_err%3D%5BERRORCODE%5D%5D%0D%0A%5D%5D%3E%0D%0A%3C%2FError%3E%0D%0A%3CImpression+id%3D%22man_server%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dimps_tracking%0D%0A%5D%5D%3E%0D%0A%3C%2FImpression%3E%0D%0A%3CCreatives%3E%0D%0A%3CCreative+id%3D%2225549%22+sequence%3D%221%22%3E%0D%0A%3CLinear%3E%0D%0A%3CDuration%3E00%3A00%3A30%3C%2FDuration%3E%0D%0A%3CTrackingEvents%3E%0D%0A%3CTracking+event%3D%22start%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dtrack_vast_q1%26e_version%3D2%0D%0A%5D%5D%3E%0D%0A%3C%2FTracking%3E%0D%0A%3CTracking+event%3D%22firstQuartile%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dtrack_vast_q2%26e_version%3D2%0D%0A%5D%5D%3E%0D%0A%3C%2FTracking%3E%0D%0A%3CTracking+event%3D%22midpoint%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dtrack_vast_q3%26e_version%3D2%0D%0A%5D%5D%3E%0D%0A%3C%2FTracking%3E%0D%0A%3CTracking+event%3D%22thirdQuartile%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dtrack_vast_q4%26e_version%3D2%5D%5D%3E%0D%0A%3C%2FTracking%3E%0D%0A%3CTracking+event%3D%22complete%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dtrack_vast_q5%26e_version%3D2%0D%0A%5D%5D%3E%0D%0A%3C%2FTracking%3E%0D%0A%3CTracking+event%3D%22progress%22+offset%3D%2200%3A00%3A05%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dimps_video_tracking%26e_version%3D2%0D%0A%5D%5D%3E%0D%0A%3C%2FTracking%3E%0D%0A%3CTracking+event%3D%22progress%22+offset%3D%2200%3A00%3A15%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dtrack_vast_view%26e_version%3D2%0D%0A%5D%5D%3E%0D%0A%3C%2FTracking%3E%0D%0A%3C%2FTrackingEvents%3E%0D%0A%3CVideoClicks%3E%0D%0A%3CClickThrough%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fad_tracking.mezzo%2F%3Fe_request_type%3Dclick%26e_version%3D2%0D%0A%5D%5D%3E%0D%0A%3C%2FClickThrough%3E%0D%0A%3CClickTracking%3E%3C%2FClickTracking%3E%0D%0A%3COffset%3E00%3A00%3A05%3C%2FOffset%3E%0D%0A%3C%2FVideoClicks%3E%0D%0A%3CMediaFiles%3E%0D%0A%3CMediaFile+delivery%3D%22progressive%22+type%3D%22video%2Fmp4%22+width%3D%22480%22+height%3D%22270%22+bitrate%3D%22350%22%3E%0D%0A%3C%21%5BCDATA%5B%0D%0Ahttp%3A%2F%2Fmtag.mman.kr%2Fvod.mezzo%2F%3Fe_version%3D2%26e_request_type%3Dvod%26i_video_name%3D20161014150027%26d_r%3D1%26i_rs_t%3D3%26d_p1%3D1%0D%0A%5D%5D%3E%0D%0A%3C%2FMediaFile%3E%0D%0A%3C%2FMediaFiles%3E%0D%0A%3C%2FLinear%3E%0D%0A%3C%2FCreative%3E%0D%0A%3C%2FCreatives%3E%0D%0A%3C%2FInLine%3E%0D%0A%3C%2FAd%3E%0D%0A%3C%2FVAST%3E",
               "nurl": "win url",
               "adomain": "http: //adver.co.kr",
               "cid": "2234",
               "crid": "2234",
               "cat": [
                  "IAB1"
               ]
            }
         ]
      }
   ]
}

```

{% endcode %}

### **adm 예제**

{% code lineNumbers="true" %}

```json

<?xml version="1.0" encoding="UTF-8"?>
<VAST version="3.0">
   <Ad id="50096" sequence="1">
      <InLine>
         <AdSystem version="2">MAN</AdSystem>
         <AdTitle><![CDATA[ 20160217_홈플러스_홈플러스_동영상_테스트 ]]></AdTitle>
         <Extensions>
            <requestID><![CDATA[ - ]]></requestID>
         </Extensions>
         <Error><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?d_err=[ERRORCODE]]]]></Error>
         <Impression id="man_server"><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=imps_tracking]]></Impression>
         <Creatives>
            <Creative id="25549" sequence="1">
               <Linear>
                  <Duration>00:00:30</Duration>
                  <TrackingEvents>
                     <Tracking event="start"><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=track_vast_q1&e_version=2]]></Tracking>
                     <Tracking event="firstQuartile"><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=track_vast_q2&e_version=2]]></Tracking>
                     <Tracking event="midpoint"><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=track_vast_q3&e_version=2]]></Tracking>
                     <Tracking event="thirdQuartile"><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=track_vast_q4&e_version=2]]></Tracking>
                     <Tracking event="complete"><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=track_vast_q5&e_version=2]]></Tracking>
                     <Tracking event="progress" offset="00:00:05"><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=imps_video_tracking&e_version=2]]></Tracking>
                     <Tracking event="progress" offset="00:00:15"><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=track_vast_view&e_version=2]]></Tracking>
                  </TrackingEvents>
                  <VideoClicks>
                     <ClickThrough><![CDATA[http://mtag.mman.kr/ad_tracking.mezzo/?e_request_type=click&e_version=2]]></ClickThrough>
                     <ClickTracking></ClickTracking>
                     <Offset>00:00:05</Offset>
                  </VideoClicks>
                  <MediaFiles>
                     <MediaFile delivery="progressive" type="video/mp4" width="480" height="270" bitrate="350"><![CDATA[http://mtag.mman.kr/vod.mezzo/?e_version=2&e_request_type=vod&i_video_name=20161014150027&d_r=1&i_rs_t=3&d_p1=1]]></MediaFile>
                  </MediaFiles>
               </Linear>
            </Creative>
         </Creatives>
      </InLine>
   </Ad>
</VAST>

```

{% endcode %}

#### **SKAdNetwork 지원(iOS14 이상)**

해당 내용은 iOS14 버전 혹은 그 이상의 환경에서 SKAdNetwork가 활성화된 캠페인을 지원하기 위한 내용입니다.

<table data-header-hidden><thead><tr><th width="69"></th><th></th></tr></thead><tbody><tr><td>1</td><td>DSP는 Apple의 SKAdNetwork API에 Ad Network로 등록되어 있어야 한다.<br>(https://developer.apple.com/documentation/storekit/skadnetwork/registering_an_ad_network)</td></tr><tr><td>2</td><td>Apple로부터 Public key를 발급받고 Postback URL을 설정해야 한다.</td></tr><tr><td>3</td><td>Apple로부터 발급받은 SKAdNetwork ID를 CJ MezzoMedia 담당자에게 전달하고<br>CJ MezzoMedia는 전달받은 SKAdNetwork ID를 자사와 제휴된 퍼블리셔의 info.plist에 등록 요청한다.</td></tr><tr><td>4</td><td>DSP에서 SKAdNetwork가 활성화된 캠페인 Response를 전달할 때는 SKAdNetwork ID 및 관련된 모든 정보를 포함해야한다.</td></tr><tr><td>5</td><td>광고주 App은 registerAppForAdNetworkAttribution()를 통해 SKAdNetwork 사용자로 등록해야 한다.</td></tr><tr><td>6</td><td>DSP는 SKAdNetwork를 통해 설치 데이터를 제공 받을 수 있다.</td></tr></tbody></table>

#### **광고요청 추가내용 (SKAdNetwork)**

> BidRequest / imp / banner / ext / skadn

{% hint style="info" %}
해당 Object를 사용하기 위해서는 우선적으로 아래 사항들이 준비되어야 합니다.
{% endhint %}

<table data-header-hidden><thead><tr><th width="80">1</th><th>DSP에서 제공하는 SKAdNetwork ID가 퍼블리셔의 info.plist에 등록되어 있어야 한다.</th></tr></thead><tbody><tr><td>1</td><td>DSP에서 제공하는 SKAdNetwork ID가 퍼블리셔의 info.plist에 등록되어 있어야 한다.</td></tr><tr><td>2</td><td>사용자 기기의 운영체제가 iOS14 혹은 그 이상이어야 한다.</td></tr><tr><td>3</td><td>SKAdNetwork를 지원하는 버전의 SDK를 설치해야한다.</td></tr><tr><td>4</td><td>DSP는 CJ 메조미디어의 Bid Request 규약을 준수해야한다.</td></tr></tbody></table>

<table><thead><tr><th width="128">필드</th><th width="83">유형</th><th width="59">필수</th><th>설명</th><th>예</th></tr></thead><tbody><tr><td>version</td><td>string</td><td>Y</td><td>사용하는 SKadNetwork 버전. “2.0” 혹은 그 이상.</td><td>“version”:”2.0”</td></tr><tr><td>sourceapp</td><td>string</td><td>Y</td><td>Apple App 스토어에 등록된 퍼블리셔 App ID.<br>‘BidRequest.app.bundle’ 과 매칭</td><td>“sourceapp”:”000000000”</td></tr><tr><td>skadnetids</td><td>string</td><td>Y</td><td>퍼블리셔 App 내 info.plist에 입력된 SKAdNetwork IDs</td><td>“skadnetids”:[“feyaarzu9v.skadnetwork”]</td></tr></tbody></table>

#### **SKAdNetwork 광고 요청 예제**

{% code lineNumbers="true" %}

```json
{
	"imp":[{
        "ext": {
          "skadn": {
            "version": "2.0",
			"sourceapp": "000000000",
			"skadnetids": ["feyaarzu9v.skadnetwork", "8sRFag4vVC.skadnetwork"]
			}
			}
		}]
}
```

{% endcode %}

#### **광고응답 추가내용 (SKAdNetwork)**

> BidResponse / imp / banner / ext / skadn

<table><thead><tr><th width="139">필드</th><th width="82">유형</th><th width="63">필수</th><th width="240">설명</th><th>예</th></tr></thead><tbody><tr><td>version</td><td>string</td><td>Y</td><td>사용하는 SKadNetwork 버전. “2.0” 혹은 그 이상.</td><td>“version”:”2.0”</td></tr><tr><td>network</td><td>string</td><td>Y</td><td>광고 네트워크 식별자.<br>Request에 포함된 skadnetids와 최소 한 개는 매칭되어야 함</td><td>“network”:[“feyaarzu9v.skadnetwork”]</td></tr><tr><td>campaign</td><td>string</td><td>Y</td><td>Apple의 규격에 맞는 캠페인 ID.<br>1과 100 사이의 정수를 이용해서 표현해야함</td><td>“campaign”:”45”</td></tr><tr><td>itunesitem</td><td>string</td><td>Y</td><td>Apple App 스토어에 등록된 광고주 App ID. ‘Bidresponse.bid.bundle’과 매칭</td><td>“itunesitem”:”123456789”</td></tr><tr><td>nonce</td><td>string</td><td>Y</td><td>개별 광고 response의 유니크 ID</td><td>“nonce”:”123b1a78-b5ef-98ad-1234-ab-c4effa00b8”</td></tr><tr><td>sourceapp</td><td>string</td><td>Y</td><td>Apple App 스토어에 등록된 퍼블리셔 App ID.<br>‘BidRequest.imp.ext.skad.sourceapp’ 과 매칭</td><td>“sourceapp”:”000000000”</td></tr><tr><td>timestamp</td><td>string</td><td>Y</td><td>Unix time을 string 값으로 전달</td><td>“timestamp”:”1234567890”</td></tr><tr><td>signature</td><td>string</td><td>Y</td><td>Apple에서 제공하는 SKAdNetwork sigature 값</td><td>“signature”:”ABCDEFGHijkl-lmb…”</td></tr></tbody></table>

#### **SKAdNetwork 광고 응답 예제**

{% code lineNumbers="true" %}

```json
{
	"seatbid": [{
		"bid": [{
			"ext": {
				"skadn": {
					"version": "2.0",
					"network": "feyaarzu9v.skadnetwork ",
					"campaign": "45",
					"itunesitem": "123456789",
					"nonce": "123b1a78-b5ef-98ad-1234-ab-c4effa00b8",
					"sourceapp": "000000000",
					"timestamp": "1234567890",
					"signature": "ABCDEFGHijkl-lmbKBSE8QnhLTIHZZZWCFgZpRqRxHss65KoFAiAJgJKjdrWdkLUOCCjuEx2RmFS7daRzSVZRVZ8RyMyUXg"
				}
			}
		}]
	}]
}
```

{% endcode %}
