|
| 1 | +# About the IAB Tech Lab <a name="techlab"></a> |
| 2 | +The IAB Technology Laboratory is a nonprofit research and development consortium charged with producing and helping companies implement global industry technical standards and solutions. The goal of the Tech Lab is to reduce friction associated with the digital advertising and marketing supply chain while contributing to the safe growth of an industry. The IAB Tech Lab spearheads the development of technical standards, creates and maintains a code library to assist in rapid, cost-effective implementation of IAB standards, and establishes a test platform for companies to evaluate the compatibility of their technology solutions with IAB standards, which for 18 years have been the foundation for interoperability and profitable growth in the digital advertising supply chain. Further details about the IAB Technology Lab can be found at www.iabtechlab.com |
| 3 | +### IAB Tech Lab Lead: |
| 4 | + |
| 5 | +Hillary Slattery, Sr. Director of Product, IAB Tech Lab |
| 6 | + |
| 7 | +### License <a name="license"></a> |
| 8 | + |
| 9 | +This specification is licensed under a Creative Commons Attribution 3.0 License. To view a copy of this license, visit creativecommons.org/licenses/by/3.0/ http://creativecommons.org/licenses/by/3.0/ or write to Creative Commons, 171 Second Street, Suite 300, San Francisco, CA 94105, USA. |
| 10 | + |
| 11 | +### Disclaimer <a name="disclaimer"></a> |
| 12 | + |
| 13 | +THE STANDARDS, THE SPECIFICATIONS, THE MEASUREMENT GUIDELINES, AND ANY OTHER MATERIALS OR SERVICES PROVIDED TO OR USED BY YOU HEREUNDER (THE “PRODUCTS AND SERVICES”) ARE PROVIDED “AS IS” AND “AS AVAILABLE,” AND IAB TECHNOLOGY LABORATORY, INC. (“TECH LAB”) MAKES NO WARRANTY WITH RESPECT TO THE SAME AND HEREBY DISCLAIMS ANY AND ALL EXPRESS, IMPLIED, OR STATUTORY WARRANTIES, INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AVAILABILITY, ERROR-FREE OR UNINTERRUPTED OPERATION, AND ANY WARRANTIES ARISING FROM A COURSE OF DEALING, COURSE OF PERFORMANCE, OR USAGE OF TRADE. TO THE EXTENT THAT TECH LAB MAY NOT AS A MATTER OF APPLICABLE LAW DISCLAIM ANY IMPLIED WARRANTY, THE SCOPE AND DURATION OF SUCH WARRANTY WILL BE THE MINIMUM PERMITTED UNDER SUCH LAW. THE PRODUCTS AND SERVICES DO NOT CONSTITUTE BUSINESS OR LEGAL ADVICE. TECH LAB DOES NOT WARRANT THAT THE PRODUCTS AND SERVICES PROVIDED TO OR USED BY YOU HEREUNDER SHALL CAUSE YOU AND/OR YOUR PRODUCTS OR SERVICES TO BE IN COMPLIANCE WITH ANY APPLICABLE LAWS, REGULATIONS, OR SELF-REGULATORY FRAMEWORKS, AND YOU ARE SOLELY RESPONSIBLE FOR COMPLIANCE WITH THE SAME, INCLUDING, BUT NOT LIMITED TO, DATA PROTECTION LAWS, SUCH AS THE PERSONAL INFORMATION PROTECTION AND ELECTRONIC DOCUMENTS ACT (CANADA), THE DATA PROTECTION DIRECTIVE (EU), THE E-PRIVACY DIRECTIVE (EU), THE GENERAL DATA PROTECTION REGULATION (EU), AND THE E-PRIVACY REGULATION (EU) AS AND WHEN THEY BECOME EFFECTIVE. |
| 14 | + |
| 15 | +# Table of Contents |
| 16 | +- [About the IAB Tech Lab](#techlab) |
| 17 | +- [License](#license) |
| 18 | +- [Disclaimer](#disclaimer) |
| 19 | +- [Introduction](#intro) |
| 20 | +- [Concurrent Streams Request](#streamsrequest) |
| 21 | +- [Concurrent Streams Request](#streamsresponse) |
| 22 | + - [Object: StreamsData](#streamsdata) |
| 23 | + - [Object: MediaStreams](#mediastreams) |
| 24 | + - [Object: StreamCount](#streamcount) |
| 25 | + - [Object: Content](#content) |
| 26 | +- [Implementation Guidance](#impguide) |
| 27 | + - [General Information](#geninfo) |
| 28 | + - [Content Information](#contentinfo) |
| 29 | + - [json Examples](#json) |
| 30 | + |
| 31 | +# Introduction <a name="intro"></a> |
| 32 | +This is version 1.0 of the Concurrent Streams specification and every attempt will be made to make future versions backward compatible if possible. |
| 33 | + |
| 34 | +## Executive Summary |
| 35 | +Due to challenges of forecasting live inventory, and dynamic viewership changes that occur during the live event playout, advertising systems may be inappropriately scaled to process ad decision transactions, causing poor UX and lost revenue opportunities for DSPs, SSPs, pub ad servers, and publishers. |
| 36 | + |
| 37 | +This API aims to give a standard way for subscribers to ask for information on how many viewers are in a stream when a live event is occurring at the time of ping. |
| 38 | + |
| 39 | +## Business Problem |
| 40 | +SSAIs: Need a standard way to provide viewership signals to subscriber systems, so that they can receive ad decisions back in a timely, low-latency manner to improve user experience and minimize slate during a live event. |
| 41 | + |
| 42 | +Subscribers to the API on the sell side such as Publishers, Publisher Ad Servers, and/or SSPs need a way to understand near real time viewership data to ensure optimal monetization, avoid slate, and scale their capacity to be able to handle spikes in traffic. |
| 43 | + |
| 44 | +Subscribers on the buy side such as DSPs and advertisers need to adjust their infrastructure to manage QPS spikes during an event to ensure valuable inventory doesn’t get blocked due to hitting upper limits on QPS, ensure effective campaign pacing and adjust their bids appropriately. All of this will help advertisers increase advertising opportunities during live events they’re interested in. |
| 45 | + |
| 46 | + |
| 47 | +## Concurrent Streams Request <a name="streamsrequest"></a> |
| 48 | + |
| 49 | +| Attribute | Type | Required | Description | |
| 50 | +| --------- | ------ | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | |
| 51 | +| version | string | yes | E.g., 1.0.0 | |
| 52 | +| requestor | string | recommended | Authorized party requesting information from the endpoint. Not required if the endpoint allows anonymous requests. | |
| 53 | +| sdp | string | optional | Streams Data Provider. This is the content owner or distributor for which live viewership data is being requested. Recommended only when the endpoint provides data from multiple providers, and the requestor needs to filter to specific Streams Data Providerss. | |
| 54 | + |
| 55 | +## Concurrent Streams Response <a name="streamsresponse"></a> |
| 56 | + |
| 57 | +| Attribute | Type | Required | Description | |
| 58 | +| ------------ | ------------- | -------- | ---------------------------------------------------------- | |
| 59 | +| version | string | yes | E.g., 1.0.0 | |
| 60 | +| timestamp | integer | yes | Date/time of the snapshot (Unix timestamp in milliseconds) | |
| 61 | +| streamsdata | object, array | yes | Streams data requested by the caller | |
| 62 | + |
| 63 | +### Object: StreamsData <a name="streamsdata"></a> |
| 64 | + |
| 65 | +| Attribute | Type | Required | Description | |
| 66 | +| ------------ | ------------- | -------- | ------------------------------------------------------------------------------------ | |
| 67 | +| sdp | string | | Streams Data Provider | |
| 68 | +| mediastreams | object, array | yes | Snapshot of viewership data for live events. Each mediastream includes stream count. | |
| 69 | + |
| 70 | +### Object: MediaStreams <a name="mediastreams"></a> |
| 71 | + |
| 72 | +| Attribute | Type | Required | Description | |
| 73 | +| ---------- | ------------- | -------- | --------------------------------------- | |
| 74 | +| content | object | | See: Object: Content in AdCOM 1.0 | |
| 75 | +| eventstart | integer | yes | Event start time (Unix timestamp in ms) | |
| 76 | +| eventend | integer | yes | Event end time (Unix timestamp in ms) | |
| 77 | +| streamsdata | object, array | | Contains separate SSAI and CSAI metrics | |
| 78 | + |
| 79 | +### Object: StreamCount <a name="streamcount"></a> |
| 80 | + |
| 81 | +| Attribute | Type | Required | Description | |
| 82 | +| --------- | ------- | ----------- | ------------------------------------------------------------------------------ | |
| 83 | +| region | integer | | Region codes: 1 - N\_America\_East, 2 - N\_America\_West, etc. | |
| 84 | +| sstreams | integer | recommended | Concurrent SSAI streams. At least one of sstreams or cstreams must be present. | |
| 85 | +| cstreams | integer | yes | Concurrent CSAI streams. At least one of sstreams or cstreams must be present. | |
| 86 | + |
| 87 | +### Object: Content <a name="content"></a> |
| 88 | +Refer to [Object: Content from AdCOM 1.0](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/main/AdCOM%20v1.0%20FINAL.md#object--content-) for specific values. |
| 89 | + |
| 90 | + |
| 91 | +# Implementation Guidance <a name="impguide"></a> |
| 92 | + |
| 93 | +## General Information <a name="geninfo"></a> |
| 94 | +It is expected that some security model or authentication mechanism is in place prior to the API being called to ensure only authorized subscribers are able to request or receive the data. |
| 95 | + |
| 96 | +This API is decoupled from the Request/Response in OpenRTB. |
| 97 | + |
| 98 | +The region is expected to represent the endpoint traffic distribution across different geographic areas. Coarse granularity acceptable for MVP and is expected to drive system scaling in regional datacenters. E.g. US West Coast. |
| 99 | + |
| 100 | +SSAI includes SGAI. Streamers leveraging Server Guided Ad Insertion models should leverage ‘SSAI’ workflows. |
| 101 | + |
| 102 | +As a best practice, it is recommended that viewership values be representative of users at the live edge/timepoint. |
| 103 | + |
| 104 | +Requests will be coming from an API consumer to SSAI vendors on behalf of the Content Owner. |
| 105 | + |
| 106 | +When API is called, metadata will be returned for all live events the Subscriber has access to. |
| 107 | + |
| 108 | +Event name and/or ID is sharable with API subscribers at run time and/or event name is known to subscribers of the API <i>a priori</i> to the request for concurent streams |
| 109 | +App information is known <i>a priori</i> to the request |
| 110 | + |
| 111 | +Providers are expected to return information for all Live Events occurring at time of API request. |
| 112 | + |
| 113 | +## Content Information <a name="contentinfo"></a> |
| 114 | +The attributes under the <code>mediastream</code> object provide various options for providers to declare a live event, and so that consumers of this data can identify that event in other contexts |
| 115 | +A provider can sufficiently identify a specific live event with one or more of the optional attributes from the [<code>content</code> object](#content), each of which is paired with the required attributes of <code>eventstart</code> and <code>eventend</code>: |
| 116 | +- Content ID (E.g., global/persistent ID ABC123, or synthetic ID XYZ-456, either of which points to a specific NBA game) |
| 117 | +- Title (E.g., NBA Basketball: Lakers vs. Celtics) |
| 118 | +- Series (E.g., NBA Basketball) |
| 119 | +- Channel: (E.g., ESPN) |
| 120 | + |
| 121 | +It is strongly recommended that some identifier for the content in question is passed. This could correspond to the content owners Content Management System (CMS), and/or some other commercially available content identifier. Whatever content ID is provided, should be the same as the ID that is provided on the Bid Request. Additional information about the Content can be provided in the Extended Content IDs array. |
| 122 | + |
| 123 | + |
| 124 | +## json Examples <a name="json"></a> |
| 125 | + |
| 126 | +``` |
| 127 | +{ |
| 128 | + "version": "1.0.0", |
| 129 | + "timestamp": "1713366138", |
| 130 | + "streamsdata": [ |
| 131 | + { |
| 132 | + "sdp": "TV Network A", |
| 133 | + "mediastreams": [ |
| 134 | + { |
| 135 | + "content": { |
| 136 | + "id": "CMS123", |
| 137 | + "genres": [646], |
| 138 | + "gtax": 9, |
| 139 | + "contentrating": "PG-13", |
| 140 | + "channel": {"name": "Comedy Channel"}, |
| 141 | + "data": { |
| 142 | + "name": "vendorA.com", |
| 143 | + "cids": ["alpha", "beta", "gamma", "delta", "epsilon"] |
| 144 | + } |
| 145 | + }, |
| 146 | + "eventstart": "1713366132", |
| 147 | + "eventend": "1713378132", |
| 148 | + "streamcount": [ |
| 149 | + {"region": "1", "sstreams": "140000", "cstreams": "400000"}, |
| 150 | + {"region": "2", "sstreams": "100000", "cstreams": "20000"}, |
| 151 | + {"region": "3", "sstreams": "500000", "cstreams": "10000"} |
| 152 | + ] |
| 153 | + }, |
| 154 | + { |
| 155 | + "content": { |
| 156 | + "id": "CMS456", |
| 157 | + "genres": [162], |
| 158 | + "gtax": 9, |
| 159 | + "contentrating": "PG-13", |
| 160 | + "channel": {"name": "WXYZ Channel"}, |
| 161 | + "data": { |
| 162 | + "name": "vendorA.com", |
| 163 | + "cids": ["ayyy", "beee", "ceee", "deee", "eeee"] |
| 164 | + } |
| 165 | + }, |
| 166 | + "eventstart": "1713366132", |
| 167 | + "eventend": "1713378132", |
| 168 | + "streamcount": [ |
| 169 | + {"region": "1", "sstreams": "150000", "cstreams": "500000"}, |
| 170 | + {"region": "2", "sstreams": "130000", "cstreams": "23000"}, |
| 171 | + {"region": "3", "sstreams": "520000", "cstreams": "12000"} |
| 172 | + ] |
| 173 | + } |
| 174 | + ] |
| 175 | + }, |
| 176 | + { |
| 177 | + "sdp": "TV Network B", |
| 178 | + "mediastreams": [ |
| 179 | + { |
| 180 | + "content": { |
| 181 | + "id": "CMS789", |
| 182 | + "genres": [483], |
| 183 | + "gtax": 9, |
| 184 | + "contentrating": "PG", |
| 185 | + "channel": {"name": "Sports Now!"}, |
| 186 | + "data": { |
| 187 | + "name": "vendorA.com", |
| 188 | + "cids": ["zeta", "eta", "theta", "iota", "kappa"] |
| 189 | + } |
| 190 | + }, |
| 191 | + "eventstart": "1713366132", |
| 192 | + "eventend": "1713378132", |
| 193 | + "streamcount": [ |
| 194 | + {"region": "1", "sstreams": "140050", "cstreams": "400050"}, |
| 195 | + {"region": "2", "sstreams": "100060", "cstreams": "20060"}, |
| 196 | + {"region": "3", "sstreams": "500070", "cstreams": "10070"} |
| 197 | + ] |
| 198 | + }, |
| 199 | + { |
| 200 | + "content": { |
| 201 | + "id": "CMS101112", |
| 202 | + "genres": [483], |
| 203 | + "gtax": 9, |
| 204 | + "contentrating": "PG", |
| 205 | + "channel": {"name": "Sports 8 (The Ocho)"}, |
| 206 | + "data": { |
| 207 | + "name": "vendorA.com", |
| 208 | + "cids": ["efff", "geee", "aych", "aiii", "jayy"] |
| 209 | + } |
| 210 | + }, |
| 211 | + "eventstart": "1713366132", |
| 212 | + "eventend": "1713378132", |
| 213 | + "streamcount": [ |
| 214 | + {"region": "1", "sstreams": "150050", "cstreams": "500050"}, |
| 215 | + {"region": "2", "sstreams": "130060", "cstreams": "23060"}, |
| 216 | + {"region": "3", "sstreams": "520070", "cstreams": "12070"} |
| 217 | + ] |
| 218 | + } |
| 219 | + ] |
| 220 | + } |
| 221 | + ] |
| 222 | +} |
| 223 | +``` |
0 commit comments