diff --git a/proto/Makefile b/proto/Makefile new file mode 100644 index 0000000..66306cf --- /dev/null +++ b/proto/Makefile @@ -0,0 +1,30 @@ +# Build the docs for the proto3 definition. + +LANGUAGES=java # cpp go csharp objc python ruby js + +bindings: + for x in ${LANGUAGES}; do \ + mkdir -p build/$${x}; \ + protoc --proto_path src/main --$${x}_out=build/$${x} \ + src/main/com/iabtechlab/openrtb/v2/openrtb.proto \ + ; \ + done + +check: + prototool lint + +clean: + for x in ${LANGUAGES}; do \ + rm -fr $${x}/*; \ + done + +docs: + mkdir -p build + podman run --rm \ + -v ${PWD}/build:/out \ + -v ${PWD}/src/main:/proto \ + pseudomuto/protoc-gen-doc --doc_opt=html,doc.html --proto_path=/proto \ + com/iabtechlab/openrtb/v2/openrtb.proto + +watch: + fswatch -r ./src/ | xargs -n1 make docs diff --git a/proto/README.md b/proto/README.md new file mode 100644 index 0000000..8f1ee6c --- /dev/null +++ b/proto/README.md @@ -0,0 +1,28 @@ +# Protocol Buffers specification + +## About + +Protocol Buffers is the standard binary encoding for OpenRTB. The +`openrtb.proto` definition included here is expected to be an exact +representation of the OpenRTB standard in Protocol Buffers. There are two +caveats: + +1. OpenRTB contains several fields that take boolean values, though are +expressed as integers in JSON. They are expressed as booleans in Protocol +Buffers. +2. Enumerations are currently expressed as integers in both JSON and Protocol +Buffers. This is a holdover from using proto2 syntax, which did not support +the extensible enumerations used in OpenRTB. This may be changed in the future. +Meanwhile, code definitions for the standard enumerated values can be found at +https://github.com/IABTechLab/adcom-proto. + +Updates are to be made to the standard and `openrtb.proto` in lockstep. + +## How to get started + +From the command line: + +1. Install `make` and the latest version of `protoc`. +2. Open the `Makefile` and choose the language(s) for which the Protocol Buffers +object code should be generated. +3. Run `make`. diff --git a/proto/src/main/com/iabtechlab/openrtb/v2/openrtb.proto b/proto/src/main/com/iabtechlab/openrtb/v2/openrtb.proto new file mode 100644 index 0000000..82d0526 --- /dev/null +++ b/proto/src/main/com/iabtechlab/openrtb/v2/openrtb.proto @@ -0,0 +1,3511 @@ +edition = "2023"; + +option java_outer_classname = "OpenRtb"; +package com.iabtechlab.openrtb.v2; + +// Copyright 2020 IAB Tech Lab +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy of +// the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. + +// OpenRTB extensions ("ext" fields in the spec & JSON representation) are +// represented here by Protocol Buffer extensions. This proto only reserves the +// range of IDs 500-max at every extensible object. Beware that upstream +// authors of a message may reserve extension IDs for their own use, so an +// author is not free to propagate a message adding their own extensions. + +// Extension ranges are bucketed into blocks of 1000, an orginization can +// claim a block for their own use to prevent conflicts. +// +// Range 500-999 is intentionally unclaimed. It is highly recommended to not use +// this range for any purpose other than during-development use. +// +// Extension ranges are defined as follows: +// 1-499: IAB defined extensions +// 500-999: Prototype space (intentionally unclaimed) +// 1000-1999: Google +// 2000-2999: Amazon + +// OpenRTB 2.0: 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.2). 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. +message BidRequest { + // ID of the bid request, assigned by the exchange, and unique for the + // exchange's subsequent tracking of the responses. The exchange may use + // different values for different recipients. + // REQUIRED by the OpenRTB specification. + string id = 1; + + // Array of Imp objects (Section 3.2.4) representing the impressions offered. + // At least 1 Imp object is required. + repeated Imp imp = 2; + + oneof distributionchannel_oneof { + // Details via a Site object (Section 3.2.13) about the publisher's website. + // Only applicable and recommended for websites. + Site site = 3; + + // Details via an App object (Section 3.2.14) about the publisher's app + // (non-browser applications). Only applicable and recommended for apps. + App app = 4; + + // 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. + Dooh dooh = 22; + } + + // Details via a Device object (Section 3.2.18) about the user's device to + // which the impression will be delivered. + Device device = 5; + + // Details via a User object (Section 3.2.20) about the human user of the + // device; the advertising audience. + User user = 6; + + // Indicator of test mode in which auctions are not billable, where 0 = live + // mode, 1 = test mode. + bool test = 15 [default = false]; + + // Auction type, where 1 = First Price, 2 = Second Price Plus. + // Exchange-specific auction types can be defined using values 500 and + // greater. + // Refer to enum com.iabtechlab.openrtb.v3.AuctionType for values. + int32 at = 7 [default = 2]; + + // 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. + int32 tmax = 8; + + // 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. + repeated string wseat = 9; + + // 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. + repeated string bseat = 17; + + // Flag to indicate if Exchange can verify that the impressions offered + // represent all of the impressions available in context (e.g., all on the web + // page, all video spots such as pre/mid/post roll) to support road-blocking. + // 0 = no or unknown, 1 = yes, the impressions offered represent all that are + // available. + bool allimps = 10 [default = false]; + + // Array of allowed currencies for bids on this bid request using ISO-4217 + // alpha codes. Recommended only if the exchange accepts multiple currencies. + repeated string cur = 11; + + // 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. + repeated string wlang = 18; + + // 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. + repeated string wlangb = 20; + + // Allowed 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. Only one of acat or bcat + // should be present. + repeated string acat = 23; + + // Blocked advertiser categories using the IAB content categories. The + // taxonomy to be used is defined by the cattax field. If no cattax field is + // supplied IAB Content Taxonomy 1.0 is assumed. Only one of acat or bcat + // should be present. + repeated string bcat = 12; + + // The taxonomy in use for bcat. + // Refer to enum com.iabtechlab.adcom.v1.enums.CategoryTaxonomy for values. + int32 cattax = 21 [default = 1]; + + // Block list of advertisers by their domains (e.g., "ford.com"). + repeated string badv = 13; + + // Block list of applications by their app store IDs. 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. + repeated string bapp = 16; + + // A Source object (Section 3.2.2) that provides data about the inventory + // source and which entity makes the final decision. + Source source = 19; + + // A Regs object (Section 3.2.16) that specifies any industry, legal, or + // governmental regulations in force for this request. + Regs regs = 14; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + + // This object describes the nature and behavior of the entity that is the + // source of the bid request upstream from the exchange. The primary purpose + // of this object is to define post-auction or upstream decisioning when the + // exchange itself does not control the final decision. A common example of + // this is header bidding, but it can also apply to upstream server entities + // such as another RTB exchange, a mediation platform, or an ad server + // combines direct campaigns with 3rd party demand in decisioning. + message Source { + // Entity responsible for the final impression sale decision, where 0 = + // exchange, 1 = upstream source. + // RECOMMENDED by the OpenRTB specification. + bool fd = 1; + + // Transaction ID that must be common across all participants in this bid + // request (e.g., potentially multiple exchanges). + // RECOMMENDED by the OpenRTB specification. + string tid = 2; + + // Payment ID chain string containing embedded syntax described in the TAG + // Payment ID Protocol v1.0. + // RECOMMENDED by the OpenRTB specification. + string pchain = 3; + + // 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). + SupplyChain schain = 4; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + // The SupplyChain object enables buyers to see all parties who are + // selling or reselling a given bid request. + SupplyChain schain = 1 [deprecated = true]; + + // Identifier of the OM SDK integration. This is the same as the "name" + // parameter of the OMID Partner object. + string omidpn = 2; + + // Version of the OM SDK integration. This is the same as the + // "versionString" parameter of the OMID Partner object. + string omidpv = 3; + + extensions 500 to max; + } + } // Source + + // This object is composed of a set of nodes where each node represents a + // specific entity that participates in the transacting of inventory. The + // entire chain of nodes from beginning to end represents all entities who + // are involved in the direct flow of payment for inventory. Detailed + // implementation examples can be found here: + // https://github.com/InteractiveAdvertisingBureau/openrtb/blob/master/supplychainobject.md. + message SupplyChain { + // Flag indicating whether the chain contains all nodes involved in the + // transaction leading back to the owner of the site, app or other medium + // of the inventory, where 0 = no, 1 = yes. + bool complete = 1; + + // 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. + repeated SupplyChainNode nodes = 2; + + // Version of the supply chain specification in use, in the format of + // "major.minor". For example, for version 1.0 of the spec, use the string + // "1.0". + string ver = 3; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // SupplyChain + + // 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. + message SupplyChainNode { + // The canonical domain name of the SSP, Exchange, Header Wrapper, etc + // system that bidders connect to. This may be the operational domain of + // the system, if that is different than the parent corporate domain, to + // facilitate WHOIS and reverse IP lookups to establish clear ownership + // of the delegate system. This should be the same value as used to + // identify sellers in an ads.txt file if one exists. + string asi = 1; + + // 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. + string sid = 2; + + // The OpenRTB RequestId of the request as issued by this seller. + string rid = 3; + + // 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. + string name = 4; + + // The business domain name of the entity represented by this node. This + // value is optional and should NOT be included if it exists in the + // advertising system's sellers.json file. + string domain = 5; + + // 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. It is explicitly + // required to be included as it is expected that future versions of the + // specification will introduce non-payment handling nodes. Implementers + // should ensure that they support this field and propagate it onwards + // when constructing SupplyChain objects in bid requests sent to a + // downstream advertising system. + bool hp = 6; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // SupplyChainNode + + // This object describes an ad placement or impression being auctioned. A + // single bid request can include multiple Imp objects, a use case for which + // might be an exchange that supports selling all ad positions on a given + // page. Each Imp object has a required ID so that bids can reference them + // individually. + // + // The presence of Banner (Section 3.2.6), Video (Section 3.2.7), and/or + // Native (Section 3.2.9) objects subordinate to the Imp object indicates the + // type of impression being offered. The publisher can choose one such type + // which is the typical case or mix them at their discretion. However, any + // given bid for the impression must conform to one of the offered types. + message Imp { + // A unique identifier for this impression within the context of the bid + // request (typically, value starts with 1 and increments). + string id = 1; + + // An array of Metric objects (Section 3.2.5). + repeated Metric metric = 17; + + // A Banner object (Section 3.2.6); required if this impression is offered + // as a banner ad opportunity. + Banner banner = 2; + + // A Video object (Section 3.2.7); required if this impression is offered as + // a video ad opportunity. + Video video = 3; + + // An Audio object (Section 3.2.8); required if this impression is offered + // as an audio ad opportunity. + Audio audio = 15; + + // A Native object (Section 3.2.9); required if this impression is offered + // as a native ad opportunity. + Native native = 13; + + // A Pmp object (Section 3.2.11) containing any private marketplace deals in + // effect for this impression. + Pmp pmp = 11; + + // 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. + string displaymanager = 4; + + // 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. + string displaymanagerver = 5; + + // 1 = the ad is interstitial or full screen, 0 = not interstitial. + bool instl = 6; + + // 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. + string tagid = 7; + + // Minimum bid for this impression expressed in CPM. + double bidfloor = 8 [default = 0]; + + // Currency specified using ISO-4217 alpha codes. This may be different from + // bid currency returned by bidder if this is allowed by the exchange. This + // currency sets the default for all floors specified in the Imp object. + string bidfloorcur = 9 [default = "USD"]; + + // Indicates the type of browser opened upon clicking the creative in an + // app, where 0 = embedded, 1 = native. Note that the Safari View Controller + // in iOS 9.x devices is considered a native browser for purposes of this + // attribute. + bool clickbrowser = 16; + + // 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. + bool secure = 12; + + // Array of exchange-specific names of supported iframe busters. + repeated string iframebuster = 10; + + // Indicates whether the user receives a reward for viewing the ad, where 0 + // = no, 1 = yes. Typically video ad implementations allow users to read an + // additional news article for free, receive an extra life in a game, or get + // a sponsored ad-free music session. The reward is typically distributed + // after the video ad is completed. + bool rwdd = 18 [default = false]; + + // Indicates if server-side ad insertion (e.g., stitching an ad into an + // audio or video stream) is in use and the impact of this on asset and + // tracker retrieval, where 0 = status unknown, 1 = all client-side (i.e., + // not server-side), 2 = assets stitched server-side but tracking pixels + // fired client-side, 3 = all server-side. + int32 ssai = 19 [default = 0]; + + // Advisory as to the number of seconds that may elapse between the auction + // and the actual impression. + int32 exp = 14; + + // 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. + Qty qty = 20; + + // 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). + double dt = 21; + + // Details about ad slots being refreshed automatically. (Section 3.2.33) + Refresh refresh = 22; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + // Distinct, persistent id for each ad unit on a page. + string gpid = 1; + + // Publisher's SKAdNetwork information. + SKAdNetworkRequest skadn = 2; + + // Indicates whether the inventory is intrinsic in-game, modifying the + // environment of the game, for instance through a billboard or skin. + bool intrinsic = 3; + + // A string representing a transaction ID, which is expected to be common + // across all participants in this bid request (e.g., potentially multiple + // exchanges). + string tid = 4; + + // This extension to "Object: Imp" allows sellers to signal Interest Group + // auction support for an Impression to buyers. + InterestGroupAuctionSupport igs = 5; + + extensions 500 to max; + } + } // Imp + + // This object is associated with an impression as an array of metrics. + // These metrics can offer insight into the impression to assist with + // decisioning such as average recent viewability, click-through rate, etc. + // Each metric is identified by its type, reports the value of the metric, + // and optionally identifies the source or vendor measuring the value. + message Metric { + // Type of metric being presented using exchange curated string names + // which should be published to bidders a priori. + // REQUIRED by the OpenRTB specification. + string type = 1; + + // Number representing the value of the metric. Probabilities must be in + // the range 0.0 - 1.0. + // REQUIRED by the OpenRTB specification. + double value = 2; + + // Source of the value using exchange curated string names which should be + // published to bidders a priori. If the exchange itself is the source + // versus a third party, "EXCHANGE" is recommended. + // RECOMMENDED by the OpenRTB specification. + string vendor = 3; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Metric + + // This object represents the most general type of impression. Although the + // term "banner" may have very specific meaning in other contexts, here it + // can be many things including a simple static image, an expandable ad + // unit, or even in-banner video (refer to the Video object in Section 3.2.7 + // for the more generalized and full featured video ad units). An array of + // Banner objects can also appear within the Video to describe optional + // companion ads defined in the VAST specification. + // + // The presence of a Banner as a subordinate of the Imp object indicates + // that this impression is offered as a banner type impression. At the + // publisher's discretion, that same impression may also be offered as + // video, audio, and/or native by also including as Imp subordinates the + // objects of those types. However, any given bid for the impression must + // conform to one of the offered types. + message Banner { + // 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. + repeated Format format = 15; + + // Width in device independent pixels (DIPS); recommended if no Format + // objects are specified. + int32 w = 1; + + // Height in device independent pixels (DIPS); recommended if no Format + // objects are specified. + int32 h = 2; + + // Blocked banner ad types. + // Refer to enum BannerAdType for values. + repeated int32 btype = 5; + + // Blocked creative attributes. + // Refer to enum com.iabtechlab.adcom.v1.enums.Creative.Attribute for + // values. + repeated int32 battr = 6; + + // Ad position on screen. + // Refer to enum com.iabtechlab.adcom.v1.PlacementPosition for values. + int32 pos = 4; + + // Content MIME types supported. Popular MIME types may include, + // "image/jpeg" and "image/gif". + repeated string mimes = 7; + + // Indicates if the banner is in the top frame as opposed to an iframe, + // where 0 = no, 1 = yes. + bool topframe = 8; + + // Directions in which the banner may expand. + // Refer to enum com.iabtechlab.adcom.v1.enums.ExpandableDirection for + // values. + repeated int32 expdir = 9; + + // List of supported API frameworks for this impression. If an API is not + // explicitly listed, it is assumed not to be supported. + // Refer to enum com.iabtechlab.adcom.v1.enums.APIFramework for values. + repeated int32 api = 10; + + // 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. + string id = 3; + + // 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. + bool vcm = 16; + + // NOTE: Deprecated in favor of the format array. + // Maximum width in device independent pixels (DIPS). + int32 wmax = 11 [deprecated = true]; + + // NOTE: Deprecated in favor of the format array. + // Maximum height in device independent pixels (DIPS). + int32 hmax = 12 [deprecated = true]; + + // NOTE: Deprecated in favor of the format array. + // Minimum width in device independent pixels (DIPS). + int32 wmin = 13 [deprecated = true]; + + // NOTE: Deprecated in favor of the format array. + // Minimum height in device independent pixels (DIPS). + int32 hmin = 14 [deprecated = true]; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Banner + + // This object represents an allowed size (i.e., height and width + // combination) or Flex Ad parameters for a banner impression. These are + // typically used in an array where multiple sizes are permitted. It is + // recommended that either the w/h pair or the wratio/hratio/wmin set + // (i.e., for Flex Ads) be specified. + message Format { + // Width in device independent pixels (DIPS). + int32 w = 1; + + // Height in device independent pixels (DIPS). + int32 h = 2; + + // Relative width when expressing size as a ratio. + int32 wratio = 3; + + // Relative height when expressing size as a ratio. + int32 hratio = 4; + + // The minimum width in device independent pixels (DIPS) at which the ad + // will be displayed when the size is expressed as a ratio. + int32 wmin = 5; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Format + + // 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. + message Video { + // Content MIME types supported (e.g., "video/mp4"). + // REQUIRED by the OpenRTB specification: at least 1 element. + repeated string mimes = 1; + + // 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. + // RECOMMENDED by the OpenRTB specification. + int32 minduration = 3 [default = 0]; + + // 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. + // RECOMMENDED by the OpenRTB specification. + int32 maxduration = 4; + + // Indicates the start delay in seconds for pre-roll, mid-roll, or + // post-roll ad placements. + // Refer to enum com.iabtechlab.adcom.v1.StartDelayMode for values. + // RECOMMENDED by the OpenRTB specification. + int32 startdelay = 8; + + // Indicates the maximum number of ads that may be served into a "dynamic" + // video ad pod (where the precise number of ads is not predetermined by + // the seller). See Section 7.6 for more details. + int32 maxseq = 28; + + // 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. + int32 poddur = 29; + + // Array of supported video bid response protocols. + // Refer to enum com.iabtechlab.adcom.v1.Creative.AudioVideoType for + // values. + repeated int32 protocols = 21; + + // Width of the video player in device independent pixels (DIPS). + // RECOMMENDED by the OpenRTB specification. + int32 w = 6; + + // Height of the video player in device independent pixels (DIPS). + // RECOMMENDED by the OpenRTB specification. + int32 h = 7; + + // Unique identifier indicating that an impression opportunity belongs to + // a video ad pod. If multiple impression opportunities within a bid + // request share the same podid, this indicates that those impression + // opportunities belong to the same video ad pod. + string podid = 30; + + // 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. + int32 podseq = 31 [default = 0]; + + // 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. + repeated int32 rqddurs = 32; + + // Deprecated as of OpenRTB 2.6-202303. Use plcmt instead. + // Refer to enum com.iabtechlab.adcom.v1.VideoPlacementSubtype for values. + int32 placement = 26 [deprecated = true]; + + // Video placement type for the impression. + // Refer to enum com.iabtechlab.adcom.v1.VideoPlcmtSubtype for values. + int32 plcmt = 35; + + // Indicates if the impression must be linear, nonlinear, etc. If none + // specified, assume all are allowed. Note that this field describes the + // expected VAST response and not whether a placement is in-stream, + // out-stream, etc. For that, see plcmt. + // Refer to enum com.iabtechlab.adcom.v1.enums.LinearityMode for values. + int32 linearity = 2; + + // 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. + bool skip = 23; + + // Videos of total duration greater than this number of seconds can be + // skippable; only applicable if the ad is skippable. + int32 skipmin = 24; + + // Number of seconds a video must play before skipping is enabled; only + // applicable if the ad is skippable. + int32 skipafter = 25; + + // Deprecated as of OpenRTB 2.6. Use slotinpod. + // If multiple ad impressions are offered in the same bid request, the + // sequence number will allow for the coordinated delivery of multiple + // creatives. + int32 sequence = 9 [default = 0, deprecated = true]; + + // For video ad pods, this value indicates that the seller can guarantee + // delivery against the indicated slot position in the pod. Refer to List: + // Slot Position in Pod in AdCOM 1.0 guidance on the use of this field. + int32 slotinpod = 33 [default = 0]; + + // 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. + double mincpmpersec = 34; + + // Blocked creative attributes. + // Refer to enum com.iabtechlab.adcom.v1.enums.Creative.Attribute for + // values. + repeated int32 battr = 10; + + // Maximum extended video ad duration, if extension is allowed. If blank + // or 0, extension is not allowed. If -1, extension is allowed, and there + // is no time limit imposed. If greater than 0, then the value represents + // the number of seconds of extended play supported beyond the maxduration + // value. + int32 maxextended = 11; + + // Minimum bit rate in Kbps (kilobits per second). + int32 minbitrate = 12; + + // Maximum bit rate in Kbps (kilobits per second). + int32 maxbitrate = 13; + + // Indicates if letter-boxing of 4:3 content into a 16:9 window is + // allowed, where 0 = no, 1 = yes. + bool boxingallowed = 14 [default = true]; + + // Playback methods that may be in use. If none are specified, any method + // may be used. Only one method is typically used in practice. As a + // result, this array may be converted to an integer in a future version + // of the specification. It is strongly advised to use only the first + // element of this array in preparation for this change. + // Refer to enum com.iabtechlab.adcom.v1.PlaybackMethod for values. + repeated int32 playbackmethod = 15; + + // The event that causes playback to end. + // Refer to enum com.iabtechlab.adcom.v1.PlaybackCessationMode for values. + int32 playbackend = 27; + + // Supported delivery methods (e.g., streaming, progressive). If none + // specified, assume all are supported. + // Refer to enum com.iabtechlab.adcom.v1.enums.DeliveryMethod for values. + repeated int32 delivery = 16; + + // Ad position on screen. + // Refer to enum com.iabtechlab.adcom.v1.PlacementPosition for values. + int32 pos = 17; + + // Array of Banner objects (Section 3.2.6) if companion ads are available. + repeated Banner companionad = 18; + + // List of supported API frameworks for this impression. If an API is not + // explicitly listed, it is assumed not to be supported. + // Refer to enum com.iabtechlab.adcom.v1.enums.APIFramework for values. + repeated int32 api = 19; + + // Supported VAST companion ad types. Recommended if companion Banner + // objects are included via the companionad array. If one of these banners + // will be rendered as an end-card, this can be specified using the vcm + // attribute with the particular banner (Section 3.2.6). + // Refer to enum com.iabtechlab.adcom.v1.CompanionType for values. + repeated int32 companiontype = 20; + + // Indicates pod deduplication settings that will be applied to bid + // responses. + // PROVISIONAL in the OpenRTB specification. + repeated int32 poddedupe = 37; + + // An array of DurFloors objects (Section 3.2.35) indicating the floor + // prices for video creatives of various durations that the buyer may bid + // with. + repeated DurFloors durfloors = 36; + + // Deprecated; use protocols. + // Refer to enum com.iabtechlab.adcom.v1.Creative.AudioVideoType for + // values. + int32 protocol = 5 [deprecated = true]; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + + // Retired fields. + reserved 22; + } // Video + + // 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. + message Audio { + // Content MIME types supported (e.g., "audio/mp4"). + // REQUIRED by the OpenRTB specification: at least 1 element. + repeated string mimes = 1; + + // 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. + // RECOMMENDED by the OpenRTB specification. + int32 minduration = 2 [default = 0]; + + // 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. + // RECOMMENDED by the OpenRTB specification. + int32 maxduration = 3; + + // 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. + int32 poddur = 25; + + // Array of supported audio protocols. + // Refer to enum com.iabtechlab.adcom.v1.Creative.AudioVideoType for + // values. + // RECOMMENDED by the OpenRTB specification. + repeated int32 protocols = 4; + + // Indicates the start delay in seconds for pre-roll, mid-roll, or + // post-roll ad placements. + // Refer to enum com.iabtechlab.adcom.v1.StartDelayMode for values. + // RECOMMENDED by the OpenRTB specification. + int32 startdelay = 5; + + // 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, minduration and maxduration must not be specified and vice + // versa. + repeated int32 rqddurs = 26; + + // Unique identifier indicating that an impression opportunity belongs to + // an audio ad pod. If multiple impression opportunities within a bid + // request share the same podid, this indicates that those impression + // opportunities belong to the same audio ad pod. + string podid = 27; + + // The sequence (position) of the audio ad pod within a content stream. + int32 podseq = 28 [default = 0]; + + // Deprecated as of OpenRTB 2.6. Use slotinpod. + int32 sequence = 6 [default = 0, deprecated = true]; + + // For audio ad pods, this value indicates that the seller can guarantee + // delivery against the indicated slot position in the pod. + int32 slotinpod = 29 [default = 0]; + + // Minimum CPM per second. This is a price floor for the "dynamic" portion + // of an audio ad pod, relative to the duration of bids an advertiser may + // submit. + double mincpmpersec = 30; + + // Blocked creative attributes. + // Refer to enum com.iabtechlab.adcom.v1.enums.Creative.Attribute for + // values. + repeated int32 battr = 7; + + // Maximum extended video ad duration, if extension is allowed. If blank + // or 0, extension is not allowed. If -1, extension is allowed, and there + // is no time limit imposed. If greater than 0, then the value represents + // the number of seconds of extended play supported beyond the maxduration + // value. + int32 maxextended = 8; + + // Minimum bit rate in Kbps (kilobits per second). + int32 minbitrate = 9; + + // Maximum bit rate in Kbps (kilobits per second). + int32 maxbitrate = 10; + + // Supported delivery methods (e.g., streaming, progressive). If none + // specified, assume all are supported. + // Refer to enum com.iabtechlab.adcom.v1.enums.DeliveryMethod for values. + repeated int32 delivery = 11; + + // Array of Banner objects (Section 3.2.6) if companion ads are available. + repeated Banner companionad = 12; + + // List of supported API frameworks for this impression. If an API is not + // explicitly listed, it is assumed not to be supported. + // Refer to enum com.iabtechlab.adcom.v1.enums.APIFramework for values. + repeated int32 api = 13; + + // Supported companion ad types. Recommended if companion Banner objects + // are included via the companionad array. + // Refer to enum com.iabtechlab.adcom.v1.CompanionType for values. + repeated int32 companiontype = 20; + + // The maximum number of ads that can be played in an ad pod. + int32 maxseq = 21; + + // Type of audio feed. + // Refer to enum com.iabtechlab.adcom.v1.enums.FeedType for values. + int32 feed = 22; + + // Indicates if the ad is stitched with audio content or delivered + // independently, where 0 = no, 1 = yes. + bool stitched = 23; + + // Volume normalization mode. + // Refer to enum com.iabtechlab.adcom.v1.VolumeNormalizationMode for + // values. + int32 nvol = 24; + + // An array of DurFloors objects (Section 3.2.35) indicating the floor + // prices for audio creatives of various durations that the buyer may bid + // with. + repeated DurFloors durfloors = 31; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Audio + + // 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 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. + message Native { + // 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+. + oneof request_oneof { + // This is the OpenRTB-compliant field for JSON serialization. + string request = 1; + + // This is an alternate field preferred for Protobuf serialization. + NativeRequest request_native = 50; + } + + // Version of the Native Ad Specification to which request complies; + // highly recommended for efficient parsing. + // RECOMMENDED by the OpenRTB specification. + string ver = 2; + + // List of supported API frameworks for this impression. If an API is not + // explicitly listed, it is assumed not to be supported. + // Refer to enum com.iabtechlab.adcom.v1.enums.APIFramework for values. + repeated int32 api = 3; + + // Blocked creative attributes. + // Refer to enum com.iabtechlab.adcom.v1.enums.Creative.Attribute for + // values. + repeated int32 battr = 4; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Native + + // 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. + message Qty { + // 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. + double multiplier = 1; + + // The source type of the quantity measurement, ie. publisher. + // Refer to enum + // com.iabtechlab.adcom.v1.enums.DOOHMultiplierMeasurementSourceType for + // values. RECOMMENDED by the OpenRTB specification. + int32 sourcetype = 2; + + // The top level business domain name of the measurement vendor providing + // the quantity measurement. + // REQUIRED by the OpenRTB specification if sourcetype is equal to 1. + string vendor = 3; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Qty + + message Refresh { + // A RefSettings object (see Section 3.2.34) describing the mechanics of + // how an ad placement automatically refreshes. + repeated RefSettings refsettings = 1; + + // The number of times this ad slot had been refreshed since last page + // load. + int32 count = 2; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Refresh + + // Information on how often and what triggers an ad slot being refreshed. + message RefSettings { + // The type of the declared auto refresh. + int32 reftype = 1 [default = 0]; + + // The minimum refresh interval in seconds. This applies to all refresh + // types. This is the (uninterrupted) time the ad creative will be + // rendered before refreshing to the next creative. If the field is + // absent, the exposure time is unknown. This field does not account for + // viewability or external factors such as a user leaving a page. + int32 minint = 2; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // RefSettings + + // This object is the private marketplace container for direct deals between + // buyers and sellers that may pertain to this impression. The actual deals + // are represented as a collection of Deal objects. Refer to Section 7.3 for + // more details. + message Pmp { + // Indicator of auction eligibility to seats named in the Direct Deals + // object, where 0 = all bids are accepted, 1 = bids are restricted to the + // deals specified and the terms thereof. + bool private_auction = 1 [default = false]; + + // Array of Deal (Section 3.2.12) objects that convey the specific deals + // applicable to this impression. + repeated Deal deals = 2; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Pmp + + // 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. + message Deal { + // A unique identifier for the direct deal. + // REQUIRED by the OpenRTB specification. + string id = 1; + + // Minimum bid for this impression expressed in CPM. + double bidfloor = 2 [default = 0]; + + // Currency specified using ISO-4217 alpha codes. This may be different + // from bid currency returned by bidder if this is allowed by the + // exchange. This field does not inherit from Imp.bidfloorcur; it is + // either explicitly specified or defaults to USD. + string bidfloorcur = 3 [default = "USD"]; + + // Optional override of the overall auction type of the bid request, + // where 1 = First Price, 2 = Second Price Plus, 3 = the value passed in + // bidfloor is the agreed upon deal price. Additional auction types can + // be defined by the exchange. + // Refer to enum com.iabtechlab.openrtb.v3.AuctionType for values. + int32 at = 6; + + // Allowed list of buyer seats (e.g., advertisers, agencies) allowed to + // bid on this deal. IDs of seats and the buyer's customers to which + // they refer must be coordinated between bidders and the exchange a + // priori. Omission implies no seat restrictions. + repeated string wseat = 4; + + // Array of advertiser domains (e.g., advertiser.com) allowed to bid on + // this deal. Omission implies no advertiser restrictions. + repeated string wadomain = 5; + + // Indicates that the deal is of type "guaranteed" and the bidder must + // bid on the deal, where 0 = not a guaranteed deal, 1 = guaranteed + // deal. + int32 guar = 7 [default = 0]; + + // Minimum CPM per second. This is a price floor for video or audio + // impression opportunities, relative to the duration of bids an + // advertiser may submit. + double mincpmpersec = 8; + + // Container for floor price by duration information, to be used if a + // given deal is eligible for video or audio demand. An array of + // DurFloors objects (see Section 3.2.35). + repeated DurFloors durfloors = 9; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Deal + + // SKAdNetwork object list attributes. + message SKAdNetworkList { + // Implies a list of SKAdNetwork IDs up to and including this value. + int32 max = 1; + + // List of registration IDs to be excluded from the IABTL shared list. + repeated int32 excl = 2; + + // List of string SKAdNetwork IDs not included in the IABTL shared list. + // The intention of addl is to be the permanent home for raw SKAdNetwork + // IDs, migrating away from BidRequest.imp.ext.skadn.skadnetids. + // Recommended that this list not exceed 10. + repeated string addl = 3; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // SKAdNetworkList + + // Publisher's SKAdNetwork information to support app installation + // attribution for iOS 14 and later. Apple's SKAdNetwork API helps + // advertisers measure ad-driven app installation by sending a postback to + // the ad network after a successful install. Publishers will need to + // configure supported ad networks in their app's property list (Info.plist) + // to allow an install to be attributed to the ad impression. For more info + // visit: https://developer.apple.com/documentation/storekit/skadnetwork + message SKAdNetworkRequest { + // Array of strings containing the supported SKAdNetwork versions. Always + // "2.0" or higher. Dependent on both the OS version and the SDK version. + repeated string versions = 5; + + // Version of SKAdNetwork supported. Dependent on both the OS version and + // the SDK version. + // Note: With the release of SKAdNetwork 2.1, this field is deprecated in + // favor of the BidRequest.imp.ext.skadn.versions to support an array of + // version numbers. + string version = 1 [deprecated = true]; + + // ID of publisher app in Apple's App Store. Should match app.bundle in + // OpenRTB 2.x and app.storeid in AdCOM 1.x. + string sourceapp = 2; + + // A subset of SKAdNetworkItem entries in the publisher app's Info.plist + // that are relevant to the DSP. Recommended that this list not exceed 10. + // Note: BidRequest.imp.ext.skadn.skadnetlist.addl is the preferred method + // to express raw SKAdNetwork IDs. + repeated string skadnetids = 3; + + // Object containing the IABTL list definition. + SKAdNetworkList skadnetlist = 4; + + // Custom Product Page support. + bool productpage = 6; + + // SKOverlay support. If set, SKOverlay is supported. + bool skoverlay = 7; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // SKAdNetworkRequest + + message InterestGroupAuctionSupport { + // Interest Group auction environment support for this impression. Note + // that this only indicates that the Interest Group auction is supported, + // not that it is guaranteed to execute. If no buyer chooses to + // participate in the Interest Group auction, then the Interest Group + // auction will be skipped and the winner of the OpenRTB (aka contextual) + // auction, if any, will serve instead. + enum AuctionEnvironment { + IG_AUCTION_NOT_SUPPORTED = 0; + ON_DEVICE_ORCHESTRATED_IG_AUCTION = 1; + SERVER_ORCHESTRATED_IG_AUCTION = 3; + } + int32 ae = 1 [default = 1]; + + // Indicates whether the buyer is allowed to participate in the Interest + // Group auction. Depending on account settings and other factors, a + // bidder might be disallowed from participating in an auction or + // submitting Interest Group bids, even though an Interest Group auction + // may ultimately decide the winning ad. The seller sets this. Example: + // the publisher intends to enable Interest Group, but the seller has not + // onboarded this buyer for Interest Group auctions. Buyers should only + // expect sellers to honor corresponding Interest Group Intent signals + // when this field is 1. + bool biddable = 2 [default = false]; + } // InterestGroupAuctionSupport + + // 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. + message Site { + // Exchange-specific site ID. + // RECOMMENDED by the OpenRTB specification. + string id = 1; + + // Site name (may be aliased at the publisher's request). + string name = 2; + + // Domain of the site (e.g., "mysite.foo.com"). + string domain = 3; + + // The taxonomy in use. If no cattax field is supplied IAB Content Category + // Taxonomy 1.0 is assumed. + // Refer to enum com.iabtechlab.adcom.v1.enums.CategoryTaxonomy for values. + int32 cattax = 16 [default = 1]; + + // Array of IAB Tech Lab content categories of the site. The taxonomy to be + // used is defined by the cattax field. + repeated string cat = 4; + + // 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. + repeated string sectioncat = 5; + + // Array of IAB Tech Lab content categories that describe the current page + // or view of the site. The taxonomy to be used is defined by the cattax + // field. + repeated string pagecat = 6; + + // URL of the page where the impression will be shown. + string page = 7; + + // Referrer URL that caused navigation to the current page. + string ref = 9; + + // Search string that caused navigation to the current page. + string search = 10; + + // Indicates if the site has been programmed to optimize layout when viewed + // on mobile devices, where 0 = no, 1 = yes. + bool mobile = 15; + + // Indicates if the site has a privacy policy, where 0 = no, 1 = yes. + bool privacypolicy = 8; + + // Details about the Publisher (Section 3.2.15) of the site. + Publisher publisher = 11; + + // Details about the Content (Section 3.2.16) within the site. + Content content = 12; + + // Comma separated list of keywords describing the site. Only one of + // keywords or kwarray may be present. + string keywords = 13; + + // Array of keywords about the site. Only one of keywords or kwarray may be + // present. + repeated string kwarray = 18; + + // 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. + string inventorypartnerdomain = 17; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + + // Retired fields. + reserved 14; + } // Site + + // 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. + message App { + // Exchange-specific app ID. + // RECOMMENDED by the OpenRTB specification. + string id = 1; + + // App name (may be aliased at the publisher's request). + string name = 2; + + // 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. + string bundle = 8; + + // Domain of the application. For example, "mygame.foo.com". + string domain = 3; + + // App store URL for an installed app; for QAG 1.5 compliance. + string storeurl = 16; + + // The taxonomy in use. + // Refer to enum com.iabtechlab.adcom.v1.enums.CategoryTaxonomy for values. + int32 cattax = 17 [default = 1]; + + // 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. + repeated string cat = 4; + + // 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. + repeated string sectioncat = 5; + + // Array of IAB Tech Lab content categories that describe the current page + // or view of the app. The taxonomy to be used is defined by the cattax + // field. + repeated string pagecat = 6; + + // Application version. + string ver = 7; + + // Indicates if the app has a privacy policy, where 0 = no, 1 = yes. + bool privacypolicy = 9; + + // 0 = app is free, 1 = the app is a paid version. + bool paid = 10; + + // Details about the Publisher (Section 3.2.15) of the app. + Publisher publisher = 11; + + // Details about the Content (Section 3.2.16) within the app. + Content content = 12; + + // Comma separated list of keywords describing the app. Only one of keywords + // or kwarray may be present. + string keywords = 13; + + // Array of keywords about the app. Only one of keywords or kwarray may be + // present. + repeated string kwarray = 19; + + // 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. + string inventorypartnerdomain = 18; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + + // Retired fields. + reserved 14; + } // App + + // 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. + message Dooh { + // Exchange provided id for a placement or logical grouping of placements. + string id = 1; + + // Name of the DOOH placement. + string name = 2; + + // 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. + // Refer to enum com.iabtechlab.adcom.v1.enums.DOOHVenueType for values. + repeated string venuetype = 3; + + // The venue taxonomy in use. + // Refer to enum com.iabtechlab.adcom.v1.enums.DOOHVenueTaxonomy for values. + int32 venuetypetax = 4 [default = 1]; + + // Details about the publisher of the placement. + Publisher publisher = 5; + + // Domain of the inventory owner (e.g., "mysite.foo.com"). + string domain = 6; + + // Comma separated list of keywords describing the DOOH placement. + string keywords = 7; + + // Details about the Content within the DOOH placement. + Content content = 8; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Dooh + + // This object describes the entity who directly supplies inventory to and is + // paid by the exchange. This may be a publisher, intermediary exchange, ad + // network, etc. + message Publisher { + // 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. + string id = 1; + + // Seller name (may be aliased at the seller's request). + string name = 2; + + // The taxonomy in use. + // Refer to enum com.iabtechlab.adcom.v1.enums.CategoryTaxonomy for values. + int32 cattax = 5 [default = 1]; + + // 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. + repeated string cat = 3; + + // Highest level domain of the seller (e.g., "seller.com"). + string domain = 4; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Publisher + + // 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. + message Content { + // ID uniquely identifying the content. + string id = 1; + + // Episode number. + int32 episode = 2; + + // 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). + string title = 3; + + // 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). + string series = 4; + + // Content season (e.g., "Season 3"). + string season = 5; + + // Artist credited with the content. + string artist = 21; + + // Genre that best describes the content (e.g., rock, pop, etc). + string genre = 22; + + // The taxonomy in use. If no gtax field is supplied rows listed, Content + // Category Taxonomy 3.1 is assumed. + // Refer to enum com.iabtechlab.adcom.v1.enums.CategoryTaxonomy for values. + int32 gtax = 33 [default = 9]; + + // Array of categories that describe the genre of the content. The taxonomy + // to be used is defined by the gtax field. If no gtax field is supplied, + // subset of rows listed in CTV Genre Mapping of Content Category Taxonomy + // 3.1 are assumed. See Section 7.13 in Implementation Guidance for + // additional detail. + repeated string genres = 35; + + // Album to which the content belongs; typically for audio. + string album = 23; + + // International Standard Recording Code conforming to ISO-3901. + string isrc = 24; + + // Details about the content Producer (Section 3.2.17). + Producer producer = 15; + + // URL of the content, for buy-side contextualization or review. + string url = 6; + + // The taxonomy in use. + // Refer to enum com.iabtechlab.adcom.v1.enums.CategoryTaxonomy for values. + int32 cattax = 27 [default = 1]; + + // 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. + repeated string cat = 7; + + // Production quality. + // Refer to enum com.iabtechlab.adcom.v1.ProductionQuality for values. + int32 prodq = 25; + + // Type of content (game, video, text, etc.). + // Refer to enum com.iabtechlab.adcom.v1.ContentContext for values. + int32 context = 20; + + // Content rating (e.g., MPAA). + string contentrating = 10; + + // User rating of the content (e.g., number of stars, likes, etc.). + string userrating = 11; + + // Media rating per IQG guidelines. + // Refer to enum com.iabtechlab.adcom.v1.MediaRating for values. + int32 qagmediarating = 17; + + // Comma separated list of keywords describing the content. Only one of + // keywords or kwarray may be present. + string keywords = 9; + + // Array of keywords about the content. Only one of keywords or kwarray may + // be present. + repeated string kwarray = 32; + + // 0 = not live, 1 = content is live (e.g., stream, live blog). + bool livestream = 13; + + // 0 = indirect, 1 = direct. + bool sourcerelationship = 14; + + // Length of content in seconds; appropriate for video or audio. + int32 len = 16; + + // Content language using ISO-639-1-alpha-2. Only one of language or langb + // should be present. + string language = 19; + + // Content language using IETF BCP 47. Only one of language or langb should + // be present. + string langb = 29; + + // Indicator of whether or not the content is embeddable (e.g., an + // embeddable video player), where 0 = no, 1 = yes. + bool embeddable = 18; + + // Additional content data. Each Data object (Section 3.2.21) represents a + // different data source. + repeated Data data = 28; + + // Details about the network (Section 3.2.23) the content is on. + Network network = 30; + + // Details about the channel (Section 3.2.24) the content is on. + Channel channel = 31; + + // NOTE: Deprecated in favor of prodq. + // Video quality per IAB's classification. + // Refer to enum com.iabtechlab.adcom.v1.ProductionQuality for values. + int32 videoquality = 8 [deprecated = true]; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + // An array of URLs of content that are _directly_ adjacent to the ad + // placement, for buy-side contextualization or review. For example, in a + // typical vertical feed, there would be 2 URLs provided as adjacent to + // the ad (above & below). In a 9-tile example, there would be 8 URLs + // provided. Note : the URL to the main page (in which the feed and the + // ad appear) in the case of web content should be provided in the + // content.url field. + repeated string feedurls = 1; + + extensions 500 to max; + } + + // Retired fields. + reserved 12, 26, 34; + } // Content + + // This object defines the producer of the content in which the ad will be + // shown. This is particularly useful when the content is syndicated and may + // be distributed through different publishers and thus when the producer and + // publisher are not necessarily the same entity. + message Producer { + // Content producer or originator ID. Useful if content is syndicated, and + // may be posted on a site using embed tags. + string id = 1; + + // Content producer or originator name (e.g., "Warner Bros"). + string name = 2; + + // The taxonomy in use. + // Refer to enum com.iabtechlab.adcom.v1.enums.CategoryTaxonomy for values. + int32 cattax = 5 [default = 1]; + + // 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. + repeated string cat = 3; + + // Highest level domain of the content producer (e.g., "producer.com"). + string domain = 4; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Producer + + // 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. + message Network { + // A unique identifier assigned by the publisher. This may not be a unique + // identifier across all supply sources. + string id = 1; + + // Network the content is on (e.g., a TV network like "ABC"). + string name = 2; + + // The primary domain of the network (e.g. "abc.com" in the case of the + // network ABC). It is recommended to include the top private domain (PSL+1) + // for DSP targeting normalization purposes. + string domain = 3; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Network + + // This object describes the channel an ad will be displayed on. A Channel is + // defined as the entity that curates a content library, or stream within a + // brand name for viewers. Examples are specific view selectable ‘channels' + // within linear and streaming television (MTV, HGTV, CNN, BBC One, etc) or a + // specific stream of audio content commonly called ‘stations.' Name is a + // human-readable field while domain and id can be used for reporting and + // targeting purposes. See 7.6 for further examples. + message Channel { + // A unique identifier assigned by the publisher. This may not be a unique + // identifier across all supply sources. + string id = 1; + + // Channel the content is on (e.g., a TV channel like "WABC-TV"). + string name = 2; + + // The primary domain of the channel (e.g. "abc7ny.com" in the case of the + // local channel WABC-TV). It is recommended to include the top private + // domain (PSL+1) for DSP targeting normalization purposes. + string domain = 3; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Channel + + // This object provides information pertaining to the device through which the + // user is interacting. Device information includes its hardware, platform, + // location, and carrier data. The device can refer to a mobile handset, a + // desktop computer, set top box, or other digital device. + message Device { + // Location of the device assumed to be the user's current location defined + // by a Geo object (Section 3.2.19). + // RECOMMENDED by the OpenRTB specification. + Geo geo = 4; + + // Standard "Do Not Track" flag as set in the header by the browser, where 0 + // = tracking is unrestricted, 1 = do not track. + // RECOMMENDED by the OpenRTB specification. + bool dnt = 1; + + // "Limit Ad Tracking" signal commercially endorsed (e.g., iOS, Android), + // where 0 = tracking is unrestricted, 1 = tracking must be limited per + // commercial guidelines. + // RECOMMENDED by the OpenRTB specification. + bool lmt = 23; + + // 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. + // RECOMMENDED by the OpenRTB specification. + string ua = 2; + + // Structured user agent information defined by a UserAgent object (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. + UserAgent sua = 31; + + // IPv4 address closest to device. + // RECOMMENDED by the OpenRTB specification. + string ip = 3; + + // IP address closest to device as IPv6. + string ipv6 = 9; + + // The general type of device. + // Refer to enum com.iabtechlab.adcom.v1.enums.DeviceType for values. + int32 devicetype = 18; + + // Device make (e.g., "Apple"). + string make = 12; + + // Device model (e.g., "iPhone"). + string model = 13; + + // Device operating system (e.g., "iOS"). + string os = 14; + + // Device operating system version (e.g., "3.1.2"). + string osv = 15; + + // Hardware version of the device (e.g., "5S" for iPhone 5S). + string hwv = 24; + + // Physical width of the screen in pixels. + int32 w = 25; + + // Physical height of the screen in pixels. + int32 h = 26; + + // Screen size as pixels per linear inch. + int32 ppi = 27; + + // The ratio of physical pixels to device independent pixels. + double pxratio = 28; + + // Support for JavaScript, where 0 = no, 1 = yes. + bool js = 16; + + // Indicates if the geolocation API will be available to JavaScript code + // running in the banner, where 0 = no, 1 = yes. + bool geofetch = 29; + + // Version of Flash supported by the browser. + string flashver = 19; + + // Browser language using ISO-639-1-alpha-2. Only one of language or langb + // should be present. + string language = 11; + + // Browser language using IETF BCP 47. Only one of language or langb should + // be present. + string langb = 32; + + // Carrier or ISP (e.g., "VERIZON") using exchange curated string names + // which should be published to bidders a priori. + string carrier = 10; + + // Mobile carrier as the concatenated MCC-MNC code (e.g., "310-005" + // identifies Verizon Wireless CDMA in the USA). Refer to + // https://en.wikipedia.org/wiki/Mobile_country_code for further examples. + // Note that the dash between the MCC and MNC parts is required to remove + // parsing ambiguity. The MCC-MNC values represent the SIM installed on the + // device and do not change when a device is roaming. Roaming may be + // inferred by a combination of the MCC-MNC, geo, IP and other data signals. + string mccmnc = 30; + + // Network connection type. + // Refer to enum com.iabtechlab.adcom.v1.enums.ConnectionType for values. + int32 connectiontype = 17; + + // ID sanctioned for advertiser use in the clear (i.e., not hashed). Unless + // prior arrangements have been made between the buyer and the seller + // directly, the value in this field is expected to be an ID derived from a + // call to an advertising API provided by the device's Operating System. + string ifa = 20; + + // Deprecated as of OpenRTB 2.6. + string didsha1 = 5 [deprecated = true]; + + // Deprecated as of OpenRTB 2.6. + string didmd5 = 6 [deprecated = true]; + + // Deprecated as of OpenRTB 2.6. + string dpidsha1 = 7 [deprecated = true]; + + // Deprecated as of OpenRTB 2.6. + string dpidmd5 = 8 [deprecated = true]; + + // Deprecated as of OpenRTB 2.6. + string macsha1 = 21 [deprecated = true]; + + // Deprecated as of OpenRTB 2.6. + string macmd5 = 22 [deprecated = true]; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + // (iOS Only) An integer passed to represent the app's app tracking + // authorization status. + enum Atts { + NOT_DETERMINED = 0; + RESTRICTED = 1; + DENIED = 2; + AUTHORIZED = 3; + } + int32 atts = 1; + + // IDFV of the device in that publisher. Listed as ifv to match ifa field + // format. + string ifv = 2; + + // Chrome-facilitated cookie deprecation testing label as received from + // Chrome. + // https://developer.chrome.com/en/docs/privacy-sandbox/chrome-testing/ + string cdep = 3; + + // Declared source of the device.ifa provided in the bid request. + string ifa_type = 4; + + extensions 500 to max; + } + } // Device + + // This object encapsulates various methods for specifying a geographic + // location. When subordinate to a Device object, it indicates the location of + // the device which can also be interpreted as the user's current location. + // When subordinate to a User object, it indicates the location of the user's + // home base (i.e., not necessarily their current location). + // + // The lat/lon attributes should only be passed if they conform to the + // accuracy depicted in the type attribute. For example, the centroid of a + // geographic region such as postal code should not be passed. + message Geo { + // Latitude from -90.0 to +90.0, where negative is south. + double lat = 1; + + // Longitude from -180.0 to +180.0, where negative is west. + double lon = 2; + + // Source of location data; recommended when passing lat/lon. + // Refer to enum com.iabtechlab.adcom.v1.enums.LocationType for values. + int32 type = 9; + + // 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. + int32 accuracy = 11; + + // Number of seconds since this geolocation fix was established. Note that + // devices may cache location data across multiple fetches. Ideally, this + // value should be from the time the actual fix was taken. + int32 lastfix = 12; + + // Service or provider used to determine geolocation from IP address if + // applicable (i.e., type = 2). + // Refer to enum com.iabtechlab.adcom.v1.enums.LocationService for values. + int32 ipservice = 13; + + // Country using ISO-3166-1 Alpha-3. + string country = 3; + + // Region code using ISO-3166-2; 2-letter state code if USA. + string region = 4; + + // Region of a country using FIPS 10-4 notation. While OpenRTB supports this + // attribute, it has been withdrawn by NIST in 2008. + string regionfips104 = 5; + + // Google metro code; similar to but not exactly Nielsen DMAs. See Appendix + // A for a link to the codes. + // (http://code.google.com/apis/adwords/docs/appendix/metrocodes.html). + string metro = 6; + + // City using United Nations Code for Trade & Transport Locations. See + // Appendix A for a link to the codes. + // (http://www.unece.org/cefact/locode/service/location.htm). + string city = 7; + + // Zip or postal code. + string zip = 8; + + // Local time as the number +/- of minutes from UTC. + int32 utcoffset = 10; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Geo + + // Structured user agent information, which can be used when a client supports + // User-Agent 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. + message UserAgent { + // Each BrandVersion object identifies a browser or similar software + // component. Implementers should send brands and versions derived from the + // Sec-CH-UA-Full-Version-List header or an equivalent JavaScript accessor + // from NavigatorUAData interface. This header or accessor are only + // available for browsers that support User-Agent Client Hints. + // RECOMMENDED by the OpenRTB specification. + repeated BrandVersion browsers = 1; + + // A BrandVersion object 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 or an equivalent JavaScript accessor + // from NavigatorUAData interface. This header or accessor are only + // available for browsers that support User-Agent Client Hints. + // RECOMMENDED by the OpenRTB specification. + BrandVersion platform = 2; + + // 1 if the agent prefers a "mobile" version of the content, if available, + // i.e. optimized for small screens or touch input. 0 if the agent prefers + // the "desktop" or "full" content. Implementers should derive this value + // from the Sec-CH-UA-Mobile header or an equivalent JavaScript accessor + // from NavigatorUAData interface. This header or accessor are only + // available for browsers that support User-Agent Client Hints. + bool mobile = 3; + + // Device's major binary architecture, e.g. "x86" or "arm". Implementers + // should retrieve this value from the Sec-CH-UA-Arch header or an + // equivalent JavaScript accessor from NavigatorUAData interface. This + // header or accessor are only available for browsers that support + // User-Agent Client Hints. + string architecture = 4; + + // Device's bitness, e.g. "64" for 64-bit architecture. Implementers should + // retrieve this value from the Sec-CH-UA-Bitness header or an equivalent + // JavaScript accessor from NavigatorUAData interface. This header or + // accessor are only available for browsers that support User-Agent Client + // Hints. + string bitness = 5; + + // Device model. Implementers should retrieve this value from the + // Sec-CH-UA-Model header or an equivalent JavaScript accessor from + // NavigatorUAData interface. This header or accessor are only available for + // browsers that support User-Agent Client Hints. + string model = 6; + + // The source of data used to create this object. + // Refer to enum com.iabtechlab.adcom.v1.enums.UserAgentSource for values. + int32 source = 7 [default = 0]; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // UserAgent + + // Further identification based on User-Agent Client Hints, the BrandVersion + // object is used to identify a device's browser or similar software + // component, and the user agent's execution platform or operating system. + message BrandVersion { + // A brand identifier, for example, "Chrome" or "Windows". The value may be + // sourced from the User-Agent Client Hints headers, representing either the + // user agent brand (from the Sec-CH-UA-Full-Version header) or the platform + // brand (from the Sec-CH-UA-Platform header). + string brand = 1; + + // A sequence of version components, in descending hierarchical order + // (major, minor, micro, …) + repeated string version = 2; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // BrandVersion + + // This object contains information known or derived about the human user of + // the device (i.e., the audience for advertising). The user id is an exchange + // artifact and may be subject to rotation or other privacy policies. However, + // when present, this user ID should be stable long enough to serve reasonably + // as the basis for frequency capping and retargeting. + message User { + // Exchange-specific ID for the user. Unless prior arrangements have been + // made between the buyer and the seller directly, the value in this field + // is expected to be derived from an ID sync. (see Appendix: Cookie Based + // ID Syncing) + string id = 1; + + // Buyer-specific ID for the user as mapped by the exchange for the buyer. + // Unless prior arrangements have been made between the buyer and the seller + // directly, the value in this field is expected to be derived from an ID + // sync. (see Appendix: Cookie Based ID Syncing) At least one of buyeruid or + // id is recommended. + string buyeruid = 2; + + // Deprecated as of OpenRTB 2.6. + int32 yob = 3 [deprecated = true]; + + // Deprecated as of OpenRTB 2.6. + string gender = 4 [deprecated = true]; + + // Comma separated list of keywords, interests, or intent. Only one of + // keywords or kwarray may be present. + string keywords = 5; + + // Array of keywords about the content. Only one of keywords or kwarray may + // be present. + repeated string kwarray = 9; + + // Optional feature to pass bidder data that was set 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. + string customdata = 6; + + // Location of the user's home base defined by a Geo object (Section + // 3.2.19). This is not necessarily their current location. + Geo geo = 7; + + // Additional user data. Each Data object (Section 3.2.21) represents a + // different data source. + repeated Data data = 8; + + // When GDPR regulations are in effect this attribute contains the + // Transparency and Consent Framework's Consent String data structure. + string consent = 10; + + // Details for support of a standard protocol for multiple third party + // identity providers (Section 3.2.27). + repeated EID eids = 11; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + // Consent string as specified in the IAB Transparency and Consent + // Framework v2. + // Deprecated, recommended to use user.consent instead. + string consent = 1 [deprecated = true]; + + // Extended (third-party) identifiers for this user. + repeated EID eids = 2 [deprecated = true]; + + extensions 500 to max; + } + } // User + + // Extended identifiers support in the OpenRTB specification allows buyers + // to use audience data in real-time bidding. This object can contain one or + // more UIDs from a single source or a technology provider. The exchange + // should ensure that business agreements allow for the sending of this + // data. + message EID { + // The canonical domain name of the entity (publisher, publisher + // monetization company, SSP, Exchange, Header Wrapper, etc.) that caused + // the ID array element to be added. This may be the operational domain of + // the system, if that is different from the parent corporate domain, to + // facilitate WHOIS and reverse IP lookups to establish clear ownership of + // the delegate system. + // + // This should be the same value as used to identify sellers in an ads.txt + // file if one exists. + // + // For ad tech intermediaries, this would be the domain as used in + // ads.txt. For publishers, this would match the domain in the site or app + // object. + string inserter = 3; + + // Canonical domain of the ID. + string source = 1; + + // Technology providing the match method as defined in mm. In some cases, + // this may be the same value as inserter. When blank, it is assumed that + // the matcher is equal to the source. May be omitted when mm=0, 1, or 2. + string matcher = 4; + + // Match method used by the matcher. + // Refer to enum com.iabtechlab.adcom.v1.enums.MatchMethod for values. + int32 mm = 5; + + // Array of extended ID UID objects from the given source. Refer to the + // Extended Identifier UIDs object (Section 3.2.28) + repeated UID uids = 2; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + + // This object contains a single user identifier provided as part of + // extended identifiers. The exchange should ensure that business + // agreements allow for the sending of this data. + message UID { + // The identifier for the user. + string id = 1; + + // Type of user agent the match is from. It is highly recommended to set + // this, as many DSPs separate app-native IDs from browser-based IDs and + // require a type value for ID resolution. + // Refer to enum com.iabtechlab.adcom.v1.enums.AgentType for values. + int32 atype = 2; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // UID + } // EID + + // The data and segment objects together allow additional data about the + // related object (e.g., user, content) to be specified. This data may be from + // multiple sources whether from the exchange itself or third parties as + // specified by the id field. A bid request can mix data objects from multiple + // providers. The specific data providers in use should be published by the + // exchange a priori to its bidders. + message Data { + // Exchange-specific ID for the data provider. + string id = 1; + + // Exchange-specific name for the data provider. + string name = 2; + + // Array of Segment (Section 3.2.22) objects that contain the actual data + // values. + repeated Segment segment = 3; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + // In the "ext" object of the "data" object array of the "content" object + // of OpenRTB 2.x bid requests: An array of content IDs, representing one + // or more identifiers for the video or audio content from the ID source + // specified in the "name" field of the "data" object. + repeated string cids = 1; + + extensions 500 to max; + } + } // Data + + // 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. + message Segment { + // ID of the data segment specific to the data provider. + string id = 1; + + // Name of the data segment specific to the data provider. + string name = 2; + + // String representation of the data segment value. + string value = 3; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Segment + + // 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. + message Regs { + // 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. + bool coppa = 1; + + // 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. + bool gdpr = 4; + + // Communicates signals regarding consumer privacy under US privacy + // regulation. See US Privacy String specifications. Refer to Section 7.5 + // for more information. + string us_privacy = 5; + + // Contains the Global Privacy Platform's consent string. See the Global + // Privacy Platform specification for more details. + string gpp = 2; + + // 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. + repeated int32 gpp_sid = 3; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + // Callers should fill this field solely based on whether the impression + // will serve to an EEA user, based on information available to them. It + // does not constitute legal guidance on GDPR. + // Deprecated, recommended to use regs.gdpr instead. + bool gdpr = 1 [deprecated = true]; + + // OpenRTB Extension for US Privacy (CCPA) + // Deprecated, recommended to use regs.us_privacy instead. + string us_privacy = 2 [deprecated = true]; + + // This is to be populated the value of the 'Sec-GPC' HTTP header from the + // user agent where the ad will be shown. Vendors with access to that + // header must populate this field with that value. Vendors receiving an + // OpenRTB request must populate this with the value of the same field + // from the request. No other usage of this field is valid. E.g., vendors + // are not to copy the GPC signal from the GPP string to this field. + string gpc = 3; + + // Extension for DSA transparency information. + DsaRequest dsa = 4; + + // A value of 1 indicates that the content is directed at minors and that + // specific types of products should not be advertised. + bool s22580 = 5; + + extensions 500 to max; + } + } // Regs + + message DsaRequest { + // Flag to indicate if DSA information should be made available. This will + // signal if the bid request belongs to an Online Platform/VLOP, such that + // a buyer should respond with DSA Transparency information based on the + // pubrender value. 0 = Not required, 1 = Supported, bid responses with or + // without DSA object will be accepted, 2 = Required, bid responses + // without DSA object will not be accepted, 3 = Required, bid responses + // without DSA object will not be accepted, Publisher is an Online + // Platform. + int32 dsarequired = 1; + + // Flag to indicate if the publisher will render the DSA Transparency + // info. This will signal if the publisher is able to and intends to + // render the icon and display the DSA transparency info to the end user. + // 0 = Publisher can't render, 1 = Publisher could render depending on + // adrender, 2 = Publisher will render. + int32 pubrender = 2; + + // Independent of pubrender, the publisher may need the transparency data + // for audit purposes. 0 = do not send transparency data, 1 = optional to + // send transparency data, 2 = send transparency data. + int32 datatopub = 3; + + // Array of objects of the entities that applied user parameters and the + // parameters they applied. + repeated Transparency transparency = 4; + } // DsaRequest + + // This object allows sellers to specify price floors for video and audio + // creatives, whose price varies based on time. For example: 1-15 seconds at a + // floor of $5; 16-30 seconds at a floor of $10, > 31 seconds at a floor of + // $20. There are no explicit constraints on the defined ranges, nor + // guarantees that they don't overlap. In cases where multiple ranges may + // apply, it is up to the buyer and seller to coordinate on which floor is + // applicable. + message DurFloors { + // An integer indicating the low end of a duration range. If this value is + // missing, the low end is unbounded. Either mindur or maxdur is required, + // but not both. + int32 mindur = 1; + + // An integer indicating the high end of a duration range. If this value is + // missing, the high end is unbounded. Either mindur or maxdur is required, + // but not both. + int32 maxdur = 2; + + // Minimum bid for a given impression opportunity, if bidding with a + // creative in this duration range, expressed in CPM. For any creatives + // whose durations are outside of the defined min/max, the 'bidfloor' at the + // 'Imp' level will serve as the default floor. + double bidfloor = 3 [default = 0.0]; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // DurFloors +} + +// This object is the top-level bid response object (i.e., the unnamed outer +// JSON object). The id attribute reflects the bid request ID for logging +// purposes. Similarly, bidid is an optional response tracking ID for bidders. +// If specified, it can be included in the subsequent win notice call if the +// bidder wins. At least one seatbid object is required, which contains at least +// one bid for an impression. Other attributes are optional. +// +// To express a "no-bid", the options are to return an empty response with HTTP +// 204. Alternately if the bidder wishes to convey to the exchange a reason for +// not bidding, just a BidResponse object is returned with a reason code in the +// nbr attribute. +message BidResponse { + // ID of the bid request to which this is a response. + // REQUIRED by the OpenRTB specification. + string id = 1; + + // Array of seatbid objects; 1+ required if a bid is to be made. + repeated SeatBid seatbid = 2; + + // Bidder generated response ID to assist with logging/tracking. + string bidid = 3; + + // Bid currency using ISO-4217 alpha codes. + string cur = 4; + + // 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. + string customdata = 5; + + // Reason for not bidding. + // Refer to enum com.iabtechlab.openrtb.v3.NoBidReason for values. + int32 nbr = 6; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + // Optional array of SeatNonBid objects. + repeated SeatNonBid seatnonbid = 1; + + // This extension to "Object: BidResponse" allows buyers and sellers to + // provide necessary signals in order to operate an Interest Group auction + // for a given ad slot. Must include at least a buyer object (igb, in the + // bid response from the buyer to the seller) or seller object (igs, from + // the seller to the publisher), but not both. + repeated InterestGroupAuctionIntent igi = 2; + + extensions 500 to max; + } + + // A bid response can contain multiple SeatBid objects, each on behalf of a + // different bidder seat and each containing one or more individual bids. If + // multiple impressions are presented in the request, the group attribute can + // be used to specify if a seat is willing to accept any impressions that it + // can win (default) or if it is only interested in winning any if it can win + // them all as a group. + message SeatBid { + // Array of 1+ Bid objects (Section 4.2.3) each related to an impression. + // Multiple bids can relate to the same impression. + repeated Bid bid = 1; + + // ID of the buyer seat (e.g., advertiser, agency) on whose behalf this bid + // is made. + string seat = 2; + + // 0 = impressions can be won individually; 1 = impressions must be won or + // lost as a group. + bool group = 3 [default = false]; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // SeatBid + + // 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. + message Bid { + // Bidder generated bid ID to assist with logging/tracking. + // REQUIRED by the OpenRTB specification. + string id = 1; + + // ID of the Imp object in the related bid request. + // REQUIRED by the OpenRTB specification. + string impid = 2; + + // Bid price expressed as CPM although the actual transaction is for a + // unit impression only. Note that while the type indicates float, + // integer math is highly recommended when handling currencies (e.g., + // BigDecimal in Java). + // REQUIRED by the OpenRTB specification. + double price = 3; + + // Win notice URL called by the exchange if the bid wins (not necessarily + // indicative of a delivered, viewed, or billable ad); optional means of + // serving ad markup. Substitution macros (Section 4.4) may be included in + // both the URL and optionally returned markup. + string nurl = 5; + + // Billing notice URL called by the exchange when a winning bid becomes + // billable based on exchange-specific business policy (e.g., typically + // delivered, viewed, etc.). Substitution macros (Section 4.4) may be + // included. + string burl = 22; + + // Loss notice URL called by the exchange when a bid is known to have been + // lost. Substitution macros (Section 4.4) may be included. + // Exchange-specific policy may preclude support for loss notices or the + // disclosure of winning clearing prices resulting in ${AUCTION_PRICE} + // macros being removed (i.e., replaced with a zero-length string). + string lurl = 23; + + // 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. For native ad bids, exactly one of {adm, + // adm_native} should be used. + oneof adm_oneof { + // This is the OpenRTB-compliant field for JSON serialization. + string adm = 6; + + // This is the field used for Protobuf serialization. + NativeResponse adm_native = 50; + } + + // ID of a preloaded ad to be served if the bid wins. + string adid = 4; + + // 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. + repeated string adomain = 7; + + // The store ID of the app in an app store (e.g., Apple App Store, Google + // Play). 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. + string bundle = 14; + + // URL without cache-busting to an image that is representative of the + // content of the campaign for ad quality/safety checking. + string iurl = 8; + + // Campaign ID to assist with ad quality checking; the collection of + // creatives for which iurl should be representative. + string cid = 9; + + // Creative ID to assist with ad quality checking. + string crid = 10; + + // Tactic ID to enable buyers to label bids for reporting to the exchange + // the tactic through which their bid was submitted. The specific usage + // and meaning of the tactic ID should be communicated between buyer and + // exchanges a priori. + string tactic = 24; + + // The taxonomy in use. + // Refer to enum com.iabtechlab.adcom.v1.enums.CategoryTaxonomy for + // values. + int32 cattax = 30 [default = 1]; + + // 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. + repeated string cat = 15; + + // Set of attributes describing the creative. + // Refer to enum com.iabtechlab.adcom.v1.enums.Creative.Attribute for + // values. + repeated int32 attr = 11; + + // List of supported APIs for the markup. If an API is not explicitly + // listed, it is assumed to be unsupported. + // Refer to enum com.iabtechlab.adcom.v1.enums.APIFramework for values. + repeated int32 apis = 31; + + // NOTE: Deprecated in favor of apis. + int32 api = 18 [deprecated = true]; + + // Video response protocol of the markup if applicable. + // Refer to enum com.iabtechlab.adcom.v1.Creative.AudioVideoType for + // values. + int32 protocol = 19; + + // Creative media rating per IQG guidelines. + // Refer to enum com.iabtechlab.adcom.v1.MediaRating for values. + int32 qagmediarating = 20; + + // Language of the creative using ISO-639-1-alpha-2. The nonstandard 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. + string language = 25; + + // Language of the creative using IETF BCP 47. Only one of language or + // langb should be present. + string langb = 29; + + // Reference to the deal.id from the bid request if this bid pertains to a + // private marketplace direct deal. + string dealid = 13; + + // Width of the creative in device independent pixels (DIPS). + int32 w = 16; + + // Height of the creative in device independent pixels (DIPS). + int32 h = 17; + + // Relative width of the creative when expressing size as a ratio. + // Required for Flex Ads. + int32 wratio = 26; + + // Relative height of the creative when expressing size as a ratio. + // Required for Flex Ads. + int32 hratio = 27; + + // Advisory as to the number of seconds the bidder is willing to wait + // between the auction and the actual impression. + int32 exp = 21; + + // Duration of the video or audio creative in seconds. + int32 dur = 32; + + // Type of the creative markup so that it can properly be associated with + // the right sub-object of the BidRequest.Imp. + int32 mtype = 33; + + // 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 enum com.iabtechlab.adcom.v1.enums.SlotPositionInPod for + // values. + int32 slotinpod = 28 [default = 0]; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + // Advertiser's SKAdNetwork information. + SKAdNetworkResponse skadn = 1; + + // Extension for DSA transparency information. + DsaResponse dsa = 2; + + // Unique key enabling to identify and track a campaign during its + // lifecycle regardless of the SSP and DSP used. Note : scid contains + // the AdvertiserID (Global location number) + Advertiser brand + + // Advertiser product code + Customer Product Estimate + Ext (optional) + string scid = 3; + + extensions 500 to max; + } + } // Bid + + message DsaResponse { + // Advertiser Transparency: Free UNICODE text string with a name of + // whose behalf the ad is displayed. Maximum 100 characters. + string behalf = 1; + + // Advertiser Transparency: Free UNICODE text string of who paid for the + // ad. Must always be included even if it's the same as what is listed + // in the behalf attribute. Maximum 100 characters. + string paid = 2; + + // Array of objects of the entities that applied user parameters and the + // parameters they applied. + repeated Transparency transparency = 3; + + // Flag to indicate that buyer/advertiser will render their own DSA + // transparency information inside the creative. 0 = buyer/advertiser + // will not render, 1 = buyer/advertiser will render. + bool adrender = 4; + } // DsaResponse + + // SKAdNetwork fidelity attributes. + message SKAdNetworkFidelity { + // The fidelity-type of the attribution to track. + enum Fidelity { + VIEW_THROUGH = 0; + STOREKIT_RENDERED = 1; + } + int32 fidelity = 1; + + // An id unique to each ad response. Refer to Apple's documentation for + // the proper UUID format requirements: + // https://developer.apple.com/documentation/storekit/skstoreproductparameteradnetworknonce + string nonce = 2; + + // Unix time in millis string used at the time of signature. + string timestamp = 3; + + // SKAdNetwork signature as specified by Apple. + string signature = 4; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // SKAdNetworkFidelity + + // Advertiser's SKAdNetwork information to support app installation + // attribution for iOS 14 and later. Apple's SKAdNetwork API helps + // advertisers measure ad-driven app installation by sending a postback to + // the ad network after a successful install. Ad networks will need to + // send their network ID and signed advertiser information to allow an + // install to be attributed to the ad impression. For more info visit: + // https://developer.apple.com/documentation/storekit/skadnetwork + message SKAdNetworkResponse { + // Version of SKAdNetwork desired. Must be 2.0 or above. + string version = 1; + + // Ad network identifier used in signature. Should match one of the + // items in the skadnetids array in the request. + string network = 2; + + // A four-digit integer that ad networks define to represent the ad + // campaign. Used in SKAdNetwork 4.0+, replaces Campaign ID 'campaign'. + // DSPs must generate signatures in 4.0+ using the Source Identifier. + string sourceidentifier = 10; + + // Campaign ID compatible with Apple's spec. As of 2.0, should be an + // integer between 1 and 100, expressed as a string. + string campaign = 3; + + // ID of advertiser's app in Apple's app store. Should match + // BidResponse.seatbid.bid.bundle. + string itunesitem = 4; + + // Custom Product Page ID (UUID). + string productpageid = 11; + + // Supports multiple fidelity types introduced in SKAdNetwork v2.2. + repeated SKAdNetworkFidelity fidelities = 9; + + // An id unique to each ad response. Refer to Apple's documentation for + // the proper UUID format requirements. + // Note: With the release of SKAdNetwork v2.2, this field is deprecated + // in favor of the BidResponse.bid.ext.skadn.fidelities.nonce to + // support multiple fidelity-types. + string nonce = 5; + + // ID of publisher's app in Apple's app store. Should match + // BidRequest.imp.ext.skad.sourceapp. + string sourceapp = 6; + + // Unix time in millis used at the time of signature generation. + // Note: With the release of SKAdNetwork 2.2, this field is deprecated + // in favor of the + // BidResponse.bid.ext.skadn.fidelities.timestamp to support + // multiple fidelity-types. + string timestamp = 7; + + // SKAdNetwork signature as specified by Apple. + // Note: With the release of SKAdNetwork 2.2, this field is deprecated + // in favor of the + // BidResponse.bid.ext.skadn.fidelities.signature to support + // multiple fidelity-types. + string signature = 8; + + // SKOverlay support. + SKOverlay skoverlay = 12; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // SKAdNetworkResponse + + message SKOverlay { + // Delay before presenting the SKOverlay in seconds. If set to 0, the + // overlay will be shown immediately. If this field is not set, the + // overlay will not be shown. + int32 delay = 1; + + // Delay before presenting the SKOverlay on an endcard in seconds. If + // set to 0, the overlay will be shown immediately. If this field is + // not set, the overlay will not be shown. + int32 endcarddelay = 2; + + // Whether the overlay can be dismissed by the user, where 0 = no, 1 = + // yes + bool dismissible = 3; + + // Position of the Overlay. 0 = bottom, 1 = bottomRaised. + int32 pos = 4; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // SKOverlay + + message SeatNonBid { + // Array of 1+ NonBid objects each related to an impression. Multiple non + // bids may relate to the same impression. + repeated NonBid nonbid = 1; + + // ID of the buyer seat (e.g., advertiser, agency) on whose behalf this bid + // is made. + string seat = 2; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // SeatNonBid + + message NonBid { + // ID of the Imp object in the related bid request. + string impid = 1; + + // Reason for non bid. Refer to the Non Bid Status Codes list in + // https://github.com/InteractiveAdvertisingBureau/openrtb/blob/main/extensions/community_extensions/seat-non-bid.md. + int32 statuscode = 2; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // NonBid + + message InterestGroupAuctionIntent { + // ID of the Imp object in the related bid request. Used to link Interest + // Group buyer information to the specific ad slot. Only required in the bid + // response from the buyer to the seller. + string impid = 1; + + // One or more InterestGroupAuctionBuyer objects. Required and mutually + // exclusive with igs. + repeated InterestGroupAuctionBuyer igb = 2; + + // One or more InterestGroupAuctionSeller objects. Required and mutually + // exclusive with igb. + repeated InterestGroupAuctionSeller igs = 3; + } // InterestGroupAuctionIntent + + // Information provided by the buyer and necessary for the seller to build the + // associated config. + message InterestGroupAuctionBuyer { + // Origin of the Interest Group buyer to participate in the IG auction. See + // https://developer.mozilla.org/en-US/docs/Glossary/Origin. + string origin = 1; + + // Maximum Interest Group bid price expressed in CPM currency that a bidder + // agrees to pay if they win an in-browser Interest Group auction expressed + // expressed in the currency denoted by the cur attribute. Actual winning + // bid in the in-browser auction that determines the amount a bidder pays + // for the impression may be lower than this amount. This constraint reduces + // the risks from in-browser auction bids submitted in error or reported due + // to fraud and abuse. + double maxbid = 2; + + // The buyer's currency signals, an object mapping string keys to Javascript + // numbers. If specified, the seller will add to its auction config + // perBuyerCurrencies attribute map, keyed by the Interest Group buyer + // origin. Indicates the currency in which Interest Group bids will be + // placed. The maxbid should always match the cur value. Value must be a + // three digit ISO 4217 alpha currency code (e.g. "USD"). + string cur = 3 [default = "USD"]; + + // Buyer-specific signals ultimately provided to this buyer's generateBid() + // function as the perBuyerSignals argument. If specified, the seller will + // add to its auction config perBuyerSignals attribute map, keyed by the + // Interest Group buyer Origin. Per PA API spec, the value may be any valid + // JSON serializable value. + .google.protobuf.Value pbs = 4; + + // The buyer’s priority signals, an object mapping string keys to Javascript + // numbers. If specified, the seller will add to its auction config + // perBuyerPrioritySignals attribute map, keyed by the Interest Group buyer + // origin. See + // https://github.com/WICG/turtledove/blob/main/FLEDGE.md#35-filtering-and-prioritizing-interest-groups. + map ps = 5; + + // The buyer’s experiment group ID, an integer between zero and 65535 (16 + // bits). If specified, the seller will add to its auction config + // perBuyerExperimentGroupIds attribute map, keyed by the Interest Group + // buyer origin. See + // https://github.com/WICG/turtledove/blob/main/FLEDGE.md#21-initiating-an-on-device-auction + // NOTE: Assuming the auction is not run in parallel, the seller will + // provide the value via the perBuyerExperimentGroupIds auction + // configuration, provided the seller does not start the auction in parallel + // with OpenRTB requests. + int32 begid = 6; + } // InterestGroupAuctionBuyer + + // Information provided by the seller and necessary to initiate an Interest + // Group component auction. Component seller auction configuration should be + // submitted to the top-level seller's on-page library for inclusion in the + // Interest Group auction. + message InterestGroupAuctionSeller { + // ID of the Imp object in the related bid request. Used to link Interest + // Group seller information to the specific ad slot. + string impid = 1; + + // Auction config for a component seller. + google.protobuf.Value config = 2; + } // InterestGroupAuctionSeller +} // BidResponse + +message Transparency { + // Domain of the entity that applied user parameters. + string domain = 1; + + // Array for platform or sell-side use of any user parameters (using the list + // provided by DSA Transparency Taskforce). Note; See definition and list of + // possible user parameters as listed here, applied consistently in both bid + // request and/or bid response. + enum DsaParams { + DsaParams_UNKNOWN = 0; + + // Information about the user, collected and used across contexts, that is + // about the user's activity, interests, demographic information, or other + // characteristics. + PROFILING = 1; + + // Use of real-time information about the context in which the ad will be + // shown, to show the ad, including information about the content and the + // device, such as: device type and capabilities, user agent, URL, IP + // address, non-precise geolocation data. Additionally, use of basic + // cross-context information not based on user behavior or user + // characteristics, for uses such as frequency capping, sequencing, brand + // safety, anti-fraud. + BASIC_ADVERTISING = 2; + + // The precise real-time geolocation of the user, i.e. GPS coordinates + // within 500 meter radius precision. + PRECISE_GEOLOCATION = 3; + } + repeated int32 dsaparams = 2; +} // Transparency + +// The Native Object defines the native advertising opportunity available for +// bid via this bid request. It must be included directly in the impression +// object if the impression offered for auction is a native ad format. +// +// Note: Prior to VERSION 1.1, the specification could be interpreted as +// requiring the native request to have a root node with a single field "native" +// that would contain the NativeRequest as its value. In 1.2 the NativeRequest +// Object specified here is now the root object. +message NativeRequest { + // Version of the Native Markup version in use. + string ver = 1; + + // The Layout ID of the native ad unit. + // Refer to enum LayoutId for values. + // RECOMMENDED by OpenRTB Native 1.0; optional in 1.1, DEPRECATED in 1.2. + int32 layout = 2; + + // The Ad unit ID of the native ad unit. This corresponds to one of IAB Core-6 + // native ad units. + // Refer to enum AdUnitId for values. + // RECOMMENDED by OpenRTB Native 1.0; optional in 1.1, DEPRECATED in 1.2. + int32 adunit = 3; + + // The context in which the ad appears. + // Refer to enum ContextType for values. + // RECOMMENDED in 1.2. + int32 context = 7; + + // A more detailed context in which the ad appears. + // Refer to enum com.iabtechlab.adcom.v1.enums.DisplayContextType for values. + int32 contextsubtype = 8; + + // The design/format/layout of the ad unit being offered. + // Refer to enum com.iabtechlab.adcom.v1.enums.DisplayPlacementType for + // values. + // RECOMMENDED by the OpenRTB Native specification. + int32 plcmttype = 9; + + // The number of identical placements in this Layout. + int32 plcmtcnt = 4 [default = 1]; + + // 0 for the first ad, 1 for the second ad, and so on. Note this would + // generally NOT be used in combination with plcmtcnt - either you are + // auctioning multiple identical placements (in which case plcmtcnt>1, seq=0) + // or you are holding separate auctions for distinct items in the feed (in + // which case plcmtcnt=1, seq>=1). + int32 seq = 5 [default = 0]; + + // Any bid must comply with the array of elements expressed by the Exchange. + // REQUIRED by the OpenRTB Native specification: at least 1 element. + repeated Asset assets = 6; + + // Whether the supply source / impression supports returning an assetsurl + // instead of an asset object. 0 or the absence of the field indicates no such + // support. + bool aurlsupport = 11; + + // Whether the supply source / impression supports returning a DCO URL instead + // of an asset object. 0 or the absence of the field indicates no such + // support. Beta feature. + bool durlsupport = 12; + + // Specifies what type of event tracking is supported. + repeated EventTrackers eventtrackers = 13; + + // Set to 1 when the native ad supports buyer-specific privacy notice. Set to + // 0 (or field absent) when the native ad doesn't support custom privacy links + // or if support is unknown. + // RECOMMENDED and implemented in 1.2 + bool privacy = 14; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + + // The main container object for each asset requested or supported by Exchange + // on behalf of the rendering client. Any object that is required is to be + // flagged as such. Only one of the {title,img,video,data} objects should be + // present in each object. All others should be null/absent. The id is to be + // unique within the Asset array so that the response can be aligned. + message Asset { + // Unique asset ID, assigned by exchange. Typically a counter for the array. + // REQUIRED by the OpenRTB Native specification. + int32 id = 1; + + // Set to true if asset is required (exchange will not accept a bid without + // it). + bool required = 2 [default = false]; + + oneof asset_oneof { + // Title object for title assets. + // RECOMMENDED by the OpenRTB Native specification. + Title title = 3; + + // Image object for image assets. + // RECOMMENDED by the OpenRTB Native specification. + Image img = 4; + + // Video object for video assets. Note that in-stream video ads are not + // part of Native. Native ads may contain a video as the ad creative + // itself. + BidRequest.Video video = 5; + + // Data object for brand name, description, ratings, prices etc. + // RECOMMENDED by the OpenRTB Native specification. + Data data = 6; + } + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Asset + + // The Title object is to be used for title element of the Native ad. + message Title { + // Maximum length of the text in the title element. + // RECOMMENDED that the value be either of: 25, 90, 140. + // REQUIRED by the OpenRTB Native specification. + int32 len = 1; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Title + + // The Image object to be used for all image elements of the Native ad such + // as Icons, Main Image, etc. Recommended sizes and aspect ratios are + // included in com.iabtechlab.adcom.v1.NativeImageAssetType. + message Image { + // Type ID of the image element supported by the publisher. The publisher + // can display this information in an appropriate format. + // Refer to enum com.iabtechlab.adcom.v1.NativeImageAssetType for values. + int32 type = 1; + + // Width of the image in pixels. + int32 w = 2; + + // Height of the image in pixels. + int32 h = 3; + + // The minimum requested width of the image in pixels. This option should + // be used for any rescaling of images by the client. Either w or wmin + // should be transmitted. If only w is included, it should be considered + // an exact requirement. + // RECOMMENDED by the OpenRTB Native specification. + int32 wmin = 4; + + // The minimum requested height of the image in pixels. This option should + // be used for any rescaling of images by the client. Either h or hmin + // should be transmitted. If only h is included, it should be considered + // an exact requirement. + // RECOMMENDED by the OpenRTB Native specification. + int32 hmin = 5; + + // Allowlist of content MIME types supported. Popular MIME types include, + // but are not limited to "image/jpg" and "image/gif". Each implementing + // Exchange should have their own list of supported types in the + // integration docs. See Wikipedia's MIME page for more information and + // links to all IETF RFCs. If blank, assume all types are allowed. + repeated string mimes = 6; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // Image + + // The Data Object is to be used for all non-core elements of the native + // unit such as Ratings, Review Count, Stars, Download count, descriptions + // etc. It is also generic for future of Native elements not contemplated at + // the time of the writing of this document. + message Data { + // Type ID of the element supported by the publisher. The publisher can + // display this information in an appropriate format. + // Refer to enum com.iabtechlab.adcom.v1.NativeDataAssetType for values. + // REQUIRED by the OpenRTB Native specification. + int32 type = 1; + + // Maximum length of the text in the element's response. Longer strings + // may be truncated and ellipsized by Ad Exchange or the publisher during + // rendering. + int32 len = 2; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + // The ID for a taxonomy that is registered centrally, at + // https://github.com/InteractiveAdvertisingBureau/openrtb/blob/main/extensions/community_extensions/segtax.md. + // Refer to enum com.iabtechlab.adcom.v1.CategoryTaxonomy for values. + int32 segtax = 1; + + extensions 500 to max; + } + } // Data + + // The EventTrackers object specifies the type of events the bidder can + // request to be tracked in the bid response, and which types of tracking are + // available for each event type, and is included as an array in the request. + message EventTrackers { + // Type of event available for tracking. + // Refer to enum com.iabtechlab.adcom.v1.EventType for values. + // REQUIRED by the OpenRTB Native specification. + int32 event = 1; + + // Array of types of tracking available for the given event. + // Refer to enum com.iabtechlab.adcom.v1.enums.EventTrackingMethod for + // values. + // REQUIRED by the OpenRTB Native specification. + repeated int32 methods = 2; + + // Placeholder for exchange-specific extensions to OpenRTB. + Ext ext = 99; + + message Ext { + extensions 500 to max; + } + } // EventTrackers +} // NativeRequest + +// The native response object is the top level JSON object which identifies an +// native response. Note: Prior to VERSION 1.1, the native response's root node +// was an object with a single field "native" that would contain the object +// above as its value. In 1.2 the NativeResponse Object specified here is now +// the root object. +message NativeResponse { + // Version of the Native Markup version in use. + // RECOMMENDED in 1.2 + string ver = 1; + + // List of native ad's assets. + // RECOMMENDED in 1.0, 1.1, or in 1.2 as a fallback if assetsurl is provided. + // REQUIRED in 1.2, if not assetsurl is provided. + repeated Asset assets = 2; + + // URL of alternate source for the assets object. The expected response is a + // JSON object mirroring the asset object in the bid response, subject to + // certain requirements as specified in the individual objects. Where present, + // overrides the assets object in the response. + string assetsurl = 6; + + // URL where a dynamic creative specification may be found for populating this + // ad, per the Dynamic Content Ads Specification. Note this is a beta option + // as the interpretation of the Dynamic Content Ads Specification and how to + // assign those elementes into a native ad is outside the scope of this spec + // and must be agreed offline between parties or as may be specified in a + // future revision of the Dynamic Content Ads spec. Where present, overrides + // the assets object in the response. + string dcourl = 7; + + // Destination Link. This is default link object for the ad. Individual assets + // can also have a link object which applies if the asset is activated + // (clicked). If the asset doesn't have a link object, the parent link object + // applies. See ResponseLink definition. + // REQUIRED by the OpenRTB Native specification. + Link link = 3; + + // Array of impression tracking URLs, expected to return a 1x1 image or 204 + // response - typically only passed when using 3rd party trackers. To be + // deprecated in 1.2 - Replaced with EventTracker. + repeated string imptrackers = 4; + + // Optional javascript impression tracker. Contains