# 비디오 광고

## 1. **REQUEST**

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

CJ 메조미디어 DSP 는 HTTP POST 방식으로 아래 정의된 객체를 JSON 형태로 구성한 뒤, 위의 URL 을 POST 방식으로 호출합니다.\
요청 객체 정의는 [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="161">필드</th><th width="133">유형</th><th width="59">필수</th><th>설명</th></tr></thead><tbody><tr><td>id</td><td>string</td><td>Y</td><td>요청 유니크 아이디</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="193">필드</th><th width="91">유형</th><th width="75">필수</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 / video

<table><thead><tr><th width="166">필드</th><th width="136">유형</th><th width="69">필수</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: Linear / In-Stream 2: Non-Linear / Overlay</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>표준 항목 외에 필요한 정보를 전달합니다.<br>(ex, rewarded)</td></tr></tbody></table>

### **Video / ext**

> imp / video / ext

<table><thead><tr><th width="128">Field</th><th width="103">Type</th><th width="184">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="181">필드</th><th width="139">유형</th><th width="93">필수</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](https://docs.meba.kr/s-plus/api/dsp/delivery/video/#video_app) / publisher

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

### **Device**

<table><thead><tr><th width="127">필드</th><th width="114">유형</th><th width="76">필수</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>

{% hint style="danger" %}

* UA(User Agent)의 경우, AD Exchange 거래를 위한 조건으로 <mark style="color:red;">**반드시 필수 제공**</mark>해주셔야 합니다.
* IP의 경우, <mark style="color:red;">**Private IP(가상IP)가 아닌 Public IP 기준으로 전달**</mark>주셔야 합니다.\
  공유기, 회사 내부망에 할당된 IP가 그대로 전달 될 경우 광고 거래가 제한적일 수 있습니다.
  {% endhint %}

### **User**

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

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

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

{% code lineNumbers="true" %}

```json
{
   "id": "cdc-7c6d-4029-dcd|1337",
   "at": 0,
   "tmax": 250,
   "imp": [
      {
         "id": "150226007700",
         "bidfloorcur": "KRW",
         "bidfloor": 0,
         "secure": 0,
         "video": {
            "mimes": [
               "video\\/mp4"
            ],
            "w": 1080,
            "h": 1920,
            "minduration": 5,
            "maxduration": 30,
            "protocols": [
               3
            ],
            "startdelay": 0,
            "linearity": 1,
            "delivery": [
               2
            ],
            "ext": {
               "rewarded": 1
            }
         },
         "instl": 0
      }
   ],
   "app": {
      "id": "test-pub-app-id",
      "name": "test-pub-app-name",
      "bundle": "com.mezzo.co.kr ",
      "storeurl": "https://itunes.apple.com/us/app/id1234567?mt=8",
      "cat": [
         "IAB1"
      ],
      "publisher": {
         "id": "test-pub-app-id",
         "name": "test-pub-app-name",
         "cat": [
            "IAB1"
         ]
      }
   },
   "device": {
      "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H141",
      "dnt": 0,
      "ip": "192.168.1.1",
      "model": "iPhone 7,2",
      "os": "iOS",
      "osv": "8.0",
      "js": 1,
      "ifa": "test-ifa-gaid"
   },
   "user": {
      "id": "923123"
   },
   "ext": {
   }
}
```

{% endcode %}

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

{% code lineNumbers="true" %}

```json
{
   "id": "cdc-7c6d-4029-dcd|1337",
   "at": 0,
   "tmax": 250,
   "imp": [
      {
         "id": "150226007700",
         "bidfloorcur": "KRW",
         "bidfloor": 0,
         "secure": 0,
         "video": {
            "mimes": [
               "video\\/mp4"
            ],
            "w": 1080,
            "h": 1920,
            "minduration": 5,
            "maxduration": 30,
            "protocols": [
               3
            ],
            "startdelay": 0,
            "linearity": 1,
            "delivery": [
               2
            ],
            "ext": {
               "rewarded": 1
            }
         },
         "instl": 0
      }
   ],
   "site": {
      "id": "test-pub-app-id",
      "domain": "test-pub-web-domain",
      "ref": " test-pub-web-ref",
      "cat": [
         "IAB1"
      ],
      "publisher": {
         "id": "test-pub-app-id",
         "name": "test-pub-app-name",
         "cat": [
            "IAB1"
         ]
      }
  },
  "device": {
      "ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H141",
      "ip": "192.168.1.1"
  },
  "user": {
      "id": "923123"
  },
  "ext": {
      "price_type": 1,
      "tracking_type": 0
  }
}
```

{% endcode %}

## **2. RESPONSE**

{% hint style="info" %}
SSP :arrow\_right: DSP
{% 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" %}
&#x20;JSON 형식의 응답 객체입니다.
{% endhint %}

<table><thead><tr><th>필드</th><th>유형</th><th width="116">필수</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</td><td>Y</td><td>입찰시 사용할 통화. 예) 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>필드</th><th>유형</th><th width="97">필수</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>Y</td><td>노출 URL</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="#ext"><code>ext</code></a> 객체를 참고하십시오.</td></tr></tbody></table>

### **Ext**

<table><thead><tr><th width="132">필드</th><th width="92">유형</th><th width="76">필수</th><th>설명</th></tr></thead><tbody><tr><td>clickurl</td><td>string</td><td>Y</td><td>클릭 트래킹 URL</td></tr><tr><td>viewable</td><td>string</td><td>Y</td><td>광고 영역이 20% 이상 노출되면서 2초 이상 유지된 경우에 대한 트래킹 URL</td></tr><tr><td>breakaway</td><td>string</td><td>Y</td><td>광고 재생이 완료되지 않고 이탈한 이벤트에 대한 트래킹 URL.</td></tr></tbody></table>

{% hint style="warning" %}
breakaway URL 에 {m\_sec} 이 포함된 경우, {m\_sec} 을 광고 재생 시간으로 치환하여 URL 호출을 합니다.\
예를 들어 breakaway 값을 <http://breakaway.tracking.com/tracking.do?time={m\\_sec}> 지정했고, 20초 재생 후 이탈 한 경우, <http://breakaway.tracking.com/tracking.do?time=20> 을 호출합니다.
{% endhint %}

### **Adm**

{% hint style="info" %}
XML 로 정의되는 객체입니다.\
객체 정의는 [VAST 3.0](https://www.iab.com/wp-content/uploads/2015/06/VASTv3_0.pdf) 규격을 따릅니다.
{% endhint %}

<table><thead><tr><th>요소 / 속성</th><th width="192">유형</th><th width="81">필수</th><th>설명</th></tr></thead><tbody><tr><td>VAST</td><td>element</td><td>Y</td><td><a href="#vast"><code>VAST</code></a> 정의를 참고하십시오.</td></tr></tbody></table>

### **VAST**

> adm / VAST

<table><thead><tr><th width="125">요소 / 속성</th><th width="169">유형</th><th width="68">필수</th><th>설명</th></tr></thead><tbody><tr><td>version</td><td>integer (속성)</td><td>Y</td><td>VAST 규약 버전. 3.0 인 경우, 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 / Ad

<table><thead><tr><th>요소 / 속성</th><th width="193">유형</th><th width="67">필수</th><th>설명</th></tr></thead><tbody><tr><td>id</td><td>integer (속성)</td><td>N</td><td>광고 ID</td></tr><tr><td>sequence</td><td>integer (속성)</td><td>N</td><td>광고의 sequence 번호</td></tr><tr><td>Inline</td><td>element</td><td>Y</td><td><a href="#inline"><code>Inline</code></a> 정의를 참고하십시오.</td></tr></tbody></table>

### **Inline**

> adm / Ad / Inline

<table><thead><tr><th width="153">요소 / 속성</th><th width="156">유형</th><th width="70">필수</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 / Ad / Inline / AdSystem

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

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

### **Extensions**

> adm / Ad / Inline / Extensions

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

### **Creative**

> adm / Ad / Inline / Creatives / Creative

<table><thead><tr><th>요소 / 속성</th><th width="184">유형</th><th width="68">필수</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 / Ad / Inline / Creatives / Creative / Linear

<table><thead><tr><th width="171">요소 / 속성</th><th width="146">유형</th><th width="62">필수</th><th>설명</th></tr></thead><tbody><tr><td>Duration</td><td>string</td><td>N</td><td>영상 길이 / 재생 시간. 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 / Ad / Inline / Creatives / Creative / Linear / TrackingEvents / Tracking

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

<table><thead><tr><th width="128">요소 / 속성</th><th width="142">유형</th><th width="91">필수</th><th>설명</th></tr></thead><tbody><tr><td>event</td><td>string (속성)</td><td>Y</td><td>이벤트 이름을 지정합니다. 예) 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="196">이벤트 값</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" %}
(이벤트 값과 offset 값이 같은) 동일한 이벤트에 서로 다른 트래킹 URL 을 지정할 수 있습니다.
{% endhint %}

### **VideoClicks**

> adm / Ad / Inline / Creative / Linear / VideoClicks

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

<table><thead><tr><th>요소 / 속성</th><th>유형</th><th width="74">필수</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 / Ad / Inline / Creatives / Creative / Linear / MediaFiles / MediaFile

<table><thead><tr><th width="129">요소 / 속성</th><th width="129">유형</th><th width="73">필수</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": "http://abc.com/ad_tracking.mezzo/?e_request_type=imps_tracking",
               "adomain": "http: //adver.co.kr",
               "cid": "2234",
               "crid": "2234",
               "cat": [
                  "IAB1"
               ],
               "ext": {
                  "clickurl": "http://abc.com/ad_tracking.mezzo/?e_request_type=click",
                  "viewable": "http://abc.com/ad_tracking.mezzo/?e_request_type=viewable",
                  "breakaway": "http://abc.com/ad_tracking.mezzo/?e_request_type=breakaway&sec={m_sec}"
               }
            }
         ]
      }
   ]
}

```

{% endcode %}

#### **Adm 예제**

{% code lineNumbers="true" %}

```xml
<?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 이상)**

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

<table data-header-hidden><thead><tr><th width="76"></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="76">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="139">필드</th><th width="93">유형</th><th width="82">필수</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="134">필드</th><th width="99">유형</th><th width="67">필수</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>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 %}


---

# 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://docs.targetpick.io/for-ssp/video.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.
