From 934c24fd8297956ca3a48a22b56f095f6e19d2ac Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 13:23:36 +0100
Subject: [PATCH 01/64] Update 2.6.md
First test update, Key OOH contributors
---
2.6.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/2.6.md b/2.6.md
index 0fe147e..f79c0f1 100644
--- a/2.6.md
+++ b/2.6.md
@@ -6,7 +6,7 @@ The IAB Technology Laboratory is a nonprofit research and development consortium
### Significant Contributors to the 2.6 version specification
-Stanislav Belov, Software Engineer, Google; Allen Dove, CTO, Magnite; Steven Katz, Senior Principal Architect, Yahoo!; Curt Larson, Chief Product Officer, Sharethrough; Dr. Neal Richter, Director of Science, Amazon Advertising; Jud Spencer, Principal Software Engineer, The Trade Desk; Ian Trider, VP, RTB Platform Operations, Basis Technologies; Rob Hazan, Sr. Director Product Management, Index Exchange; James Wilhite, VP Product, Publica; Jean-Luc Wasmer, VP Partnership Operations, Triton Digital; Sam Mansour, Principle Product Manager, Oracle; Scott Kay, Engineering Manager, Xandr; Emma Fenlon, Sr. Manager, Exchange Quality, Yahoo!; Liam Whiteside, Head of Ad Technology, Global; Don Marti, VP Ecosystem Innovation, Café Media; Aron Schatz, Director Product Management, Double Verify; Jake Jolly, Product Manager, Google; Amit Shetty, VP Product, Pixalate
+Stanislav Belov, Software Engineer, Google; Allen Dove, CTO, Magnite; Steven Katz, Senior Principal Architect, Yahoo!; Curt Larson, Chief Product Officer, Sharethrough; Dr. Neal Richter, Director of Science, Amazon Advertising; Jud Spencer, Principal Software Engineer, The Trade Desk; Ian Trider, VP, RTB Platform Operations, Basis Technologies; Rob Hazan, Sr. Director Product Management, Index Exchange; James Wilhite, VP Product, Publica; Jean-Luc Wasmer, VP Partnership Operations, Triton Digital; Sam Mansour, Principle Product Manager, Oracle; Scott Kay, Engineering Manager, Xandr; Emma Fenlon, Sr. Manager, Exchange Quality, Yahoo!; Liam Whiteside, Head of Ad Technology, Global; Don Marti, VP Ecosystem Innovation, Café Media; Aron Schatz, Director Product Management, Double Verify; Jake Jolly, Product Manager, Google; Amit Shetty, VP Product, Pixalate; Tim Harvey, Founder, Knitting Media; Jason Shao, CTO, Place Exchange; Liam Whiteside, Head Of Ad Technology, Global; Chris Coupland, Platform Operations Manager, Centro;
### IAB Tech Lab Lead:
From 3d1c5fa518b41f40bc8696871fe0d3f83a165d1a Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 14:11:51 +0100
Subject: [PATCH 02/64] imp.qty
qty added to the imp object
---
2.6.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/2.6.md b/2.6.md
index f79c0f1..bf2c9b4 100644
--- a/2.6.md
+++ b/2.6.md
@@ -972,6 +972,11 @@ Recommended for video and/or apps.
integer |
Advisory as to the number of seconds that may elapse between the auction and the actual impression. |
+
+ qty |
+ object |
+ A means of passing a multiplier in the bid request, representing the total quantity of impressions |
+
ext |
object |
@@ -979,6 +984,7 @@ Recommended for video and/or apps.
+
From 101c3c897d81754241124531396cd0e9db869b1e Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 14:14:47 +0100
Subject: [PATCH 03/64] imp.qty
text update
---
2.6.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/2.6.md b/2.6.md
index bf2c9b4..746b990 100644
--- a/2.6.md
+++ b/2.6.md
@@ -975,7 +975,7 @@ Recommended for video and/or apps.
qty |
object |
- A means of passing a multiplier in the bid request, representing the total quantity of impressions |
+ A means of passing a multiplier in the bid request, representing the total quantity of impressions for adverts that display to more than one person |
ext |
From d5a6affa0360366e8102fa1877fdee29391d72d4 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 14:29:28 +0100
Subject: [PATCH 04/64] Object Qty
V1
---
2.6.md | 31 ++++++++++++++++++++++++++++++-
1 file changed, 30 insertions(+), 1 deletion(-)
diff --git a/2.6.md b/2.6.md
index 746b990..31ef062 100644
--- a/2.6.md
+++ b/2.6.md
@@ -975,7 +975,7 @@ Recommended for video and/or apps.
qty |
object |
- A means of passing a multiplier in the bid request, representing the total quantity of impressions for adverts that display to more than one person |
+ A means of passing a multiplier in the bid request, representing the total quantity of impressions for adverts that display to more than one person. |
ext |
@@ -2801,6 +2801,35 @@ Further identification based on [User-Agent Client Hints](https://wicg.github.io
+### 3.2.30 - Object: Qty
+
+A programmatic impression is often referred to as a ‘spot’ in digital out-of-home and CTV, with an impression being a unique member of the audience viewing it. Therefore, a standard means of passing a multiplier in the bid request, representing the total quantity of impressions, is required. This object includes the impression multiplier, and describes the source of the multiplier value.
+
+
+
+ Attribute |
+ Type |
+ Description |
+
+
+ multiplier |
+ float; required |
+ The quantity of billable events which will be deemed to have occurred if this item is purchased. For example, a DOOH opportunity may be considered to be 14.2 impressions. Equivalent to qtyflt in OpenRTB 3.0. |
+
+
+ sourcetype |
+ integer; recommended |
+ The source type of the quantity measurement, ie. publisher. Refer to list ......... |
+
+
+ vendor |
+ string; required if sourcetype is present and type = 1 |
+ The top level business domain name of the measurement vendor providing the quantity measurement. |
+
+
+
+
+
# 4. Bid Response Specification
From 7b18e5cd235e56b604897f4eb9b7aae06382b03e Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 14:47:47 +0100
Subject: [PATCH 05/64] obj qty link
---
2.6.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/2.6.md b/2.6.md
index 31ef062..42a06e8 100644
--- a/2.6.md
+++ b/2.6.md
@@ -2801,7 +2801,7 @@ Further identification based on [User-Agent Client Hints](https://wicg.github.io
-### 3.2.30 - Object: Qty
+### 3.2.31 - Object: Qty
A programmatic impression is often referred to as a ‘spot’ in digital out-of-home and CTV, with an impression being a unique member of the audience viewing it. Therefore, a standard means of passing a multiplier in the bid request, representing the total quantity of impressions, is required. This object includes the impression multiplier, and describes the source of the multiplier value.
@@ -2819,7 +2819,7 @@ A programmatic impression is often referred to as a ‘spot’ in digital out-of
sourcetype |
integer; recommended |
- The source type of the quantity measurement, ie. publisher. Refer to list ......... |
+ The source type of the quantity measurement, ie. publisher. Refer to the list [Multiplier Measurement Source Types](https://github.com/knittingmedia/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md#list-multiplier-measurement-source-types-) |
vendor |
From 231b3577898816cf6bc5275363ff06f2085fc3bd Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 14:51:18 +0100
Subject: [PATCH 06/64] index update
---
2.6.md | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/2.6.md b/2.6.md
index 42a06e8..5a6c79b 100644
--- a/2.6.md
+++ b/2.6.md
@@ -132,6 +132,8 @@ THE STANDARDS, THE SPECIFICATIONS, THE MEASUREMENT GUIDELINES, AND ANY OTHER MAT
- [3.2.30 - Object: BrandVersion](#objectbrandversion)
+ - [3.2.31 - Object: Qty](#objectqty)
+
## [4. Bid Response Specification](#bidresponsespec)
- [4.1 - Object Model](#4.2objectmodel)
@@ -2819,7 +2821,7 @@ A programmatic impression is often referred to as a ‘spot’ in digital out-of
sourcetype |
integer; recommended |
- The source type of the quantity measurement, ie. publisher. Refer to the list [Multiplier Measurement Source Types](https://github.com/knittingmedia/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md#list-multiplier-measurement-source-types-) |
+ The source type of the quantity measurement, ie. publisher. Refer to the listt (https://github.com/knittingmedia/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md#list-multiplier-measurement-source-types-) |
vendor |
From 69d313007321e5096857bd108d0c2152b6144569 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 14:52:04 +0100
Subject: [PATCH 07/64] link tidy
---
2.6.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/2.6.md b/2.6.md
index 5a6c79b..ea84697 100644
--- a/2.6.md
+++ b/2.6.md
@@ -2821,7 +2821,7 @@ A programmatic impression is often referred to as a ‘spot’ in digital out-of
sourcetype |
integer; recommended |
- The source type of the quantity measurement, ie. publisher. Refer to the listt (https://github.com/knittingmedia/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md#list-multiplier-measurement-source-types-) |
+ The source type of the quantity measurement, ie. publisher. Refer to the list https://github.com/knittingmedia/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md#list-multiplier-measurement-source-types- |
vendor |
From f2b65766604f1a433b85ab9a7e5ee46ecc160d30 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 15:00:15 +0100
Subject: [PATCH 08/64] imp:etime
---
2.6.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/2.6.md b/2.6.md
index ea84697..565a9e3 100644
--- a/2.6.md
+++ b/2.6.md
@@ -974,6 +974,11 @@ Recommended for video and/or apps.
integer |
Advisory as to the number of seconds that may elapse between the auction and the actual impression. |
+
+ etime |
+ integer |
+ The exposure time in seconds per view that the creative will be displayed before refreshing to the next creative. |
+
qty |
object |
From a69d0d19a052bcaea14cfcbe63497373321e2434 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 15:16:43 +0100
Subject: [PATCH 09/64] DOOH object
---
2.6.md | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/2.6.md b/2.6.md
index 565a9e3..58233e7 100644
--- a/2.6.md
+++ b/2.6.md
@@ -134,6 +134,8 @@ THE STANDARDS, THE SPECIFICATIONS, THE MEASUREMENT GUIDELINES, AND ANY OTHER MAT
- [3.2.31 - Object: Qty](#objectqty)
+ - [3.2.31 - Object: DOOH](#objectdooh)
+
## [4. Bid Response Specification](#bidresponsespec)
- [4.1 - Object Model](#4.2objectmodel)
@@ -2838,6 +2840,22 @@ A programmatic impression is often referred to as a ‘spot’ in digital out-of
+### 3.2.32 - Object: DOOH
+
+This object should be included if the ad supported content is a Digital Out-Of-Home screen. A bid request with a DOOH object must not contain a site or app object. At a minimum, it is useful to provide id and/or venuetypeid, but this is not strictly required.
+
+| id | string; recommended | Exchange provided id for a placement or logical grouping of placements. |
+| ------------ | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| name | string | Name of the dooh placement. |
+| venuetype | string, array | [The type of out-of-home venue. The taxonomy to be used is defined by the venuetax field. If no venuetax field is supplied, OpenOOH Venue Taxonomy is assumed.](https://github.com/openooh/venue-taxonomy/blob/main/specification-1.0.md) |
+| venuetypetax | integer; default 1 | The venue taxonomy in use. Refer to list 8.3.1 |
+| publisher | object | Details about the publisher of the placement. |
+| domain | string | Domain of the inventory (ads.txt) owner (e.g., “mysite.foo.com”) |
+| keywords | string | Comma separated list of keywords about the DOOH placement. |
+| content | object | Details about the Content (Section x.x.x) within the DOOH placement. |
+| ext | object | Placeholder for exchange-specific extensions to OpenRTB. |
+
+
# 4. Bid Response Specification
RTB responses contain bids that reference specific impressions within a bid request. Bids are in essence an offer to buy. The bid response consists of the top-level bid response object and optional objects that depict the specific bids. An empty HTTP response constitutes a no-bid and is in fact the most bandwidth friendly form of this signal although returning a response with a “no-bid reason” is encouraged. A malformed response or a response that contains no actual bids will also be interpreted as no-bid.
From 4d882f45c7004aa8124604117107d0d870d9d207 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 15:17:12 +0100
Subject: [PATCH 10/64] 3.2.32 - Object: DOOH
---
2.6.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/2.6.md b/2.6.md
index 58233e7..e89713b 100644
--- a/2.6.md
+++ b/2.6.md
@@ -134,7 +134,7 @@ THE STANDARDS, THE SPECIFICATIONS, THE MEASUREMENT GUIDELINES, AND ANY OTHER MAT
- [3.2.31 - Object: Qty](#objectqty)
- - [3.2.31 - Object: DOOH](#objectdooh)
+ - [3.2.32 - Object: DOOH](#objectdooh)
## [4. Bid Response Specification](#bidresponsespec)
From 3438a018a152e9bda83428f1d1fb1a5f011a69e8 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 15:19:29 +0100
Subject: [PATCH 11/64] dooh table fix
---
2.6.md | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/2.6.md b/2.6.md
index e89713b..c89ef38 100644
--- a/2.6.md
+++ b/2.6.md
@@ -2844,16 +2844,17 @@ A programmatic impression is often referred to as a ‘spot’ in digital out-of
This object should be included if the ad supported content is a Digital Out-Of-Home screen. A bid request with a DOOH object must not contain a site or app object. At a minimum, it is useful to provide id and/or venuetypeid, but this is not strictly required.
-| id | string; recommended | Exchange provided id for a placement or logical grouping of placements. |
-| ------------ | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| name | string | Name of the dooh placement. |
-| venuetype | string, array | [The type of out-of-home venue. The taxonomy to be used is defined by the venuetax field. If no venuetax field is supplied, OpenOOH Venue Taxonomy is assumed.](https://github.com/openooh/venue-taxonomy/blob/main/specification-1.0.md) |
-| venuetypetax | integer; default 1 | The venue taxonomy in use. Refer to list 8.3.1 |
-| publisher | object | Details about the publisher of the placement. |
-| domain | string | Domain of the inventory (ads.txt) owner (e.g., “mysite.foo.com”) |
-| keywords | string | Comma separated list of keywords about the DOOH placement. |
-| content | object | Details about the Content (Section x.x.x) within the DOOH placement. |
-| ext | object | Placeholder for exchange-specific extensions to OpenRTB. |
+|Attribute |Type |Description |
+|------------|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+|id |string; recommended|Exchange provided id for a placement or logical grouping of placements. |
+|name |string |Name of the dooh placement. |
+|venuetype |string, array |[The type of out-of-home venue. The taxonomy to be used is defined by the venuetax field. If no venuetax field is supplied, OpenOOH Venue Taxonomy is assumed.](https://github.com/openooh/venue-taxonomy/blob/main/specification-1.0.md)|
+|venuetypetax|integer; default 1 |The venue taxonomy in use. Refer to list 8.3.1 |
+|publisher |object |Details about the publisher of the placement. |
+|domain |string |Domain of the inventory (ads.txt) owner (e.g., “mysite.foo.com”) |
+|keywords |string |Comma separated list of keywords about the DOOH placement. |
+|content |object |Details about the Content (Section x.x.x) within the DOOH placement. |
+|ext |object |Placeholder for exchange-specific extensions to OpenRTB. |
# 4. Bid Response Specification
From bd839f3f0184994be6c785bd414ee46950cf64aa Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 15:33:40 +0100
Subject: [PATCH 12/64] dooh object link tidy
---
2.6.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/2.6.md b/2.6.md
index c89ef38..a202e5e 100644
--- a/2.6.md
+++ b/2.6.md
@@ -2848,8 +2848,8 @@ This object should be included if the ad supported content is a Digital Out-Of-H
|------------|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|id |string; recommended|Exchange provided id for a placement or logical grouping of placements. |
|name |string |Name of the dooh placement. |
-|venuetype |string, array |[The type of out-of-home venue. The taxonomy to be used is defined by the venuetax field. If no venuetax field is supplied, OpenOOH Venue Taxonomy is assumed.](https://github.com/openooh/venue-taxonomy/blob/main/specification-1.0.md)|
-|venuetypetax|integer; default 1 |The venue taxonomy in use. Refer to list 8.3.1 |
+|venuetype |string, array |The type of out-of-home venue. The taxonomy to be used is defined by the venuetax field. If no venuetax field is supplied, The OpenOOH Venue Taxonomy is assumed. https://github.com/openooh/venue-taxonomy/blob/main/specification-1.0.md|
+|venuetypetax|integer; default 1 |The venue taxonomy in use. Refer to list https://github.com/knittingmedia/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md#list-venue-taxonomies- |
|publisher |object |Details about the publisher of the placement. |
|domain |string |Domain of the inventory (ads.txt) owner (e.g., “mysite.foo.com”) |
|keywords |string |Comma separated list of keywords about the DOOH placement. |
From d907b7ae01adda2f6dd343d8ea327bf84c0c9210 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 15:36:16 +0100
Subject: [PATCH 13/64] Content tidy
---
2.6.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/2.6.md b/2.6.md
index a202e5e..e44f8fa 100644
--- a/2.6.md
+++ b/2.6.md
@@ -2853,7 +2853,7 @@ This object should be included if the ad supported content is a Digital Out-Of-H
|publisher |object |Details about the publisher of the placement. |
|domain |string |Domain of the inventory (ads.txt) owner (e.g., “mysite.foo.com”) |
|keywords |string |Comma separated list of keywords about the DOOH placement. |
-|content |object |Details about the Content (Section x.x.x) within the DOOH placement. |
+|content |object |Details about the Content within the DOOH placement. |
|ext |object |Placeholder for exchange-specific extensions to OpenRTB. |
From 20a9581b2d17be4953c14a152152c294d7d70e82 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 15:41:59 +0100
Subject: [PATCH 14/64] AUCTION_MULTIPLIER macro
---
2.6.md | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/2.6.md b/2.6.md
index e44f8fa..8dd7eff 100644
--- a/2.6.md
+++ b/2.6.md
@@ -3292,6 +3292,12 @@ These same substitution macros can also be placed in the ad markup. The exchange
+
+ ${AUCTION_MULTIPLIER} |
+ The total quantity of impressions won; for confirmation only. This should always be less than or equal to the multiplier value sent in the bid request. This value is a float value greater than zero and may be less than one. Should be used to confirm that the buyer expects and understands the multiplier value. |
+
+
+
From 70834590069acc324aca68caf73181180ec07863 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 16:00:24 +0100
Subject: [PATCH 15/64] 7.9
---
implementation.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/implementation.md b/implementation.md
index 93c0eb4..7aaa9c6 100644
--- a/implementation.md
+++ b/implementation.md
@@ -1106,3 +1106,8 @@ The following best practice is derived from the [VAST 4.2 spec](https://iabtechl
These HTTP headers allow recipients of impression notifications to run anti-IVT checks using metadata about the end user device, rather than the server itself.
**BEST PRACTICE**: When firing impression notifications via HTTP request from the server-side, the notifier should establish an [ads.cert Call Sign](https://iabtechlab.com/wp-content/uploads/2021/09/2-ads-cert-call-signs-pc.pdf) and make use of the [ads.cert Authenticated Connections protocol](https://iabtechlab.com/wp-content/uploads/2021/09/3-ads-cert-authenticated-connections-pc.pdf) to cryptographically sign notifications. This allows recipients of impression notifications, who’ve established ads.cert Call Signs of their own, to authenticate the sender for anti-fraud purposes.
+
+
+## 7.9 - Digital Out-Of-Home
+
+DOOH Implementation Notes
From 3befc0dd7b1e27fb531fb9a12e7df06e23a951c8 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 16:08:13 +0100
Subject: [PATCH 16/64] WIP 7.9
---
implementation.md | 49 ++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 48 insertions(+), 1 deletion(-)
diff --git a/implementation.md b/implementation.md
index 7aaa9c6..9c2e956 100644
--- a/implementation.md
+++ b/implementation.md
@@ -1110,4 +1110,51 @@ These HTTP headers allow recipients of impression notifications to run anti-IVT
## 7.9 - Digital Out-Of-Home
-DOOH Implementation Notes
+This section details the unique differences between trading the online world of digital display and real-world aspects of Outdoor display and links to the key objects that enable this media to be traded in OpenRTB.
+
+### 7.9.1 - Multiple/Variable Impressions
+The OpenRTB trading method was built around the assumption that a targeted user holds one device and is served an ad as they visit a webpage e.g. One impression = One user.
+OOH Media is a medium where one advert play (a spot) is viewable by everyone who is in the vicinity of the advert being displayed e.g. One ad display = multiple viewers/users (this number can be both greater than *or* less than 1 - due to numbers being based on statistical modeling, fractional values (e.g. .32 impressions per ad display) are common. These rates are also variable as they may be based on hourly-adjusted projections, or real-time sensor data.
+
+Multiplying by decimal values (especially with a CPM) can lead to discrepancies when the ‘buy side’ and ‘sell side’ truncate decimal places. Measures need to be taken to avoid this at an account level.
+
+### 7.9.2 Highly Variable Physical Size
+The majority of devices that are served ads via OpenRTB are of a size that one person can hold or lean into. In OOH media the advert can be traded and served on anything from the size of a shelf edge label to the size of multiple football pitches. This far exceeds the size range of anything that can be held in the viewer's hand or hung on their living room wall.
+
+The size and direction of an OOH display not only affects the size of the audience that could see it, but also changes the chances of the audience that will see the advertisement being served.
+
+A common trait with both OOH and digital display ads is that there are a wide variety of sizes, resolutions and aspect ratios to be accommodated as the physical displays ‘build into’ physical spaces vary, and may contain additional content (e.g. tickers, application, labels) that cause ad slot sizes to vary.
+
+### 7.9.3 Private Networks / Geo-Location Information
+The majority of commercial DOOH digital displays sit on ‘walled garden’ private ip networks. This protects the displays from a wide spectrum of internet security issues, vulnerabilities and attacks.
+
+This can lead to 3rd party ad serving, cookies and http event logging service being constricted by the ‘safe-lists’ of urls allowed through the ‘walled garden’ security.
+
+Many Media Owners / Publishers therefore publish proprietary ‘1st Party’ playout reports and confirmations and use ‘1st Party’ ad servers and/or CMS systems.
+
+The use of private ip networks also means that DSPs are not able to use their normal IP address geolocation techniques to get information about where ads are delivered - though publisher-reported locations (e.g. lat/lon, geo information like address, zip, region) are almost always available. In the case of moving media (e.g. taxi-top displays, bus panels, etc.) near-real time GPS-derived information is common.
+
+### 7.9.4 Non-Persistent Connections / Longer-Than-Realtime Delays
+Most DOOH display panels in urban and remote connections rely on cellular networks for their network connectivity. Whilst a Media Owner may have their own private network with a telecoms provider, the network is still at the mercy of congestion on the local cell tower. Over subscription to cell towers at peak times and locations leads to the DOOH display panels having non-persistent internet connection.
+
+To mitigate this, some DOOH Media Owners and/or publishers employ ‘forward and store’ technology and give a lead time tolerance from bid request to display. Bids may be requested in advance (to allow pre-buffering or populate “playlists'' on devices, and the confirmation of playback may be delayed due to log collection or processing within publisher systems
+
+The current industry accepted lead time from ‘bid confirmation’ to ‘display’ can be up to 1 to 2 hours.
+
+### 7.9.5 Proprietary Device Attributes
+Unlike the TV, Tablet and Mobile phone market, there are no dominant global brands supplying digital OOH screen technology to the market. Media Owners and/or Publishers source their own screen technology from a wide variety of manufacturers, technologies and installation partners resulting in each network having its own proprietary device types,identifiers, and other attributes such as user agent strings.
+
+Some countries have attempted to create standards for describing the shape, size and format of the digital units, but to date there is no recognised global standard for identifying a digital out of home device or the users who it may reach.
+
+In the case of user agents, oftentimes non-standard strings are used by Media Owners, which has been known to plague device detection and traffic protection systems. It is advised that Media Owners comply with the HTTP user agent standards set forth by the IETF and submit their user agents to the IAB Spiders and Bots List using the "Submit here" button on this page.
+
+### 7.9.6 Commercially Critical Brand Safety
+One bad advert being served at one time to one person is survivable.
+One bad advert served at one time to 1000’s of people in a public place will lead to a Media Owner and/or Publisher risking their contract/permission to serve ads to networks of screens.
+
+All ads being served on large commercial networks need to be manually pre-approved (typically involving human, visual review) by the publisher (and in some cases other 3rd parties e.g. venue landlords) before any bids can be accepted for display.
+
+This means typical lead times for creative approval are on the order of “working days” - though they may be expedited through operational processes. It also means many publishers and networks will prohibit creative rotation, dynamic content, or changes post-approval - pending further review. 3rd-Party AdServing (3PAS) support (and support for HTML) is possible, but not guaranteed - including limitations of variations of typical banner ads like dynamic content, animation, or DCO.
+
+For the above reasons, use of IAB Ad Management API (https://github.com/InteractiveAdvertisingBureau/AdManagementAPI/blob/master/Ad%20Management%20API%201.0%20FINAL.md) for creative submission to DOOH exchanges is strongly recommended, though many SSPs may have proprietary extensions to allow submitting ads to specific individual publishers.
+
From 0ab9a0c8e785ed6641aab5c4b6569bf23d62348b Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 16:10:52 +0100
Subject: [PATCH 17/64] words
---
implementation.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/implementation.md b/implementation.md
index 9c2e956..8d75d83 100644
--- a/implementation.md
+++ b/implementation.md
@@ -1110,7 +1110,7 @@ These HTTP headers allow recipients of impression notifications to run anti-IVT
## 7.9 - Digital Out-Of-Home
-This section details the unique differences between trading the online world of digital display and real-world aspects of Outdoor display and links to the key objects that enable this media to be traded in OpenRTB.
+This section details the unique differences between trading the online world of digital display and real-world aspects of Digital Out-Of-Home (DOOH) media. Each sub section links to the key objects that enable DOOH to be traded using the OpenRTB standard.
### 7.9.1 - Multiple/Variable Impressions
The OpenRTB trading method was built around the assumption that a targeted user holds one device and is served an ad as they visit a webpage e.g. One impression = One user.
From 2ff91c8028ec9420359d165a1beef3ec794bd973 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 16:41:09 +0100
Subject: [PATCH 18/64] Sample Implementation Text
---
implementation.md | 30 +++++++++++++++++++++++++-----
1 file changed, 25 insertions(+), 5 deletions(-)
diff --git a/implementation.md b/implementation.md
index 8d75d83..5142974 100644
--- a/implementation.md
+++ b/implementation.md
@@ -1117,15 +1117,20 @@ The OpenRTB trading method was built around the assumption that a targeted user
OOH Media is a medium where one advert play (a spot) is viewable by everyone who is in the vicinity of the advert being displayed e.g. One ad display = multiple viewers/users (this number can be both greater than *or* less than 1 - due to numbers being based on statistical modeling, fractional values (e.g. .32 impressions per ad display) are common. These rates are also variable as they may be based on hourly-adjusted projections, or real-time sensor data.
Multiplying by decimal values (especially with a CPM) can lead to discrepancies when the ‘buy side’ and ‘sell side’ truncate decimal places. Measures need to be taken to avoid this at an account level.
+
+The OpenRTB imp object now includes a qty object that enables the multiplier dimension
-### 7.9.2 Highly Variable Physical Size
+### 7.9.2 Unique Device Characterisitcs
+
+#### 7.9.2.1 Highly Variable Physical Size
The majority of devices that are served ads via OpenRTB are of a size that one person can hold or lean into. In OOH media the advert can be traded and served on anything from the size of a shelf edge label to the size of multiple football pitches. This far exceeds the size range of anything that can be held in the viewer's hand or hung on their living room wall.
The size and direction of an OOH display not only affects the size of the audience that could see it, but also changes the chances of the audience that will see the advertisement being served.
A common trait with both OOH and digital display ads is that there are a wide variety of sizes, resolutions and aspect ratios to be accommodated as the physical displays ‘build into’ physical spaces vary, and may contain additional content (e.g. tickers, application, labels) that cause ad slot sizes to vary.
+
-### 7.9.3 Private Networks / Geo-Location Information
+#### 7.9.2.2 Private Networks / Geo-Location Information
The majority of commercial DOOH digital displays sit on ‘walled garden’ private ip networks. This protects the displays from a wide spectrum of internet security issues, vulnerabilities and attacks.
This can lead to 3rd party ad serving, cookies and http event logging service being constricted by the ‘safe-lists’ of urls allowed through the ‘walled garden’ security.
@@ -1134,21 +1139,36 @@ Many Media Owners / Publishers therefore publish proprietary ‘1st Party’ pla
The use of private ip networks also means that DSPs are not able to use their normal IP address geolocation techniques to get information about where ads are delivered - though publisher-reported locations (e.g. lat/lon, geo information like address, zip, region) are almost always available. In the case of moving media (e.g. taxi-top displays, bus panels, etc.) near-real time GPS-derived information is common.
-### 7.9.4 Non-Persistent Connections / Longer-Than-Realtime Delays
+#### 7.9.2.3 Non-Persistent Connections / Longer-Than-Realtime Delays
Most DOOH display panels in urban and remote connections rely on cellular networks for their network connectivity. Whilst a Media Owner may have their own private network with a telecoms provider, the network is still at the mercy of congestion on the local cell tower. Over subscription to cell towers at peak times and locations leads to the DOOH display panels having non-persistent internet connection.
To mitigate this, some DOOH Media Owners and/or publishers employ ‘forward and store’ technology and give a lead time tolerance from bid request to display. Bids may be requested in advance (to allow pre-buffering or populate “playlists'' on devices, and the confirmation of playback may be delayed due to log collection or processing within publisher systems
The current industry accepted lead time from ‘bid confirmation’ to ‘display’ can be up to 1 to 2 hours.
-### 7.9.5 Proprietary Device Attributes
+#### 7.9.2.4 Proprietary Device Attributes
Unlike the TV, Tablet and Mobile phone market, there are no dominant global brands supplying digital OOH screen technology to the market. Media Owners and/or Publishers source their own screen technology from a wide variety of manufacturers, technologies and installation partners resulting in each network having its own proprietary device types,identifiers, and other attributes such as user agent strings.
Some countries have attempted to create standards for describing the shape, size and format of the digital units, but to date there is no recognised global standard for identifying a digital out of home device or the users who it may reach.
In the case of user agents, oftentimes non-standard strings are used by Media Owners, which has been known to plague device detection and traffic protection systems. It is advised that Media Owners comply with the HTTP user agent standards set forth by the IETF and submit their user agents to the IAB Spiders and Bots List using the "Submit here" button on this page.
-### 7.9.6 Commercially Critical Brand Safety
+#### 7.9.2.5 Key Object Attributes To Use For DOOH Device Reference in OpenRTB
+
+| Object Reference | Type | Implementation Guidance |
+| ----------------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| device.geo | object | Since ip may not be available, geo location lat / lon field is required for DOOH transactions. geo.type is recommended. |
+| device.devicetype | string array | Digital out of home devices shall be identified as type 8. |
+| device.ppi | integer | Screen dimensions in inches can be calculated using ppi, w and h. |
+| device.ifa | string | A device ID used to identify an individual out of home device. |
+| device.ifa\_type | string | For DOOH this is usually given as "ppid" to show this is a publisher-provided device id or "sspid" to show this is an exchange-provided device id |
+| device.eids | object | Used to send additional identifiers. e.g. geopath.org or oohspace.co.uk or to signal the ifa provider. See AdCom eids |
+| imp.video.boxingallowed | integer | For DOOH, when boxingallowed = 0, the video aspect ratio should strictly match that of the placement, as determined by the video w and h fields. |
+| imp.dt | float | Timestamp when the item is estimated to be fulfilled (e.g. when a DOOH impression will be displayed) in Unix format (i.e., milliseconds since the epoch). |
+| imp.etime | integer | The exposure time in seconds per view that the creative will be displayed before refreshing to the next creative. |
+
+
+### 7.9.3 Commercially Critical Brand Safety
One bad advert being served at one time to one person is survivable.
One bad advert served at one time to 1000’s of people in a public place will lead to a Media Owner and/or Publisher risking their contract/permission to serve ads to networks of screens.
From 96aa28b49bb5a6633689df709256924a22d937bf Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 16:50:32 +0100
Subject: [PATCH 19/64] Example space
---
implementation.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/implementation.md b/implementation.md
index 5142974..a36c105 100644
--- a/implementation.md
+++ b/implementation.md
@@ -1178,3 +1178,6 @@ This means typical lead times for creative approval are on the order of “worki
For the above reasons, use of IAB Ad Management API (https://github.com/InteractiveAdvertisingBureau/AdManagementAPI/blob/master/Ad%20Management%20API%201.0%20FINAL.md) for creative submission to DOOH exchanges is strongly recommended, though many SSPs may have proprietary extensions to allow submitting ads to specific individual publishers.
+
+### 7.9.4 - DOOH Example Scenarios
+
From 0efdf8a59194525bf5e947fe35c8ed054305c085 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 17:00:47 +0100
Subject: [PATCH 20/64] references
---
implementation.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/implementation.md b/implementation.md
index a36c105..f5de01a 100644
--- a/implementation.md
+++ b/implementation.md
@@ -1110,7 +1110,7 @@ These HTTP headers allow recipients of impression notifications to run anti-IVT
## 7.9 - Digital Out-Of-Home
-This section details the unique differences between trading the online world of digital display and real-world aspects of Digital Out-Of-Home (DOOH) media. Each sub section links to the key objects that enable DOOH to be traded using the OpenRTB standard.
+This section details the unique differences between trading the online world of digital display and real-world aspects of Digital Out-Of-Home (DOOH) media. Each sub section references the key objects that enable DOOH to be traded using the OpenRTB standard.
### 7.9.1 - Multiple/Variable Impressions
The OpenRTB trading method was built around the assumption that a targeted user holds one device and is served an ad as they visit a webpage e.g. One impression = One user.
From 2943fc913846092f3a6a89956e289327823e7a26 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 17:05:44 +0100
Subject: [PATCH 21/64] updated table
---
implementation.md | 31 ++++++++++++++++++++-----------
1 file changed, 20 insertions(+), 11 deletions(-)
diff --git a/implementation.md b/implementation.md
index f5de01a..67fd29b 100644
--- a/implementation.md
+++ b/implementation.md
@@ -1155,17 +1155,26 @@ In the case of user agents, oftentimes non-standard strings are used by Media Ow
#### 7.9.2.5 Key Object Attributes To Use For DOOH Device Reference in OpenRTB
-| Object Reference | Type | Implementation Guidance |
-| ----------------------- | ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| device.geo | object | Since ip may not be available, geo location lat / lon field is required for DOOH transactions. geo.type is recommended. |
-| device.devicetype | string array | Digital out of home devices shall be identified as type 8. |
-| device.ppi | integer | Screen dimensions in inches can be calculated using ppi, w and h. |
-| device.ifa | string | A device ID used to identify an individual out of home device. |
-| device.ifa\_type | string | For DOOH this is usually given as "ppid" to show this is a publisher-provided device id or "sspid" to show this is an exchange-provided device id |
-| device.eids | object | Used to send additional identifiers. e.g. geopath.org or oohspace.co.uk or to signal the ifa provider. See AdCom eids |
-| imp.video.boxingallowed | integer | For DOOH, when boxingallowed = 0, the video aspect ratio should strictly match that of the placement, as determined by the video w and h fields. |
-| imp.dt | float | Timestamp when the item is estimated to be fulfilled (e.g. when a DOOH impression will be displayed) in Unix format (i.e., milliseconds since the epoch). |
-| imp.etime | integer | The exposure time in seconds per view that the creative will be displayed before refreshing to the next creative. |
+| Object Reference | Type | Implementation Guidance |
+| ----------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| device.geo | object | Since ip may not be available, geo location lat / lon field is required for DOOH transactions. geo.type is recommended. |
+| device.devicetype | string array | Digital out of home devices shall be identified as type 8. |
+| device.ppi | integer | Screen dimensions in inches can be calculated using ppi, w and h. |
+| device.ifa | string | A device ID used to identify an individual out of home device. |
+| device.ifa\_type | string | For DOOH this is usually given as "ppid" to show this is a publisher-provided device id or "sspid" to show this is an exchange-provided device id |
+| device.eids | object | Used to send additional identifiers. e.g. geopath.org or oohspace.co.uk or to signal the ifa provider. See AdCom eids |
+| imp.video.boxingallowed | integer | For DOOH, when boxingallowed = 0, the video aspect ratio should strictly match that of the placement, as determined by the video w and h fields. |
+| imp.dt | float | Timestamp when the item is estimated to be fulfilled (e.g. when a DOOH impression will be displayed) in Unix format (i.e., milliseconds since the epoch). |
+| imp.etime | integer | The exposure time in seconds per view that the creative will be displayed before refreshing to the next creative. |
+| dooh.id | string; recommended | Exchange provided id for a placement or logical grouping of placements. |
+| dooh.name | string | Name of the dooh placement. |
+| dooh.venuetype | string, array | [The type of out-of-home venue. The taxonomy to be used is defined by the venuetax field. If no venuetax field is supplied, OpenOOH Venue Taxonomy is assumed.](https://github.com/openooh/venue-taxonomy/blob/main/specification-1.0.md) |
+| dooh.venuetypetax | integer; default 1 | The venue taxonomy in use. Refer to list 8.3.1 |
+| dooh.publisher | object | Details about the publisher of the placement. |
+| dooh.domain | string | Domain of the inventory (ads.txt) owner (e.g., “mysite.foo.com”) |
+| dooh.keywords | string | Comma separated list of keywords about the DOOH placement. |
+| dooh.content | object | Details about the Content within the DOOH placement. |
+| dooh.ext | object | Placeholder for exchange-specific extensions to OpenRTB. |
### 7.9.3 Commercially Critical Brand Safety
From f22c88bef92a3db0280f657faa6a637cb3fb8c33 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Thu, 27 Oct 2022 17:07:41 +0100
Subject: [PATCH 22/64] add table link
---
implementation.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/implementation.md b/implementation.md
index 67fd29b..c691efc 100644
--- a/implementation.md
+++ b/implementation.md
@@ -1169,7 +1169,7 @@ In the case of user agents, oftentimes non-standard strings are used by Media Ow
| dooh.id | string; recommended | Exchange provided id for a placement or logical grouping of placements. |
| dooh.name | string | Name of the dooh placement. |
| dooh.venuetype | string, array | [The type of out-of-home venue. The taxonomy to be used is defined by the venuetax field. If no venuetax field is supplied, OpenOOH Venue Taxonomy is assumed.](https://github.com/openooh/venue-taxonomy/blob/main/specification-1.0.md) |
-| dooh.venuetypetax | integer; default 1 | The venue taxonomy in use. Refer to list 8.3.1 |
+| dooh.venuetypetax | integer; default 1 | The venue taxonomy in use. Refer to list https://github.com/knittingmedia/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md#list-venue-taxonomies- |
| dooh.publisher | object | Details about the publisher of the placement. |
| dooh.domain | string | Domain of the inventory (ads.txt) owner (e.g., “mysite.foo.com”) |
| dooh.keywords | string | Comma separated list of keywords about the DOOH placement. |
From 62b7b440ff1e8fc39b60f96e91f5ff6ba5482e64 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Fri, 28 Oct 2022 11:37:34 +0100
Subject: [PATCH 23/64] Code Examples
V1
---
implementation.md | 286 +++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 285 insertions(+), 1 deletion(-)
diff --git a/implementation.md b/implementation.md
index c691efc..db5f130 100644
--- a/implementation.md
+++ b/implementation.md
@@ -1189,4 +1189,288 @@ For the above reasons, use of IAB Ad Management API (https://github.com/Interact
### 7.9.4 - DOOH Example Scenarios
-
+
+## 7.9.4.1 - Banner Bid Request
+
+```javascript
+{
+ "$schema": "https://raw.githubusercontent.com/knittingmedia/OpenRTB/main/Schema/OpenRTB_OOH_V1.json",
+ "id": "162059897743978051070",
+ "at": 1,
+ "imp": [
+ {
+ "id": "007",
+ "secure": 1,
+ "exp": 360,
+ "bidfloor": 5.0,
+ "bidfloorcur": "GBP",
+ "banner": {
+ "w": 1080,
+ "h": 1920,
+ "format": [
+ {
+ "w": 1080,
+ "h": 1920
+ },
+ {
+ "w": 720,
+ "h": 1366
+ }
+ ],
+ "mimes": [
+ "image/jpg",
+ "image/png",
+ "text/html"
+ ]
+ },
+ "pmp": {
+ "private_auction": 0,
+ "deals": [
+ {
+ "id": "123",
+ "at": 1,
+ "bidfloor": 4.50
+ },
+ {
+ "id": "333",
+ "at": 1,
+ "bidfloor": 3.00
+ },
+ {
+ "id": "444",
+ "at": 1,
+ "bidfloor": 2.00
+ }
+ ]
+ },
+ "dt": 12345670,
+ "etime": 10,
+ "qty": {
+ "multiplier": 14.2,
+ "sourcetype": 1,
+ "vendor": "route.org.uk"
+ }
+ }
+ ],
+ "device": {
+ "geo": {
+ "lat": 0.0001,
+ "long": -0.1235,
+ "lastfix": 0
+ },
+ "devicetype": 8,
+ "w": 1080,
+ "h": 1920,
+ "ppi": 72,
+ "ifa": "1235461904",
+ "ifa_type": "ppid",
+ "eids": [
+ {
+ "source": "oohspace.co.uk",
+ "uids": [
+ {
+ "atype": 501,
+ "id": "1235461904"
+ }
+ ]
+ }
+ ]
+ },
+ "dooh": {
+ "content": {},
+ "id": "15790",
+ "keywords": "Roadside, Billboard, D96",
+ "name": "This",
+ "publisher": {
+ "id": "G1",
+ "name": "Global"
+ },
+ "domain": "global.com",
+ "venuetax": 1,
+ "venuetypeid": 30101
+ },
+ "cur": [
+ "GBP"
+ ]
+}
+```
+
+## 7.9.4.1 - Banner Bid Response
+
+```javascript
+{
+ "$schema": "https://raw.githubusercontent.com/knittingmedia/OpenRTB/main/Schema/OpenRTB_OOH_V1_response.json",
+ "id": "1234567890",
+ "bidid": "162059897743978051070",
+ "cur": "GBP",
+ "seatbid": [
+ {
+ "seat": "512",
+ "bid": [
+ {
+ "id": "1",
+ "impid": "102",
+ "price": 9.43,
+ "banner": {
+ "img": "http://adserver.com/creative112.jpg"
+ },
+ "burl": "http://adserver.com/billingnotice?impid=102& bidid=abc1123&price=${AUCTION_PRICE}&multiplier=${AUCTION_MULTIPLIER}",
+ "adomain": [
+ "advertiserdomain.com"
+ ],
+ "cid": "campaign111",
+ "crid": "creative112",
+ "attr": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 12
+ ],
+ "w": 1080,
+ "h": 1920,
+ "cat": [
+ "IAB1"
+ ]
+ }
+ ]
+ }
+ ]
+}
+```
+
+## 7.9.4.1 - Video Bid Request
+
+```javascript
+{
+ "$schema": "https://raw.githubusercontent.com/knittingmedia/OpenRTB/main/Schema/OpenRTB_OOH_V1.json",
+ "id": "873465983764395",
+ "at": 1,
+ "imp": [
+ {
+ "id": "123456",
+ "secure": 1,
+ "exp": 720,
+ "bidfloor": 4.8,
+ "bidfloorcur": "GBP",
+ "video": {
+ "boxingallowed": 1,
+ "w": 960,
+ "h": 480,
+ "maxduration": 20,
+ "minduration": 20,
+ "mimes": [
+ "video/jpeg",
+ "video/mp4",
+ "video/mov"
+ ]
+ },
+ "pmp": {
+ "private_auction": 1,
+ "deals": [
+ {
+ "id": "V123",
+ "at": 1,
+ "bidfloor": 4.50
+ }
+ ]
+ },
+ "dt": 1647010095,
+ "qty": {
+ "multiplier": 14.2,
+ "sourcetype": 0,
+ "vendor": "route.org.uk"
+ }
+ }
+ ],
+ "device": {
+ "geo": {
+ "lat": 51.51112,
+ "long": -0.09043,
+ "lastfix": 0
+ },
+ "devicetype": 8,
+ "w": 960,
+ "h": 480,
+ "ppi": 3,
+ "ifa": "1234928801",
+ "ifa_type": "ppid",
+ "eids": [
+ {
+ "source": "oohspace.co.uk",
+ "uids": [
+ {
+ "atype": 501,
+ "id": "1234928801"
+ }
+ ]
+ }
+ ]
+ },
+ "dooh": {
+ "content": {},
+ "id": "1Frame",
+ "keywords": "LargeFormat,CANNON STREET STN,CANNON STREET,MAIN CONCOURSE",
+ "name": "Transvision",
+ "publisher": {
+ "id": "VJCDUK",
+ "name": "viooh"
+ },
+ "domain": "viooh.com",
+ "venuetax": 1,
+ "venuetypeid": 10602
+ },
+ "cur": [
+ "GBP"
+ ]
+}
+```
+
+## 7.9.4.1 - Video Bid Response
+
+```javascript
+{
+ "$schema": "https://raw.githubusercontent.com/knittingmedia/OpenRTB/main/Schema/OpenRTB_OOH_V1_response.json",
+ "id": "1234567890",
+ "bidid": "162059897743978051070",
+ "cur": "GBP",
+ "seatbid": [
+ {
+ "seat": "512",
+ "bid": [
+ {
+ "id": "1",
+ "impid": "102",
+ "price": 9.43,
+ "nurl": "http://adserver.com/winnotice?impid=102&bidid=abc1123",
+ "burl": "http://adserver.com/billingnotice?impid=102&bidid=abc1123&price=${AUCTION_PRICE}&multiplier=${AUCTION_MULTIPLIER}",
+ "adm": " AdServer 00:00:10 ",
+ "adomain": [
+ "advertiserdomain.com"
+ ],
+ "cid": "campaign111",
+ "crid": "creative112",
+ "attr": [
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 12
+ ],
+ "w": 1920,
+ "h": 1080,
+ "cat": [
+ "IAB1"
+ ]
+ }
+ ]
+ }
+ ]
+}
+```
From 1602c03a2b5bcd4ddfe9fd7378bddb2a73564fb4 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Fri, 28 Oct 2022 11:39:52 +0100
Subject: [PATCH 24/64] Example Titles
---
implementation.md | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/implementation.md b/implementation.md
index db5f130..6218467 100644
--- a/implementation.md
+++ b/implementation.md
@@ -1190,7 +1190,7 @@ For the above reasons, use of IAB Ad Management API (https://github.com/Interact
### 7.9.4 - DOOH Example Scenarios
-## 7.9.4.1 - Banner Bid Request
+#### 7.9.4.1 - DOOH Banner Bid Request
```javascript
{
@@ -1295,7 +1295,7 @@ For the above reasons, use of IAB Ad Management API (https://github.com/Interact
}
```
-## 7.9.4.1 - Banner Bid Response
+#### 7.9.4.2 - Banner Bid Response
```javascript
{
@@ -1342,7 +1342,7 @@ For the above reasons, use of IAB Ad Management API (https://github.com/Interact
}
```
-## 7.9.4.1 - Video Bid Request
+#### 7.9.4.3 - DOOH Video Bid Request
```javascript
{
@@ -1429,7 +1429,7 @@ For the above reasons, use of IAB Ad Management API (https://github.com/Interact
}
```
-## 7.9.4.1 - Video Bid Response
+#### 7.9.4.4 - DOOH Video Bid Response
```javascript
{
From 4b0aa353505c76d11790b790080cbdf0d933d1d8 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Fri, 28 Oct 2022 11:42:38 +0100
Subject: [PATCH 25/64] 7.9 title
---
2.6.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/2.6.md b/2.6.md
index 8dd7eff..ec3a6e9 100644
--- a/2.6.md
+++ b/2.6.md
@@ -213,6 +213,9 @@ THE STANDARDS, THE SPECIFICATIONS, THE MEASUREMENT GUIDELINES, AND ANY OTHER MAT
- [7.8 - Counting Billable Events and Tracked Ads](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/implementation.md#78-counting-billable-events-and-tracked-ads-)
- [Best Practices for server-side billing notifications](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/implementation.md#best-practices-for-server-side-billing-notifications-)
+
+- [7.9 - Digital Out-Of-Home](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/OOH-Ammends/implementation.md#79---digital-out-of-home-)
+
## [Appendix A. Additional Information](#appendixa)
From ecf94127f87f87e00beb8e263884b08659db5322 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Fri, 28 Oct 2022 17:10:03 +0100
Subject: [PATCH 26/64] Simon etime def
---
2.6.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/2.6.md b/2.6.md
index ec3a6e9..59bcc3d 100644
--- a/2.6.md
+++ b/2.6.md
@@ -982,7 +982,7 @@ Recommended for video and/or apps.
etime |
integer |
- The exposure time in seconds per view that the creative will be displayed before refreshing to the next creative. |
+ The minimum exposure time in seconds per view that the creative will be displayed before refreshing to the next creative. If the field is absent, the exposure time is unknown. If 0, the exposure time is indefinite. |
qty |
From 191171d8ebd93e4be0959433af1b49c45ed13c06 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Fri, 28 Oct 2022 17:20:10 +0100
Subject: [PATCH 27/64] etime is gone
---
2.6.md | 5 -----
1 file changed, 5 deletions(-)
diff --git a/2.6.md b/2.6.md
index 59bcc3d..85880b5 100644
--- a/2.6.md
+++ b/2.6.md
@@ -979,11 +979,6 @@ Recommended for video and/or apps.
integer |
Advisory as to the number of seconds that may elapse between the auction and the actual impression. |
-
- etime |
- integer |
- The minimum exposure time in seconds per view that the creative will be displayed before refreshing to the next creative. If the field is absent, the exposure time is unknown. If 0, the exposure time is indefinite. |
-
qty |
object |
From 4553f47d3a757870ce2ce541286264078624c5d0 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Fri, 28 Oct 2022 17:36:53 +0100
Subject: [PATCH 28/64] Added dooh object to 3.2.1
---
2.6.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/2.6.md b/2.6.md
index 85880b5..809c02d 100644
--- a/2.6.md
+++ b/2.6.md
@@ -699,6 +699,11 @@ There are also several subordinate objects that provide detailed data to potenti
object; recommended |
Details via an App object (Section 3.2.14) about the publisher’s app (i.e., non-browser applications). Only applicable and recommended for apps. |
+
+ dooh |
+ object |
+ This object should be included if the ad supported content is a Digital Out-Of-Home screen. A bid request with a DOOH object must not contain a site or app object. |
+
device |
object; recommended |
From a094aa76c3173314e6ee00c827099bcf60a0c871 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Fri, 28 Oct 2022 17:38:47 +0100
Subject: [PATCH 29/64] remove dooh.x from 7.9.2.5
---
implementation.md | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/implementation.md b/implementation.md
index 6218467..68cd990 100644
--- a/implementation.md
+++ b/implementation.md
@@ -1166,15 +1166,6 @@ In the case of user agents, oftentimes non-standard strings are used by Media Ow
| imp.video.boxingallowed | integer | For DOOH, when boxingallowed = 0, the video aspect ratio should strictly match that of the placement, as determined by the video w and h fields. |
| imp.dt | float | Timestamp when the item is estimated to be fulfilled (e.g. when a DOOH impression will be displayed) in Unix format (i.e., milliseconds since the epoch). |
| imp.etime | integer | The exposure time in seconds per view that the creative will be displayed before refreshing to the next creative. |
-| dooh.id | string; recommended | Exchange provided id for a placement or logical grouping of placements. |
-| dooh.name | string | Name of the dooh placement. |
-| dooh.venuetype | string, array | [The type of out-of-home venue. The taxonomy to be used is defined by the venuetax field. If no venuetax field is supplied, OpenOOH Venue Taxonomy is assumed.](https://github.com/openooh/venue-taxonomy/blob/main/specification-1.0.md) |
-| dooh.venuetypetax | integer; default 1 | The venue taxonomy in use. Refer to list https://github.com/knittingmedia/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md#list-venue-taxonomies- |
-| dooh.publisher | object | Details about the publisher of the placement. |
-| dooh.domain | string | Domain of the inventory (ads.txt) owner (e.g., “mysite.foo.com”) |
-| dooh.keywords | string | Comma separated list of keywords about the DOOH placement. |
-| dooh.content | object | Details about the Content within the DOOH placement. |
-| dooh.ext | object | Placeholder for exchange-specific extensions to OpenRTB. |
### 7.9.3 Commercially Critical Brand Safety
From 0aee86b26ecad0ba3085235ca55bee711b36eaa8 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Fri, 28 Oct 2022 17:47:39 +0100
Subject: [PATCH 30/64] 7.9.2.5 explanations
---
implementation.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/implementation.md b/implementation.md
index 68cd990..f9ad0ea 100644
--- a/implementation.md
+++ b/implementation.md
@@ -1154,6 +1154,7 @@ Some countries have attempted to create standards for describing the shape, size
In the case of user agents, oftentimes non-standard strings are used by Media Owners, which has been known to plague device detection and traffic protection systems. It is advised that Media Owners comply with the HTTP user agent standards set forth by the IETF and submit their user agents to the IAB Spiders and Bots List using the "Submit here" button on this page.
#### 7.9.2.5 Key Object Attributes To Use For DOOH Device Reference in OpenRTB
+Key objects such as imp.qty and dooh have been added to the OpenRTB specification to enable the programmatic trading of the medium. The following table gives guidance to the use of more common OpenRTB object references when transacting DOOH bids.
| Object Reference | Type | Implementation Guidance |
| ----------------------- | ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
From 804362539f93286ecf95a694861f1c9ac1ad6a43 Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Fri, 28 Oct 2022 17:50:34 +0100
Subject: [PATCH 31/64] Added DOOH Pricing Example
---
implementation.md | 27 ++++++++++++++++++++++-----
1 file changed, 22 insertions(+), 5 deletions(-)
diff --git a/implementation.md b/implementation.md
index f9ad0ea..846c404 100644
--- a/implementation.md
+++ b/implementation.md
@@ -1179,10 +1179,27 @@ This means typical lead times for creative approval are on the order of “worki
For the above reasons, use of IAB Ad Management API (https://github.com/InteractiveAdvertisingBureau/AdManagementAPI/blob/master/Ad%20Management%20API%201.0%20FINAL.md) for creative submission to DOOH exchanges is strongly recommended, though many SSPs may have proprietary extensions to allow submitting ads to specific individual publishers.
+
+### 7.9.4 DOOH Pricing
+Bid price and clearing price should be expressed as a CPM rate per impression.
+For example, if an advertiser is bidding $2.50 CPM on a 1st price auction, and the auction is for 30.3 impressions:
+multiplier = 30.3 (Impression multiplier from bid request)
+bid.price = 2.50 (Bid price in CPM from bid response)
+
+If the advertiser wins, tracking URL (e.g. burl) macros will contain the following values:
+${AUCTION_PRICE} = 2.50 (The clearing price of the auction)
+${AUCTION_MULTIPLIER} = 30.3 (The total quantity of impressions won; for confirmation only. This should always be less than or equal to the multiplier value sent in the bid request. This value is a float value greater than zero and may be less than one.)
+
+To calculate the total cost of the transaction:
+(AUCTION_PRICE / 1000) * AUCTION_MULTIPLIER = COST
+(2.50 / 1000) * 30.3 = $0.07575
+
+The above auction would translate to an invoice of $0.07575.
+
-### 7.9.4 - DOOH Example Scenarios
+### 7.9.5 - DOOH Example Scenarios
-#### 7.9.4.1 - DOOH Banner Bid Request
+#### 7.9.5.1 - DOOH Banner Bid Request
```javascript
{
@@ -1287,7 +1304,7 @@ For the above reasons, use of IAB Ad Management API (https://github.com/Interact
}
```
-#### 7.9.4.2 - Banner Bid Response
+#### 7.9.5.2 - Banner Bid Response
```javascript
{
@@ -1334,7 +1351,7 @@ For the above reasons, use of IAB Ad Management API (https://github.com/Interact
}
```
-#### 7.9.4.3 - DOOH Video Bid Request
+#### 7.9.5.3 - DOOH Video Bid Request
```javascript
{
@@ -1421,7 +1438,7 @@ For the above reasons, use of IAB Ad Management API (https://github.com/Interact
}
```
-#### 7.9.4.4 - DOOH Video Bid Response
+#### 7.9.5.4 - DOOH Video Bid Response
```javascript
{
From 6106817287b6e1995ed4da00196496c6c5556d3b Mon Sep 17 00:00:00 2001
From: "Knitting.Media" <60264355+knittingmedia@users.noreply.github.com>
Date: Fri, 28 Oct 2022 17:56:39 +0100
Subject: [PATCH 32/64] Added imp.dt
---
2.6.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/2.6.md b/2.6.md
index 809c02d..e9e392d 100644
--- a/2.6.md
+++ b/2.6.md
@@ -989,6 +989,11 @@ Recommended for video and/or apps.
object |
A means of passing a multiplier in the bid request, representing the total quantity of impressions for adverts that display to more than one person. |
+
+ dt |
+ float |
+ Timestamp when the item is estimated to be fulfilled (e.g. when a DOOH impression will be displayed) in Unix format (i.e., milliseconds since the epoch). |
+
ext |
object |
From f345892305c651819ed3e9b04874b7fb18e58063 Mon Sep 17 00:00:00 2001
From: wittjill <57421053+wittjill@users.noreply.github.com>
Date: Fri, 28 Oct 2022 16:01:32 -0400
Subject: [PATCH 33/64] GPP string and applicable section notification
https://docs.google.com/document/d/1CCnCGRnlLt3VPmQcbd_dTucTLO84KqQIfX1Sw9ON5So/edit
---
2.6.md | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/2.6.md b/2.6.md
index d9905ee..dbff745 100644
--- a/2.6.md
+++ b/2.6.md
@@ -827,7 +827,7 @@ This object describes the nature and behavior of the entity that is the source o
### 3.2.3 - Object: Regs
-This object contains any legal, governmental, or industry regulations that the sender deems applicable to the request. See Section 7.5 for more details on the flags supporting Coppa, GDPR and CCPA.
+This object contains any legal, governmental, or industry regulations that the sender deems applicable to the request. See Section 7.5 for more details on the flags supporting Coppa, GDPR and others.
@@ -850,6 +850,16 @@ This object contains any legal, governmental, or industry regulations that the s
string |
Communicates signals regarding consumer privacy under US privacy regulation. See US Privacy String specifications. Refer to Section 7.5 for more information. |
+
+ gpp |
+ string |
+ Contains the Global Privacy Platform’s consent string. See the for more details. |
+
+
+ gpp_sid |
+ integer array |
+ Array of the section(s) of the string which should be applied for this transaction. Generally will contain one and only one value, but there are edge cases where more than one may apply. Sections 3 & 4 need not be signaled for this purpose. See the GPP Section Information for more details. |
+
ext |
object |
From 51c2d4f41a14a470b387d60958ec040156e42844 Mon Sep 17 00:00:00 2001
From: strasler
Date: Fri, 28 Oct 2022 16:53:10 -0700
Subject: [PATCH 34/64] Add 'etime' to the 'imp' object
---
2.6.md | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/2.6.md b/2.6.md
index d9905ee..72a75ac 100644
--- a/2.6.md
+++ b/2.6.md
@@ -966,6 +966,11 @@ The presence of `Banner` (Section 3.2.6), `Video` (Section 3.2.7), and/or `Nativ
integer |
Advisory as to the number of seconds that may elapse between the auction and the actual impression. |
+
+ etime |
+ integer |
+ The minimum exposure time, in seconds per view, that the (uninterrupted) player will display the creative before refreshing to the next creative. If the field is absent, the exposure time is unknown. If 0, the exposure time is indefinite. |
+
ext |
object |
From 385fd87031f9dacff2bcc6319c9ef4cfa403e0ab Mon Sep 17 00:00:00 2001
From: wittjill <57421053+wittjill@users.noreply.github.com>
Date: Mon, 31 Oct 2022 12:43:03 -0400
Subject: [PATCH 35/64] Update 2.6.md
feedback from Scott
---
2.6.md | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/2.6.md b/2.6.md
index dbff745..6d5c432 100644
--- a/2.6.md
+++ b/2.6.md
@@ -853,12 +853,12 @@ This object contains any legal, governmental, or industry regulations that the s
gpp |
string |
- Contains the Global Privacy Platform’s consent string. See the for more details. |
+ Contains the Global Privacy Platform’s consent string. See the Global Privacy Platform specification for more details. |
gpp_sid |
integer array |
- Array of the section(s) of the string which should be applied for this transaction. Generally will contain one and only one value, but there are edge cases where more than one may apply. Sections 3 & 4 need not be signaled for this purpose. See the GPP Section Information for more details. |
+ Array of the section(s) of the string which should be applied for this transaction. Generally will contain one and only one value, but there are edge cases where more than one may apply. GPP Section 3 (Header) and 4 (Signal Integrity) do not need to be included. See the GPP Section Information for more details. |
ext |
From 6a84eaa5f46e92e4bd4fc6c40004afeecf26d06f Mon Sep 17 00:00:00 2001
From: hillslatt <114763292+hillslatt@users.noreply.github.com>
Date: Tue, 1 Nov 2022 11:50:23 -0400
Subject: [PATCH 36/64] Text Edit HS
Small text edits to include DOOH where site and app are mentioned as mutually exclusive and ensure reference consistency
---
2.6.md | 32 +++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)
diff --git a/2.6.md b/2.6.md
index e9e392d..b0283ad 100644
--- a/2.6.md
+++ b/2.6.md
@@ -6,7 +6,7 @@ The IAB Technology Laboratory is a nonprofit research and development consortium
### Significant Contributors to the 2.6 version specification
-Stanislav Belov, Software Engineer, Google; Allen Dove, CTO, Magnite; Steven Katz, Senior Principal Architect, Yahoo!; Curt Larson, Chief Product Officer, Sharethrough; Dr. Neal Richter, Director of Science, Amazon Advertising; Jud Spencer, Principal Software Engineer, The Trade Desk; Ian Trider, VP, RTB Platform Operations, Basis Technologies; Rob Hazan, Sr. Director Product Management, Index Exchange; James Wilhite, VP Product, Publica; Jean-Luc Wasmer, VP Partnership Operations, Triton Digital; Sam Mansour, Principle Product Manager, Oracle; Scott Kay, Engineering Manager, Xandr; Emma Fenlon, Sr. Manager, Exchange Quality, Yahoo!; Liam Whiteside, Head of Ad Technology, Global; Don Marti, VP Ecosystem Innovation, Café Media; Aron Schatz, Director Product Management, Double Verify; Jake Jolly, Product Manager, Google; Amit Shetty, VP Product, Pixalate; Tim Harvey, Founder, Knitting Media; Jason Shao, CTO, Place Exchange; Liam Whiteside, Head Of Ad Technology, Global; Chris Coupland, Platform Operations Manager, Centro;
+Stanislav Belov, Software Engineer, Google; Allen Dove, CTO, Magnite; Steven Katz, Senior Principal Architect, Yahoo!; Curt Larson, Chief Product Officer, Sharethrough; Dr. Neal Richter, Director of Science, Amazon Advertising; Jud Spencer, Principal Software Engineer, The Trade Desk; Ian Trider, VP, RTB Platform Operations, Basis Technologies; Rob Hazan, Sr. Director Product Management, Index Exchange; James Wilhite, VP Product, Publica; Jean-Luc Wasmer, VP Partnership Operations, Triton Digital; Sam Mansour, Principle Product Manager, Oracle; Scott Kay, Engineering Manager, Xandr; Emma Fenlon, Sr. Manager, Exchange Quality, Yahoo!; Liam Whiteside, Head of Ad Technology, Global; Don Marti, VP Ecosystem Innovation, Café Media; Aron Schatz, Director Product Management, Double Verify; Jake Jolly, Product Manager, Google; Amit Shetty, VP Product, Pixalate; Tim Harvey, Founder, Knitting Media; Jason Shao, CTO, Place Exchange; Chris Coupland, Platform Operations Manager, Centro;
### IAB Tech Lab Lead:
@@ -659,6 +659,20 @@ The following table summarizes the objects in the Bid Request model and serves a
+
+ Qty |
+ 3.2.31 |
+ A means of passing a multiplier in the bid request, representing the total quantity of impressions for adverts that display to more than one person. |
+
+
+
+
+ DOOH |
+ 3.2.32 |
+ Details of the Digital Out of Home inventory calling for the impression. |
+
+
+
@@ -669,7 +683,7 @@ The following table summarizes the objects in the Bid Request model and serves a
The top-level bid request object contains a globally unique bid request or auction ID. This `id` attribute is required as is at least one impression object (Section 3.2.4). Other attributes in this top-level object establish rules and restrictions that apply to all impressions being offered.
-There are also several subordinate objects that provide detailed data to potential buyers. Among these are the `Site` and `App` objects, which describe the type of published media in which the impression(s) appear. These objects are highly recommended, but only one applies to a given bid request depending on whether the media is browser-based web content or a non-browser application, respectively.
+There are also several subordinate objects that provide detailed data to potential buyers. Among these are the `Site`, `App` and `DOOH`objects, which describe the type of published media in which the impression(s) appear. These objects are highly recommended, but only one applies to a given bid request depending on whether the media is browser-based web content, a non-browser application, or Digital Out of Home inventory respectively.
@@ -1631,7 +1645,7 @@ between a buyer and a seller. Its presence with the `Pmp` collection indicates t
### 3.2.13 - Object: Site
-This object should be included if the ad supported content is a website as opposed to a non-browser application. A bid request must not contain both a `Site` and an `App` object. At a minimum, it is useful to provide a site ID or page URL, but this is not strictly required.
+This object should be included if the ad supported content is a website as opposed to a non-browser application or Digital Out of Home (DOOH) inventory. A bid request must not contain more than one of a `Site`, `App` or `DOOH` object. At a minimum, it is useful to provide a site ID or page URL, but this is not strictly required.
@@ -1663,17 +1677,17 @@ This object should be included if the ad supported content is a website as oppos
cat |
string array |
- Array of IABTL content categories of the site. The taxonomy to be used is defined by the cattax field. |
+ Array of IAB TechLab content categories of the site. The taxonomy to be used is defined by the cattax field. |
sectioncat |
string array |
- Array of IABTL content categories that describe the current section of the site. The taxonomy to be used is defined by the cattax field. |
+ Array of IAB TechLab content categories that describe the current section of the site. The taxonomy to be used is defined by the cattax field. |
pagecat |
string array |
- Array of IABTL content categories that describe the current page or view of the site. The taxonomy to be used is definied by the cattax field. |
+ Array of IAB TechLab content categories that describe the current page or view of the site. The taxonomy to be used is definied by the cattax field. |
page |
@@ -1732,7 +1746,7 @@ This object should be included if the ad supported content is a website as oppos
### 3.2.14 - Object: App
-This object should be included if the ad supported content is a non-browser application (typically in mobile) as opposed to a website. A bid request must not contain both an `App` and a `Site` object. At a minimum, it is useful to provide an App ID or bundle, but this is not strictly required.
+This object should be included if the ad supported content is a non-browser application (typically in mobile) as opposed to a website. A bid request must not contain more than one of a `Site`, `App` or `DOOH` object. At a minimum, it is useful to provide an App ID or bundle, but this is not strictly required.
@@ -1779,12 +1793,12 @@ This object should be included if the ad supported content is a non-browser appl
sectioncat |
string array |
- Array of IABTL content categories that describe the current section of the app. The taxonomy to be used is defined by the cattax field. |
+ Array of IAB TechLab content categories that describe the current section of the app. The taxonomy to be used is defined by the cattax field. |
pagecat |
string array |
- Array of IABTL content categories that describe the current page or view of the app. The taxonomy to be used is definied by the cattax field. |
+ Array of IAB TechLab content categories that describe the current page or view of the app. The taxonomy to be used is definied by the cattax field. |
ver |
From 68ec2216554368f78e9a7f66e5019ef3bf909ba1 Mon Sep 17 00:00:00 2001
From: Rob Hazan
Date: Tue, 1 Nov 2022 12:35:41 -0400
Subject: [PATCH 37/64] Add inventorypartnerdomain to app/site
Added the inventorypartnerdomain field in the App and Site objects. Propose adding these directly to the mainline, as opposed to an extension, because this is a core usecase. Better to mainline early than wait, because migration will be harder once there's more industry adoption.
Also did some minor repair/reformat of the tags in the table for the App fields.
---
2.6.md | 76 ++++++++++++++++++++++++++++++++--------------------------
1 file changed, 42 insertions(+), 34 deletions(-)
diff --git a/2.6.md b/2.6.md
index d9905ee..b7ba188 100644
--- a/2.6.md
+++ b/2.6.md
@@ -1819,22 +1819,27 @@ This object describes the entity who directly supplies inventory to and is paid
name |
string |
Seller name (may be aliased at the seller's request). |
-
+
cattax |
integer; default 1 |
The taxonomy in use. Refer to the AdCOM List: Category Taxonomies for values. |
-
+
cat |
string array |
Array of IAB Tech Lab content categories of the publisher. The taxonomy to be used is defined by the cattax field. If no cattax field is supplied Content Category Taxonomy 1.0 is assumed. |
-
-
+
+
domain |
string |
Highest level domain of the seller (e.g., "seller.com"). |
-
+
+
+ inventorypartnerdomain |
+ string |
+ A domain to be used for inventory authorization in the case of inventory sharing arrangements between a site owner and content owner. This field is typically used by authorization crawlers to establish the domain of the content owner, who has the right to monetize some portion of ad inventory within the site. The content owner's domain should be listed in the site owner's ads.txt file as an inventorypartnerdomain . Authorization for supply from the inventorypartnerdomain will be published in the ads.txt file on the root of that domain. Refer to the ads.txt 1.1 spec for more details. |
+
ext |
object |
@@ -1864,7 +1869,7 @@ This object describes the content in which the impression will appear, which may
episode |
integer |
Episode number. |
-
+
title |
string |
@@ -1874,7 +1879,7 @@ This object describes the content in which the impression will appear, which may
series |
string |
Content series. *Video Examples:* “The Office” (television), “Star Wars” (movie), or “Arby ‘N’ The Chief” (made for web). *Non-Video Example:* “Ecocentric” (Time Magazine blog). |
-
+
season |
string |
@@ -1884,13 +1889,13 @@ This object describes the content in which the impression will appear, which may
artist |
string |
Artist credited with the content. |
-
+
genre |
string |
Genre that best describes the content (e.g., rock, pop, etc). |
-
-
+
+
album |
string |
Album to which the content belongs; typically for audio. |
@@ -1904,18 +1909,18 @@ This object describes the content in which the impression will appear, which may
producer |
object |
Details about the content Producer (Section 3.2.17). |
-
+
url |
string |
URL of the content, for buy-side contextualization or review. |
-
-
+
+
cattax |
integer; default 1 |
The taxonomy in use. Refer to list List: Category Taxonomies in AdCOM 1.0 for values. |
-
+
cat |
string array |
Array of IAB Tech Lab content categories that describe the content. The taxonomy to be used is defined by the cattax field. If no cattax field is supplied Content Category Taxonomy 1.0 is assumed. |
@@ -1924,28 +1929,28 @@ This object describes the content in which the impression will appear, which may
prodq |
integer |
Production quality. Refer to List: Production Qualities in AdCOM 1.0. |
-
+
context |
integer |
Type of content (game, video, text, etc.). Refer to List: Content Contexts in AdCOM 1.0. |
-
-
+
+
contentrating |
string |
Content rating (e.g., MPAA). |
-
+
userrating |
string |
User rating of the content (e.g., number of stars, likes, etc.). |
-
-
+
+
qagmediarating |
integer |
Media rating per IQG guidelines. Refer to List: Media Ratings in AdCOM 1.0. |
-
+
keywords |
string |
Comma separated list of keywords describing the content. Only one of keywords or kwarray may be present. |
@@ -1954,23 +1959,23 @@ This object describes the content in which the impression will appear, which may
kwarry |
string array |
Array of keywords about the site. Only one of keywords or kwarray may be present. |
-
+
livestream |
integer |
0 = not live, 1 = content is live (e.g., stream, live blog). |
-
-
+
+
sourcerelationship |
integer |
0 = indirect, 1 = direct. |
-
+
len |
integer |
Length of content in seconds; appropriate for video or audio. |
-
+
language |
string |
Content language using ISO-639-1-alpha-2. Only one of language or langb should be present. |
@@ -1979,33 +1984,36 @@ This object describes the content in which the impression will appear, which may
langb |
string |
Content language using IETF BCP 47. Only one of language or langb should be present. |
-
+
embeddable |
integer |
Indicator of whether the content is embeddable (e.g., an embeddable video player), where 0 = no, 1 = yes. |
-
-
+
+
data |
object array |
Additional content data. Each Data object (Section 3.2.21) represents a different data source. |
-
+
network |
object |
Details about the network (Section 3.2.23) the content is on. |
-
+
channel |
object |
Details about the channel (Section 3.2.24) the content is on. |
-
+
+ inventorypartnerdomain |
+ string |
+ A domain to be used for inventory authorization in the case of inventory sharing arrangements between an app owner and content owner. This field is typically used by authorization crawlers to establish the domain of the content owner, who has the right to monetize some portion of ad inventory within the app. The content owner's domain should be listed in the app owner's app-ads.txt file as an inventorypartnerdomain . Authorization for supply from the inventorypartnerdomain will be published in the ads.txt file on the root of that domain. Refer to the ads.txt 1.1 spec for more details. |
+
+
ext |
object |
Placeholder for exchange-specific extensions to OpenRTB. |
-
-
From f969b2155c7e7dd6f2d3ca9da44e60688d6b37cc Mon Sep 17 00:00:00 2001
From: Rob Hazan
Date: Wed, 2 Nov 2022 10:56:19 -0400
Subject: [PATCH 38/64] Updates to Versioning, Contributing, and Releasing
Added some detail around the date codes to be used in versioning. Created a new section detailing the process for contributing changes, and one detailing the monthly release process.
---
README.md | 44 ++++++++++++++++++++++++++++++--------------
1 file changed, 30 insertions(+), 14 deletions(-)
diff --git a/README.md b/README.md
index f287d37..94b2af0 100644
--- a/README.md
+++ b/README.md
@@ -1,9 +1,7 @@
-# openrtb2.x
-OpenRTB 2.x specification, from 2.6 onward
-
![IAB Tech Lab](https://drive.google.com/uc?id=10yoBoG5uRETSXRrnJPUDuONujvADrSG1)
# **OpenRTB 2.x**
+OpenRTB 2.x specification, from 2.6 onward
#### About OpenRTB
https://iabtechlab.com/openrtb
@@ -12,29 +10,47 @@ https://iabtechlab.com/openrtb
#### AdCOM: Advertising Common Object Model
https://github.com/InteractiveAdvertisingBureau/AdCOM
-#### VERSIONING POLICY
-As of OpenRTB 2.6-202211, OpenRTB's version number is only incremented on breaking changes. In other words, OpenRTB 2.7 should be considered a distinct version from OpenRTB 2.6 when there is a need for distinguishing versions. For example, a demand source might regard the version header when parsing a bid request received from a supply source. See OpenRTB Principles.
+#### Versioning Policy
+As of OpenRTB 2.6-202210, OpenRTB's version number is only incremented on breaking changes. In other words, OpenRTB 2.7 should be considered a distinct version from OpenRTB 2.6 when there is a need for distinguishing versions. For example, a demand source might regard the version header when parsing a bid request received from a supply source. See OpenRTB Principles.
The current version of the OpenRTB specification is updated approximately once a month if there are non-breaking improvements to be released such as new fields, objects, or values in enumerated lists. Errata, such as clarifications or corrections to descriptions not materially impacting the specification itself, are also addressed during monthly updates. See Errata.
-Release branches are created for each monthly release and the history of these can be reviewed on GitHub. The master branch for the repository will always reflect the most recent release, whereas ongoing development work occurs in the 'develop' branch.
+The format for version numbering includes major and minor version and a date code. For example, 2.6-202210 represents the release for October 2022. The following releases may be 2.6-202211 (November), 2.6-202212 (December), 2.6-202301 (January), etc.
This versioning policy is a break from historical practice for OpenRTB 2.x. In versions of OpenRTB prior to 2.6, major version numbers represent breaking changes and minor version numbers represent non-breaking changes.
+#### How To Contribute
+
+1. Clone this GitHub repo into your own GitHub account
+1. Create a new branch based on `develop`, giving your new branch a short but descriptive name (e.g. if you're adding support for a new flux capacitor object, you could call the branch "add-flux-capacitor")
+1. Make the desired changes in your branch, with one commit per logical change (e.g. if you're adding 2 distinct features in your branch, create 2 distinct commits). Give each of your commits a short but descriptive "Summary" name, and then provide a longer "Description" to fully explain your proposed changes.
+1. (Optional) Consider doing a round of internal reviews/feedback within your own organization, and make any additional updates in your own branch.
+1. Once you're happy with your branch, create a new Pull Request (PR) to propose merging your changes into the `develop` branch.
+1. The OpenRTB Commit Group will review your change, leave comments, and may propose changes. You may need to make additional commits to receive approval for your PR.
+1. Once your PR is approved, it will be merged into the `main` branch at the time of the next monthly release. Details below on how the Release Process works.
+1. (Sometimes) It's possible, especially if your PR is open for a long time, that it cannot be automatically merged into the `develop` branch. In this case, there will be a message in the PR asking you to resolve conflicts before the PR can be merged.
+
+#### Monthly Release-Cutting Process (for repo admins)
+
+Over the course of each month, the OpenRTB Commit Group may review any submitted PRs and take the following possible actions for each:
+- approve it for inclusion in the next release
+- ask the author(s) for additional changes
+- reject it (with a rationale)
+
+On the last Friday of the month, if there are any approved PRs in the `develop` branch, the following steps are executed:
+
+1. A PR is created to merge the `develop` branch into the `main` branch.
+1. A new Release and Tag are create concurrently. The naming convention for the release is "OpenRTB v2.6-YYYYYY", and the tag is "2.6-YYYYYY" where YYYYYY is the date code (e.g. 202301 for January 2023).
+
+The result of this process is that tagged releases are created for each release of OpenRTB, and the history of these is easily reviewed. The `main` branch for the repository will always reflect the most recent release, and ongoing development work will always occur in the `develop` branch.
+
#### Contact
For more information, or to get involved, please email support@iabtechlab.com.
#### About IAB Tech Lab
-
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.
+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.
Learn more about IAB Tech Lab here: [https://www.iabtechlab.com/](https://www.iabtechlab.com/)
From 27f9c2419858d5626d345c1e3f84160865ccaf8b Mon Sep 17 00:00:00 2001
From: Rob Hazan
Date: Wed, 2 Nov 2022 10:59:39 -0400
Subject: [PATCH 39/64] Add missing "publish" step
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 94b2af0..d3ac30d 100644
--- a/README.md
+++ b/README.md
@@ -25,7 +25,7 @@ This versioning policy is a break from historical practice for OpenRTB 2.x. In v
1. Create a new branch based on `develop`, giving your new branch a short but descriptive name (e.g. if you're adding support for a new flux capacitor object, you could call the branch "add-flux-capacitor")
1. Make the desired changes in your branch, with one commit per logical change (e.g. if you're adding 2 distinct features in your branch, create 2 distinct commits). Give each of your commits a short but descriptive "Summary" name, and then provide a longer "Description" to fully explain your proposed changes.
1. (Optional) Consider doing a round of internal reviews/feedback within your own organization, and make any additional updates in your own branch.
-1. Once you're happy with your branch, create a new Pull Request (PR) to propose merging your changes into the `develop` branch.
+1. Once you're happy with your branch, publish it to GitHub. Then create a new Pull Request (PR) to propose merging your changes into the `develop` branch.
1. The OpenRTB Commit Group will review your change, leave comments, and may propose changes. You may need to make additional commits to receive approval for your PR.
1. Once your PR is approved, it will be merged into the `main` branch at the time of the next monthly release. Details below on how the Release Process works.
1. (Sometimes) It's possible, especially if your PR is open for a long time, that it cannot be automatically merged into the `develop` branch. In this case, there will be a message in the PR asking you to resolve conflicts before the PR can be merged.
From 99322d5c5e0bb8b677c009a5e01d9bb86df48398 Mon Sep 17 00:00:00 2001
From: hillslatt <114763292+hillslatt@users.noreply.github.com>
Date: Wed, 2 Nov 2022 11:37:17 -0400
Subject: [PATCH 40/64] Update README.md
---
README.md | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/README.md b/README.md
index d3ac30d..50cabab 100644
--- a/README.md
+++ b/README.md
@@ -11,11 +11,11 @@ https://iabtechlab.com/openrtb
https://github.com/InteractiveAdvertisingBureau/AdCOM
#### Versioning Policy
-As of OpenRTB 2.6-202210, OpenRTB's version number is only incremented on breaking changes. In other words, OpenRTB 2.7 should be considered a distinct version from OpenRTB 2.6 when there is a need for distinguishing versions. For example, a demand source might regard the version header when parsing a bid request received from a supply source. See OpenRTB Principles.
+As of OpenRTB 2.6-202211, OpenRTB's version number is only incremented on breaking changes. In other words, OpenRTB 2.7 should be considered a distinct version from OpenRTB 2.6 when there is a need for distinguishing versions. For example, a demand source might regard the version header when parsing a bid request received from a supply source. See OpenRTB Principles.
The current version of the OpenRTB specification is updated approximately once a month if there are non-breaking improvements to be released such as new fields, objects, or values in enumerated lists. Errata, such as clarifications or corrections to descriptions not materially impacting the specification itself, are also addressed during monthly updates. See Errata.
-The format for version numbering includes major and minor version and a date code. For example, 2.6-202210 represents the release for October 2022. The following releases may be 2.6-202211 (November), 2.6-202212 (December), 2.6-202301 (January), etc.
+The format for version numbering includes major and minor version and a date code. For example, 2.6-202211 represents the release for November 2022. The following releases may be 2.6-202212 (December), 2.6-202301 (January), etc.
This versioning policy is a break from historical practice for OpenRTB 2.x. In versions of OpenRTB prior to 2.6, major version numbers represent breaking changes and minor version numbers represent non-breaking changes.
@@ -26,13 +26,13 @@ This versioning policy is a break from historical practice for OpenRTB 2.x. In v
1. Make the desired changes in your branch, with one commit per logical change (e.g. if you're adding 2 distinct features in your branch, create 2 distinct commits). Give each of your commits a short but descriptive "Summary" name, and then provide a longer "Description" to fully explain your proposed changes.
1. (Optional) Consider doing a round of internal reviews/feedback within your own organization, and make any additional updates in your own branch.
1. Once you're happy with your branch, publish it to GitHub. Then create a new Pull Request (PR) to propose merging your changes into the `develop` branch.
-1. The OpenRTB Commit Group will review your change, leave comments, and may propose changes. You may need to make additional commits to receive approval for your PR.
+1. The Programmatic Supply Chain Working Group and Commit Group will review your update(s), leave comments, and may propose changes. You may need to make additional commits to receive approval for your PR.
1. Once your PR is approved, it will be merged into the `main` branch at the time of the next monthly release. Details below on how the Release Process works.
1. (Sometimes) It's possible, especially if your PR is open for a long time, that it cannot be automatically merged into the `develop` branch. In this case, there will be a message in the PR asking you to resolve conflicts before the PR can be merged.
#### Monthly Release-Cutting Process (for repo admins)
-Over the course of each month, the OpenRTB Commit Group may review any submitted PRs and take the following possible actions for each:
+Over the course of each month, the Programmatic Supply Chain Working Group and Commit Group may review any submitted PRs and take the following possible actions for each:
- approve it for inclusion in the next release
- ask the author(s) for additional changes
- reject it (with a rationale)
@@ -40,7 +40,7 @@ Over the course of each month, the OpenRTB Commit Group may review any submitted
On the last Friday of the month, if there are any approved PRs in the `develop` branch, the following steps are executed:
1. A PR is created to merge the `develop` branch into the `main` branch.
-1. A new Release and Tag are create concurrently. The naming convention for the release is "OpenRTB v2.6-YYYYYY", and the tag is "2.6-YYYYYY" where YYYYYY is the date code (e.g. 202301 for January 2023).
+1. A new Release and Tag are created concurrently. The naming convention for the release is "OpenRTB v2.6-YYYYMM", and the tag is "2.6-YYYYMM" where YYYYMM is the date code (e.g. 202301 for January 2023).
The result of this process is that tagged releases are created for each release of OpenRTB, and the history of these is easily reviewed. The `main` branch for the repository will always reflect the most recent release, and ongoing development work will always occur in the `develop` branch.
From 23d9ff5b18cb1b0eed292c0fded16e698c01843d Mon Sep 17 00:00:00 2001
From: Rob Hazan
Date: Wed, 2 Nov 2022 11:45:19 -0400
Subject: [PATCH 41/64] Review to occur during last week
Rather than constraining ourselves to "last Friday".
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 50cabab..1ea0682 100644
--- a/README.md
+++ b/README.md
@@ -37,7 +37,7 @@ Over the course of each month, the Programmatic Supply Chain Working Group and C
- ask the author(s) for additional changes
- reject it (with a rationale)
-On the last Friday of the month, if there are any approved PRs in the `develop` branch, the following steps are executed:
+During the last week of the month, if there are any approved PRs in the `develop` branch, the following steps are executed:
1. A PR is created to merge the `develop` branch into the `main` branch.
1. A new Release and Tag are created concurrently. The naming convention for the release is "OpenRTB v2.6-YYYYMM", and the tag is "2.6-YYYYMM" where YYYYMM is the date code (e.g. 202301 for January 2023).
From 32fad77aa1aee12f3ae6c2e7e0ff432ed0375cd1 Mon Sep 17 00:00:00 2001
From: Jason Shao
Date: Fri, 4 Nov 2022 11:39:51 -0400
Subject: [PATCH 42/64] Update Brand Safety to Ad Quality
as Brand Safety tends to refer to Brand's perception of quality more than the publishers
---
implementation.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/implementation.md b/implementation.md
index 846c404..ac300ea 100644
--- a/implementation.md
+++ b/implementation.md
@@ -1169,7 +1169,7 @@ Key objects such as imp.qty and dooh have been added to the OpenRTB specificatio
| imp.etime | integer | The exposure time in seconds per view that the creative will be displayed before refreshing to the next creative. |
-### 7.9.3 Commercially Critical Brand Safety
+### 7.9.3 Commercially Critical Ad Quality
One bad advert being served at one time to one person is survivable.
One bad advert served at one time to 1000’s of people in a public place will lead to a Media Owner and/or Publisher risking their contract/permission to serve ads to networks of screens.
From 6684d770b1180f527714a0832d050fb9ea9861f9 Mon Sep 17 00:00:00 2001
From: Jason Shao
Date: Fri, 4 Nov 2022 11:58:53 -0400
Subject: [PATCH 43/64] Removing schema references (since it's not a complete
2.6 schema)
@knittingmedia purging this since I don't think we can have a partial schema and I don't think this schema is "official" and complete
---
implementation.md | 4 ----
1 file changed, 4 deletions(-)
diff --git a/implementation.md b/implementation.md
index ac300ea..9dda944 100644
--- a/implementation.md
+++ b/implementation.md
@@ -1203,7 +1203,6 @@ The above auction would translate to an invoice of $0.07575.
```javascript
{
- "$schema": "https://raw.githubusercontent.com/knittingmedia/OpenRTB/main/Schema/OpenRTB_OOH_V1.json",
"id": "162059897743978051070",
"at": 1,
"imp": [
@@ -1308,7 +1307,6 @@ The above auction would translate to an invoice of $0.07575.
```javascript
{
- "$schema": "https://raw.githubusercontent.com/knittingmedia/OpenRTB/main/Schema/OpenRTB_OOH_V1_response.json",
"id": "1234567890",
"bidid": "162059897743978051070",
"cur": "GBP",
@@ -1355,7 +1353,6 @@ The above auction would translate to an invoice of $0.07575.
```javascript
{
- "$schema": "https://raw.githubusercontent.com/knittingmedia/OpenRTB/main/Schema/OpenRTB_OOH_V1.json",
"id": "873465983764395",
"at": 1,
"imp": [
@@ -1442,7 +1439,6 @@ The above auction would translate to an invoice of $0.07575.
```javascript
{
- "$schema": "https://raw.githubusercontent.com/knittingmedia/OpenRTB/main/Schema/OpenRTB_OOH_V1_response.json",
"id": "1234567890",
"bidid": "162059897743978051070",
"cur": "GBP",
From bf091ce58308760bb24e37a538976179f34f52d2 Mon Sep 17 00:00:00 2001
From: hillslatt <114763292+hillslatt@users.noreply.github.com>
Date: Fri, 4 Nov 2022 12:35:55 -0400
Subject: [PATCH 44/64] Updated Object Model Image (#26)
updated ERD, minor text edits
Co-authored-by: wittjill <57421053+wittjill@users.noreply.github.com>
Co-authored-by: Jason Shao
---
2.6.md | 454 ++++++++++++++++++++++----------------------
README.md | 9 +-
assets/ORTB ERD.png | Bin 0 -> 48214 bytes
3 files changed, 235 insertions(+), 228 deletions(-)
create mode 100644 assets/ORTB ERD.png
diff --git a/2.6.md b/2.6.md
index b0283ad..882941b 100644
--- a/2.6.md
+++ b/2.6.md
@@ -1,5 +1,3 @@
-2.6 final draft
-
# About the IAB Tech Lab
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
@@ -10,7 +8,7 @@ Stanislav Belov, Software Engineer, Google; Allen Dove, CTO, Magnite; Steven Kat
### IAB Tech Lab Lead:
-Jill Wittkopp, VP of Product, IAB Tech Lab
+Hillary Slattery, Director of Product, IAB Tech Lab
### License
@@ -156,10 +154,6 @@ THE STANDARDS, THE SPECIFICATIONS, THE MEASUREMENT GUIDELINES, AND ANY OTHER MAT
- [4.3.3 - Comparison of Ad Serving Approaches](#comparisonofapproaches)
- - [4.3.4 - Ad Served on the Win Notice](#adservedonwin)
-
- - [4.3.5 - Ad Served in the Bid](#adservedinbid)
-
- [4.4 - Substitution Macros](#substitutionmacros)
- [4.4.1 - Notes on the macro ${AUCTION_MIN_TO_WIN}](#notesonmacro)
@@ -212,10 +206,9 @@ THE STANDARDS, THE SPECIFICATIONS, THE MEASUREMENT GUIDELINES, AND ANY OTHER MAT
- [7.8 - Counting Billable Events and Tracked Ads](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/implementation.md#78-counting-billable-events-and-tracked-ads-)
- - [Best Practices for server-side billing notifications](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/implementation.md#best-practices-for-server-side-billing-notifications-)
+- [7.8 - Best Practices for server-side billing notifications](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/implementation.md#best-practices-for-server-side-billing-notifications-)
- [7.9 - Digital Out-Of-Home](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/OOH-Ammends/implementation.md#79---digital-out-of-home-)
-
## [Appendix A. Additional Information](#appendixa)
@@ -238,47 +231,50 @@ Some optional attributes are denoted "recommended." As that term is used herein
Examples of required attributes. Grouped at the tops of tables for convenience |
id |
- string, required |
+ string; required |
... |
imp |
- object array; required; default “adcom” |
+ object array; required |
... |
Examples of recommended attributes. Grouped after required attributes. |
site |
- object; recommended |
+ object; recommended |
... |
app |
- object; recommended * |
- .... |
+ object; recommended |
+ ... |
Examples of optional attributes with and without defaults. Attributes are assumed optional unless explicitly qualified as required or recommended. |
test |
- integer; default 0 * |
- .... |
+ integer; default 0 |
+ ... |
at |
- integer; recommended |
+ integer; default 2 |
... |
tmax |
- object; * |
- .... |
+ integer; |
+ ... |
wseat |
- string array * |
- .... |
+ string array |
+ ... |
+*Example of how Required, Recommended and Optional attributes are presented.*
+
+**IMPORTANT:** Since **recommended** attributes are not required, they may not be available from all supply sources. It is suggested that all parties to OpenRTB trasnaction develop an integration checklist to identify which attributes the supply side supports in the bid request, and which attributes the demand side requires for ad decisioning.
# 1. Introduction
@@ -288,18 +284,17 @@ The mission of OpenRTB is to spur growth in Real-Time Bidding (RTB) marketplaces
This document specifies a standard for the Real-Time Bidding Interface that grew out of previous OpenRTB collaboration on the “block list project” and the “OpenRTB Mobile” project. These protocol standards aim to simplify the connection between suppliers of publisher inventory (i.e., exchanges, networks working with publishers, and sell-side platforms) and competitive buyers of that inventory (i.e., bidders, demand side platforms, or networks working with advertisers).
-The overall goal of OpenRTB is and has been to create a lingua franca for communicating between buyers and sellers. The intent is not to regulate exactly how each business operates. It aims to make integration between parties easier, so that innovation can happen at a deeper-level at each of the businesses in the ecosystem.
+The overall goal of OpenRTB is and has been to create a *lingua franca* for communicating between buyers and sellers. The intent is not to regulate exactly how each business operates. It aims to make integration between parties easier, so that innovation can happen at a deeper-level at each of the businesses in the ecosystem.
## 1.2 - History of OpenRTB
-OpenRTB was launched as a pilot project between three demand-side platforms (DataXu, MediaMath, and Turn) and three sell-side platforms (Admeld, PubMatic, and The Rubicon Project) in November 2010. The first goal was to standardize communication between parties for exchanging block lists.
-Version 1.0 of the OpenRTB block list specification was released in December 2010.
+OpenRTB was launched as a pilot project between three demand-side platforms (DataXu, MediaMath, and Turn) and three sell-side platforms (Admeld, PubMatic, and The Rubicon Project) in November 2010. The first goal was to standardize communication between parties for exchanging block lists. Version 1.0 of the OpenRTB block list specification was released in December 2010.
After a positive response from the industry, Nexage approached the OpenRTB project with a proposal to create an API specification for OpenRTB focusing on the actual real-time bid request/response protocol and specifically to support mobile advertising. The mobile subcommittee was formed between companies representing the buy-side (DataXu, Fiksu, and [X+1]) and companies representing the sell- side (Nexage, Pubmatic, Smaato, and Jumptap). This project resulted in the OpenRTB Mobile 1.0 specification, which was released in February 2011.
Following the release of the mobile specification, a video subcommittee was formed with video ad exchanges (BrightRoll and Adap.tv) collaborating with DataXu and ContextWeb to incorporate support for video. The goal was to incorporate support for display, video, and mobile in one document. This effort resulted in OpenRTB 2.0, which was released as a unified standard in June 2011.
-Due to very widespread adoption by the industry, OpenRTB was adopted as an IAB Tech Lab standard in January 2012 with the release of version 2.1. Governance over the technical content of the specification remains with the OpenRTB community and its governance rules.
+Due to very widespread adoption by the industry, OpenRTB was adopted as an IAB Tech Lab standard in January 2012 with the release of version 2.1.
## 1.3 - Version History
@@ -330,8 +325,6 @@ Due to very widespread adoption by the industry, OpenRTB was adopted as an IAB T
1.0 - Original Release of OpenRTB block list specifications.
## 1.4 - Resources
-OpenRTB GitHub Repository https://github.com/InteractiveAdvertisingBureau/openrtb
-
Updates to the specification are made through the IAB Tech Lab’s [Programmatic Supply Chain Working Group](https://iabtechlab.com/working-groups/programmatic-supply-chain-working-group/). Contact techlab@iabtechlab.com to join the working group and participate in Slack discussions.
## 1.5 - Terminology
@@ -346,7 +339,7 @@ The following terms are used throughout this document specifically in the contex
RTB |
- Bidding for individual impressions in real-time (i.e., while a consumer is waiting) |
+ Bidding for individual impressions in real-time (i.e., while a consumer is waiting). |
Exchange |
@@ -354,7 +347,7 @@ The following terms are used throughout this document specifically in the contex
Bidder |
- an entity that competes in real-time auctions to acquire impressions |
+ An entity that competes in real-time auctions to acquire impressions. |
Seat |
@@ -383,11 +376,11 @@ The URLs for win, billing, and loss notices and the ad markup itself can contain
![](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/864a56706b106eda94c03abefaa01dd43544864c/assets/Figure1%20OpenRTB.png)
-Figure 2: Reference Model - Request Sequence.
+*Figure 2: Reference Model - Request Sequence.*
This specification focuses on the real-time interactions of bid request and response and the win, billing, and loss notices. Related specifications include:
-- [AdCOM](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md): The Advertising Common Object Model, a companion specification that defines common objects and values expected to be used across many IAB Tech Lab spec. As of OpenRTB 2.6, all enumerated lists used by OpenRTB 2.6 are kept in AdCOM to enable more rapid iteration.
+- [AdCOM](https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/master/AdCOM%20v1.0%20FINAL.md): The Advertising Common Object Model, a companion specification that defines common objects and values expected to be used across many IAB Tech Lab specifications. As of OpenRTB 2.6, all enumerated lists used by OpenRTB 2.6 are kept in AdCOM to enable more rapid iteration.
- [OpenRTB Ad Management API](https://github.com/InteractiveAdvertisingBureau/AdManagementAPI/blob/master/Ad%20Management%20API%201.0%20FINAL.md): A companion specification for facilitating creative review between bidders and exchanges.
Other interactions (e.g., block list synchronization, traffic control, etc.) are candidates for future OpenRTB initiatives or alternate projects.
@@ -403,13 +396,13 @@ Invalid calls (e.g., a bid request containing a malformed or corrupt payload) sh
## 2.2 - Security
-HTTPS (i.e., secure HTTP) is not required for OpenRTB compliance. However, there is a growing trend in the industry to use HTTPS for added security of exchange/bidder communications. It is recommended, therefore, that exchanges and bidders consider supporting both HTTP and HTTPS.
+HTTPS is not technically required for a functioning OpenRTB implementation. However, HTTPS is increasingly customary. It is strongly recommended that exchanges and bidders use only HTTPS.
## 2.3 - Data Format
JSON (JavaScript Object Notation) is the suggested format for bid request and bid response data payloads. JSON was chosen for its combination of human readability and compactness. The data payloads are described in Section 3 and Section 4.
-Optionally, an exchange may also offer binary representations (e.g., compressed JSON, ProtoBuf, Avro, etc.), which can be more efficient in terms of transmission time and bandwidth. The IAB Tech Lab may offer reference implementations for these or other formats. When available, the use of these IAB reference implementations is highly recommended to reduce exchange-specific variations.
+Optionally, an exchange may also offer binary representations (e.g., compressed JSON, ProtoBuf, Avro, etc.), which can be more efficient in terms of transmission time and bandwidth. The IAB Tech Lab may offer reference implementations for these or other formats. When available, the use of these reference implementations is highly recommended to reduce exchange-specific variations.
The bid request specifies the representation as a mime type using the Content-Type HTTP header. The mime type for the standard JSON representation is “application/json” as shown. The format of the bid response must be the same as the bid request.
@@ -423,17 +416,15 @@ As a convention, the absence of an attribute has a formal meaning. In most cases
Compressing data sent between exchanges and bidders can be very beneficial. Compression greatly reduces the size of data transferred and thus saves network bandwidth for both exchanges and bidders. To realize these savings fully, compression should be enabled for both the bid request sent by the exchange and the bid response returned by the bidder.
-Compression can be enabled on the bid response using standard HTTP 1.1 mechanisms. Most webservers already support gzip compression of response content and as such it is an ideal choice. For an exchange to signal they would like the response to be compressed, it should set the standard HTTP
-1.1 Accept-Encoding header. The encoding value used should be “gzip”.
+Compression can be enabled on the bid response using standard HTTP 1.1 mechanisms. Most webservers already support gzip compression of response content and as such it is an ideal choice. For an exchange to signal they would like the response to be compressed, it should set the standard HTTP 1.1 Accept-Encoding header. The encoding value used should be “gzip”.
```accept-encoding: gzip```
-This header represents to bidders an indication by the exchange that it is capable of accepting gzip encoding for the response. If the bidder server supports this and is correctly configured, it will automatically respond with content that is gzip encoded. This will be indicated using the standard HTTP
-1.1 Content-Encoding header.
+This header represents to bidders an indication by the exchange that it is capable of accepting gzip encoding for the response. If the bidder server supports this and is correctly configured, it will automatically respond with content that is gzip encoded. This will be indicated using the standard HTTP 1.1 Content-Encoding header.
```content-encoding: gzip```
-To enable compression on the bid request, it must first be agreed upon between the exchange and the bidder that this is supported. This is similar to when a custom data format is used since the exchange has to know both format and encoding before sending the bid request. If the bidder supports it, the exchange should indicate it is sending a gzip compressed bid request by setting the HTTP 1.1 Content- Encoding header. The encoding value used should be `gzip`.
+To enable compression on the bid request, it must first be agreed upon between the exchange and the bidder that this is supported. This is similar to when a custom data format is used since the exchange has to know both format and encoding before sending the bid request. If the bidder supports it, the exchange should indicate it is sending a gzip compressed bid request by setting the HTTP 1.1 Content- Encoding header. The encoding value used should be "gzip".
```content-enconding: gzip```
@@ -451,14 +442,21 @@ This version should be specified as `.` (e.g., 2.6).
## 2.6 - Versioning Behavior
-Breaking changes are not permitted without a major version increment. The minor version number increments are reserved for non-breaking changes. This means that implementers need not specifically treat the minor version of OpenRTB 2.x as significant, in most circumstances. For example:
+As of OpenRTB 2.6-202211, OpenRTB's version number is only incremented on breaking changes. In other words, OpenRTB 2.7 should be considered a distinct version from OpenRTB 2.6 when there is a need for distinguishing versions. For example, a demand source might regard the version header when parsing a bid request received from a supply source. See OpenRTB Principles.
+
+The current version of the OpenRTB specification is updated approximately once a month if there are non-breaking improvements to be released such as new fields, objects, or values in enumerated lists. Errata, such as clarifications or corrections to descriptions not materially impacting the specification itself, are also addressed during monthly updates. See Errata.
+
+Release branches are created for each monthly release and the history of these can be reviewed on GitHub. The master branch for the repository will always reflect the most recent release, whereas ongoing development work occurs in the 'develop' branch.
+
+This versioning policy is a break from historical practice for OpenRTB 2.x. In versions of OpenRTB prior to 2.6, major version numbers represent breaking changes and minor version numbers represent non-breaking changes.
+This means:
- Bidders and exchanges must tolerate receiving new or unexpected fields and enumerated list values gracefully, treating them as unknown or ignoring them
- Bidders and exchanges should freely transmit new fields or enumerated list values
-For example, if a new field or object is introduced in a future version of OpenRTB 2.x, exchanges should immediately start transmitting it to bidders, if the exchange chooses to implement support for that field. Bidders should start consuming it at their discretion, if it is relevant to them. Neither party needs to explicitly negotiate an "upgrade" to the latest minor version number, but rather should discuss specific fields of interest as they become available.
+For example, if a new field or object is introduced in a future version of OpenRTB 2.6, exchanges should immediately start transmitting it to bidders, if the exchange chooses to implement support for that field. Bidders should start consuming it at their discretion, if it is relevant to them. Neither party needs to explicitly negotiate an "upgrade" to the latest release, but rather should discuss specific fields of interest as they become available.
-New minor versions of OpenRTB 2.x may introduce additional optional ways of handling things. For example, burl field was introduced in OpenRTB 2.5. Use of `burl` (instead of including a pixel in markup in `adm` field) is a breaking change for a specific exchange <> bidder integration, but this is a result of a decision between these parties to switch impression counting methodology and not a result of OpenRTB 2.5 itself. Partners should discuss such situations before making breaking changes to their integrations.
+New minor versions of OpenRTB 2.6 may introduce additional optional ways of handling things. For example, burl field was introduced in OpenRTB 2.5. Use of `burl` (instead of including a pixel in markup in `adm` field) is a breaking change for a specific exchange <> bidder integration, but this is a result of a decision between these parties to switch impression counting methodology and not a result of OpenRTB 2.5 itself. Partners should discuss such situations before making breaking changes to their integrations.
## 2.7 - Privacy
@@ -467,7 +465,7 @@ Without limiting the scope of the Disclaimer, the OpenRTB specification does inc
- The status of do not track headers (Section 3.2.18)
- Presence of site/app privacy policies (Section 3.2.13 and Section 3.2.14)
- Regulations or laws that the transmitter of a bid request believes are applicable (Section 3.2.3)
-- Consent and opt-out information strings for the user (US Privacy String and Transparency and Consent Framework consent strings) (Section 3.2.3 and Section 3.2.20)
+- Consent and opt-out information strings for the user (Global Privacy Platform, US Privacy String and Transparency and Consent Framework consent strings) (Section 3.2.3 and Section 3.2.20)
As noted in the Disclaimer, each implementer is responsible to ensure that their implementation complies with any applicable laws, regulations, or self-regulatory frameworks.
@@ -489,9 +487,9 @@ RTB transactions are initiated when an exchange or other supply source sends a b
Following is the object model for the bid request. The top-level object (i.e., in JSON the unnamed outer object) is denoted as `BidRequest` in the model. Of its direct subordinates, only `Imp` is technically required since it is fundamental to describing the impression being sold and it requires at least one of `Banner` (which may allow multiple formats), `Video`, `Audio`, and `Native` to define the type of impression (i.e., whichever one or more the publisher is willing to accept; although a bid will be for exactly one of those specified). An impression can optionally be subject to a private marketplace.
-![](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/864a56706b106eda94c03abefaa01dd43544864c/assets/Figure2%20Bid%20Request%20object%20model.png)
+![](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/a29f4b1060c04813270dbf13607bba0403409068/assets/ORTB%20ERD.png)
-Figure 3: Bid Request object model.
+*Figure 3: Bid Request object model.*
Other subordinates to the `BidRequest` provide various forms of information to assist bidders in making targeting and pricing decisions.
@@ -515,12 +513,12 @@ The following table summarizes the objects in the Bid Request model and serves a
Source |
3.2.2 |
- Request source details on post-auction decisioning (e.g., header bidding). |
+ Request source details on post-auction decisioning (e.g., header bidding). |
Regs |
3.2.3 |
- Regulatory conditions in effect for all impressions in this bid request. |
+ Regulatory conditions in effect for all impressions in this bid request. |
Imp |
@@ -560,7 +558,7 @@ The following table summarizes the objects in the Bid Request model and serves a
Pmp |
3.2.11 |
- Collection of private marketplace (PMP) deals applicable to this impression. | .
+ Collection of private marketplace (PMP) deals applicable to this impression. |
Deal |
@@ -580,7 +578,7 @@ The following table summarizes the objects in the Bid Request model and serves a
Pubisher |
3.2.15 |
- Entity that controls the content of and distributes the site or app. | .
+ Entity that controls the content of and distributes the site or app. |
Content |
@@ -701,12 +699,12 @@ There are also several subordinate objects that provide detailed data to potenti
imp |
object array; required |
- Array of Imp objects (Section 3.2.4) representing the impressions offered. At least 1 Imp object is required. |
+ Array of Imp objects (Section 3.2.4) representing the impressions offered. At least 1 Imp object is required. |
site |
object; recommended |
- Details via a Site object (Section 3.2.13) about the publisher’s website. Only applicable and recommended for websites. |
+ Details via a Site object (Section 3.2.13) about the publisher’s website. Only applicable and recommended for websites. |
app |
@@ -741,17 +739,17 @@ There are also several subordinate objects that provide detailed data to potenti
tmax |
integer |
- Maximum time in milliseconds the exchange allows for bids to be received including Internet latency to avoid timeout. This value supersedes any a priori guidance from the exchange. |
+ Maximum time in milliseconds the exchange allows for bids to be received including Internet latency to avoid timeout. This value supersedes any *a priori* guidance from the exchange. |
wseat |
string array |
- Allowed list of buyer seats (e.g., advertisers, agencies) allowed to bid on this impression. IDs of seats and knowledge of the buyer’s customers to which they refer must be coordinated between bidders and the exchange a priori. At most, only one of wseat and bseat should be used in the same request. Omission of both implies no seat restrictions. |
+ Allowed list of buyer seats (e.g., advertisers, agencies) allowed to bid on this impression. IDs of seats and knowledge of the buyer’s customers to which they refer must be coordinated between bidders and the exchange *a priori*. At most, only one of wseat and bseat should be used in the same request. Omission of both implies no seat restrictions. |
bseat |
string array |
- Block list of buyer seats (e.g., advertisers, agencies) restricted from bidding on this impression. IDs of seats and knowledge of the buyer’s customers to which they refer must be coordinated between bidders and the exchange a priori. At most, only one of wseat and bseat should be used in the same request. Omission of both implies no seat restrictions. | .
+ Block list of buyer seats (e.g., advertisers, agencies) restricted from bidding on this impression. IDs of seats and knowledge of the buyer’s customers to which they refer must be coordinated between bidders and the exchange *a priori*. At most, only one of wseat and bseat should be used in the same request. Omission of both implies no seat restrictions. |
allimps |
@@ -766,23 +764,22 @@ There are also several subordinate objects that provide detailed data to potenti
wlang |
string array |
- Allowed list of languages for creatives using ISO-639-1-alpha-2. Omission implies no specific restrictions, but buyers would be advised to consider language attribute in the Device and/or Content objects if available. Only one of wlang or wlangb should be present. |
+ Allowed list of languages for creatives using ISO-639-1-alpha-2. Omission implies no specific restrictions, but buyers would be advised to consider language attribute in the Device and/or Content objects if available. Only one of wlang or wlangb should be present. |
wlangb |
string array |
- Allowed list of languages for creatives using IETF BCP 47I. Omission implies no specific restrictions, but buyers would be advised to consider language attribute in the Device and/or Content objects if available. Only one of wlang or wlangb should be present. | .
-
+ Allowed list of languages for creatives using IETF BCP 47I. Omission implies no specific restrictions, but buyers would be advised to consider language attribute in the Device and/or Content objects if available. Only one of wlang or wlangb should be present. |
+
bcat |
string array |
- Blocked advertiser categories using the specified category taxonomy.
-The taxonomy to be used is defined by the cattax field. If no cattax field is supplied IAB Content Category Taxonomy 1.0 is assumed. |
+ Blocked advertiser categories using the specified category taxonomy. The taxonomy to be used is defined by the cattax field. If no cattax field is supplied IAB Content Taxonomy 1.0 is assumed. |
cattax |
integer; default 1 |
- The taxonomy in use for bcat. Refer to the AdCOM 1.0 list List: Category Taxonomies |
+ The taxonomy in use for bcat. Refer to the AdCOM 1.0 list List: Category Taxonomies for values. |
badv |
@@ -843,7 +840,7 @@ This object describes the nature and behavior of the entity that is the source o
schain |
object; recommended |
- This object represents both the links in the supply chain as well as an indicator whether or not the supply chain is complete. Details via the SupplyChain object (section 3.2.25) |
+ This object represents both the links in the supply chain as well as an indicator whether or not the supply chain is complete. Details via the SupplyChain object (section 3.2.25). |
ext |
@@ -868,12 +865,12 @@ This object contains any legal, governmental, or industry regulations that the s
coppa |
integer |
- Flag indicating if this request is subject to the COPPA regulations established by the USA FTC, where 0 = no, 1 = yes. Refer to Section 7.5 for more information. |
+ Flag indicating if this request is subject to the COPPA regulations established by the USA FTC, where 0 = no, 1 = yes. Refer to Section 7.5 for more information. |
gdpr |
integer |
- Flag that indicates whether or not the request is subject to GDPR regulations 0 = No, 1 = Yes, omission indicates Unknown. Refer to Section 7.5 for more information. |
+ Flag that indicates whether or not the request is subject to GDPR regulations 0 = No, 1 = Yes, omission indicates unknown. Refer to Section 7.5 for more information. |
us_privacy |
@@ -914,7 +911,7 @@ The presence of `Banner` (Section 3.2.6), `Video` (Section 3.2.7), and/or `Nativ
banner |
object |
- A Banner object (section 3.2.6); required if this impression is offered as a banner ad opportunity. |
+ A Banner object (section 3.2.6); required if this impression is offered as a banner ad opportunity. |
video |
@@ -939,14 +936,12 @@ The presence of `Banner` (Section 3.2.6), `Video` (Section 3.2.7), and/or `Nativ
displaymanager |
string |
- Name of ad mediation partner, SDK technology, or player responsible for rendering ad (typically video or mobile). Used by some ad servers to customize ad code by partner.
-Recommended for video and/or apps. |
+ Name of ad mediation partner, SDK technology, or player responsible for rendering ad (typically video or mobile). Used by some ad servers to customize ad code by partner. Recommended for video and/or apps. |
displaymanagerver |
string |
- Version of ad mediation partner, SDK technology, or player responsible for rendering ad (typically video or mobile). Used by some ad servers to customize ad code by partner.
-Recommended for video and/or apps. |
+ Version of ad mediation partner, SDK technology, or player responsible for rendering ad (typically video or mobile). Used by some ad servers to customize ad code by partner. Recommended for video and/or apps. |
instl |
@@ -956,7 +951,7 @@ Recommended for video and/or apps.
tagid |
string |
- Identifier for specific ad placement or ad tag that was used to initiate the auction. This can be useful for debugging of any issues, or for optimization by the buyer | .
+ Identifier for specific ad placement or ad tag that was used to initiate the auction. This can be useful for debugging of any issues, or for optimization by the buyer. |
bidfloor |
@@ -966,7 +961,7 @@ Recommended for video and/or apps.
bidfloorcur |
string; default "USD" |
- Currency specified using ISO-4217 alpha codes. This may be different from bid currency returned by bidder if this is allowed by the exchange. |
+ Currency specified using ISO-4217 alpha codes. This may be different from bid currency returned by bidder if this is allowed by the exchange. |
clickbrowser |
@@ -977,11 +972,11 @@ Recommended for video and/or apps.
secure |
integer |
Flag to indicate if the impression requires secure HTTPS URL creative assets and markup, where 0 = non-secure, 1 = secure. If omitted, the secure state is unknown, but non-secure HTTP support can be assumed. |
-
+
iframebuster |
string array |
- Array of exchange-specific names of supported iframe busters. |
+ Array of exchange-specific names of supported iframe busters. |
rwdd |
@@ -1033,7 +1028,7 @@ This object is associated with an impression as an array of metrics. These metri
type |
string; required |
- Type of metric being presented using exchange curated string names which should be published to bidders a priori. |
+ Type of metric being presented using exchange curated string names which should be published to bidders a priori. |
value |
@@ -1070,8 +1065,8 @@ The presence of a `Banner` as a subordinate of the `Imp` object indicates that t
format |
- object array; recommended |
- Array of format objects (Section 3.2.10) representing the banner sizes permitted. If none are specified, then use of the h and w attributes is highly recommended. |
+ object array; recommended |
+ Array of format objects (Section 3.2.10) representing the banner sizes permitted. If none are specified, then use of the h and w attributes is highly recommended. |
w |
@@ -1086,13 +1081,12 @@ The presence of a `Banner` as a subordinate of the `Imp` object indicates that t
btype |
integer array |
- Blocked banner ad types.
-Values:
-1 = XHTML Text Ad,
-2 = XHTML Banner Ad,
-3 = JavaScript Ad,
-4 = iframe.
- |
+ Blocked banner ad types.
+ Values:
+1 = XHTML Text Ad,
+2 = XHTML Banner Ad,
+3 = JavaScript Ad,
+4 = iframe.
|
battr |
@@ -1117,7 +1111,7 @@ Values:
expdir |
integer array |
- Directions in which the banner may expand. Refer to List: Expandable Directions in AdCOM 1.0. |
+ Directions in which the banner may expand. Refer to List: Expandable Directions in AdCOM 1.0. |
api |
@@ -1127,12 +1121,12 @@ Values:
id |
string |
- Unique identifier for this banner object. Recommended when Banner objects are used with a Video object (Section 3.2.7) to represent an array of companion ads. Values usually start at 1 and increase with each object; should be unique within an impression. |
+ Unique identifier for this banner object. Recommended when Banner objects are used with a Video object (Section 3.2.7) to represent an array of companion ads. Values usually start at 1 and increase with each object; should be unique within an impression. |
vcm |
integer |
- Relevant only for Banner objects used with a Video object (Section 3.2.7) in an array of companion ads. Indicates the companion banner rendering mode relative to the associated video, where 0 = concurrent, 1 = end-card. |
+ Relevant only for Banner objects used with a Video object (Section 3.2.7) in an array of companion ads. Indicates the companion banner rendering mode relative to the associated video, where 0 = concurrent, 1 = end-card. |
ext |
@@ -1146,9 +1140,9 @@ Values:
### 3.2.7 - Object: Video
-This object represents an in-stream video impression. Many of the fields are non-essential for minimally viable transactions, but are included to offer fine control when needed. Video in OpenRTB generally assumes compliance with the VAST standard. As such, the notion of companion ads is supported by optionally including an array of `Banner` objects (refer to the `Banner` object in Section 3.2.6) that define these companion ads.
+This object represents a video impression. Many of the fields are non-essential for minimally viable transactions, but are included to offer fine control when needed. Video in OpenRTB generally assumes compliance with the VAST standard. As such, the notion of companion ads is supported by optionally including an array of `Banner` objects (refer to the `Banner` object in Section 3.2.6) that define these companion ads.
-The presence of a `Video` as a subordinate of the `Imp` object indicates that this impression is offered as a video type impression. At the publisher’s discretion, that same impression may also be offered as banner, audio, and/or native by also including as `Imp` subordinates objects of those types. However, any given bid for the impression must conform to one of the offered types.
+The presence of a `Video` as a subordinate of the `Imp` object indicates that this impression is offered as a video type impression. At the publisher’s discretion, that same impression may also be offered as `Banner`, `Audio`, and/or `Native` by also including as `Imp` subordinates objects of those types. However, any given bid for the impression must conform to one of the offered types.
@@ -1160,17 +1154,17 @@ The presence of a `Video` as a subordinate of the `Imp` object indicates that th
mimes |
string array; required |
- Content MIME types supported (e.g., “video/mp4”). |
+ Content MIME types supported (e.g., “video/mp4 ”). |
minduration |
integer; default 0 recommended |
- Minimum video ad duration in seconds. This field is mutually exclusive with rqddurs; only one of minduration and rqddurs may be in a bid request. |
+ Minimum video ad duration in seconds. This field is mutually exclusive with rqddurs ; only one of minduration and rqddurs may be in a bid request. |
maxduration |
integer; recommended |
- Maximum video ad duration in seconds. This field is mutually exclusive with rqddurs; only one of maxduration and rqddurs may be in a bid request. |
+ Maximum video ad duration in seconds. This field is mutually exclusive with rqddurs ; only one of maxduration and rqddurs may be in a bid request. |
startdelay |
@@ -1185,12 +1179,12 @@ The presence of a `Video` as a subordinate of the `Imp` object indicates that th
poddur |
integer; recommended |
- Indicates the total amount of time in seconds that advertisers may fill for a “dynamic” video ad pod (See Section 7.6 for more details), or the dynamic portion of a “hybrid” ad pod. This field is required only for the dynamic portion(s) of video ad pods. This field refers to the length of the entire ad break, whereas minduration/maxduration/rqddurs are constraints relating to the slots that make up the pod |
+ Indicates the total amount of time in seconds that advertisers may fill for a “dynamic” video ad pod (See Section 7.6 for more details), or the dynamic portion of a “hybrid” ad pod. This field is required only for the dynamic portion(s) of video ad pods. This field refers to the length of the entire ad break, whereas minduration /maxduration /rqddurs are constraints relating to the slots that make up the pod. |
protocols |
integer array; recommended |
- Array of supported video protocols. Refer to List: Creative Substypes - Audio/Video in AdCOM 1.0. |
+ Array of supported video protocols. Refer to List: Creative Substypes - Audio/Video in AdCOM 1.0. |
w |
@@ -1200,7 +1194,7 @@ The presence of a `Video` as a subordinate of the `Imp` object indicates that th
h |
integer; recommended |
- Height of the video player in device independent pixels (DIPS). |
+ Height of the video player in device independent pixels (DIPS). |
podid |
@@ -1210,12 +1204,12 @@ The presence of a `Video` as a subordinate of the `Imp` object indicates that th
podseq |
integer; default 0 |
- The sequence (position) of the video ad pod within a content stream. Refer to in AdCOM 1.0 for guidance on the use of this field. |
+ The sequence (position) of the video ad pod within a content stream. Refer to in AdCOM 1.0 for guidance on the use of this field. |
rqddurs |
integer array |
- Precise acceptable durations for video creatives in seconds. This field specifically targets the Live TV use case where non-exact ad durations would result in undesirable ‘dead air’. This field is mutually exclusive with minduration and maxduration; if rqddurs is specified, minduration and maxduration must not be specified and vice versa |
+ Precise acceptable durations for video creatives in seconds. This field specifically targets the Live TV use case where non-exact ad durations would result in undesirable ‘dead air’. This field is mutually exclusive with minduration and maxduration ; if rqddurs is specified, minduration and maxduration must not be specified and vice versa. |
placement |
@@ -1230,8 +1224,7 @@ The presence of a `Video` as a subordinate of the `Imp` object indicates that th
skip |
integer |
- Indicates if the player will allow the video to be skipped, where 0 = no, 1 = yes.
-If a bidder sends markup/creative that is itself skippable, the Bid object should include the attr array with an element of 16 indicating skippable video. Refer to List: Creative Attributes in AdCOM 1.0. |
+ Indicates if the player will allow the video to be skipped, where 0 = no, 1 = yes. If a bidder sends markup/creative that is itself skippable, the Bid object should include the attr array with an element of 16 indicating skippable video. Refer to List: Creative Attributes in AdCOM 1.0. |
skipmin |
@@ -1245,8 +1238,8 @@ If a bidder sends markup/creative that is itself skippable, the Bid object shoul
sequence |
- integer; default 0 DEPRECATED |
- If multiple ad impressions are offered in the same bid request, the sequence number will allow for the coordinated delivery of multiple creatives. |
+ integer; default 0 DEPRECATED |
+ If multiple ad impressions are offered in the same bid request, the sequence number will allow for the coordinated delivery of multiple creatives. |
slotinpod |
@@ -1257,11 +1250,11 @@ If a bidder sends markup/creative that is itself skippable, the Bid object shoul
mincpmpersec |
float |
Minimum CPM per second. This is a price floor for the "dynamic" portion of a video ad pod, relative to the duration of bids an advertiser may submit. |
-
+
battr |
integer array |
- Blocked creative attributes. Refer to List: Creative Attributes in AdCOM 1.0 |
+ Blocked creative attributes. Refer to List: Creative Attributes in AdCOM 1.0. |
maxextended |
@@ -1271,17 +1264,17 @@ If a bidder sends markup/creative that is itself skippable, the Bid object shoul
minbitrate |
inpteger |
- Minumim bit rate in Kbps. |
+ Minumim bit rate in Kbps (kilobits per second). |
maxbitrate |
integer |
- Maximum bit rate in Kbps. |
+ Maximum bit rate in Kbps (kilobits per second). |
boxingallowed |
integer; default 1 |
- Indicates if letter-boxing of 4:3 content into a 16:9 window is allowed, where 0=no, 1=yes |
+ Indicates if letter-boxing of 4:3 content into a 16:9 window is allowed, where 0=no, 1=yes. |
playbackmethod |
@@ -1291,7 +1284,7 @@ If a bidder sends markup/creative that is itself skippable, the Bid object shoul
playbackend |
integer |
- THe event that causes playback to end. Refer to List: Playback Cessation Modes in AdCOM 1.0. |
+ The event that causes playback to end. Refer to List: Playback Cessation Modes in AdCOM 1.0. |
delivery |
@@ -1332,7 +1325,7 @@ If a bidder sends markup/creative that is itself skippable, the Bid object shoul
This object represents an audio type impression. Many of the fields are non-essential for minimally viable transactions, but are included to offer fine control when needed. Audio in OpenRTB generally assumes compliance with the VAST standard. As such, the notion of companion ads is supported by optionally including an array of `Banner` objects (refer to the `Banner` object in Section 3.2.6) that define these companion ads.
-The presence of a `Audio` as a subordinate of the `Imp` object indicates that this impression is offered as an audio type impression. At the publisher’s discretion, that same impression may also be offered as banner, video, and/or native by also including as `Imp` subordinates objects of those types. However, any given bid for the impression must conform to one of the offered types.
+The presence of a `Audio` as a subordinate of the `Imp` object indicates that this impression is offered as an audio type impression. At the publisher’s discretion, that same impression may also be offered as `Banner`, `Video`, and/or `Native` by also including as `Imp` subordinates objects of those types. However, any given bid for the impression must conform to one of the offered types.
@@ -1344,22 +1337,22 @@ The presence of a `Audio` as a subordinate of the `Imp` object indicates that th
mimes |
string array; required |
- Content MIME types supported (e.g., “audio/mp4” ). |
+ Content MIME types supported (e.g., “audio/mp4” ). |
minduration |
integer; default 0 recommended |
- Minimum audio ad duration in seconds. This field is mutually exclusive with rqddurs; only one of minduration and rqddurs may be in a bid request. |
+ Minimum audio ad duration in seconds. This field is mutually exclusive with rqddurs ; only one of minduration and rqddurs may be in a bid request. |
maxduration |
integer; recommended |
- Maximum audio ad duration in seconds. This field is mutually exclusive with rqddurs; only one of maxduration and rqddurs may be in a bid request. |
+ Maximum audio ad duration in seconds. This field is mutually exclusive with rqddurs ; only one of maxduration and rqddurs may be in a bid request. |
poddur |
integer; recommended |
- Indicates the total amount of time that advertisers may fill for a "dynamic" audio ad pod, or the dynamic portion of a "hybrid" ad pod. This field is required only for the dynamic portion(s) of audio ad pods. This field refers to the length of the entire ad break, wheras minduration/maxduration/rqddurs are constraints relating to the slots that make up the pod. |
+ Indicates the total amount of time that advertisers may fill for a "dynamic" audio ad pod, or the dynamic portion of a "hybrid" ad pod. This field is required only for the dynamic portion(s) of audio ad pods. This field refers to the length of the entire ad break, wheras minduration /maxduration /rqddurs are constraints relating to the slots that make up the pod. |
protocols |
@@ -1369,12 +1362,12 @@ The presence of a `Audio` as a subordinate of the `Imp` object indicates that th
startdelay |
integer; recommended |
- Indicates the start delay in seconds for pre-roll, mid-roll, or post-roll ad placements. Refer to List: Start Delay Modes in AdCOM 1.0. |
+ Indicates the start delay in seconds for pre-roll, mid-roll, or post-roll ad placements. Refer to List: Start Delay Modes in AdCOM 1.0. |
rqddurs |
integer array |
- Precise acceptable durations for audio creatives in seconds. This field specifically targets the live audio/radio use case where non-exact ad durations would result in undesirable 'dead air'. This field is mutually exclusive with minduraiton and maxduration; if rqddurs is specified, minduraiton and maxduration must not be specified and vice versa. |
+ Precise acceptable durations for audio creatives in seconds. This field specifically targets the live audio/radio use case where non-exact ad durations would result in undesirable 'dead air'. This field is mutually exclusive with minduraiton and maxduration ; if rqddurs is specified, minduraiton and maxduration must not be specified and vice versa. |
podid |
@@ -1384,12 +1377,12 @@ The presence of a `Audio` as a subordinate of the `Imp` object indicates that th
podseq |
integer; default 0 |
- The sequence (position) of the audio ad pod within a content stream. Refer to List: Pod Sequence in AdCOM 1.0 for guidance on the use of this field. |
+ The sequence (position) of the audio ad pod within a content stream. Refer to List: Pod Sequence in AdCOM 1.0 for guidance on the use of this field. |
sequence |
- integer; default 0 DEPRECATED |
- If multiple ad impressions are offered in the same bid request, the sequence number will allow for the coordinated delivery of multiple creatives. |
+ integer; default 0 DEPRECATED |
+ If multiple ad impressions are offered in the same bid request, the sequence number will allow for the coordinated delivery of multiple creatives. |
slotinpod |
@@ -1413,23 +1406,23 @@ The presence of a `Audio` as a subordinate of the `Imp` object indicates that th
minbitrate |
- inpteger |
- Minumim bit rate in Kbps. |
+ integer |
+ Minumim bit rate in Kbps (kilobits per second). |
maxbitrate |
integer |
- Maximum bit rate in Kbps. |
+ Maximum bit rate in Kbps (kilobits per second). |
delivery |
integer array |
- Supported delivery methods (e.g., streaming, progressive). If none specified, assume all are supported. Refer to List: Delivery Methods in AdCOM 1.0. |
+ Supported delivery methods (e.g., streaming, progressive). If none specified, assume all are supported. Refer to List: Delivery Methods in AdCOM 1.0. |
companionad |
object array |
- Array of Banner objects (Section 3.2.6) if companion ads are available. |
+ Array of Banner objects (Section 3.2.6) if companion ads are available. |
api |
@@ -1449,12 +1442,12 @@ The presence of a `Audio` as a subordinate of the `Imp` object indicates that th
feed |
integer |
- Type of audio feed. Refer to List: Feed Types in AdCOM 1.0 |
+ Type of audio feed. Refer to List: Feed Types in AdCOM 1.0. |
stitched |
integer |
- Indicates if the ad is stitched with audio content or delivered independently, where 0=no, 1=yes. |
+ Indicates if the ad is stitched with audio content or delivered independently, where 0=no, 1=yes. |
nvol |
@@ -1476,9 +1469,9 @@ The presence of a `Audio` as a subordinate of the `Imp` object indicates that th
This object represents a native type impression. Native ad units are intended to blend seamlessly into the surrounding content (e.g., a sponsored Twitter or Facebook post). As such, the response must be well-structured to afford the publisher fine-grained control over rendering.
-The Native Subcommittee has developed a companion specification to OpenRTB called the Dynamic Native Ads API. It defines the request parameters and response markup structure of native ad units. This object provides the means of transporting request parameters as an opaque string so that the specific parameters can evolve separately under the auspices of the Dynamic Native Ads API. Similarly, the ad markup served will be structured according to that specification.
+The Native Subcommittee has developed a companion specification to OpenRTB called the Dynamic Native Ads API. It defines the request parameters and response markup structure of native ad units. This object provides the means of transporting request parameters as an opaque string so that the specific parameters can evolve separately under the auspices of the Dynamic Native Ads API. Similarly, the ad markup served will be structured according to that specification.
-The presence of a `Native` as a subordinate of the `Imp` object indicates that this impression is offered as a native type impression. At the publisher’s discretion, that same impression may also be offered as banner, video, and/or audio by also including as `Imp` subordinates objects of those types. However, any given bid for the impression must conform to one of the offered types.
+The presence of a `Native` as a subordinate of the `Imp` object indicates that this impression is offered as a native type impression. At the publisher’s discretion, that same impression may also be offered as `Banner`, `Video`, and/or `Audio` by also including as `Imp` subordinates objects of those types. However, any given bid for the impression must conform to one of the offered types.
@@ -1490,14 +1483,12 @@ The presence of a `Native` as a subordinate of the `Imp` object indicates that t
request |
string; required |
- Request payload complying with the Native Ad Specification. The root node of the payload, "native", was dropped in the Native Ads Specification 1.1.
- For Native 1.0, this is a JSON-encoded string consisting of a unnamed root object, with a single subordinate object named 'native', which is the Native Markup Request object, section 4.1 of OpenRTB Native 1.0 specification.
- For Native 1.1 and higher, this is a JSON-encoded string consisting of an unnamed root object which is itself the Native Markup Request Object, section 4.1 of OpenRTB Native 1.1+ |
+ Request payload complying with the Native Ad Specification. The root node of the payload, "native", was dropped in the Native Ads Specification 1.1. For Native 1.0, this is a JSON-encoded string consisting of a unnamed root object, with a single subordinate object named 'native', which is the Native Markup Request object, section 4.1 of OpenRTB Native 1.0 specification. For Native 1.1 and higher, this is a JSON-encoded string consisting of an unnamed root object which is itself the Native Markup Request Object, section 4.1 of OpenRTB Native 1.1+ . |
ver |
string; recommended |
- Version of the Dynamic Native Ads API to which request complies; highly recommended for efficient parsing. |
+ Version of the Dynamic Native Ads API to which request complies; highly recommended for efficient parsing. |
api |
@@ -1507,7 +1498,7 @@ The presence of a `Native` as a subordinate of the `Imp` object indicates that t
battr |
integer array |
- Blocked creative attributes/ Refer to List: Creative Attributes in AdCOM. |
+ Blocked creative attributes. Refer to List: Creative Attributes in AdCOM. |
ext |
@@ -1537,7 +1528,7 @@ This object represents an allowed size (i.e., height and width combination) or F
h |
integer |
- Height in device independent pixels (DIPS). |
+ Height in device independent pixels (DIPS). |
wratio |
@@ -1581,7 +1572,7 @@ This object is the private marketplace container for direct deals between buyers
deals |
object array |
- Array of Deal (Section 3.2.12) objects that convey the specific deals applicable to this impression. |
+ Array of Deal (Section 3.2.12) objects that convey the specific deals applicable to this impression. |
ext |
@@ -1594,8 +1585,7 @@ This object is the private marketplace container for direct deals between buyers
### 3.2.12 - Object: Deal
-This object constitutes a specific deal that was struck
-between a buyer and a seller. Its presence with the `Pmp` collection indicates that this impression is available under the terms of that deal. Refer to Section 7.3 for more details.
+This object constitutes a specific deal that was struck between a buyer and a seller. Its presence with the `Pmp` collection indicates that this impression is available under the terms of that deal. Refer to Section 7.3 for more details.
@@ -1612,7 +1602,7 @@ between a buyer and a seller. Its presence with the `Pmp` collection indicates t
bidfloor |
float; default 0 |
- Minimum bid for this impression expressed in CPM. |
+ Minimum bid for this impression expressed in CPM. |
bidfloorcur |
@@ -1662,7 +1652,7 @@ This object should be included if the ad supported content is a website as oppos
name |
string |
- Site name (may be aliased at the publisher's request). |
+ Site name (may be aliased at the publisher's request). |
domain |
@@ -1677,17 +1667,17 @@ This object should be included if the ad supported content is a website as oppos
cat |
string array |
- Array of IAB TechLab content categories of the site. The taxonomy to be used is defined by the cattax field. |
+ Array of IAB Tech Lab content categories of the site. The taxonomy to be used is defined by the cattax field. |
sectioncat |
string array |
- Array of IAB TechLab content categories that describe the current section of the site. The taxonomy to be used is defined by the cattax field. |
+ Array of IAB Tech Lab content categories that describe the current section of the site. The taxonomy to be used is defined by the cattax field. |
pagecat |
string array |
- Array of IAB TechLab content categories that describe the current page or view of the site. The taxonomy to be used is definied by the cattax field. |
+ Array of IAB Tech Lab content categories that describe the current page or view of the site. The taxonomy to be used is definied by the cattax field. |
page |
@@ -1727,12 +1717,12 @@ This object should be included if the ad supported content is a website as oppos
keywords |
string |
- Comma separated list of keywords about the site. Only one of ‘keywords’ or ‘kwarray’ may be present. |
+ Comma separated list of keywords about the site. Only one of keywords or kwarray may be present. |
kwarray |
string array |
- Array of keywords about the site. Only one of ‘keywords’ or ‘kwarray’ may be present. |
+ Array of keywords about the site. Only one of keywords or kwarray may be present. |
ext |
@@ -1763,12 +1753,12 @@ This object should be included if the ad supported content is a non-browser appl
name |
string |
- App name (may be aliased at the publisher's request). |
+ App name (may be aliased at the publisher's request). |
bundle |
string |
- The store ID of the app in an app store. See OTT/CTV Store Assigned App Identification Guidelines for more details about expected strings for CTV app stores. For mobile apps in Google Play Store, these should be bundle or package names (e.g. com.foo.mygame). For apps in Apple App Store, these should be a numeric ID. |
+ The store ID of the app in an app store. See OTT/CTV Store Assigned App Identification Guidelines for more details about expected strings for CTV app stores. For mobile apps in Google Play Store, these should be bundle or package names (e.g. com.foo.mygame). For apps in Apple App Store, these should be a numeric ID. |
domain |
@@ -1788,21 +1778,21 @@ This object should be included if the ad supported content is a non-browser appl
cat |
string array |
- Array of IAB content categories of the app. The taxonomy to be used is defined by the cattax field. If no cattax field is supplied IAB Content Category Taxonomy 1.0 is assumed. |
+ Array of IAB Tech Lab content categories of the app. The taxonomy to be used is defined by the cattax field. If no cattax field is supplied Content Category Taxonomy 1.0 is assumed. |
sectioncat |
string array |
- Array of IAB TechLab content categories that describe the current section of the app. The taxonomy to be used is defined by the cattax field. |
+ Array of IAB Tech Lab content categories that describe the current section of the app. The taxonomy to be used is defined by the cattax field. |
pagecat |
string array |
- Array of IAB TechLab content categories that describe the current page or view of the app. The taxonomy to be used is definied by the cattax field. |
+ Array of IAB Tech Lab content categories that describe the current page or view of the app. The taxonomy to be used is definied by the cattax field. |
ver |
- srting |
+ string |
Application version. |
@@ -1828,12 +1818,12 @@ This object should be included if the ad supported content is a non-browser appl
keywords |
string |
- Comma separated list of keywords about the app. Only one of ‘keywords’ or ‘kwarray’ may be present. |
+ Comma separated list of keywords about the app. Only one of keywords or kwarray may be present. |
kwarray |
string array |
- Array of keywords about the app. Only one of ‘keywords’ or ‘kwarray’ may be present. |
+ Array of keywords about the app. Only one of keywords or kwarray may be present. |
ext |
@@ -1861,12 +1851,12 @@ This object describes the entity who directly supplies inventory to and is paid
id |
string |
- Exchange-specific seller ID. Every ID must map to only a single entity that is paid for inventory transacted via that ID. Corresponds to a seller_id of a seller in the exchange’s sellers.json file. |
+ Exchange-specific seller ID. Every ID must map to only a single entity that is paid for inventory transacted via that ID. Corresponds to a seller_id of a seller in the exchange’s sellers.json file. |
name |
string |
- Seller name (may be aliased at the seller's request). |
+ Seller name (may be aliased at the seller's request). |
cattax |
@@ -1876,7 +1866,7 @@ This object describes the entity who directly supplies inventory to and is paid
cat |
string array |
- Array of IABTL content categories of the publisher. The taxonomy to be used is defined by the cattax field. If no cattax field is supplied IAB Content Category Taxonomy 1.0 is assumed. |
+ Array of IAB Tech Lab content categories of the publisher. The taxonomy to be used is defined by the cattax field. If no cattax field is supplied Content Category Taxonomy 1.0 is assumed. |
domain |
@@ -1895,7 +1885,7 @@ This object describes the entity who directly supplies inventory to and is paid
### 3.2.16 - Object: Content
-This object describes the content in which the impression will appear, which may be syndicated or non- syndicated content. This object may be useful when syndicated content contains impressions and does not necessarily match the publisher’s general content. The exchange might or might not have knowledge of the page where the content is running, because of the syndication method. For example, might be a video impression embedded in an iframe on an unknown web property or device.
+This object describes the content in which the impression will appear, which may be syndicated or non-syndicated content. This object may be useful when syndicated content contains impressions and does not necessarily match the publisher’s general content. The exchange might or might not have knowledge of the page where the content is running, because of the syndication method. For example, might be a video impression embedded in an iframe on an unknown web property or device.
@@ -1911,17 +1901,17 @@ This object describes the content in which the impression will appear, which may
episode |
integer |
- Episode number. |
+ Episode number. |
title |
string |
- Content title. Video Examples: “Search Committee” (television), “A New Hope” (movie), or “Endgame” (made for web). Non-Video Example: “Why an Antarctic Glacier Is Melting So Quickly” (Time magazine article). |
+ Content title. *Video Examples:* “Search Committee” (television), “A New Hope” (movie), or “Endgame” (made for web). *Non-Video Example:* “Why an Antarctic Glacier Is Melting So Quickly” (Time magazine article). |
series |
string |
- Content series. Video Examples: “The Office” (television), “Star Wars” (movie), or “Arby ‘N’ The Chief” (made for web). Non-Video Example: “Ecocentric” (Time Magazine blog). |
+ Content series. *Video Examples:* “The Office” (television), “Star Wars” (movie), or “Arby ‘N’ The Chief” (made for web). *Non-Video Example:* “Ecocentric” (Time Magazine blog). |
season |
@@ -1966,7 +1956,7 @@ This object describes the content in which the impression will appear, which may
cat |
string array |
- Array of IAB content categories that describe the content. The taxonomy to be used is defined by the cattax field. If no cattax field is supplied IAB Content Category Taxonomy 1.0 is assumed. |
+ Array of IAB Tech Lab content categories that describe the content. The taxonomy to be used is defined by the cattax field. If no cattax field is supplied Content Category Taxonomy 1.0 is assumed. |
prodq |
@@ -1996,12 +1986,12 @@ This object describes the content in which the impression will appear, which may
keywords |
string |
- Comma separated list of keywords describing the content. Only one of ‘keywords’ or ‘kwarray’ may be present. |
+ Comma separated list of keywords describing the content. Only one of keywords or kwarray may be present. |
kwarry |
string array |
- Array of keywords about the site. Only one of ‘keywords’ or ‘kwarray’ may be present. |
+ Array of keywords about the site. Only one of keywords or kwarray may be present. |
livestream |
@@ -2021,12 +2011,12 @@ This object describes the content in which the impression will appear, which may
language |
string |
- Content language using ISO-639-1-alpha-2. Only one of language or langb should be present. |
+ Content language using ISO-639-1-alpha-2. Only one of language or langb should be present. |
langb |
string |
- Content language using IETF BCP 47. Only one of language or langb should be present. |
+ Content language using IETF BCP 47. Only one of language or langb should be present. |
embeddable |
@@ -2087,8 +2077,8 @@ This object defines the producer of the content in which the ad will be shown. T
cat |
string array |
- Array of IAB content categories that describe the content producer.
-The taxonomy to be used is defined by the cattax field. If no cattax field is supplied IAB Content Category Taxonomy 1.0 is assumed. |
+ Array of IAB Tech Lab content categories that describe the content producer.
+The taxonomy to be used is defined by the cattax field. If no cattax field is supplied Content Category Taxonomy 1.0 is assumed. |
domain |
@@ -2118,7 +2108,7 @@ This object provides information pertaining to the device through which the user
geo |
object; recommended |
- Location of the device assumed to be the user’s current location defined by a Geo object (Section 3.2.19). |
+ Location of the device assumed to be the user’s current location defined by a Geo object (Section 3.2.19). |
dnt |
@@ -2133,13 +2123,12 @@ This object provides information pertaining to the device through which the user
ua |
string |
- Browser user agent string. This field represents a raw user agent string from the browser. For backwards compatibility, exchanges are recommended to always populate ‘ua’ with the User-Agent string, when available from the end user’s device, even if an alternative representation, such as the User-Agent Client-Hints, is available and is used to populate ‘sua’. No inferred or approximated user agents are expected in this field.
-If a client supports User-Agent Client Hints, and ‘sua’ field is present, bidders are recommended to rely on ‘sua’ for detecting device type, browser type and version and other purposes that rely on the user agent information, and ignore ‘ua’ field. This is because the ‘ua’ may contain a frozen or reduced user agent string. |
+ Browser user agent string. This field represents a raw user agent string from the browser. For backwards compatibility, exchanges are recommended to always populate ua with the User-Agent string, when available from the end user’s device, even if an alternative representation, such as the User-Agent Client-Hints, is available and is used to populate sua . No inferred or approximated user agents are expected in this field. If a client supports User-Agent Client Hints, and sua field is present, bidders are recommended to rely on sua for detecting device type, browser type and version and other purposes that rely on the user agent information, and ignore ua field. This is because the ua may contain a frozen or reduced user agent string. |
sua |
- UserAgent object |
- Structured user agent information defined by a UserAgent object (see Section 3.2.29). If both ‘ua’ and ‘sua’ are present in the bid request, ‘sua’ should be considered the more accurate representation of the device attributes. This is because the ‘ua’ may contain a frozen or reduced user agent string. |
+ object |
+ Structured user agent information defined by a UserAgent object (see Section 3.2.29). If both ua and sua are present in the bid request, sua should be considered the more accurate representation of the device attributes. This is because the ua may contain a frozen or reduced user agent string. |
ip |
@@ -2219,17 +2208,17 @@ If a client supports User-Agent Client Hints, and ‘sua’ field is present, bi
language |
string |
- Browser language using ISO-639-1-alpha-2. Only one of language or langb should be present. |
+ Browser language using ISO-639-1-alpha-2. Only one of language or langb should be present. |
langb |
string |
- Browser language using IETF BCP 47. Only one of language or langb should be present. |
+ Browser language using IETF BCP 47. Only one of language or langb should be present. |
carrier |
string |
- Carrier or ISP (e.g., “VERIZON”) using exchange curated string names which should be published to bidders a priori. |
+ Carrier or ISP (e.g., “VERIZON”) using exchange curated string names which should be published to bidders *a priori*. |
mccmnc |
@@ -2312,12 +2301,12 @@ The `lat`/`lon` attributes should only be passed if they conform to the accuracy
type |
integer |
- Source of location data; recommended when passing lat/lon . Refer to List: Location Types in AdCOM 1.0. |
+ Source of location data; recommended when passing lat /lon . Refer to List: Location Types in AdCOM 1.0. |
accuracy |
integer |
- Estimated location accuracy in meters; recommended when lat/lon are specified and derived from a device’s location services (i.e., type = 1). Note that this is the accuracy as reported from the device. Consult OS specific documentation (e.g., Android, iOS) for exact interpretation. |
+ Estimated location accuracy in meters; recommended when lat /lon are specified and derived from a device’s location services (i.e., type = 1). Note that this is the accuracy as reported from the device. Consult OS specific documentation (e.g., Android, iOS) for exact interpretation. |
lastfix |
@@ -2393,7 +2382,7 @@ This object contains information known or derived about the human user of the de
buyeruid |
string |
- Buyer-specific ID for the user as mapped by the exchange for the buyer. |
+ Buyer-specific ID for the user as mapped by the exchange for the buyer. |
yob |
@@ -2408,12 +2397,12 @@ This object contains information known or derived about the human user of the de
keywords |
string |
- Comma separated list of keywords, interests, or intent. Only one of ‘keywords’ or ‘kwarray’ may be present. |
+ Comma separated list of keywords, interests, or intent. Only one of keywords or kwarray may be present. |
- kwarry |
+ kwarray |
string array |
- Array of keywords about the user. Only one of ‘keywords’ or ‘kwarray’ may be present. |
+ Array of keywords about the user. Only one of keywords or kwarray may be present. |
customdata |
@@ -2427,18 +2416,18 @@ This object contains information known or derived about the human user of the de
data |
- oject array |
+ object array |
Additional user data. Each Data object (Section 3.2.21) represents a different data source. |
consent |
string |
- When GDPR regulations are in effect this attribute contains the Transparency and Consent Framework’s Consent String data structure. |
+ When GDPR regulations are in effect this attribute contains the Transparency and Consent Framework’s Consent String data structure. |
eids |
object array |
- Details for support of a standard protocol for multiple third party identity providers (Section 3.2.27) |
+ Details for support of a standard protocol for multiple third party identity providers (Section 3.2.27). |
ext |
@@ -2488,7 +2477,7 @@ The data and segment objects together allow additional data about the related ob
### 3.2.22 - Object: Segment
-Segment objects are essentially key-value pairs that convey specific units of data. The parent `Data` object is a collection of such values from a given data provider. The specific segment names and value options must be published by the exchange a priori to its bidders.
+Segment objects are essentially key-value pairs that convey specific units of data. The parent `Data` object is a collection of such values from a given data provider. The specific segment names and value options must be published by the exchange *a priori* to its bidders.
@@ -2524,7 +2513,7 @@ Segment objects are essentially key-value pairs that convey specific units of da
### 3.2.23 - Object: Network
-This object describes the network an ad will be displayed on. A Network is defined as the parent entity of the Channel object’s entity for the purposes of organizing Channels. Examples are companies that own and/or license a collection of content channels (Viacom, Discovery, CBS, WarnerMedia, Turner and others), or studio that creates such content and self-distributes content. Name is a human-readable field while domain and id can be used for reporting and targeting purposes. See 7.6 for further examples.
+This object describes the network an ad will be displayed on. A Network is defined as the parent entity of the `Channel` object’s entity for the purposes of organizing Channels. Examples are companies that own and/or license a collection of content channels (Viacom, Discovery, CBS, WarnerMedia, Turner and others), or studio that creates such content and self-distributes content. Name is a human-readable field while domain and id can be used for reporting and targeting purposes. See 7.6 for further examples.
@@ -2613,7 +2602,7 @@ This object is composed of a set of nodes where each node represents a specific
nodes |
object array; required |
- Array of SupplyChainNode objects in the order of the chain. In a complete supply chain, the first node represents the initial advertising system and seller ID involved in the transaction, i.e. the owner of the site, app, or other medium. In an incomplete supply chain, it represents the first known node. The last node represents the entity sending this bid request. |
+ Array of SupplyChainNode objects in the order of the chain. In a complete supply chain, the first node represents the initial advertising system and seller ID involved in the transaction, i.e. the owner of the site, app, or other medium. In an incomplete supply chain, it represents the first known node. The last node represents the entity sending this bid request. |
ver |
@@ -2632,7 +2621,7 @@ This object is composed of a set of nodes where each node represents a specific
### 3.2.26 - Object: SupplyChainNode
-This object is associated with a SupplyChain object as an array of nodes. These nodes define the identity of an entity participating in the supply chain of a bid request. Detailed implementation examples can be found here: https://github.com/InteractiveAdvertisingBureau/openrtb/blob/master/supplychainobject.md. The SupplyChainNode object contains the following attributes:
+This object is associated with a `SupplyChain` object as an array of nodes. These nodes define the identity of an entity participating in the supply chain of a bid request. Detailed implementation examples can be found here: https://github.com/InteractiveAdvertisingBureau/openrtb/blob/master/supplychainobject.md. The `SupplyChainNode` object contains the following attributes:
@@ -2649,7 +2638,7 @@ This object is associated with a SupplyChain object as an array of nodes. These
sid |
string; required |
- The identifier associated with the seller or reseller account within the advertising system. This must contain the same value used in transactions (i.e. OpenRTB bid requests) in the field specified by the SSP/exchange. Typically, in OpenRTB, this is publisher.id. For OpenDirect it is typically the publisher’s organization ID.Should be limited to 64 characters in length. |
+ The identifier associated with the seller or reseller account within the advertising system. This must contain the same value used in transactions (i.e. OpenRTB bid requests) in the field specified by the SSP/exchange. Typically, in OpenRTB, this is publisher.id . For OpenDirect it is typically the publisher’s organization ID. Should be limited to 64 characters in length. |
rid |
@@ -2659,7 +2648,7 @@ This object is associated with a SupplyChain object as an array of nodes. These
name |
string |
- The name of the company (the legal entity) that is paid for inventory transacted under the given seller_ID. This value is optional and should NOT be included if it exists in the advertising system’s sellers.json file. |
+ The name of the company (the legal entity) that is paid for inventory transacted under the given seller_ID . This value is optional and should NOT be included if it exists in the advertising system’s sellers.json file. |
domain |
@@ -2669,7 +2658,7 @@ This object is associated with a SupplyChain object as an array of nodes. These
hp |
integer |
- Indicates whether this node will be involved in the flow of payment for the inventory. When set to 1, the advertising system in the asi field pays the seller in the sid field, who is responsible for paying the previous node in the chain. When set to 0, this node is not involved in the flow of payment for the inventory. For version 1.0 of SupplyChain, this property should always be 1. Implementers should ensure that they propagate this field onwards when constructing SupplyChain objects in bid requests sent to a downstream advertising system. |
+ Indicates whether this node will be involved in the flow of payment for the inventory. When set to 1, the advertising system in the asi field pays the seller in the sid field, who is responsible for paying the previous node in the chain. When set to 0, this node is not involved in the flow of payment for the inventory. For version 1.0 of SupplyChain , this property should always be 1. Implementers should ensure that they propagate this field onwards when constructing SupplyChain objects in bid requests sent to a downstream advertising system. |
ext |
@@ -2701,7 +2690,7 @@ Extended identifiers support in the OpenRTB specification allows buyers to use a
uids |
object array |
- Array of extended ID UID objects from the given source. Refer to 3.2.28 Extended Identifier UIDs |
+ Array of extended ID UID objects from the given source. Refer to 3.2.28 Extended Identifier UIDs |
ext |
@@ -2747,7 +2736,7 @@ This object contains a single user identifier provided as part of extended ident
### 3.2.29 - Object: UserAgent
-Structured user agent information, which can be used when a client supports [User-Agent Client Hints](https://wicg.github.io/ua-client-hints/). If both `device.ua` and `device.sua` are present in the bid request, `device.sua` should be considered the more accurate representation of the device attributes. This is because the device.ua may contain a frozen or reduced user agent string due to deprecation of user agent strings by browsers.
+Structured user agent information, which can be used when a client supports [User-Agent Client Hints](https://wicg.github.io/ua-client-hints/). If both `device.ua` and `device.sua` are present in the bid request, `device.sua` should be considered the more accurate representation of the device attributes. This is because the `device.ua` may contain a frozen or reduced user agent string due to deprecation of user agent strings by browsers.
@@ -2758,13 +2747,13 @@ Structured user agent information, which can be used when a client supports [Use
browsers |
- array of BrandVersion objects; recommended |
- Each BrandVersion object (see Section 3.2.30) identifies a browser or similar software component. Implementers should send brands and versions derived from the Sec-CH-UA-Full-Version-List header*. |
+ array of BrandVersion objects; recommended |
+ Each BrandVersion object (see Section 3.2.30) identifies a browser or similar software component. Implementers should send brands and versions derived from the Sec-CH-UA-Full-Version-List header*. |
platform |
BrandVersion object; recommended |
- A BrandVersion object (see Section 3.2.30) that identifies the user agent’s execution platform / OS. Implementers should send a brand derived from the Sec-CH-UA-Platform header, and version derived from the Sec-CH-UA-Platform-Version header *. |
+ A BrandVersion object (see Section 3.2.30) that identifies the user agent’s execution platform / OS. Implementers should send a brand derived from the Sec-CH-UA-Platform header, and version derived from the Sec-CH-UA-Platform-Version header *. |
mobile |
@@ -2800,7 +2789,7 @@ Structured user agent information, which can be used when a client supports [Use
-or an equivalent JavaScript accessor from [NavigatorUAData interface](https://wicg.github.io/ua-client-hints/#navigatoruadata). This header or accessor are only available for browsers that support [User-Agent Client Hints](https://wicg.github.io/ua-client-hints/).
+* or an equivalent JavaScript accessor from [NavigatorUAData interface](https://wicg.github.io/ua-client-hints/#navigatoruadata). This header or accessor are only available for browsers that support [User-Agent Client Hints](https://wicg.github.io/ua-client-hints/).
### 3.2.30 - Object: BrandVersion
@@ -2885,12 +2874,11 @@ RTB responses contain bids that reference specific impressions within a bid requ
## 4.1 - Object Model
-Following is the object model for the bid response. The top-level object (i.e., in JSON the unnamed outer object) is denoted as `BidResponse` in the model. A bid response may contain bids from multiple “seats” (i.e., the buying entity upstream from the actual bidder). In fact, a response may contain multiple bids from the same seat; typically but not necessarily from different campaigns. This can
-improve the seat’s chances of winning since most exchanges enforce various block lists on behalf of their publishers.
+Following is the object model for the bid response. The top-level object (i.e., in JSON the unnamed outer object) is denoted as `BidResponse` in the model. A bid response may contain bids from multiple “seats” (i.e., the buying entity upstream from the actual bidder). In fact, a response may contain multiple bids from the same seat; typically but not necessarily from different campaigns. This can improve the seat’s chances of winning since most exchanges enforce various block lists on behalf of their publishers.
![](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/864a56706b106eda94c03abefaa01dd43544864c/assets/Figure3.png)
-Figure 4: Bid Response object model.
+*Figure 4: Bid Response object model.*
Referring to the figure, the actual response objects are shown on the left, specifically the `BidResponse` top level object the seat specific `SeatBid` collections of `Bid` objects. The other objects shown are those objects from the bid request to which response objects related. Specifically, `BidResponse` includes the `BidRequest` ID for positive tracking purposes, and since a request can include multiple impressions `Bid` includes the ID of the `Imp` for which the bid is an offer to purchase. If a bid is made under the terms of a private marketplace deal, the `Bid` also includes the ID of the specific `Deal` object.
@@ -2970,8 +2958,7 @@ To express a “no-bid”, the options are to return an empty response with HTTP
customdata |
string |
- Optional feature to allow a bidder to set data in the
-exchange’s cookie. The string must be in base85 cookie safe characters and be in any format. Proper JSON encoding must be used to include “escaped” quotation marks. |
+ Optional feature to allow a bidder to set data in the exchange’s cookie. The string must be in base85 cookie safe characters and be in any format. Proper JSON encoding must be used to include “escaped” quotation marks. |
nbr |
@@ -3008,7 +2995,7 @@ A bid response can contain multiple `SeatBid` objects, each on behalf of a diffe
seat |
string |
- ID of the buyer seat (e.g., advertiser, agency) on whose behalf this bid is made |
+ ID of the buyer seat (e.g., advertiser, agency) on whose behalf this bid is made. |
group |
@@ -3028,7 +3015,7 @@ A bid response can contain multiple `SeatBid` objects, each on behalf of a diffe
### 4.2.3 - Object: Bid
-A `SeatBid` object contains one or more Bid objects, each of which relates to a specific impression in the bid request via the `impid` attribute and constitutes an offer to buy that impression for a given `price`.
+A `SeatBid` object contains one or more `Bid` objects, each of which relates to a specific impression in the bid request via the `impid` attribute and constitutes an offer to buy that impression for a given `price`.
@@ -3070,8 +3057,7 @@ A `SeatBid` object contains one or more Bid objects, each of which relates to a
adm |
string |
- Optional means of conveying ad markup in case the bid wins; supersedes the win notice if markup is included in both.
-Substitution macros (Section 4.4) may be included. |
+ Optional means of conveying ad markup in case the bid wins; supersedes the win notice if markup is included in both. Substitution macros (Section 4.4) may be included. |
adid |
@@ -3081,8 +3067,7 @@ Substitution macros (Section 4.4) may be included.
adomain |
string array |
- Advertiser domain for block list checking (e.g., “ford.com”). This can be an array of for the case of rotating creatives.
-Exchanges can mandate that only one domain is allowed. |
+ Advertiser domain for block list checking (e.g., “ford.com”). This can be an array of for the case of rotating creatives. Exchanges can mandate that only one domain is allowed. |
bundle |
@@ -3117,7 +3102,7 @@ Exchanges can mandate that only one domain is allowed.
cat |
string array |
- IAB content categories of the creative. The taxonomy to be used is defined by the cattax field. If no cattax field is supplied IAB Content Category Taxonomy 1.0 is assumed |
+ IAB Tech Lab content categories of the creative. The taxonomy to be used is defined by the cattax field. If no cattax field is supplied Content Taxonomy 1.0 is assumed |
attr |
@@ -3147,12 +3132,12 @@ Exchanges can mandate that only one domain is allowed.
language |
string |
- Language of the creative using ISO-639-1-alpha-2. The non- standard code “xx” may also be used if the creative has no linguistic content (e.g., a banner with just a company logo). Only one of language or langb should be present. |
+ Language of the creative using ISO-639-1-alpha-2. The non- standard code “xx” may also be used if the creative has no linguistic content (e.g., a banner with just a company logo). Only one of language or langb should be present. |
langb |
string |
- Language of the creative using IETF BCP 47. Only one of language or langb should be present. |
+ Language of the creative using IETF BCP 47. Only one of language or langb should be present. |
dealid |
@@ -3192,21 +3177,17 @@ Exchanges can mandate that only one domain is allowed.
mtype |
integer |
- Type of the creative markup so that it can properly be associated with the right sub-object of the BidRequest.Imp.
-Values:
-
-1 = Banner
-
-2 = Video,
-
-3 = Audio
-
-4 = Native |
+ Type of the creative markup so that it can properly be associated with the right sub-object of the BidRequest.Imp.
+Values:
+1 = Banner
+2 = Video,
+3 = Audio
+4 = Native
|
slotinpod |
- integer; deafault 0 |
- Indicates that the bid response is only eligible for a specific position within a video or audio ad pod (e.g. first position, last position, or any). Refer to List: Slot Position in Pod in AdCOM 1.0 for guidance on the use of this field. |
+ integer; default 0 |
+ Indicates that the bid response is only eligible for a specific position within a video or audio ad pod (e.g. first position, last position, or any). Refer to List: Slot Position in Pod in AdCOM 1.0 for guidance on the use of this field. |
ext |
@@ -3224,7 +3205,7 @@ For each bid, the `nurl` attribute can contain the win notice URL. If the bidder
**BEST PRACTICE**: Firing of the billing notice should be server-side and as “close” as possible to where the exchange books revenue in order to minimize discrepancies between exchange and bidder.
-**BEST PRACTICE**: For VAST Video, the IAB prescribes that the VAST impression event is the official signal that the impression is billable. If the `burl` attribute is specified, it too should be fired at the same time if the exchange is adhering to this policy. However, subtle technical issues may lead to additional discrepancies and bidders are cautioned to avoid this scenario.
+**BEST PRACTICE**: For VAST Video, the IAB Tech Lab prescribes that the VAST impression event is the official signal that the impression is billable. If the `burl` attribute is specified, it too should be fired at the same time if the exchange is adhering to this policy. However, subtle technical issues may lead to additional discrepancies and bidders are cautioned to avoid this scenario.
Several other attributes are used for ad quality checks or enforcing publisher restrictions. These include the advertiser domain via `adomain`, a non-cache-busted URL to an image representative of the content of the campaign via `iurl`, an ID of the campaign and of the creative within the campaign via `cid` and `crid` respectively, an array of creative attribute via `attr`, and the dimensions via `h` and `w`. If the bid pertains to a private marketplace deal, the `dealid` attribute is used to reference that agreement from the bid request.
@@ -3243,16 +3224,16 @@ In this method, ad markup is returned to the exchange is via the win notice. In
In this method, ad markup is returned directly in the bid itself. This is accomplished via the `bid.adm`
attribute. If both the `adm` attribute and win notice return data, the `adm` contents will take precedence.
-### 4.3.3 - Comparison of Ad Serving Approaches
+### 4.3.3 - Comparison of Ad Serving Approaches
Each of the ad serving methods has its own advantages that may be of varying importance to either the exchange or the bidder.
-### 4.3.4 - Ad Served on the Win Notice
+**Ad Served on the Win Notice**
- *Reduced Bandwidth Costs*: Serving ad markup only upon winning can save large amounts of bandwidth usage, the costs for which can be large at high volumes or when sending multiple bids per bid response.
- *Additional Bidder Flexibility*: Bidders may typically know the ad they will serve at the time of bid, but this provides an additional optional decision point after the clearing price has been established.
-### 4.3.5 - Ad Served in the Bid
+**Ad Served in the Bid**
- *Reduced Risk of Forfeiture*: A forfeit is the scenario in which a bidder wins, but forfeits due to failure to serve the ad markup. The risk of an additional HTTP failure (e.g., calling the win notice) is mitigated by this method.
- *Potential Concurrency*: The exchange can choose to return that ad markup and call the win notice concurrently, thereby improving user experience.
@@ -3260,7 +3241,7 @@ Each of the ad serving methods has its own advantages that may be of varying imp
## 4.4 - Substitution Macros
-The win notice and billing notice URLs and their format are defined by the bidder. For the exchange to convey certain information to the bidder (e.g., the clearing price), several substitution macros can be inserted into these URLs. Prior to calling a win or billing notice URL, the exchange will search the specified URL for any of the defined macros and replace them with the appropriate data.
+The win notice and billing notice URLs and their format are defined by the bidder. For the exchange to convey certain information to the bidder (e.g., the clearing price), several substitution macros can be inserted into these URLs. Prior to calling a win or billing notice URL, the exchange will search the specified URL for any of the defined macros and replace them with the appropriate data.
Note that the substitution is simple in the sense that wherever a legal macro is found, it will be replaced without regard for syntax correctness. Furthermore, if the source value is an optional parameter that was not specified, the macro will simply be removed (i.e., replaced with a zero-length string).
These same substitution macros can also be placed in the ad markup. The exchange will perform the same data substitutions as in the aforementioned notice URLs. This occurs irrespective of whether the markup is returned on the win notice or passed in the `bid.adm` attribute of the bid response. A use case for macros in the ad markup might be when a bidder prefers to receive its win notification from the device itself. To accomplish this, the bidder would include a tracking pixel in the ad markup, the URL for which would include any of the available macros.
@@ -3332,9 +3313,9 @@ Note that OpenRTB compliance exchanges must support all macros for which data is
Prior to substitution, macro data values can be encoded for security purposes using various obfuscation or encryption algorithms. This may be of particular interest for use cases where price information is carried beyond the exchange, through the publisher, and into the device browser via a tracking pixel in the markup.
-To specify that a particular macro is to be encoded, the suffix “:X” should be appended to the macro name, where X is a string that indicates the algorithm to be used. Algorithms choices are not defined by this specification and must be mutually agreed upon between parties. As an example, suppose that the price macro is to be encoded using Base64 and that its code is “B64”. The macro would then be written as follows:
+To specify that a particular macro is to be encoded, the suffix “`:X`” should be appended to the macro name, where X is a string that indicates the algorithm to be used. Algorithms choices are not defined by this specification and must be mutually agreed upon between parties. As an example, suppose that the price macro is to be encoded using Base64 and that its code is “`B64`”. The macro would then be written as follows:
-${AUCTION PRICE:B64}
+`${AUCTION PRICE:B64}`
### 4.4.1 - Notes on the macro ${AUCTION_MIN_TO_WIN}
@@ -3346,12 +3327,13 @@ Except where the value "AUDIT" applies, as above, the macro is replaced by:
- As dictated by exchange privacy controls, e.g., if price data is not shared to bidders that did not meet the desired floor, or if the exchange supports a publisher or winning bidder election not to share price data with the other bidders.
- The minimum price required to tie with the winning bid, when your bid lost to another in the auction.
-- The minimum price required to tie with the next-closest bid, or the floor if there was only one bid, when your bid won the auction
+- The minimum price required to tie with the next-closest bid, or the floor if there was only one bid, when your bid won the auction.
Note, the exchange in question may not be the final decision-maker. It may propagate two or more bids into a second auction. In that case, still only one auction bid is the "winner" and the macro is replaced for all bids as above.
In the following examples, assume an auction with a floor price of $0.85, and that each row is a competing bid. Note the exchange may also choose to replace the macros with the empty string for the reasons above.
+For a first-price auction:
@@ -3384,7 +3366,7 @@ In the following examples, assume an auction with a floor price of $0.85, and th
-For a second-price auction (where, for the sake of the illustration, the clearing price is the second-best price plus $0.01):
+For a second-price auction (where, for the sake of the illustration, the clearing price is the second-best price plus $0.01):
@@ -3651,7 +3633,7 @@ This example builds the first and adds parameters to describe support for an exp
### 6.2.3 - Example 3 – Mobile
-This example uses a device object to reflect a mobile device, and an app object to reflect a request from a mobile application .
+This example uses a device object to reflect a mobile device, and an app object to reflect a request from a mobile application.
```javascript
{
@@ -4426,6 +4408,24 @@ Following is an example of a bid response that returns a native ad inline to be
```
+# [7. Implementation Notes](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/implementation.md#7-implementation-notes-)
+
+- [7.1 - No-Bid Signaling](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/implementation.md#71-no-bid-signaling-)
+
+- [7.2 - Impression Expiration](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/implementation.md#72-impression-expiration-)
+
+- [7.3 - PMP & Direct Deals](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/implementation.md#73-pmp--direct-deals-)
+
+- [7.4 - Skippability](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/implementation.md#74-skippability-)
+
+- [7.5 - Regs Resources](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/implementation.md#75-regs-resources-)
+
+- [7.6 - Pod Bidding for Video and Audio](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/implementation.md#76-pod-bidding-for-video-and-audio-)
+
+- [7.7 - Network vs Channel Example Cases](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/implementation.md#77-network-vs-channel-example-cases-)
+
+- [7.8 - Counting Billable Events and Tracked Ads](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/implementation.md#78-counting-billable-events-and-tracked-ads-)
+
# Appendix A. Additional Information
diff --git a/README.md b/README.md
index 07de5a4..f287d37 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,14 @@ https://iabtechlab.com/openrtb
#### AdCOM: Advertising Common Object Model
https://github.com/InteractiveAdvertisingBureau/AdCOM
-#### VERSIONING POLICY TBD
+#### VERSIONING POLICY
+As of OpenRTB 2.6-202211, OpenRTB's version number is only incremented on breaking changes. In other words, OpenRTB 2.7 should be considered a distinct version from OpenRTB 2.6 when there is a need for distinguishing versions. For example, a demand source might regard the version header when parsing a bid request received from a supply source. See OpenRTB Principles.
+
+The current version of the OpenRTB specification is updated approximately once a month if there are non-breaking improvements to be released such as new fields, objects, or values in enumerated lists. Errata, such as clarifications or corrections to descriptions not materially impacting the specification itself, are also addressed during monthly updates. See Errata.
+
+Release branches are created for each monthly release and the history of these can be reviewed on GitHub. The master branch for the repository will always reflect the most recent release, whereas ongoing development work occurs in the 'develop' branch.
+
+This versioning policy is a break from historical practice for OpenRTB 2.x. In versions of OpenRTB prior to 2.6, major version numbers represent breaking changes and minor version numbers represent non-breaking changes.
#### Contact
For more information, or to get involved, please email support@iabtechlab.com.
diff --git a/assets/ORTB ERD.png b/assets/ORTB ERD.png
new file mode 100644
index 0000000000000000000000000000000000000000..c597e9dabe56124e9bee25d5a27f469352197b41
GIT binary patch
literal 48214
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