> 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-dsp/video.md).

# 비디오 광고

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

| 필드     | 유형           | 필수 | 설명                                                                               |
| ------ | ------------ | -- | -------------------------------------------------------------------------------- |
| id     | string       | Y  | 요청 유니크 아이디                                                                       |
| cur    | string array | N  | <p>ISO-4217-alpha 경매에 사용할 수 있는 통화 입니다. <br>예: “KRW”</p>                          |
| test   | integer      | N  | 경매가 테스트 모드(1)건 실시간 모드(0)건, 테스트 경매에는 입찰할 수 없습니다                                   |
| at     | integer      | Y  | <ul><li>0 : fixed price</li><li>1: first price</li><li>2: second price</li></ul> |
| 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  | <ul><li>0: http</li><li>1: https</li></ul>                                                                                |
| 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`](#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: in stream</li><li>2: out stream</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  | 표준 항목 외에 필요한 정보를 전달합니다.(ex, rewarded)                                                                                  |

### **Video / ext**

> [`Imp`](#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`](#app) / publisher

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

### **Device**

| 필드    | 유형      | 필수 | 설명                                                                  |
| ----- | ------- | -- | ------------------------------------------------------------------- |
| adid  | string  | Y  | 디바이스의 ADID                                                          |
| make  | string  | Y  | <p>디바이스의 제조사<br>예) samsung</p>                                      |
| ua    | string  | Y  | 디바이스의 User Agent 정보                                                 |
| dnt   | integer | N  | <p>위치 추적 금지 활성화 여부. </p><ul><li>0: 추적 가능</li><li>1: 추적 금지</li></ul> |
| 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                                          |

### **User**

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

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

### **Ext**

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

| 필드          | 유형      | 필수 | 설명                                      |
| ----------- | ------- | -- | --------------------------------------- |
| Price\_type | integer | N  | <ul><li>0: CPM</li><li>2: CPC</li></ul> |

### **요청 예제**&#x20;

{% tabs %}
{% tab title="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": "test-pub-app-name",
      "product_attr": 4
    },
    "id": "805010_com.test.mezzo",
    "name": "test-pub-app-name",
    "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 %}
{% endtab %}

{% tab title="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": "test-pub-site-name",
      "domain": "com.test.mezzo",
      "product_attr": 4
    },
    "id": "805010_com.test.mezzo",
    "name": "test-pub-site-name",
    "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 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": {
    "limit_duration": 30,
    "price_type": 0
  }
}
```

{% endcode %}
{% endtab %}
{% endtabs %}

##

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

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

### **Bid**

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

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

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

### **Ad**

[`adm`](#adm) / Ad

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

### **Inline**

> [`ADM`](#adm) / [`Ad`](#a-d) / 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`](#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

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

### **Linear**

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

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

### **Tracking**

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

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

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

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

<table><thead><tr><th width="200">이벤트 값</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 %}

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

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

### **MediaFile**

> [`ADM`](#adm) / [`Ad`](#a-d) / [`Inline`](#inline) / Creatives / [`Creative`](#creative) /  [`Linear`](#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="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 %}
{% 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

해당 Object를 사용하기 위해서는 우선적으로 아래 사항들이 준비되어야 합니다.

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