> For the complete documentation index, see [llms.txt](https://docs.targetpick.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.targetpick.io/for-ssp/video.md).

# 비디오 광고

## 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**

| 필드     | 유형           | 필수 | 설명                                               |
| ------ | ------------ | -- | ------------------------------------------------ |
| id     | string       | Y  | 요청 유니크 아이디                                       |
| at     | integer      | Y  | 0 : fixed price, 1: first price, 2: second price |
| tmax   | integer      | Y  | 최대허용시간 (ms).                                     |
| imp    | object array | Y  | [`imp`](#imp) 객체를 참고하십시오.                        |
| app    | object       | Y  | [`app`](#app) 객체를 참고하십시오.                        |
| device | object       | Y  | [`device`](#device) 객체를 참고하십시오.                  |
| user   | object       | Y  | [`user`](#user) 객체를 참고하십시오.                      |
| bcat   | string array | N  | IAB 카테고리 기준으로 광고주 카테고리를 차단합니다.                   |
| badv   | string array | N  | 광고주의 도메인을 차단합니다.                                 |
| bapp   | string array | N  | App의 번들이나 패키지명을 차단합니다.                           |
| ext    | object       | Y  | [`ext`](#ext) 객체를 참고하십시오.                        |

### **Imp**

| 필드                | 유형      | 필수 | 설명                                                                                                                        |
| ----------------- | ------- | -- | ------------------------------------------------------------------------------------------------------------------------- |
| id                | string  | Y  | 노출에 대한 유니크 아이디                                                                                                            |
| bidfloor          | float   | Y  | 입찰로 인정받을 수 있는 최소 가격. 예) 4.12                                                                                              |
| bidfloorcur       | string  | Y  | 통화, 예) ‘KRW’                                                                                                              |
| secure            | integer | Y  | 0 : http, 1 : https                                                                                                       |
| video             | object  | Y  | [`video`](#video) 객체를 참고하십시오.                                                                                             |
| instl             | integer | Y  | <p>전면광고 여부를 전달합니다. (default: 0)</p><ul><li>1: the ad is interstitial or full screen</li><li>0: not interstitial</li></ul> |
| displaymanager    | string  | Y  | SSP 플랫폼명 또는 SDK명을 의미합니다.                                                                                                  |
| displaymanagerver | string  | Y  | SSP 플랫폼 또는 SDK 버전을 의미합니다.                                                                                                 |

### **Video**

> imp / video

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

### **Video / ext**

> imp / video / ext

| Field    | Type    | Required | Description                                                                           |
| -------- | ------- | -------- | ------------------------------------------------------------------------------------- |
| rewarded | integer | N        | <p>Reward 광고 여부를 전달합니다.</p><ul><li>0: no(non-reward)</li><li>1: yes(reward)</li></ul> |

### **App**

| 필드        | 유형           | 필수 | 설명                                    |
| --------- | ------------ | -- | ------------------------------------- |
| id        | string       | Y  | 퍼블리셔 ID                               |
| name      | string       | N  | 애플리케이션 이름                             |
| bundle    | string       | Y  | 번들 이름, 패키지 이름                         |
| storeurl  | string       | N  | 앱스토어 URL                              |
| cat       | string array | N  | 카테고리                                  |
| publisher | object       | Y  | [`publisher`](#publisher) 객체를 참고하십시오. |

### **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**

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

{% 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 |

### **요청 예제**

{% tabs %}
{% tab title="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 %}
{% endtab %}

{% tab title="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 %}
{% endtab %}
{% endtabs %}

##

## **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 %}

| 필드      | 유형           | 필수 | 설명                       |
| ------- | ------------ | -- | ------------------------ |
| id      | string       | Y  | Bid Request 의 ID         |
| bidid   | string       | Y  | Bid 오브젝트의 ID             |
| cur     | string       | Y  | 입찰시 사용할 통화. 예) KRW       |
| seatbid | object array | Y  | [`bid`](#bid) 객체 에 대한 배열 |

### **Bid**

| 필드      | 유형           | 필수 | 설명                        |
| ------- | ------------ | -- | ------------------------- |
| id      | string       | Y  | 입찰 정보를 관리하는 ID            |
| price   | float        | Y  | 입찰 가격                     |
| adm     | string (XML) | Y  | [`adm`](#adm) 객체를 참고하십시오. |
| nurl    | string       | Y  | 노출 URL                    |
| adomain | string array | Y  | 광고주 도메인                   |
| cid     | string       | Y  | 광고주 캠페인명 / id             |
| crid    | string       | Y  | 광고주 광고물명 / id             |
| cat     | string array | Y  | 카테고리                      |
| ext     | object       | Y  | [`ext`](#ext) 객체를 참고하십시오. |

### **Ext**

| 필드        | 유형     | 필수 | 설명                                           |
| --------- | ------ | -- | -------------------------------------------- |
| clickurl  | string | Y  | 클릭 트래킹 URL                                   |
| viewable  | string | Y  | 광고 영역이 20% 이상 노출되면서 2초 이상 유지된 경우에 대한 트래킹 URL |
| breakaway | string | Y  | 광고 재생이 완료되지 않고 이탈한 이벤트에 대한 트래킹 URL.          |

{% 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 %}

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

### **VAST**

> adm / VAST

| 필드      | 유형            | 필수 | 설명                               |
| ------- | ------------- | -- | -------------------------------- |
| version | integer (속성)  | Y  | VAST 규약 버전. 3.0 인 경우, 3으로 작성합니다. |
| Ad      | element array | Y  | [`Ad`](#a-d) 정의를 참고하십시오.         |

### **Ad**

> adm / Ad

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

### **Inline**

> adm / Ad / Inline

| 필드         | 유형            | 필수 | 설명                                      |
| ---------- | ------------- | -- | --------------------------------------- |
| AdSystem   | integer       | N  | [`AdSystem`](#a-dsystem) 정의를 참고하십시오.    |
| AdTitle    | integer       | N  | 광고 이름                                   |
| Extensions | element       | N  | [`Extensions`](#extensions) 정의를 참고하십시오. |
| Error      | element       | N  | Player 에러 발생시 호출할 트래킹 URL               |
| Impression | element       | Y  | 동영상 시작시 호출할 트래킹 URL                     |
| Creatives  | element array | Y  | [`Creative`](#creative) element 에 대한 배열 |

### **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

| 필드       | 유형      | 필수 | 설명                              |
| -------- | ------- | -- | ------------------------------- |
| id       | integer | N  | 광고 번호                           |
| sequence | integer | N  | 광고 시퀀스                          |
| Linear   | element | Y  | [`Linear`](#linear) 정의를 참고하십시오. |

### **Linear**

> adm / Ad / Inline / Creatives / Creative / Linear

| 필드             | 유형            | 필수 | 설명                                        |
| -------------- | ------------- | -- | ----------------------------------------- |
| Duration       | string        | N  | 영상 길이 / 재생 시간. hh:mm:ss 형태로 지정합니다.        |
| TrackingEvents | element array | N  | [`Tracking`](#tracking) element 대한 배열     |
| VideoClicks    | element       | N  | [`VideoClicks`](#videoclicks) 정의를 참고하십시오. |
| MediaFiles     | element array | Y  | [`MediaFile`](#mediafile) element 대한 배열   |

### **Tracking**

> adm / Ad / Inline / Creatives / Creative / Linear / TrackingEvents / Tracking

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

| 필드     | 유형            | 필수 | 설명                                               |
| ------ | ------------- | -- | ------------------------------------------------ |
| event  | string (속성)   | Y  | 이벤트 이름을 지정합니다. 예) start, firstQuartile, midpoint |
| offset | element array | N  | 이벤트 발생 조건이 되는 재생 시간을 지정합니다. hh:mm:ss 형태로 지정.     |

{% 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 %}

| 필드            | 유형     | 필수 | 설명                             |
| ------------- | ------ | -- | ------------------------------ |
| ClickThrough  | string | Y  | 광고 랜딩 페이지 URL                  |
| ClickTracking | string | N  | 광고 클릭 이벤트 트래킹 URL              |
| offset        | string | N  | 지정된 시간까지 재생된 이후에 광고 클릭이 가능합니다. |

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

### **MediaFile**

> adm / Ad / Inline / Creatives / Creative / Linear / MediaFiles / MediaFile

| 요소 / 속성  | 유형      | 필수 | 설명                                 |
| -------- | ------- | -- | ---------------------------------- |
| delivery | string  | N  | 동영상 소재 재생 방식. progressive 를 지원합니다. |
| type     | string  | N  | 동영상 소재 타입. 예) video/mp4            |
| width    | integer | N  | 동영상 소재의 폭                          |
| height   | integer | N  | 동영상 소재의 높이                         |
| bitrate  | integer | N  | 동영상 소재의 비트레이트                      |

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

### 응답 예제

{% tabs %}
{% tab title="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 %}
{% endtab %}

{% tab title="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 %}
{% endtab %}
{% endtabs %}

##

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

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

<table data-header-hidden><thead><tr><th width="85"></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="85">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>

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

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

> BidResponse / imp / banner / ext / skadn

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

### **예제**

{% tabs %}
{% tab title="Request" %}
{% code lineNumbers="true" %}

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

{% endcode %}
{% endtab %}

{% tab title="Response" %}
{% 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 %}
{% endtab %}
{% endtabs %}
