OpenRTB Protocol Buffer 2.6

View raw content Back to Reference page

option java_outer_classname = "OpenRtb";
package com.google.openrtb;

// OpenRTB extensions ("ext" fields in the spec & JSON representation)
// are represented here by Protocol Buffer extensions. This proto only
// reserves the range of IDs 100-9999 at every extensible object.
// Reserved ranges:
//   100-199:   Reserved for Google.
//   200-299:   Reserved for IAB's formal standard extensions.
//   300-999:   Free for use with other exchanges or projects.
//   1000-1999: Reserved for Google.
//   2000-9999: Free for use with other exchanges or projects.
//
// 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 {
  oneof distributionchannel_oneof {
    // Information about the publisher's website. Only applicable and
    // recommended for websites.
    // Supported by Google.
    Site site = 3;

    // Information about the publisher's app
    // (non-browser applications). Only applicable and recommended for apps.
    // Supported by Google.
    App app = 4;
  }

  // Unique ID of the bid request, provided by the exchange.
  // REQUIRED by the OpenRTB specification.
  // Supported by Google.
  required string id = 1;

  // OpenRTB 2.0: 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.3), Video (Section 3.2.4),
  // and/or Native (Section 3.2.5) 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.
  // 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 up to n
    // for n impressions).
    // Supported by Google.
    required string id = 1;

    // OpenRTB 2.0: 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.4 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 and/or native by also including as Imp subordinates the Video
    // and/or Native objects, respectively. However, any given bid for the
    // impression must conform to one of the offered types.
    message Banner {
      // Exact width in device-independent pixels (DIPS); recommended if no
      // format objects are specified.
      // Supported by Google.
      optional int32 w = 1;

      // Exact height in device-independent pixels (DIPS); recommended if no
      // format objects are specified.
      // Supported by Google.
      optional int32 h = 2;

      // OpenRTB 2.4: This object represents an allowed size (
      // height and width combination) for a banner impression.
      // These are typically used in an array for an impression where
      // multiple sizes are permitted.
      message Format {
        // Width in device independent pixels (DIPS).
        // Supported by Google.
        optional int32 w = 1;

        // Height in device independent pixels (DIPS).
        // Supported by Google.
        optional int32 h = 2;

        // Relative width when expressing size as a ratio.
        // Not supported by Google.
        optional int32 wratio = 3;

        // Relative height when expressing size as a ratio.
        // Not supported by Google.
        optional 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.
        // Not supported by Google.
        optional int32 wmin = 5;
        extensions 100 to 9999;
      }

      // Array of format objects representing the banner sizes permitted.
      // If none are specified, then use of the h and w attributes
      // is highly recommended.
      // Supported by Google.
      repeated Format format = 15;

      // Unique identifier for this banner object. Recommended when Banner
      // objects are used with a Video object (Section 3.2.4) to represent
      // an array of companion ads. Values usually start at 1 and increase
      // with each object; should be unique within an impression.
      // Not supported by Google.
      optional string id = 3;

      // Ad position on screen.
      // Supported by Google.
      optional AdPosition pos = 4;

      // Blocked banner ad types.
      // Not supported by Google.
      repeated BannerAdType btype = 5 [packed = true];

      // Blocked creative attributes. See the full list of available attributes:
      // https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/main/AdCOM%20v1.0%20FINAL.md#list--creative-attributes-
      // Supported by Google.
      repeated CreativeAttribute battr = 6 [packed = true];

      // Allowlist of content MIME types supported. Popular MIME types include,
      // but are not limited to "image/jpg", "image/gif" and
      // "application/x-shockwave-flash".
      // Supported by Google.
      repeated string mimes = 7;

      // Specify if the banner is delivered in the top frame (true)
      // or in an iframe (false).
      // Supported by Google.
      optional bool topframe = 8;

      // Directions in which the banner may expand.
      // Supported by Google.
      repeated ExpandableDirection expdir = 9 [packed = true];

      // List of supported API frameworks for this impression.
      // If an API is not explicitly listed, it is assumed not to be supported.
      // Supported by Google.
      repeated APIFramework api = 10 [packed = true];

      // 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 false = concurrent, true = end-card.
      // Supported by Google.
      optional bool vcm = 16;

      // DEPRECATED in OpenRTB 2.4+, REMOVED in 2.6+; prefer the field format.
      // Maximum width in device independent pixels (DIPS).
      // Supported by Google.
      optional int32 wmax = 11 [deprecated = true];

      // DEPRECATED in OpenRTB 2.4+, REMOVED in 2.6+; prefer the field format.
      // Maximum height in device independent pixels (DIPS).
      // Supported by Google.
      optional int32 hmax = 12 [deprecated = true];

      // DEPRECATED in OpenRTB 2.4+, REMOVED in 2.6+; prefer the field format.
      // Minimum width in device independent pixels (DIPS).
      // Supported by Google.
      optional int32 wmin = 13 [deprecated = true];

      // DEPRECATED in OpenRTB 2.4+, REMOVED in 2.6+; prefer the field format.
      // Minimum height in device independent pixels (DIPS).
      // Supported by Google.
      optional int32 hmin = 14 [deprecated = true];
      extensions 100 to 9999;
    }

    // A Banner object (Section 3.2.3); required if this impression is
    // offered as a banner ad opportunity.
    // Supported by Google.
    optional Banner banner = 2;

    // OpenRTB 2.0: This object represents an in-stream video impression.
    // Many of the fields are non-essential for minimally viable transactions,
    // but are included to offer fine control when needed. Video in OpenRTB
    // generally assumes compliance with the VAST standard. As such, the notion
    // of companion ads is supported by optionally including an array of Banner
    // objects (refer to the Banner object in Section 3.2.3) 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 and/or native by also including as Imp subordinates the Banner
    // and/or Native objects, respectively. However, any given bid for the
    // impression must conform to one of the offered types.
    message Video {
      // Allowlist of content MIME types supported. Popular MIME types include,
      // but are not limited to "image/jpg", "image/gif" and
      // "application/x-shockwave-flash".
      // REQUIRED by the OpenRTB specification: at least 1 element.
      // Supported by Google.
      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.
      // Supported by Google.
      optional 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.
      // Supported by Google.
      optional int32 maxduration = 4;

      // Indicates the start delay in seconds for pre-roll, mid-roll, or
      // post-roll ad placements.
      // Refer to enum StartDelay for generic values.
      // Supported by Google.
      optional 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).
      // This field is currently only supported by Google for
      // rewarded video pods requests.
      optional int32 maxseq = 28;

      // Indicates the total amount of time in seconds that advertisers may
      // fill for a "dynamic" video ad pod, 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.
      // This field is currently only supported for rewarded video pods
      // requests.
      optional int32 poddur = 29;

      // Array of supported video bid response protocols.
      // At least one supported protocol must be specified.
      // Supported by Google.
      repeated Protocol protocols = 21 [packed = true];

      // Width of the video player in device independent pixels (DIPS).
      // Supported by Google.
      optional int32 w = 6;

      // Height of the video player in device independent pixels (DIPS).
      // Supported by Google.
      optional 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.
      // Not supported by Google.
      optional string podid = 30;

      // The sequence (position) of the video ad pod within a content stream.
      // Not supported by Google.
      optional PodSequence podseq = 31 [default = POD_SEQUENCE_ANY];

      // 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 the other way around.
      // Not supported by Google.
      repeated int32 rqddurs = 32 [packed = true];

      // Deprecated. This will be removed in January 2025 per the IAB here:
      // https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/main/AdCOM%20v1.0%20FINAL.md#list--placement-subtypes---video-
      // Placement type for the impression.
      // Supported by Google.
      optional VideoPlacementType placement = 26 [deprecated = true];

      // Video placement type declared by the publisher for this impression.
      // Introduced in OpenRTB 2.6 to reflect updated industry definitions
      // around different types of video ad placements. This field supersedes
      // the Video.placement field. May be unset if the publisher did not
      // declare a video placement type.
      // Supported by Google.
      optional Plcmt plcmt = 35 [default = PLCMT_UNKNOWN];

      // Indicates if the impression must be linear or nonlinear. If none
      // specified, assume all are allowed.
      // Supported by Google.
      optional VideoLinearity linearity = 2;

      // Indicates if the player will allow the video to be skipped.
      // If a bidder sends markup/creative that is itself skippable, the
      // Bid object should include the attr array with an element of
      // AD_CAN_BE_SKIPPED indicating skippable video.
      // Supported by Google.
      optional bool skip = 23;

      // Videos of total duration greater than this number of seconds
      // can be skippable; only applicable if the ad is skippable.
      // Not supported by Google.
      optional int32 skipmin = 24;

      // Number of seconds a video must play before skipping is
      // enabled; only applicable if the ad is skippable.
      // Not supported by Google.
      optional int32 skipafter = 25;

      // DEPRECATED in OpenRTB 2.6+; prefer the field podseq.
      // If multiple ad impressions are offered in the same bid request,
      // the sequence number will allow for the coordinated delivery of
      // multiple creatives.
      // Not supported by Google.
      optional int32 sequence = 9 [deprecated = true, default = 1];

      // For video ad pods, this value indicates that the seller can
      // guarantee delivery against the indicated slot position in the pod.
      // Not supported by Google.
      optional SlotPositionInPod slotinpod = 33 [default =
        SLOT_POSITION_POD_ANY];

      // 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.
      // Not supported by Google.
      optional double mincpmpersec = 34;

      // Blocked creative attributes. See the full list of available attributes:
      // https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/main/AdCOM%20v1.0%20FINAL.md#list--creative-attributes-
      // Supported by Google.
      repeated CreativeAttribute battr = 10 [packed = true];

      // 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.
      // Not supported by Google.
      optional int32 maxextended = 11;

      // Minimum bit rate in Kbps.
      // Supported by Google.
      optional int32 minbitrate = 12;

      // Maximum bit rate in Kbps.
      // Supported by Google.
      optional int32 maxbitrate = 13;

      // Indicates if letter-boxing of 4:3 content into a 16:9 window is
      // allowed.
      // Not supported by Google.
      optional 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.
      // Supported by Google.
      repeated PlaybackMethod playbackmethod = 15 [packed = true];

      // The event that causes playback to end.
      // Supported by Google.
      optional PlaybackCessationMode playbackend = 27;

      // Supported delivery methods (for example, streaming, progressive).
      // Supported by Google.
      repeated ContentDeliveryMethod delivery = 16 [packed = true];

      // Ad position on screen.
      // Supported by Google.
      optional AdPosition pos = 17;

      // Array of Banner objects (Section 3.2.3) if companion ads are available.
      // Supported by Google.
      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.
      // Supported by Google.
      repeated APIFramework api = 19 [packed = true];

      // Supported VAST companion ad types. Recommended if companion Banner
      // objects are included through the companionad array.
      // Supported by Google.
      repeated CompanionType companiontype = 20 [packed = true];

      // DEPRECATED in OpenRTB 2.3+, REMOVED in 2.6.
      // Use the field <code>protocols</code>.
      // Not supported by Google.
      optional Protocol protocol = 5 [deprecated = true];
      extensions 100 to 9999;
    }

    // A Video object (Section 3.2.4); required if this impression is
    // offered as a video ad opportunity.
    // Supported by Google.
    optional Video video = 3;

    // 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 DAAST standard. As such, the notion of companion
    // ads is supported by optionally including an array of Banner objects
    // 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 (for example, "audio/mp4").
      // REQUIRED by the OpenRTB specification: at least 1 element.
      // Supported by Google.
      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.
      // Supported by Google.
      optional 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.
      // Supported by Google.
      optional int32 maxduration = 3;

      // Indicates the total amount of time in seconds 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, whereas minduration/maxduration/rqddurs are
      // constraints relating to the slots that make up the pod.
      // Not supported by Google.
      optional int32 poddur = 25;

      // Array of supported audio protocols.
      // Supported by Google.
      repeated Protocol protocols = 4 [packed = true];

      // Indicates the start delay in seconds for pre-roll, mid-roll, or
      // post-roll ad placements.
      // Refer to enum StartDelay for generic values.
      // Supported by Google.
      optional 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 minduration and
      // maxduration; if rqddurs is specified, minduration and
      // maxduration must not be specified and the other way around.
      // Not supported by Google.
      repeated int32 rqddurs = 26 [packed = true];

      // 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.
      // Not supported by Google.
      optional string podid = 27;

      // The sequence (position) of the audio ad pod within a content stream.
      // Not supported by Google.
      optional PodSequence podseq = 28 [default = POD_SEQUENCE_ANY];

      // DEPRECATED in OpenRTB 2.6+; prefer the field podseq.
      // If multiple ad impressions are offered in the same bid request,
      // the sequence number will allow for the coordinated delivery of
      // multiple creatives.
      // Not supported by Google.
      optional int32 sequence = 6 [deprecated = true, default = 1];

      // For audio ad pods, this value indicates that the seller can
      // guarantee delivery against the indicated sequence.
      // Not supported by Google.
      optional SlotPositionInPod slotinpod = 29 [default =
        SLOT_POSITION_POD_ANY];

      // 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.
      // Not supported by Google.
      optional double mincpmpersec = 30;

      // Blocked creative attributes. See the full list of available attributes:
      // https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/main/AdCOM%20v1.0%20FINAL.md#list--creative-attributes-
      // Supported by Google.
      repeated CreativeAttribute battr = 7 [packed = true];

      // 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.
      // Not supported by Google.
      optional int32 maxextended = 8;

      // Minimum bit rate in Kbps.
      // Not supported by Google.
      optional int32 minbitrate = 9;

      // Maximum bit rate in Kbps.
      // Not supported by Google.
      optional int32 maxbitrate = 10;

      // Supported delivery methods (for example, streaming, progressive).
      // Supported by Google.
      repeated ContentDeliveryMethod delivery = 11 [packed = true];

      // Array of Banner objects if companion ads are available.
      // Supported by Google.
      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.
      // Supported by Google.
      repeated APIFramework api = 13 [packed = true];

      // Supported DAAST companion ad types. Recommended if companion Banner
      // objects are included through the companionad array.
      // Supported by Google.
      repeated CompanionType companiontype = 20 [packed = true];

      // The maximum number of ads that can be played in an ad pod.
      // Not supported by Google.
      optional int32 maxseq = 21;

      // Type of audio feed.
      // Supported by Google.
      optional FeedType feed = 22;

      // Indicates if the ad is stitched with audio content or delivered
      // independently.
      // Not supported by Google.
      optional bool stitched = 23;

      // Volume normalization mode.
      // Not supported by Google.
      optional VolumeNormalizationMode nvol = 24;
      extensions 100 to 9999;
    }

    // An Audio object; required if this impression is offered
    // as an audio ad opportunity.
    // Supported by Google.
    optional Audio audio = 15;

    // 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.
    // Supported by Google.
    optional 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.
    // Supported by Google.
    optional string displaymanagerver = 5;

    // true = the ad is interstitial or full screen, false = not interstitial.
    // Supported by Google.
    optional 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.
    // Supported by Google.
    optional string tagid = 7;

    // Minimum bid for this impression expressed in CPM.
    // Supported by Google.
    optional double bidfloor = 8 [default = 0];

    // The currency in which the bid floor is expressed. Specified using
    // ISO 4217 alpha codes.
    // Supported by Google.
    optional string bidfloorcur = 9 [default = "USD"];

    // Indicates the type of browser opened upon clicking the
    // creative in an app, where false = embedded, true = native.
    // Note that the Safari View Controller in iOS 9.x devices is considered
    // a native browser for purposes of this attribute.
    // Supported by Google.
    optional bool clickbrowser = 16;

    // Indicates if the impression requires secure HTTPS URL creative
    // assets and markup. If omitted, the secure state is unknown, but
    // non-secure HTTP support can be assumed.
    // Supported by Google.
    optional bool secure = 12;

    // Array of exchange-specific names of supported iframe busters.
    // Not supported by Google.
    repeated string iframebuster = 10;

    // Indicates whether the user receives a reward for viewing the ad.
    // 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.
    // Supported by Google.
    optional 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.
    // Not supported by Google.
    optional ServerSideAdInsertionType ssai = 19 [default =
      SERVER_SIDE_AD_INSERTION_TYPE_UNKNOWN];

    // OpenRTB 2.2: 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.2 for more details.
    message Pmp {
      // Indicator of auction eligibility to seats named in the Direct Deals
      // object, where false = all bids are accepted, true = bids are restricted
      // to the deals specified and the terms thereof.
      // Supported by Google.
      optional bool private_auction = 1 [default = false];

      // OpenRTB 2.2: This object constitutes a specific deal that was struck
      // a priori 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.2 for more details.
      message Deal {
        // A unique identifier for the direct deal.
        // REQUIRED by the OpenRTB specification.
        // Supported by Google.
        required string id = 1;

        // Minimum bid for this deal expressed in CPM.
        // Supported by Google.
        optional double bidfloor = 2 [default = 0];

        // The currency in which the deal floor is expressed. Specified using
        // ISO 4217 alpha codes.
        // Supported by Google.
        optional string bidfloorcur = 3 [default = "USD"];

        // Allowlist of buyer seats (for example, advertisers, agencies) that
        // can bid on this deal. IDs of seats and knowledge of the buyer's
        // customers to which they refer must be coordinated between bidders and
        // the exchange a priori. Omission implies no seat restrictions.
        // Supported by Google.
        repeated string wseat = 4;

        // Array of advertiser domains (for example, advertiser.com) allowed to
        // bid on this deal. Omission implies no advertiser restrictions.
        // Not supported by Google.
        repeated string wadomain = 5;

        // Optional override of the overall auction type of the bid request.
        // Supports the additional value FIXED_PRICE: the value passed in
        // bidfloor is the agreed upon deal price.
        // Supported by Google.
        optional AuctionType at = 6;
        extensions 100 to 9999;
      }

      // Array of Deal (Section 3.2.18) objects that convey the specific deals
      // applicable to this impression.
      // Supported by Google.
      repeated Deal deals = 2;
      extensions 100 to 9999;
    }

    // A Pmp object (Section 3.2.17) containing any private marketplace deals
    // in effect for this impression.
    // Supported by Google.
    optional Pmp pmp = 11;

    // OpenRTB 2.3: This object represents a native type impression.
    // Native ad units are intended to blend seamlessly into the surrounding
    // content (for example, 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 Native Ad Specification. 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 Native Ad Specification. 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 and/or video by also including as Imp subordinates the Banner
    // and/or Video objects, respectively. However, any given bid for the
    // impression must conform to one of the offered types.
    message Native {
      oneof request_oneof {
        // Request payload complying with the Native Ad Specification.
        // Exactly one of {request, request_native} should be used;
        // this is the OpenRTB-compliant field for JSON serialization.
        string request = 1;

        // Request payload complying with the Native Ad Specification.
        // Exactly one of {request, request_native} should be used;
        // this is an alternate field preferred for Protobuf serialization.
        NativeRequest request_native = 50;
      }

      // Version of the Native Ad Specification to which request complies.
      optional 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.
      repeated APIFramework api = 3 [packed = true];

      // Blocked creative attributes. See the full list of available attributes:
      // https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/main/AdCOM%20v1.0%20FINAL.md#list--creative-attributes-
      repeated CreativeAttribute battr = 4 [packed = true];
      extensions 100 to 9999;
    }

    // A Native object (Section 3.2.5); required if this impression is
    // offered as a native ad opportunity.
    // Supported by Google.
    optional Native native = 13;

    // Advisory as to the number of seconds that may elapse
    // between the auction and the actual impression.
    // Supported by Google.
    optional int32 exp = 14;

    // OpenRTB 2.5: 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, or another metric. 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.
      // Supported by Google.
      optional 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.
      // Supported by Google.
      optional 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.
      // Supported by Google.
      optional string vendor = 3;
      extensions 100 to 9999;
    }

    // An array of Metric object.
    // Supported by Google.
    repeated Metric metric = 17;

    // Details on automatic ad slot refreshes: frequency, triggers, and refresh
    // count since last page load for this specific slot.
    message Refresh {
      // Information on how often and what triggers an ad slot being refreshed.
      message RefSettings {
        // The type of the declared auto refresh. Refer to List: Auto Refresh
        // Trigger in AdCOM 1.0:
        // https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/develop/AdCOM%20v1.0%20FINAL.md#list-auto-refresh-triggers-.
        // Supported by Google.
        optional int32 reftype = 1;

        // 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.
        // Supported by Google.
        optional int32 minint = 2;
      }

      // Describes the mechanics of how an ad placement automatically refreshes.
      // Supported by Google.
      repeated RefSettings refsettings = 1;

      // The number of times this ad slot had been refreshed since last page
      // load.
      // Supported by Google.
      optional int32 count = 2;
      extensions 100 to 9999;
    }

    // Details about ad slots being refreshed automatically.
    // Supported by Google.
    optional Refresh refresh = 20;
    extensions 100 to 9999;
  }

  // Array of Imp objects (Section 3.2.2) representing the impressions offered.
  // At least 1 Imp object is required.
  // Supported by Google.
  repeated Imp imp = 2;

  // OpenRTB 2.0: This object describes the publisher of the media in which
  // the ad will be displayed. The publisher is typically the seller
  // in an OpenRTB transaction.
  message Publisher {
    // Exchange-specific publisher ID.
    // Supported by Google.
    optional string id = 1;

    // Publisher name (may be aliased at publisher's request).
    // Not supported by Google.
    optional string name = 2;

    // The taxonomy in use for cat.
    // Not supported by Google.
    optional CategoryTaxonomy cattax = 5 [default = IAB_CONTENT_1_0];

    // Array of IAB content categories that describe the publisher.
    // The taxonomy to be used is defined by the cattax field.
    // Not supported by Google.
    repeated string cat = 3;

    // Highest level domain of the publisher (for example, "publisher.com").
    // Not supported by Google.
    optional string domain = 4;
    extensions 100 to 9999;
  }

  // OpenRTB 2.0: 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, as a result 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.
    // Not supported by Google.
    optional string id = 1;

    // Content episode number (typically applies to video content).
    // Not supported by Google.
    optional 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).
    // Not supported by Google.
    optional 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).
    // Not supported by Google.
    optional string series = 4;

    // Content season; typically for video content (for example, "Season 3").
    // Not supported by Google.
    optional string season = 5;

    // Artist credited with the content.
    // Not supported by Google.
    optional string artist = 21;

    // Genre that best describes the content (for example, rock, pop, etc).
    // Not supported by Google.
    optional string genre = 22;

    // Album to which the content belongs; typically for audio.
    // Not supported by Google.
    optional string album = 23;

    // International Standard Recording Code conforming to ISO-3901.
    // Not supported by Google.
    optional string isrc = 24;

    // OpenRTB 2.0: 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.
      // Not supported by Google.
      optional string id = 1;

      // Content producer or originator name (for example, "Warner Bros").
      // Not supported by Google.
      optional string name = 2;

      // The taxonomy in use for cat.
      // Not supported by Google.
      optional CategoryTaxonomy cattax = 5 [default = IAB_CONTENT_1_0];

      // Array of IAB content categories that describe the content producer.
      // The taxonomy to be used is defined by the cattax field.
      // Not supported by Google.
      repeated string cat = 3;

      // Highest level domain of the content producer (for example,
      // "producer.com").
      // Supported by Google.
      optional string domain = 4;
      extensions 100 to 9999;
    }

    // Details about the content Producer (Section 3.2.10).
    // Supported by Google.
    optional Producer producer = 15;

    // URL of the content, for buy-side contextualization or review.
    // Supported by Google.
    optional string url = 6;

    // The taxonomy in use for cat.
    // Not supported by Google.
    optional CategoryTaxonomy cattax = 27 [default = IAB_CONTENT_1_0];

    // Array of IAB content categories that describe the content.
    // The taxonomy to be used is defined by the cattax field.
    // Not supported by Google.
    repeated string cat = 7;

    // Production quality.
    // Supported by Google.
    optional ProductionQuality prodq = 25;

    // Type of content (for example, game, video or text).
    // Not supported by Google.
    optional ContentContext context = 20;

    // Content rating.
    // Possible values: "DV-G", "DV-PG", "DV-T", "DV-MA".
    // Supported by Google.
    optional string contentrating = 10;

    // User rating of the content (for example, number of stars or likes).
    // Supported by Google.
    optional string userrating = 11;

    // Media rating per QAG guidelines.
    // Not supported by Google.
    optional QAGMediaRating qagmediarating = 17;

    // Comma separated list of keywords describing the content.
    // Not supported by Google.
    optional string keywords = 9;

    // false = not live, true = content is live (for example, stream, live
    // blog).
    // Supported by Google.
    optional bool livestream = 13;

    // false = indirect, true = direct.
    // Not supported by Google.
    optional bool sourcerelationship = 14;

    // Length of content in seconds; appropriate for video or audio.
    // Supported by Google.
    optional int32 len = 16;

    // Content language using ISO-639-1-alpha-2.
    // Only one of language or langb should be present.
    // Supported by Google.
    optional string language = 19;

    // Content language using IETF BCP 47.
    // Only one of language or langb should be present.
    // Not supported by Google.
    optional string langb = 29;

    // Indicator of whether or not the content is embeddable (for example, an
    // embeddable video player).
    // Not supported by Google.
    optional bool embeddable = 18;

    // Additional content data. Each object represents a different data source.
    // Supported by Google. Used for Publisher Provided Signals:
    // https://support.google.com/admanager/answer/12451124
    repeated Data data = 28;

    // 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.
    message Network {
      // A unique identifier assigned by the publisher, for example "net-123".
      // This may not be a unique identifier across all supply sources.
      // Not supported by Google.
      optional string id = 1;

      // Network the content is on (e.g., a TV network like "ABC").
      // Not supported by Google.
      optional 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.
      // Not supported by Google.
      optional string domain = 3;
      extensions 100 to 9999;
    }

    // Details about the network the content is on.
    // Not supported by Google.
    optional Network network = 30;

    // 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.
    message Channel {
      // A unique identifier assigned by the publisher, for example "ch-456".
      // This may not be a unique identifier across all supply sources.
      // Not supported by Google.
      optional string id = 1;

      // Channel the content is on (e.g., a local channel like "WABC-TV").
      // Not supported by Google.
      optional 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.
      // Not supported by Google.
      optional string domain = 3;
      extensions 100 to 9999;
    }

    // Details about the channel the content is on.
    // Not supported by Google.
    optional Channel channel = 31;

    // DEPRECATED in OpenRTB 2.4+. Prefer the field <code>prodq</code>.
    // Video quality per IAB's classification.
    // Not supported by Google.
    optional ProductionQuality videoquality = 8 [deprecated = true];
    extensions 100 to 9999;
  }

  // OpenRTB 2.0: This object should be included if the ad supported content
  // is a website as opposed to a non-browser application. A bid request must
  // not contain both a Site and an App object. At a minimum, it is useful to
  // provide a site ID or page URL, but this is not strictly required.
  message Site {
    // Site ID on the exchange.
    // Not supported by Google.
    optional string id = 1;

    // Site name (may be masked at publisher's request).
    // Not supported by Google.
    optional string name = 2;

    // Domain of the site, used for advertiser side blocking.
    // For example, "foo.com".
    // Not supported by Google.
    optional string domain = 3;

    // The taxonomy in use for cat, sectioncat and pagecat.
    // Not supported by Google.
    optional CategoryTaxonomy cattax = 16 [default = IAB_CONTENT_1_0];

    // Array of IAB content categories of the site.
    // The taxonomy to be used is defined by the cattax field.
    // Not supported by Google.
    repeated string cat = 4;

    // Array of IAB content categories that describe the current section
    // of the site.
    // The taxonomy to be used is defined by the cattax field.
    // Not supported by Google.
    repeated string sectioncat = 5;

    // Array of IAB content categories that describe the current page or view
    // of the site.
    // The taxonomy to be used is defined by the cattax field.
    // Not supported by Google.
    repeated string pagecat = 6;

    // URL of the page where the impression will be shown.
    // Supported by Google.
    optional string page = 7;

    // Indicates if the site has a privacy policy.
    // Not supported by Google.
    optional bool privacypolicy = 8;

    // Referrer URL that caused navigation to the current page.
    // Not supported by Google.
    optional string ref = 9;

    // Search string that caused navigation to the current page.
    // Not supported by Google.
    optional string search = 10;

    // Details about the Publisher (Section 3.2.8) of the site.
    // Supported by Google.
    optional Publisher publisher = 11;

    // Details about the Content (Section 3.2.9) within the site.
    // Supported by Google.
    optional Content content = 12;

    // Comma separated list of keywords about this site.
    // Not supported by Google.
    optional string keywords = 13;

    // Indicates if the site has been programmed to optimize layout
    // when viewed on mobile devices.
    // Supported by Google.
    optional bool mobile = 15;
    extensions 100 to 9999;
  }

  // OpenRTB 2.0: This object should be included if the ad supported content
  // is a non-browser application (typically in mobile) as opposed to a website.
  // A bid request must not contain both an App and a Site object.
  // At a minimum, it is useful to provide an App ID or bundle,
  // but this is not strictly required.
  message App {
    // Application ID on the exchange.
    // Not supported by Google.
    optional string id = 1;

    // Application name (may be aliased at publisher's request). App names for
    // SDK-less requests (mostly from connected TVs) can be provided by the
    // publisher directly in the request.
    // Supported by Google.
    optional string name = 2;

    // Domain of the application. For example, "mygame.foo.com".
    // Not supported by Google.
    optional string domain = 3;

    // The taxonomy in use for cat, sectioncat and pagecat.
    // Not supported by Google.
    optional CategoryTaxonomy cattax = 17 [default = IAB_CONTENT_1_0];

    // Array of IAB content categories of the app.
    // The taxonomy to be used is defined by the cattax field.
    // Not supported by Google.
    repeated string cat = 4;

    // Array of IAB content categories that describe the current section
    // of the app.
    // The taxonomy to be used is defined by the cattax field.
    // Not supported by Google.
    repeated string sectioncat = 5;

    // Array of IAB content categories that describe the current page or view
    // of the app.
    // The taxonomy to be used is defined by the cattax field.
    // Not supported by Google.
    repeated string pagecat = 6;

    // Version of the application specified in the bundle field (for example,
    // "2.0.1").
    // Supported by Google.
    optional string ver = 7;

    // A platform-specific application identifier intended to be
    // unique to the app and independent of the exchange. On Android,
    // this should be a bundle or package name (for example, com.foo.mygame).
    // On iOS, it is a numeric ID. For SDK-less requests (mostly from connected
    // TVs), it can be provided by the publisher directly in the request.
    // Supported by Google.
    optional string bundle = 8;

    // Indicates if the app has a privacy policy.
    // Not supported by Google.
    optional bool privacypolicy = 9;

    // false = app is free, true = the app is a paid version.
    // Not supported by Google.
    optional bool paid = 10;

    // Details about the Publisher (Section 3.2.8) of the app.
    // Supported by Google.
    optional Publisher publisher = 11;

    // Details about the Content (Section 3.2.9) within the app.
    // Supported by Google.
    optional Content content = 12;

    // Comma separated list of keywords about the app.
    // Not supported by Google.
    optional string keywords = 13;

    // App store URL for an installed app; for QAG 1.5 compliance.
    // Supported by Google.
    optional string storeurl = 16;
    extensions 100 to 9999;
  }

  // OpenRTB 2.0: 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 (for example, not necessarily their current location).
  //
  // Google: In Google's implementation of OpenRTB, coarse geolocation
  // information is approximated based on the IP address of the device the ad
  // request originated from. This information will typicallybut not alwaysbe
  // included in the bid request with lat/lon representing the center point of
  // a circle, where accuracy is its radius. To learn more about geolocation,
  // see the geotargeting guide:
  // https://developers.google.com/authorized-buyers/rtb/geotargeting.
  message Geo {
    // Approximate latitude from -90.0 to +90.0, where negative is south.
    // Supported by Google.
    optional double lat = 1;

    // Approximate longitude from -180.0 to +180.0, where negative is west.
    // Supported by Google.
    optional double lon = 2;

    // Country using ISO-3166-1 Alpha-3.
    // Supported by Google.
    optional string country = 3;

    // Region code using ISO-3166-2; 2-letter state code if USA.
    // Supported by Google.
    optional 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.
    // Not supported by Google.
    optional 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).
    // Supported by Google.
    optional 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).
    // Supported by Google.
    optional string city = 7;

    // Zip/postal code.
    // Supported by Google.
    optional string zip = 8;

    // Source of location data; recommended when passing lat/lon.
    // Supported by Google.
    optional LocationType type = 9;

    // Estimated location accuracy in meters; recommended when lat/lon are
    // specified and derived from a device's location services (for example,
    // type = 1). Note that this is the accuracy as reported from the device.
    // Consult OS specific documentation (for example, Android, iOS) for exact
    // interpretation.
    //
    // Google: The radius in meters of a circle approximating the location of a
    // device, where the center point is defined by lat/lon. This field is
    // populated based on coarse IP-based geolocation.
    // Supported by Google.
    optional 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.
    // Not supported by Google.
    optional int32 lastfix = 12;

    // Service or provider used to determine geolocation from IP
    // address if applicable (for example, type = 2).
    // Not supported by Google.
    optional LocationService ipservice = 13;

    // Local time as the number +/- of minutes from UTC.
    // Supported by Google.
    optional int32 utcoffset = 10;
    extensions 100 to 9999;
  }

  // OpenRTB 2.0: 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.12).
    // Supported by Google.
    optional Geo geo = 4;

    // Standard "Do Not Track" option as set in the header by the browser,
    // where false = tracking is unrestricted, true = do not track.
    // Not supported by Google.
    optional bool dnt = 1;

    // "Limit Ad Tracking" is a commercially endorsed signal based on the
    // operating system or device settings, where `false` indicates that
    // tracking is unrestricted and `true` indicates that tracking must be
    // limited per commercial guidelines.
    //
    // This signal reflects user decisions on surfaces including iOS App
    // Tracking Transparency:
    // https://developer.apple.com/documentation/apptrackingtransparency
    // See also lmt and App Tracking Transparency guidance:
    // https://github.com/InteractiveAdvertisingBureau/openrtb/blob/master/extensions/community_extensions/skadnetwork.md#dnt-lmt-and-app-tracking-transparency-guidance
    // and Android advertising ID:
    // https://support.google.com/googleplay/android-developer/answer/6048248
    //
    // Supported by Google.
    optional bool lmt = 23;

    // Browser user agent string. Certain data may be redacted or replaced.
    // Supported by Google.
    optional string ua = 2;

    // Structured user agent information, which can be used when a client
    // supports User-Agent Client Hints: https://wicg.github.io/ua-client-hints/
    //
    // Note: When available, fields are sourced from Client Hints HTTP headers
    // or equivalent JavaScript accessors from the NavigatorUAData interface.
    // For agents that have no support for User-Agent Client Hints, an exchange
    // can also extract information from the parsed User-Agent header, so this
    // object can always be used as the source of the user agent information.
    message UserAgent {
      // Identifies 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).
        // Not supported by Google.
        optional string brand = 1;

        // A sequence of version components, in descending hierarchical order
        // (major, minor, micro, ...).
        // Not supported by Google.
        repeated string version = 2;
      }

      // Each BrandVersion object identifies a browser or similar software
      // component. Exchanges should send brands and versions derived from
      // the Sec-CH-UA-Full-Version-List header.
      // Not supported by Google.
      repeated BrandVersion browsers = 1;

      // Identifies the user agent's execution platform / OS. Exchanges should
      // send a brand derived from the Sec-CH-UA-Platform header, and version
      // derived from the Sec-CH-UAPlatform-Version header.
      // Not supported by Google.
      optional BrandVersion platform = 2;

      // true if the agent prefers a "mobile" version of the content if
      // available, meaning optimized for small screens or touch input. false if
      // the agent prefers the "desktop" or "full" content. Exchanges should
      // derive this value from the Sec-CH-UAMobile header.
      // Not supported by Google.
      optional bool mobile = 3;

      // Device's major binary architecture, for example, "x86" or "arm".
      // Exchanges should retrieve this value from the Sec-CH-UA-Arch header.
      // Not supported by Google.
      optional string architecture = 4;

      // Device's bitness, for example, "64" for 64-bit architecture. Exchanges
      // should retrieve this value from the Sec-CH-UA-Bitness header.
      // Not supported by Google.
      optional string bitness = 5;

      // Device model. Exchanges should retrieve this value from the
      // Sec-CH-UAModel header.
      // Not supported by Google.
      optional string model = 6;

      // The source of data for the User Agent information.
      // Supported by Google.
      optional UserAgentSource source = 7;
    }

    // Structured user agent information. 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
    // Device.ua may contain a frozen or reduced user agent string.
    // Supported by Google.
    optional UserAgent sua = 31;

    // IPv4 address closest to device.
    // Supported by Google. Truncated to the first 3 octets: "X.X.X.0".
    optional string ip = 3;

    // IPv6 address closest to device.
    // Supported by Google. Truncated to the first 6 octets: "X:X:X:::::".
    optional string ipv6 = 9;

    // The general type of device.
    // Supported by Google.
    optional DeviceType devicetype = 18;

    // Device make (for example, "Apple" or "Samsung").
    // Supported by Google.
    optional string make = 12;

    // Device model (for example, "pixel 7 pro"). For iPhone/iPad, this
    // field contains Apple's model identifier string (such as "iPhone12,1" and
    // "iPad13,8") if available. Otherwise this field contains the generic model
    // (either "iphone" or "ipad").
    // Supported by Google.
    optional string model = 13;

    // Device operating system (for example, "iOS").
    // Supported by Google.
    optional string os = 14;

    // Device operating system version (for example, "3.1.2").
    // Supported by Google.
    optional string osv = 15;

    // Hardware version of the device. For iPhone/iPad, this field contains
    // Apple's model identifier string (such as "iPhone12,1" and "iPad13,8") if
    // available.
    // Supported by Google.
    optional string hwv = 24;

    // Physical width of the screen in pixels.
    // Supported by Google.
    optional int32 w = 25;

    // Physical height of the screen in pixels.
    // Supported by Google.
    optional int32 h = 26;

    // Screen size as pixels per linear inch.
    // Not supported by Google.
    optional int32 ppi = 27;

    // The ratio of physical pixels to device independent pixels.
    // Supported by Google.
    optional double pxratio = 28;

    // Support for JavaScript.
    // Not supported by Google.
    optional bool js = 16;

    // Indicates if the geolocation API will be available to JavaScript
    // code running in the banner.
    // Not supported by Google.
    optional bool geofetch = 29;

    // Version of Flash supported by the browser.
    // Not supported by Google.
    optional string flashver = 19;

    // Browser language using ISO-639-1-alpha-2.
    // Only one of language or langb should be present.
    // Not supported by Google.
    optional string language = 11;

    // Browser language using IETF BCP 47.
    // Only one of language or langb should be present.
    // Not supported by Google.
    optional string langb = 32;

    // Carrier or ISP (for example, "VERIZON") using exchange curated string
    // names which should be published to bidders a priori.
    // Supported by Google.
    optional string carrier = 10;

    // Mobile carrier as the concatenated MCC-MNC code (for example,
    // "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.
    // Not supported by Google.
    optional string mccmnc = 30;

    // Network connection type.
    //
    // Google: For 5G connection type, we send CELL_4G instead of CELL_5G.
    // Supported by Google.
    optional ConnectionType connectiontype = 17;

    // ID sanctioned for advertiser use in the clear (meaning, not hashed).
    // Supported by Google.
    optional string ifa = 20;

    // DEPRECATED in OpenRTB 2.6+. No replacement.
    // Hardware device ID (for example, IMEI); hashed through SHA1.
    // Not supported by Google.
    optional string didsha1 = 5 [deprecated = true];

    // DEPRECATED in OpenRTB 2.6+. No replacement.
    // Hardware device ID (for example, IMEI); hashed through MD5.
    // Not supported by Google.
    optional string didmd5 = 6 [deprecated = true];

    // DEPRECATED in OpenRTB 2.6+. No replacement.
    // Platform device ID (for example, Android ID); hashed through SHA1.
    // Not supported by Google.
    optional string dpidsha1 = 7 [deprecated = true];

    // DEPRECATED in OpenRTB 2.6+. No replacement.
    // Platform device ID (for example, Android ID); hashed through MD5.
    // Supported by Google.
    optional string dpidmd5 = 8 [deprecated = true];

    // DEPRECATED in OpenRTB 2.6+. No replacement.
    // MAC address of the device; hashed through SHA1.
    // Not supported by Google.
    optional string macsha1 = 21 [deprecated = true];

    // DEPRECATED in OpenRTB 2.6+. No replacement.
    // MAC address of the device; hashed through MD5.
    // Not supported by Google.
    optional string macmd5 = 22 [deprecated = true];
    extensions 100 to 9999;
  }

  // Information about the device the impression will be delivered to.
  // Supported by Google.
  optional Device device = 5;

  // OpenRTB 2.2: This object contains any legal, governmental, or industry
  // regulations that apply to the request. The coppa field signals whether
  // or not the request falls under the United States Federal Trade Commission's
  // regulations for the United States Children's Online Privacy Protection Act
  // ("COPPA"). Refer to Section 7.1 for more information.
  message Regs {
    // Indicates if this request is subject to the COPPA regulations
    // established by the USA FTC.
    // Not supported by Google.
    optional bool coppa = 1;

    // Contains the Global Privacy Platform's consent string. See the Global
    // Privacy Platform specification for more details:
    // https://github.com/InteractiveAdvertisingBureau/Global-Privacy-Platform
    // Not supported by Google.
    optional string gpp = 2;

    // Each section represents a unique privacy signal, usually a unique
    // jurisdiction. Below are the supported discrete sections.
    enum GppSectionId {
      // EU TCF v1 section (deprecated)
      TCFEUV1 = 1;

      // EU TCF v2 section (see note below)
      TCFEUV2 = 2;

      // GPP Header section (REQUIRED, see note below)
      GPP_HEADER = 3;

      // GPP signal integrity section
      GPP_SIGNAL = 4;

      // Canadian TCF section
      TCFCA = 5;

      // USPrivacy String (Unencoded Format)
      USPV1 = 6;

      // US - national section
      USNAT = 7;

      // US - California section
      USCA = 8;

      // US - Virginia section
      USVA = 9;

      // US - Colorado section
      USCO = 10;

      // US - Utah section
      USUT = 11;

      // US - Connecticut section
      USCT = 12;
    }

    // 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 enum GppSectionId.
    // Not supported by Google.
    repeated GppSectionId gpp_sid = 3 [packed = true];
    extensions 100 to 9999;
  }

  // A Regs object (Section 3.2.16) that specifies any industry, legal,
  // or governmental regulations in force for this request.
  // Supported by Google.
  optional Regs regs = 14;

  // OpenRTB 2.0: The data and segment objects together allow additional data
  // about the user to be specified. This data may be from multiple sources
  // whether from the exchange itself or third party providers as specified by
  // the id field. A bid request can mix data objects from multiple providers or
  // can have multiple data objects. The specific data providers in use should
  // be published by the exchange a priori to its bidders.
  //
  // Google: This is used to send Publisher Provided Signals and Topics to
  // bidders.
  message Data {
    // The Google assigned ID of the data provider. Only set for Data segments
    // from Publisher Provided Signals. For the list of data providers, see
    // https://storage.googleapis.com/adx-rtb-dictionaries/data_providers.txt.
    // Supported by Google.
    optional string id = 1;

    // Exchange-specific name for the data provider.
    // Not supported by Google.
    optional string name = 2;

    // OpenRTB 2.0: Segment objects are essentially key-value pairs that
    // convey specific units of data about the user. 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.
      // Supported by Google.
      optional string id = 1;

      // Name of the data segment specific to the data provider.
      // Not supported by Google.
      optional string name = 2;

      // String representation of the data segment value.
      // Not supported by Google.
      optional string value = 3;
      extensions 100 to 9999;
    }

    // Array of Segment (Section 3.2.15) objects that contain the actual
    // data values.
    // Supported by Google.
    repeated Segment segment = 3;
    extensions 100 to 9999;
  }

  // OpenRTB 2.0: This object contains information known or derived about
  // the human user of the device (for example, the audience for advertising).
  // The user id is an exchange artifact and may be subject to rotation or other
  // privacy policies. However, this user ID must be stable long enough to serve
  // reasonably as the basis for frequency capping and retargeting.
  message User {
    // Exchange-specific ID for the user. At least one of id or buyeruid
    // is recommended.
    // Supported by Google.
    optional string id = 1;

    // Buyer-specific ID for the user as mapped by the exchange for the buyer.
    // At least one of buyeruid or id is recommended.
    // Supported by Google. Populated with hosted match data.
    optional string buyeruid = 2;

    // DEPRECATED in OpenRTB 2.6+; no replacement.
    // Year of birth as a 4-digit integer.
    // Not supported by Google.
    optional int32 yob = 3 [deprecated = true];

    // DEPRECATED in OpenRTB 2.6+; no replacement.
    // Gender as "M" male, "F" female, "O" Other. (Null indicates unknown)
    // Not supported by Google.
    optional string gender = 4 [deprecated = true];

    // Comma separated list of keywords, interests, or intent.
    // Only one of 'keywords' or 'kwarray' may be present.
    // Not supported by Google.
    optional string keywords = 5;

    // Array of keywords about the user.
    // Only one of 'keywords' or 'kwarray' may be present.
    // Not supported by Google.
    repeated string kwarray = 9;

    // Optional feature to pass bidder data 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.
    // Supported by Google. Populated with hosted match data.
    optional string customdata = 6;

    // Location of the user's home base defined by a Geo object
    // (Section 3.2.12). This is not necessarily their current location.
    // Not supported by Google.
    optional Geo geo = 7;

    // Additional user data. Each Data object (Section 3.2.14) represents a
    // different data source.
    // Supported by Google.
    // Used for Chrome Topics API and for Publisher Provided Signals:
    // https://developers.google.com/authorized-buyers/rtb/topics
    // https://support.google.com/admanager/answer/12451124
    repeated Data data = 8;

    // The web-safe base64-encoded IAB Transparency and Consent Framework (TCF)
    // v2 consent string fetched from the publisher's IAB Consent Management
    // Platform (CMP). The structure of the string is defined by the IAB TCF v2.
    // This field will be populated if the publisher has integrated with a CMP
    // for TCF v2 and that CMP indicates that GDPR applies to this ad request
    // and provides a valid consent string. See
    // https://support.google.com/authorizedbuyers/answer/9789378 for additional
    // information about the Google TCF v2 integration.
    //
    // See the IAB Global Vendor List at
    // https://vendor-list.consensu.org/v2/vendor-list.json for details about
    // the vendors listed in the consent string.
    // Not supported by Google. Google supports the IAB TCFv2 consent string
    // with the extension BidRequest.user.ext.consent.
    optional string consent = 10;

    // Extended data, such as a publisher-provided identifier, that allows
    // buyers to use data made available by the publisher in real-time bidding.
    // This object can contain one or more UIDs from a single source or a
    // technology provider.
    message EID {
      // Source or technology provider responsible for the set of included data.
      // Supported by Google.
      optional string source = 1;

      // This object contains a single data item, such as a publisher-provided
      // identifier, provided as part of extended identifiers.
      message UID {
        // The data value, such as a publisher-provided identifier.
        // Supported by Google.
        optional string id = 1;

        // Type of user agent the ID is from.
        // Not supported by Google.
        optional AgentType atype = 2;
        extensions 100 to 9999;
      }

      // Array of extended ID UID objects from the given source.
      // Supported by Google.
      repeated UID uids = 2;

      // 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.
      // Not supported by Google.
      optional string inserter = 3;

      // 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.
      // Not supported by Google.
      optional string matcher = 4;

      // Match method used by the matcher.
      // Refer to List: ID Match Methods in AdCOM 1.0
      // https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/develop/AdCOM%20v1.0%20FINAL.md#list-id-match-methods-
      // Not supported by Google.
      optional int32 mm = 5;
      extensions 100 to 9999;
    }

    // Data made available by the publisher, such as publisher-provided
    // identifiers.
    // Supported by Google. For Secure Signals, see extension
    // BidRequest.user.ext.eids.
    repeated EID eids = 11;
    extensions 100 to 9999;
  }

  // Information about the user of the device or the advertising audience.
  // Supported by Google.
  optional User user = 6;

  // Auction type: one of FIRST_PRICE or SECOND_PRICE.
  // Supported by Google.
  optional AuctionType at = 7 [default = SECOND_PRICE];

  // Maximum time in milliseconds to submit a bid to avoid timeout.
  // This value is commonly communicated offline.
  // Supported by Google.
  optional int32 tmax = 8;

  // Allowlist of buyer seats (for example, advertisers, agencies) that can 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. Omission implies no seat restrictions.
  // Supported by Google.
  repeated string wseat = 9;

  // Indicates if Exchange can verify that the impressions offered
  // represent all of the impressions available in context (for example, all on
  // the web page, all