View raw content Back to Reference page
// Open beta protocol version: v.187 import "openrtb.proto"; option java_outer_classname = "AdxExt"; package com.google.doubleclick; import "google/protobuf/struct.proto"; // Protocol buffer for Ad Exchange OpenRTB specification. // // Ad Exchange extensions for the Imp object. message ImpExt { // The eligible billing IDs to which a billable impression can be attributed. // A billing ID for attributing an impression resulting from a winning bid can // be specified in `BidResponse.seatbid.bid.ext.billing_id`. These billing IDs // can represent the bidder's matching pretargeting configurations, the // bidder's deal billing ID, or eligible child seats. // [AdX: BidRequest.AdSlot.MatchingAdData.billing_id] repeated int64 billing_id = 1; // [AdX: BidRequest.publisher_settings_list_id] // [AdX: BidRequest.AdSlot.publisher_settings_list_id] repeated fixed64 publisher_settings_list_id = 2; // [AdX: BidRequest.AdSlot.allowed_vendor_type] repeated int32 allowed_vendor_type = 3 [packed = true]; // A creative that is disallowed to bid on this impression due to Ad // Exchange policies or creative disapproval, excluded creative attributes, // excluded product or sensitive categories, allowed vendor types, // restricted categories or languages applicable to the bid request. message ExcludedCreative { // Buyer creative ID of the disallowed creative. optional string buyer_creative_id = 1; } // Creatives that are disallowed for the impression. Submitting a bid with // one of the creatives in this list will result in such bid being filtered // before the auction. Contact your account manager if you would like // to enable this feature. repeated ExcludedCreative excluded_creatives = 10; // [AdX: BidRequest.AdSlot.dfp_ad_unit_code] optional string dfp_ad_unit_code = 6; // Deprecated. This will be removed in July 2023. Use the standard field // BidRequest.imp.rwdd instead. // [AdX: BidRequest.AdSlot.is_rewarded] optional bool is_rewarded_inventory = 7 [deprecated = true]; // Possible requirement types for AMP ads. enum AmpAdRequirementType { // AMP ad requirements unknown. UNKNOWN_AMP_AD_REQUIREMENT_TYPE = 1; // AMP ads are not allowed. AMP_AD_NOT_ALLOWED = 2; // Either AMP ads or non-AMP ads are allowed; // AMP ads are not early rendered. AMP_AD_ALLOWED_AND_NOT_EARLY_RENDERED = 3; // Either AMP ads or non-AMP ads are allowed; // AMP ads are early rendered. AMP_AD_ALLOWED_AND_EARLY_RENDERED = 4; // AMP ads are required. // Ads that are non-AMP may be rejected by the publisher. AMP_AD_REQUIRED = 5; } optional AmpAdRequirementType ampad = 8 [default = UNKNOWN_AMP_AD_REQUIREMENT_TYPE]; // Secure signals passed by the publisher. message BuyerGeneratedRequestData { // The source (provider) of the signal. oneof source { SourceApp source_app = 1; } // The source of the signal when this request is from an app. message SourceApp { // Identifier for the SDK that generated this data. It will match the id // in AppExt.InstalledSdk.id. optional string id = 1; } // The secure signal. optional string data = 2; } repeated BuyerGeneratedRequestData buyer_generated_request_data = 9; // Deprecated. This will be removed in Q1 2024. This field has been // deprecated in favor of the repeated field // `billable_event_rate_bid_adjustment` below. // For ads rendered using a custom SDK only: multiplier applied to bid in // the auction. The adjustment reflects the likelihood that your bid would // generate a billable event (meaning the ad renders successfully) if it // won the auction, relative to the probability that other bids generate a // billable event if they won the auction. This adjustment can be larger or // smaller than 1. This affects the final ranking in the auction only; in // particular, this multiplier does not affect the payment. optional double billable_event_rate_adjustment = 16 [deprecated = true, default = 1]; // The billable event rate bid adjustment of an ad and the dependent // features of the ad the adjustment applies to, such as the format or the // SDK used to render the ad. Each feature combination may have a unique // adjustment, each adjustment therefore specifies which SDK or creative // format it applies to. message BillableEventRateBidAdjustment { // A multiplier to your bid to adjust for the likelihood that your bid // would result in a billable event (namely, the ad renders successfully) // if it won the auction, relative to the average probability that bids // from other buyers would result in a billable event if they won the // auction. This adjustment can be larger or smaller than 1. This affects // the final ranking in the auction only; in particular, this multiplier // does not affect the payment or whether the bid clears any floor price. optional float bid_adjustment = 1 [default = 1]; // The types of creative the bid adjustments can apply to. enum CreativeType { CREATIVE_TYPE_UNKNOWN = 0; // Banner ads HTML_SNIPPET = 1; // VAST video or audio ads VIDEO_VAST = 2; // Native ads NATIVE = 3; // SDK rendered ad SDK_RENDERED = 4; } // The type of ads to which the above bid adjustment applies to. Each type // corresponds to different ways of how the ad's creative is specified, as // described in // https://developers.google.com/authorized-buyers/rtb/response-guide#specify-creative. // If the ad is SDK-rendered, this will be set to SDK_RENDERED regardless // of the actual creative type. optional CreativeType creative_type = 2 [default = CREATIVE_TYPE_UNKNOWN]; // The SDK used to render the ad with. The SDK ID will match the one sent // in BidRequest.app.ext.installed_sdk.id. This field is not set for Google // SDK. optional AppExt.InstalledSdk sdk = 3; } // A list of billable event rate bid adjustments applicable to the request // and the ad features associated to the adjustment. Bid adjustments are // listed here only if they are not equal to 1.0, which is equivalent to // having no adjustment. This field replaces the deprecated field // billable_event_rate_adjustment. repeated BillableEventRateBidAdjustment billable_event_rate_bid_adjustment = 65; // Parameters related to Open Bidding. message OpenBidding { // This field is set to true if the publisher set up a yield group or a // mediation group that targets this adslot and this bidder. See // https://support.google.com/admanager/answer/7128453 for information on // Open Bidding and its effects on the bidding process. optional bool is_open_bidding = 2; } optional OpenBidding open_bidding = 12; // The allowed restricted ad categories. See // https://storage.googleapis.com/adx-rtb-dictionaries/ad-restricted-categories.txt // for a list of ids. If you bid with an ad in a restricted category, you MUST // ALWAYS declare the category in the bid response regardless of the values in // this field. repeated int32 allowed_restricted_category = 13; // 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 { // List of all SKAdNetwork versions supported by the request, depending on // the OS version and the SDK version. repeated string versions = 4; // ID of publisher app in Apple's App Store. optional string sourceapp = 2; // SKAdNetworkIdentifier entries in the publisher app's Info.plist. repeated string skadnetids = 3; // List of fidelity types supported, depending on the SKAdNetwork API // version supported by the operating system and SDK as well as ad slot // properties. repeated SKAdNetworkFidelityType fidelities = 5 [packed = true]; // Indicates if this request supports SKOverlay for video ads. optional bool skoverlay = 6; } // [AdX: BidRequest.Mobile.skadn] optional SKAdNetworkRequest skadn = 14; // Indicates the creative policy and publisher blocks that applies to this // request. message CreativeEnforcementSettings { // Creative policy enforcement level that applies to this request. // Creatives that don't adhere to the specified policy will be filtered // before the auction. The status of the creatives with their respective // policies can be retrieved through Creative API. // https://developers.google.com/authorized-buyers/apis/guides/rtb-api/creatives // Bids on deals may override the policy enforcement applicable to the // request. enum PolicyEnforcement { POLICY_ENFORCEMENT_UNKNOWN = 0; // Baseline policy for all ads serving through any of Google's ads // platform products. Learn more at: // https://support.google.com/platformspolicy/answer/3013851. POLICY_ENFORCEMENT_PLATFORM_POLICY = 1; // Policy for ads serving through Google's ad network. This includes the // baseline policy for all ads serving through any of Google's ads // platform products. Learn more at: // https://support.google.com/authorizedbuyers/answer/1325008. POLICY_ENFORCEMENT_NETWORK_AND_PLATFORM_POLICY = 2; } optional PolicyEnforcement policy_enforcement = 1; // Creative publisher blocks enforcement level that applies to this // request. Publisher blocks allow publishers to control which creatives // can be shown on their properties. // Deals may also override publisher blocks. Refer to // Deals.ext.publisher_blocks_overridden field. enum PublisherBlocksEnforcement { PUBLISHER_BLOCKS_ENFORCEMENT_UNKNOWN = 0; // The publisher's blocking controls are enforced on creatives // submitted. Publisher blocks enforcement settings are provided in the // following fields: // - Imp.ext.publisher_settings_list_id // - bcat // - Imp.ext.allowed_restricted_category // - Imp.ext.allowed_vendor_type // - Audio.battr // - Video.battr // - Banner.battr // - Native.battr PUBLISHER_BLOCKS_ENFORCEMENT_APPLIES = 1; // The publisher's blocking controls are not enforced on creatives // submitted. PUBLISHER_BLOCKS_ENFORCEMENT_OVERRIDDEN = 2; } optional PublisherBlocksEnforcement publisher_blocks_enforcement = 3; } optional CreativeEnforcementSettings creative_enforcement_settings = 15; // Describes the environment where the ad auction is run. enum AuctionEnvironment { // The auction determining the winning ad is held server-side. SERVER_SIDE_AUCTION = 0; // The contextual auction that determines a winning contextual bid is held // server-side, and bidding functions are run on the device to determine // interest group bids. Both the winning contextual bid and interest // group bids are entered into a final auction held on the device to // select the winning ad. For more information regarding the Protected // Audience API on device bidding and auction, see: // https://github.com/WICG/turtledove and // https://github.com/WICG/turtledove/blob/main/FLEDGE.md ON_DEVICE_INTEREST_GROUP_AUCTION = 1; // The contextual auction that determines a top-ranked contextual bid is // held server-side, and the bidding logic to determine interest group // bids and the scoring logic to determine the final winning ad among // interest group bids and the top contextual bid runs are executed in // Bidding and Auction servers. See more detail in // https://github.com/privacysandbox/fledge-docs/blob/main/bidding_auction_services_api.md SERVER_SIDE_INTEREST_GROUP_AUCTION = 3; } // Specifies where the ad auction runs. // Deprecated. This will be removed in November, 2023. Use ae instead. optional AuctionEnvironment auction_environment = 18 [deprecated = true, default = SERVER_SIDE_AUCTION]; // The supported auction environment for this impression. For inventory // which does not support interest group bidding, this will always be set to // SERVER_SIDE_AUCTION. For inventory which does support interest group // bidding, this will be set to ON_DEVICE_INTEREST_GROUP_AUCTION. 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 contextual auction, if any, will be // served instead. optional AuctionEnvironment ae = 66 [default = SERVER_SIDE_AUCTION]; // Indicates whether interest group bidding is allowed for the bidder. // Depending on account settings and other factors, a bidder might be // disallowed from submitting interest group bids, even though an interest // group auction may ultimately decide the winning ad. optional bool igbid = 21; // Experimental feature; may be subject to change. // Reach out to your account manager to use Protected Audience API. // // When interest group bidding is allowed for the bidder (igbid = true), // this object contains information about the on-device auction. message InterestGroupAuction { // The adslot size (width and height in pixels) for the Protected Audience // API on-device interest group bids. The on-device interest group winning // bid will be expected to fill this slot size. // // Note that this size may be different from the sizes for the contextual // request (described by imp.banner.w and imp.banner.h or by // imp.banner.format). The contextual request may allow multiple sizes; // however, the on-device auction is expected to fill only a single fixed // slot size. optional int32 w = 1; optional int32 h = 2; // Indicates whether the winner of the interest group auction will be // rendered. If true, then the on-device auction winner will be rendered // and the impression can be billable. If false, the top-ranked contextual // bid will be rendered, and the on-device auction winner will be ignored // and not result in a rendered, billable impression. optional bool render_interest_group_ads = 3; // Indicates whether the on-device auction for the current request was // parallelized. // // To learn more about parallelized auctions, see // https://developers.google.com/authorized-buyers/rtb/protected-audience-api#parallelization optional bool parallelized = 4; // Interest group buyer-specific information related to parallelized // Protected Audience API auctions. message ParallelAuctionBuyer { // The origin of the interest group buyer which was included // in the parallelized auction. // // If a ParallelAuctionBuyer entry for a particular origin is // included in the `pbuyer` list, then that origin was // included in the parallelized auction and a corresponding buyer // trusted server call was made for that origin. If a buyer // origin is not included but `parallelized` is true, then it cannot // participate in the current client-side auction. However, bidders can // indicate interest in participating in future Protected Audience API // auctions by including valid InterestGroupBuyer(s) in // `BidResponse.ext.igbid.igbuyer`. Those interest group buyers will be // eligible for future parallelized requests from the same browser // instance and domain. optional string origin = 1; } // Parallel auction data for each of the bidder's interest group buyer(s) // that was included in the current request's parallel auction. repeated ParallelAuctionBuyer pbuyer = 5; // Allowed creative markup types for interest group bids. This may be a // subset of the allowed creative markup types for contextual bids, as // indicated by the presence of the Banner, Native, Video, or Audio bid // request objects, because interest group bidding may support fewer ad // formats than contextual bidding in some cases. repeated .com.google.openrtb.CreativeMarkupType mtypes = 6 [packed = true]; } optional InterestGroupAuction interest_group_auction = 20; // Indicates whether a mobile app bid request is for an app open ad. // See App open ad guidance at // https://support.google.com/admob/answer/9341964 for more information. // [AdX: BidRequest.Mobile.is_app_open_ad] optional bool is_app_open_ad = 19; // AdUnitMapping is used to identify publisher inventory units in the // bidder's namespace. The mappings are only populated when // the bidder works directly with a publisher, and provides the mapping // from Google's ad unit namespace to the bidder's inventory namespace. // The ad unit mapping is only applicable for requests that use a custom // SDK. https://support.google.com/admanager/answer/9601810. message AdUnitMapping { // Key-value pair used to specify the inventory unit in the bidder's // namespace. message Keyval { // The key is the name of the bidder's inventory unit identifier for the // SDK. optional string key = 1; // The value of the bidder's inventory unit identifier for the given // format. optional string value = 2; } // Multiple key-value pairs can be specified in order to support // bidders whose inventory unit space is hierarchical and has multiple // identifiers. The key-value pairs for the chosen AdUnitMapping should be // sent back in the bid response as // BidResponse.seatbid.bid.ext.sdk_rendered_ad.sdk_params. This is passed to // the bidder's SDK. repeated Keyval keyvals = 1; // Possible ad unit formats that can be used for the mapping. Corresponds // to the adapter that will be used on the SDK. enum FormatType { FORMAT_UNKNOWN = 0; // Display banner ads for web or mobile apps. For example, a 320x50 // leaderboard slot. This includes out-stream video. FORMAT_BANNER = 1; // A full-screen ad to be displayed inside a mobile app. FORMAT_INTERSTITIAL = 2; // Custom display or video ads for web or mobile apps that match the // user experience of the site or app in which they’re placed. FORMAT_NATIVE = 3; // Video ads that appear before, during, or after video content // streams. FORMAT_VIDEO_VAST = 4; // Video ads for mobile apps that allow users to voluntarily watch an // ad in exchange for an in-app reward. FORMAT_REWARDED = 5; // Interstitial ads that allow users to watch an ad in exchange for // an in-app reward. Does not require opt-in. // https://support.google.com/admanager/answer/7386053 FORMAT_REWARDED_INTERSTITIAL = 6; // App open ads shows at app load screens. App open ads can be closed // at any time, and are designed to be shown when the users bring the // app to the foreground. FORMAT_APP_OPEN = 7; } // The mappings are targeted through a format, which is expressed in the // Google-defined taxonomy. Format is populated in the bid request since // Google supports targeting multiple formats with a single ad // unit, and Google's definition of the format may not match the bidder's // definition. In order for the bidder to differentiate which format // matched, it is sent in the bid request. optional FormatType format = 2; } // Ad unit mappings that match the given adslot. repeated AdUnitMapping ad_unit_mapping = 64; } message AppExt { // Identification of and information about an SDK installed in the // publisher's app that the bidder has access to, often because it's the // bidder's SDK. message InstalledSdk { // Identifier for the installed SDK. optional string id = 1; // Semantic version of the installed SDK and the adapter that communicates // between the installed SDK and Google's SDK. message Version { optional int32 major = 1 [default = -1]; optional int32 minor = 2 [default = -1]; optional int32 micro = 3 [default = -1]; } // The version of the installed SDK. optional Version sdk_version = 2; // The version of the adapter that communicates with the installed SDK. optional Version adapter_version = 3; } repeated InstalledSdk installed_sdk = 1; // The domain of the partner (of the app owner) with ownership // of some portion of ad inventory on the app. The partner's ads.txt or // app-ads.txt file will be hosted here. More detail at // http://iabtechlab.com/wp-content/uploads/2021/03/ctv-app-ads-explainer-guide.pdf optional string inventorypartnerdomain = 2; } message BannerExt { // Describes collapsible banner inventory // (https://support.google.com/admanager/answer/14002717). // // A buyer can bid into a collapsible banner slot with either a // traditional banner ad or a collapsible banner ad. A traditional banner // ad needs to match one of the allowed sizes specified in // BidRequest.imp.banner.format.{w, h}. // // A collapsible banner ad needs to support two sized layouts, one for // collapsed state, one for expanded state. The final ad experience // is rendered by Google, including a collapse/expand button. The ad always // starts in the expanded state and can be collapsed by the user afterwards. // Specify BidResponse.seatbid.bid.ext.clpad when returning // a collapsible banner ad in the response. message CollapsibleAdSlot { // Maximum width of the collapsible banner ad in device independent // pixels (DIPS). If a collapsible creative in the response has a greater // width in the expanded state, it will be filtered before the auction. optional int32 wmax = 1; // Maximum height of the collapsible banner ad in device independent // pixels (DIPS). If a collapsible creative in the response has a greater // height in the expanded state, it will be filtered before the auction. optional int32 hmax = 2; } // Contains information about a banner ad slot's collapsibility, // if supported, and is unset otherwise. optional CollapsibleAdSlot clpadslot = 1; // Indicates the acceptable ad width and height ranges for impressions which // support flexible ad sizes. message FlexSlot { // The minimum acceptable ad width in device-independent pixels (DIPS). optional int32 wmin = 1; // The maximum acceptable ad width in device-independent pixels (DIPS). optional int32 wmax = 2; // The minimum acceptable ad height in device-independent pixels (DIPS). optional int32 hmin = 3; // The maximum acceptable ad height in device-independent pixels (DIPS). optional int32 hmax = 4; } // This field contains information about a banner impression's flexible ad // size ranges, if supported, and is unset otherwise. optional FlexSlot flexslot = 2; } // Ad Exchange extensions for the BidResponse object. message BidResponseExt { // [AdX: BidResponse.processing_time_ms] optional int32 processing_time_ms = 1; // Experimental feature; may be subject to change. // // Reach out to your account manager to use Protected Audience API. // // Contains information that needs to be specified for participating in the // interest group auction for a given ad slot. message InterestGroupBidding { // ID of ad slot represented by the corresponding Imp object in the bid // request to link information to be used in the interest group auction to // the specific ad slot. optional string impid = 1; // Buyer-level information to use in the interest group auction. message InterestGroupBuyer { // Origin of the interest group buyer to participate in the // in-browser auction. For more info regarding the origin see: // https://developer.mozilla.org/en-US/docs/Glossary/Origin optional string origin = 1; // Optional buyer-specific signals to pass into the buyer's // `generateBid()` function as the `perBuyerSignals` argument. This // object can be in any bidder-defined format that will be transformed // into a JSON object following Proto3 JSON representation // (https://developers.google.com/protocol-buffers/docs/proto3#json). // Can be left empty if no perBuyerSignals signals are required by the // bidding function. optional .google.protobuf.Value buyerdata = 2; // Optional maximum interest group bid price expressed in CPM currency // that a bidder agrees to pay if they win an in-browser interest group // auction. 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 allows to reduce the risks from in-browser // auction bids submitted in error or reported due to fraud and abuse. optional double maxbid = 3; // Currency used for the maxbid value. optional string maxbidcur = 4 [default = "USD"]; // Modes by which the cost of a winning Protected Audience impression can // be attributed to a billing ID. enum BillingAttributionMode { // Unspecified attribution mode. This value should never be used. BILLING_ATTRIBUTION_MODE_UNSPECIFIED = 0; // The cost of the impression will be attributed to the billing ID // indicated by the `billing_id` field. If this mode is chosen and the // `billing_id` field doesn't contain one of the available billing IDs // from the bid request, then the interest group buyer won't be // eligible to participate in the on-device auction. BID_RESPONSE = 1; // The billing ID will be specified by the `GoogleBillingId` HTTP query // parameter in the ad's render URL. If the render URL for the bid // returned from `generateBid()` doesn't contain a billing ID present on // the bid request in the query parameter, the submitted bid will be // filtered from the Protected Audience API auction. RENDER_URL_PARAMETER = 2; } // Specifies the method by which the interest group buyer will select the // billing ID to attribute spend. optional BillingAttributionMode billattr = 10; // Billing ID that the interest group impression will be attributed to. // If set, the value must be in the set of billing IDs for this impression // that were sent in BidRequest.imp.ext.billing_id. If this // field is not set, the interest group buyer will be unable to // participate in the Protected Audience API auction. optional int64 billing_id = 5; // Indicates the currency in which interest group bids will be placed. The // value must be a three digit ISO 4217 alpha currency code (e.g. "USD"). optional string cur = 6; // Buyer experiment group ID (EGID) to be specified in the trusted // bidding signals request URL. This experiment ID will be added to the // `perBuyerExperimentGroupIds` map, keyed by the interest group owner, // in the `auctionConfig`. See // https://github.com/WICG/turtledove/blob/main/FLEDGE.md#31-fetching-real-time-data-from-a-trusted-server optional uint32 buyer_experiment_group_id = 7; // Render-time buyer signals that will be expanded into the winning // interest group ad render URL using the // `deprecatedRenderURLReplacements` auction configuration field for macro // expansion. // // To be eligible for macro replacement, render URLs must contain a macro // in the form of `${RENDER_DATA_buyer.origin.example_OPTIONAL_SUFFIX}`, // where `buyer.origin.example` is the origin of the interest group buyer // specified by the `InterestGroupBuyer.origin` field, and // `OPTIONAL_SUFFIX` is an optional suffix that can be specified by the // `RenderingSignals.suffix` field for distinguishing different // signals. If the `suffix` is omitted, then the macro name will be // `${RENDER_DATA_buyer.origin.example}`. // // See specification in // https://wicg.github.io/turtledove/#dom-auctionadconfig-deprecatedrenderurlreplacements message RenderingSignals { // URL-safe string according to RFC 3986 section 2.3 which will replace // the macro in the render URL. Each `InterestGroupBuyer` with a non-URL // safe `data` string will not be allowed to participate in the interest // group auction. optional string data = 1; // Optional macro suffix that will be appended to RENDER_DATA macro // name to distinguish different signals. optional string suffix = 2; } // List of rendering signals for macro expansion on the winning interest // group ad render URL, limited to 3 macros per buyer. Each // `InterestGroupBuyer` with more than 3 rendering signals will not be // allowed to participate in the interest group auction. repeated RenderingSignals rsig = 8; // Indicates that the buyer will render their own DSA transparency // information inside the creative delivered through the Protected // Audience API. See https://support.google.com/admanager/answer/14335032. optional bool dsaadrender = 9; } // Interest group buyers that the bidder requests to enter into the // interest group auction. Interest groups that are owned by a buyer // without a corresponding entry here will not participate in the auction. repeated InterestGroupBuyer igbuyer = 2; } // Contains information that needs to be specified for participating in the // interest group auctions. repeated InterestGroupBidding igbid = 4; } // Ad Exchange extensions for the Bid object. message BidExt { // [AdX: BidResponse.Ad.impression_tracking_url] repeated string impression_tracking_url = 1; // [AdX: BidResponse.Ad.ad_choices_destination_url] optional string ad_choices_destination_url = 2; // The URLs to call when the user clicks on the ad. Currently supported only // for native ads and Programmatic Guaranteed deals with publisher- // managed creatives. In the publisher managed case, these click trackers // will be sent to the bidder server to server. In all other cases, these // will be sent from the user's device. For more information on // publisher-managed creatives, see // https://support.google.com/admanager/answer/9243220. // [AdX: BidResponse.Ad.click_tracking_urls] repeated string click_tracking_urls = 22; // [AdX: BidResponse.Ad.AdSlot.exchange_deal_type] enum ExchangeDealType { OPEN_AUCTION = 0; PRIVATE_AUCTION = 1; PREFERRED_DEAL = 2; EXCHANGE_AUCTION_PACKAGE = 3; } optional ExchangeDealType exchange_deal_type = 4 [default = OPEN_AUCTION]; // [AdX: BidResponse.Ad.attribute] // See buyer-declarable-creative-attributes.txt in the technical documentation // for a list of ids. Note that not all declarable attributes come through in // the BidRequest in the various `battr` fields. repeated int32 attribute = 5 [packed = true]; // The URL to fetch an AMPHTML ad. Only one of the following should be set: // html_snippet, video_url, amp_ad_url, native_ad. optional string amp_ad_url = 6; // An ad that will be rendered by an SDK known to the buyer. This can only // be used when the BidRequest included an AppExt.InstalledSdk submessage. message SdkRenderedAd { // The identifier for the SDK that will render the ad. Must match an // AppExt.InstalledSdk.id sent in the corresponding bid request. optional string id = 1; // Data to pass to the SDK in order to render the ad. This data is opaque // to the publisher and to Google. optional string rendering_data = 2; // Declared ad assets to support creative scanning, classification, and // enforcement of ad policy and publisher blocks for ads rendered with a // custom SDK. message DeclaredAd { // Ad content used by SDK to render ad. oneof content { // The HTML snippet representative of the SDK-rendered ad. string html_snippet = 1; // The URL to the VAST asset used in the SDK-rendered ad. string video_url = 2; // The VAST document used to render custom SDK-rendered ad. This // document should conform to the VAST 2.0 or 3.0 standard. string video_vast_xml = 4; // The content of a native ad. Native ads consist of multiple building // blocks (such as image and text), which are rendered by the buyer SDK. // This field is only required for creative scanning. The assets you // include don't need to match assets specified in a native request // object (if any) in the bid request. NativeResponse.assets.id is // optional and doesn't need to match an asset on the native request // object. NativeResponse.assets.img.type is required. .com.google.openrtb.NativeResponse native_response = 5; } // The final landing pages of the SDK-rendered ad. repeated string click_through_url = 3; } optional DeclaredAd declared_ad = 6; } optional SdkRenderedAd sdk_rendered_ad = 7; message EventNotificationToken { // The content of the token, which will be ignored if longer than 128 // bytes. optional string payload = 1; } // A token set by bidders for troubleshooting which will be included in the // real-time feedback for the Bid it is sent in. The contents of the token // will not be logged. optional EventNotificationToken event_notification_token = 8; // All restricted categories for the ads that may be shown from this snippet. // See ad-restricted-categories.txt in the technical documentation for a list // of ids. If you are bidding with ads in restricted categories, you must // always declare them here. repeated int32 restricted_category = 9; // The billing ID to attribute this impression to. The value must be in the // repeated BidRequest.imp.ext.billing_id field sent for this impression. // If the length of BidRequest.imp.ext.billing_id is exactly 1 // and the bidder does not have any active child seats, this field // is not required and its contents will be ignored. optional int64 billing_id = 10; // Token used to identify end third party buyer information if an // exchange as an open bidder is an intermediary. This is obtained from the // third party buyer and must be passed to Google unaltered in the bid // response. optional string third_party_buyer_token = 14; // Buyer declared ID which will be used to break down cost transparency // metrics in Reporting. Note that IDs with fewer than 1000 impressions will // not be used to break down metrics. IDs longer than 64 bytes will be // ignored. optional string buyer_reporting_id = 17; // Experimental feature; may be subject to change. See // https://support.google.com/authorizedbuyers/answer/10890762 for more // information. // // Specifies frequency capping to be applied to the bid. Impressions for each // user are capped at the level specified by fcap_id. A bid will not // participate in the auction if an additional impression for the user would // violate any of the specified caps. Multiple frequency caps can be specified // for the same fcap_id. // // A bid is filtered before the auction if the frequency cap is malformed. // Instances where the cap is malformed include: // - fcap_id is empty or is very long // - max_mpressions or time_range are non-positive // - there are a large number of frequency caps for a single bid // - time_unit is not specified // // Note that if a subsequent bid with the same fcap_id uses a different // duration (represented by time_unit and time_range) then impressions counted // against the old frequency cap will not count against the new one and vice // versa. message FrequencyCap { // An ID that can represent a bidder's use-case for frequency capping; for // example, it could represent their campaign, ad, line item, or some // other entity. It should not contain any user-specific information or // identifiers and should not be longer than 64 characters. optional string fcap_id = 1; // The time units for which frequency caps can be enforced. enum TimeUnit { UNKNOWN_TIME_UNIT = 0; MINUTE = 1; DAY = 2; WEEK = 3; MONTH = 4; // When INDEFINITE is used, time_range will be ignored. INDEFINITE means // the frequency cap will be applied for a long period of time, (longer // than a month) but not necessarily forever. INDEFINITE = 5; } // The unit of time used to specify the time window for which a frequency // cap applies. optional TimeUnit time_unit = 2; // The length of the time window, in units specified by time_unit, for which // the frequency cap applies. For instance, if time_unit=WEEK and // time_range=3, then capping is applied for a three week period. If the // time_unit=INDEFINITE, this will be ignored. optional int32 time_range = 3 [default = 1]; // The maximum number of impressions allowed to be shown to a user for // the provided frequency_cap_id within the time window described by // time_unit and time_range. optional int32 max_imp = 4; } repeated FrequencyCap fcap = 18; // 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 supported by the advertiser. Also used to // specify how the signature was generated by the advertiser. This // should match the version from BidRequest.imp.ext.skad.version. optional string version = 1; // Ad network identifier used in signature. This should match one of the // items in BidRequest.imp.ext.skad.skadnetids. optional string network = 2; // Campaign ID compatible with Apple's spec. Used in SKAdNetwork 3.0 and // below. Replaced by Source Identifier (`sourceidentifier` field) in // SKAdNetwork 4.0 and above. optional string campaign = 3; // A four-digit integer that ad networks define to represent the ad // campaign. Used in SKAdNetwork 4.0+ and replaces the `campaign` field. optional string sourceidentifier = 11; // ID of advertiser's app in Apple's app store. optional string itunesitem = 4; // ID of custom product page to display (for iOS 15 or later). // If not specified, default product page will be displayed. // See https://developer.apple.com/app-store/custom-product-pages/ // for more details about custom product pages. optional string productpageid = 12; // SKAdNetwork API starting from version 2.2 supports multiple ad // presentation options specified by the `fidelity-type` parameter of the // SKAdNetwork signature. This holds parameters used to generate the // signature that would be different for each fidelity type supported. // For more info visit: // https://developer.apple.com/documentation/storekit/skadnetwork/signing_and_providing_ads message Fidelity { // The fidelity type of the attribution to track. optional SKAdNetworkFidelityType fidelity = 1 [default = STOREKIT_RENDERED_ADS]; // A unique all-lowercase UUID generated by the advertiser to use for // generating the signature. optional string nonce = 2; // Unix time in millis used at the time of signature generation. optional string timestamp = 3; // SKAdNetwork signature as specified by Apple. optional string signature = 4; } repeated Fidelity fidelities = 9; // A unique all-lowercase UUID generated by the advertiser to use for // generating the signature. // Note: This field will be deprecated in favor of the // BidResponse.bid.ext.skadn.fidelities.nonce field to support multiple // fidelity types. optional string nonce = 5; // ID of publisher's app in Apple's app store. This should match the ID // from BidRequest.imp.ext.skad.sourceapp. optional string sourceapp = 6; // Unix time in millis used at the time of signature generation. // Note: This field will be deprecated in favor of the // BidResponse.bid.ext.skadn.fidelities.timestamp field to support multiple // fidelity types. optional string timestamp = 7; // SKAdNetwork signature as specified by Apple. // Note: This field will be deprecated in favor of the // BidResponse.bid.ext.skadn.fidelities.signature field to support multiple // fidelity types. optional string signature = 8; // These options indicate how to present SKOverlay recommending the // advertised app. // Supported by iOS 14 and later. // // For more info visit: // https://developer.apple.com/documentation/storekit/skoverlay message SKOverlay { // Delay in seconds after the ad begins before presenting the overlay. // If this field is set to 0, the overlay will be shown immediately // after the ad begins. If this field is unset, the overlay will not // be shown for the ad. optional int32 delay = 1; // Delay in seconds after the endcard shows before presenting the // overlay. (This field only applies to rewarded or interstitial video // creatives.) If this field is set to 0, the overlay will be shown // immediately after the endcard shows. If this field is unset, // the overlay will not be shown for the endcard. // If both `delay` and `endcarddelay` are set, the overlay will be // automatically dismissed when the ad ends, and shown again after // the endcard shows. optional int32 endcarddelay = 2; // Whether this overlay can be dismissed by the user. optional bool dismissible = 3 [default = true]; } optional SKOverlay skoverlay = 13; // Google Mobile Ads SDK options for SKAdNetwork handling. message SKAdNetworkOptions { // By default, SKAdNetwork attribution will only be initiated if the // click-through URL lands on the app store, either as a direct link to // the app store or as the final destination of a server-side redirect // chain. This option enables GMA SDK to always initiate SKAdNetwork // attribution on-click regardless of the detected click's final // destination URL. Note that enabling this will launch the app store // even for clicks that are not meant to open the app store, for example // clicks on Ad Choices icon. For more info, see: // https://developers.google.com/authorized-buyers/rtb/skadnetwork optional bool always_open_appstore = 1 [default = false]; } // [AdX: BidResponse.Ad.skadn_options] optional SKAdNetworkOptions skadn_opts = 10; } // [AdX: BidResponse.Ad.skadn] optional SKAdNetworkResponse skadn = 19; // Possible types of app promotion. enum AppPromotionType { UNKNOWN_APP_PROMOTION_TYPE = 0; // For encouraging new users to download and install the advertised app. // Clicking this ad will show the app store listing as an overlay (for // supported formats), without leaving the publisher app. // Click through URL for this ad points to the app store listing. INSTALLS = 1; // For re-engaging existing users who have installed the advertised app. // Click through URL for this ad points to the installed app directly. ENGAGEMENT = 2; // Other types of app promotion that do not fall into the categories // above. No features specific to app promotion types will apply. OTHER = 3; } // [AdX: BidResponse.Ad.app_promotion_type] // Type of the app promotion corresponding to the advertised app specified // in the seatbid.bid.bundle field. // If the advertised app is not specified, this field will be ignored. // // Setting BidResponse.seatbid.bid.bundle field without this field will be // treated as if this field were set to OTHER. optional AppPromotionType app_promotion_type = 28; // Whether to show the full app store listing for // BidResponse.seatbid.bid.bundle field (or skadn.itunesitem field on iOS) // within the publisher app, after the video playback completes and before the // endcard (if any) appears. This field only applies to rewarded or // interstitial video ads. // Contact your account manager if you would like to enable this feature. optional bool auto_inline_install = 29; // All bids with the same bid_group_id will be won or lost as a group. // Bids must have a non-empty bid_group_id to allow an ad to be played // as part of a pod. // This field is currently only supported for rewarded video pods requests. // Note that if there are multiple bids for the same ad, each bid must have // different bid_group_id. For example, if a bidder wants to bid creative_1 // for first position and last position in the pod and creative_2 for any // position and want to ensure either both win at the same time or neither // of those wins, bidder needs to submit: // { // "seatbid": [ // { // "bid": [ // { // "crid": "creative_1", // "slotinpod": 1, // "ext": { // "bid_group_id": "group1" // } // }, // { // "crid": "creative_1", // "slotinpod": -1, // "ext": { // "bid_group_id": "group2" // } // }, // { // "crid": "creative_2", // "slotinpod": 0, // "ext": { // "bid_group_id": "group1" // } // }, // { // "crid": "creative_2", // "slotinpod": 0, // "ext": { // "bid_group_id": "group2" // } // } // ] // } // ] // } optional string bid_group_id = 26; // The Digital Services Act (DSA) transparency declarations. See // https://support.google.com/admanager/answer/14335032. message Dsa { // Free text string describing the name of the advertiser on whose behalf // the ad is shown. Bids will not be accepted if this value is longer // than 100 characters. optional string behalf = 1; // Free text string describing the advertiser who paid for the ad. Must // always be included even if it's the same as what is listed in the // displayed_on_behalf attribute. Bids will not be accepted if this value // is longer than 100 characters. optional string paid = 2; // Indicates that the buyer will render their own DSA transparency // information inside the creative. optional bool adrender = 3; } // DSA Ad Transparency information provided by the buyer. optional Dsa dsa = 30; // Collapsible banner ad information. In collapsible banner format, the // ad will start in an expanded state and can be manually collapsed by // the user. To learn more about collapsible banner ads, see: // https://support.google.com/admanager/answer/14002717?hl=en. message CollapsibleAd { // Width of the creative in the expanded state in device independent // pixels (DIPS). The width of the creative in the collapsed state // is represented by BidResponse.seatbid.bid.w. If wexp is greater // than BidRequest.imp.banner.ext.clpadslot.wmax, the ad will be // filtered before the auction. optional int32 wexp = 1; // Height of the creative in the expanded state in device independent // pixels (DIPS). The height of the creative in the collapsed state // is represented by BidResponse.seatbid.bid.h. If hexp is greater than // BidRequest.imp.banner.ext.clpadslot.hmax, the ad will be filtered before // the auction. optional int32 hexp = 2; } // If bidding on a collapsible banner ad slot // (see: BidRequest.imp.banner.ext.clpadslot), you may populate this // if you want to place a bid with a collapsible banner ad. If not set, // the bid will be rendered as a traditional banner ad. optional CollapsibleAd clpad = 31; // The URLs that the user could be directed to when clicking on this ad. Do // not include URLs for intermediate calls to an ad server that are unrelated // to the final landing page. All bids must declare either a click URL using // this field, the advertiser domain in the `BidResponse.seatbid.bid.adomain` // field, or both. We recommend that bidders use this field, possibly in // addition to `BidResponse.seatbid.bid.adomain`, for more accurate // enforcement of publisher and user protections, for instance so that your // bid is not incorrectly filtered. // This field maps to BidResponse.ad.click_through_url. repeated string clickurl = 32; } message NativeRequestExt { // [AdX: BidRequest.AdSlot.native_ad_template[0].style_id] optional int32 style_id = 1; // [AdX: BidRequest.AdSlot.native_ad_template[0].style_height] optional int32 style_height = 2; // [AdX: BidRequest.AdSlot.native_ad_template[0].style_width] optional int32 style_width = 3; // [AdX: BidRequest.AdSlot.native_ad_template[0].style_layout_type] enum LayoutType { PIXEL = 0; FLUID = 1; } optional LayoutType style_layout_type = 4 [default = PIXEL]; } message EventTrackerExt { // Additional context provided for rendering. enum Context { UNKNOWN = 0; // Currently not supported. OMID = 1; } repeated Context context = 1; // Parameters associated with the resource that will be passed to the // resource when it is loaded. The format of the parameters is dependent // on the script vendor. optional string verification_parameters = 2; // Used to uniquely identify the verification script provider. optional string vendor_key = 3; } message PublisherExt { // The billing address country code of the publisher. This may be different // from the hosting country of the website. For a complete list of country // codes, refer to // https://developers.google.com/adwords/api/docs/appendix/codes-formats#country-codes optional string country = 1; // The ID of the host publisher. When populated, indicates that the host // publisher participated in revenue sharing, and the ID can be used to // authorize ads.txt. optional string host_publisher_id = 2; } message SiteExt { enum AmpPage { // This is not an AMP page. DIALECT_HTML = 0; // This is an Amp page. DIALECT_HTML_AMP = 1; } // Whether this is an AMP page or not. Omitted if unknown. optional AmpPage amp = 1; enum VisibilityState { VISIBILITY_STATE_UNKNOWN = 0; // The page is at least partially visible. For example, in the foreground // tab of a non-minimized window. VISIBILITY_STATE_VISIBLE = 1; // The page is not visible to users. For example, when the page is in a // background browser tab, or in a minimized window. VISIBILITY_STATE_HIDDEN = 2; } // The visibility state of the web page containing the ad slot. // See https://www.w3.org/TR/page-visibility/. // [AdX: BidRequest.page_visibility] optional VisibilityState page_visibility = 2 [default = VISIBILITY_STATE_UNKNOWN]; // Information about a browser window's user activation state. See // https://html.spec.whatwg.org/multipage/interaction.html#the-useractivation-interface. message UserActivation { // Indicates whether a user has completed an interaction since page load. optional bool wasact = 1; // Indicates whether a user is currently interacting with the page. optional bool isact = 2; } // User activation information from the browser for the current request, if // the request is for a web page. optional UserActivation uact = 5; // The set of possible web navigation types that predicate a page load. Each // of these types may have different performance characteristics. For example, // users going back and forth might experience a faster site than users // performing navigation for the first time or submitting forms. See // https://w3c.github.io/navigation-timing/#dom-performancenavigationtiming-type. enum NavigationType { NAVIGATION_TYPE_UNKNOWN = 0; // Navigation started by clicking a link, entering the URL in the browser's // address bar, form submission, or initializing through a script operation // other than reload and back_forward. NAVIGATION_TYPE_NAVIGATE = 1; // Navigation is through the browser's reload operation, location.reload(), // or a Refresh pragma directive like // <meta http-equiv="refresh" content="300">. NAVIGATION_TYPE_RELOAD = 2; // Navigation is through the browser's history traversal operation. NAVIGATION_TYPE_BACK_FORWARD = 3; // Navigation is initiated by a prerender hint (deprecated). See // https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/rel/prerender. NAVIGATION_TYPE_PRERENDER = 4; } // The type of browser navigation that led to the current page. Unset for // non-web ad requests. optional NavigationType ntype = 6; // Indicates that the request is using semi-transparent branding, // which means only a truncated version of the request URL will // be provided. This decision is made by the publisher, see // https://support.google.com/admanager/answer/4584891#urls for context. optional bool is_semi_transparent_request = 3; // The domain of the partner (of the site owner) with ownership // of some portion of ad inventory on the site. The partner's ads.txt file // will be hosted here. More detail at // http://iabtechlab.com/wp-content/uploads/2021/03/ctv-app-ads-explainer-guide.pdf optional string inventorypartnerdomain = 4; } message BidRequestExt { // Feedback on bids submitted in previous responses. This is only set if // real-time feedback is enabled for your bidder. Contact your // account manager if you want to enable real-time feedback. message BidFeedback { // The unique id from BidRequest.id. optional string request_id = 1; // The status code for the ad. See creative-status-codes.txt in the // technical documentation for a list of ids. optional int32 creative_status_code = 2; // If the bid won the auction, this is the price paid in your account // currency. If the bid participated in the auction but was out-bid, this // is the CPM that should have been exceeded in order to win. This is not // set if the bid was filtered prior to the auction, if the publisher or // winning bidder has opted out of price feedback or if your account has // opted out of sharing winning prices with other bidders. For first-price // auctions, minimum_bid_to_win is populated instead of this field. optional double price = 3; // The minimum bid value necessary to have the auction, in your account // currency. If your bid won the auction, this is the second highest bid // that was not filtered (including the floor price). If your bid did not // win the auction, this is the winning candidate's bid. This field will // only be populated if your bid participated in a first-price auction, and // will not be populated if your bid was filtered prior to the auction. optional double minimum_bid_to_win = 6; // The minimum bid value necessary to have won the server-side component of // the overall auction given that there was also an interest group bidding // component to the overall auction which ran using the Protected Audience // API. The value is expressed in CPM of the buyer account currency. The // minimum bid to win for the overall auction, including bids from the // server-side and the on-device interest group components, is populated in // the minimum_bid_to_win field of the same BidFeedback object. optional double sscminbidtowin = 14; // Billable event rate multiplier that was applied to this bid during // ranking. The adjustment reflects the likelihood that your bid would // generate a billable event (namely, the ad renders successfully) if it won // the auction, relative to the probability that other bids generate a // billable event if they won the auction. This adjustment can be larger or // smaller than 1. This affects the final ranking in the auction only; in // particular, this multiplier does not affect the payment or whether the // bid clears any floor price. optional float billable_event_rate_bid_adjustment = 13 [default = 1]; // When a publisher uses an RTB auction and waterfall-based SDK mediation on // the same query, the winner of the real-time auction must also compete in // a mediation waterfall (which is ordered by price) to win the impression. // If the bid participated in the auction and there was no waterfall, the // value of this field is 0. If the bid participated in the auction and // there was a waterfall, the value of this field is a price representing a // sample bid from the eligible mediation networks that were higher than the // auction winner, weighted by expected fill rate. This field can be used // in conjunction with minimum_bid_to_win to train bidding models. The CPM // is in your account currency. optional double sampled_mediation_cpm_ahead_of_auction_winner = 8; message EventNotificationToken { // The contents of the token. optional string payload = 1; } // The token included in the corresponding bid. optional EventNotificationToken event_notification_token = 4; // The creative ID included in the corresponding bid. optional string buyer_creative_id = 5; // Possible types of bid response feedback objects. enum FeedbackType { FEEDBACK_TYPE_UNSPECIFIED = 0; // Feedback for a bid that was submitted on a bid response. BID_FEEDBACK = 1; // Feedback for an interest group buyer submitted on a bid response to // particpate in an interest group bidding component of the auction run // using the Protected Audience API. INTEREST_GROUP_BUYER_FEEDBACK = 2; } // The type of the BidFeedback message. Google will send separate // BidFeedback objects for: // a) Each bid submitted on a bid response // b) Each buyer submitted on a bid response to particpate in an interest // group bidding component of the auction run using the Protected Audience // API. optional FeedbackType feedbacktype = 15; // Origin of an interest group buyer that was included in the bid response. // This field is populated only for feedback where a bidder opted in an // interest group buyer to participate in the interest group bidding // component of the overall auction run using the Protected Audience API. // To learn more about origins, see https://www.rfc-editor.org/rfc/rfc6454. // To learn more about interest group bidding and the Protected Audience // API, see // https://developers.google.com/authorized-buyers/rtb/fledge-origin-trial. optional string buyerorigin = 16; // The status code for the submitted interest group buyer. This field is // only populated in the feedback for an interest group buyer that a bidder // requested to enter into the interest group auction through the bid // response. Individual creative status codes of bids submitted by the buyer // in the on-device interest group auction are not available. See // https://storage.googleapis.com/adx-rtb-dictionaries/interest-group-buyer-status-codes.txt // for a list of interest group buyer status codes. optional int32 igbuyerstatus = 17; } repeated BidFeedback bid_feedback = 1; // This represents a unique ID for the overall query. In the event // that there are multiple callouts for a query, all callout requests for that // query will contain the same google_query_id. optional string google_query_id = 2; // Experimental feature; may be subject to change. See // https://support.google.com/authorizedbuyers/answer/10890762 for more // information. // // Describes the scope of frequency cap enforcement available for this // request. Frequency caps to be enforced for a bid can be specified in the // Bid.ext.fcap field. enum FrequencyCappingScope { // Default value which should not be used, or which can indicate that // frequency cap scope could not be reliably determined. FREQUENCY_CAPPING_SCOPE_UNKNOWN = 0; // Frequency capping based on bid response specifications is not available // for this request. A frequency-capped bid for a bid request with no // frequency cap availability will be filtered prior to the auction. FREQUENCY_CAPPING_SCOPE_NONE = 1; // Frequency capping enforcement is available across multiple sites within // the same browser. FREQUENCY_CAPPING_SCOPE_BROWSER = 2; // Frequency capping enforcement is available across multiple apps on the // device, excluding browsers. FREQUENCY_CAPPING_SCOPE_DEVICE = 3; // Frequency capping enforcement is available within a single app. FREQUENCY_CAPPING_SCOPE_APP = 4; // Frequency capping enforcement is available within a single site. FREQUENCY_CAPPING_SCOPE_SITE = 5; } optional FrequencyCappingScope fcap_scope = 4; // Privacy treatments. Some fields in the bid request can be coarsened or // redacted in order to protect user privacy. This message provides // information about privacy treatments that apply to an ad opportunity // offered through this request. message PrivacyTreatments { // Generalization that can be applied to an IP address field. enum IpGeneralization { // The IP address field is truncated: IPv4 to /24 or IPv6 to /48. // The truncated octets are replaced by zeros so the field still parses // as a valid IP address, for example "xxx.yyy.zzz.0" for IPv4. IP_TRUNCATED = 0; // The IP address field is redacted. IP_REDACTED = 2; } // Generalization applied to the IP address field populated in the request // (either BidRequest.device.ip or BidRequest.device.ipv6). optional IpGeneralization ip = 1; // Generalization that can be applied to the BidRequest.device.ua and // BidRequest.device.sua fields. enum UserAgentGeneralization { // The BidRequest.device.ua and BidRequest.device.sua fields are provided // in full. USER_AGENT_FULL = 0; // The BidRequest.device.ua and BidRequest.device.sua fields are // generalized, which can include limiting browser and OS version // information to major versions only and other changes to protect user // privacy. USER_AGENT_COARSE = 1; } // Generalization that was applied to the BidRequest.device.ua and // BidRequest.device.sua fields, if any. optional UserAgentGeneralization user_agent = 2; // Specifies the reasons that ads returned in response to this request // should not be personalized. This signal does not reflect user decisions // on surfaces including iOS App Tracking Transparency // (https://developer.apple.com/documentation/apptrackingtransparency) or // Android advertising ID // (https://support.google.com/googleplay/android-developer/answer/6048248). // See BidRequest.device.lmt and BidRequest.device.ext.atts fields for more // information. enum NonPersonalizedAdsReason { UNKNOWN = 0; // The publisher has declared that this request should serve // non-personalized ads independent of other signals. // https://support.google.com/admanager/answer/9005435#npa PUBLISHER_DECLARED_NPA = 1; // The publisher has requested restricted data processing for this // request. https://support.google.com/authorizedbuyers/answer/11121285 RESTRICT_DATA_PROCESSING = 2; // The user has opted out of ads personalization. USER_OPT_OUT = 3; } repeated NonPersonalizedAdsReason non_personalized_ads_reason = 6 [packed = true]; // True if publisher grants the permission to allow the bidder to use bid // request data to build user profiles for uses such as interest-based ads // and remarketing. To use this data to build user profiles, a bidder must // also win a given impression. // Learn more about data collection controls: // https://support.google.com/admanager/answer/11956152 optional bool allow_user_data_collection = 7; // Reasons why on-device storage access could be restricted during the // delivery of a winning ad. enum DeviceStorageRestrictionReason { DEVICE_STORAGE_RESTRICTION_UNKNOWN = 0; // This request is subject to user consent requirements to allow for // device storage access for advertising use cases such as ads // measurement, frequency capping, or profiling, but consent was // insufficient or not provided. INSUFFICIENT_USER_CONSENT = 1; } // Indicates the reason why access of local device storage during winning ad // rendering and measurement is restricted. optional DeviceStorageRestrictionReason storagerestrict = 8; } optional PrivacyTreatments privacy_treatments = 5; // Contains labels indicating the experiment or control groups that are // active for this request. Work with your account manager to opt in to an // experiment. The exact set of experiments available, their meaning, and // whether there is any action required from the bidder varies from experiment // to experiment and will be communicated separately. // // If empty, then this request is not part of any experiment or control group, // or your bidder is not participating in any experiments. repeated string expids = 6; } message UserExt { message ConsentedProvidersSettings { // Set of IDs corresponding to ad tech providers (ATPs) for whom the // publisher has specified to Google that its EEA users have given legally // valid consent to: 1) the use of cookies or other local storage where // legally required; and 2) the collection, sharing, and use of personal // data for personalization of ads by an ATP in accordance with Google's EU // User Consent Policy. // // If a publisher is using the IAB Transparency and Consent Framework (TCF) // v2 to manage user consent, this is the set of ATPs consented through the // Additional Consent string (see // https://support.google.com/admanager/answer/9681920 for details about // Google's Additional Consent mode). ATPs consented through the TCF v2 // consent string are represented in the UserExt.consent field. // // A mapping of ATP ID to ATP name is posted at providers.csv. repeated int64 consented_providers = 2 [packed = true]; // The raw Additional Consent string, which contains a list of certain // Google Ad Tech Providers (ATPs). These ATPs are not registered with IAB // TCF v2, but publishers or their Consent Management Providers (CMPs) have // ensured that certain disclosures are given to, and consents are obtained // from, end users, as required by Google's EU User Consent Policy. This // field is only populated with the use of CMPs that are integrated with IAB // TCF v2. Such CMPs use the raw Additional Consent string to indicate // vendors that are not registered with IAB, and communicate end users' CMP // choices to those vendors. The consented_providers field contains the set // of vendors that mirrors the one represented by the additional_consent // field, which is in the raw form. Vendors or any other third-party service // providers must not create AC strings themselves. // // See https://support.google.com/admanager/answer/9681920 for more details // about this field. optional string additional_consent = 3; } // Information about the ad tech providers for whom the publisher has // specified to Google that its EEA user has consented to the use of their // personal data for ads personalization in accordance with Google's EU User // Consent Policy. This field will only be populated when RegsExt.gdpr is // true. optional ConsentedProvidersSettings consented_providers_settings = 1; // 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. optional string consent = 2; // Extended data, such as secure signals, 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 ExtendedId { // Source or technology provider responsible for the set of included data. optional string source = 1; // This object contains a single data item, such as a secure signal, // provided as part of extended identifiers. message ExtendedIdUid { // The data value, such as a secure signal. optional string id = 1; } // Array of ExtendedIdUid objects from the given source. repeated ExtendedIdUid uids = 2; } // Data made available by the publisher, such as secure signals. // https://github.com/InteractiveAdvertisingBureau/openrtb/blob/master/extensions/2.x_official_extensions/eids.md repeated ExtendedId eids = 5; // Describes a user session in a given app or site. The session is reset after // a sufficiently long break in user activity. message Session { // Time in seconds since the first ad request in the session. Currently the // session duration is only supported for mobile app requests. optional int32 duration = 1; } // The current user session. optional Session session = 6; // The amount of time, in seconds, since the ID in `BidRequest.user.id` was // created. optional int32 idage = 7; } message UIDExt { // The source type of the UID. See details at // https://developers.google.com/authorized-buyers/rtb/openrtb-guide#uid-stype optional string stype = 1; } message DataExt { // Identifies the taxonomy that the segment IDs belong to. // Google supports the following taxonomies: // https://github.com/InteractiveAdvertisingBureau/Taxonomies/blob/main/Audience%20Taxonomies/Audience%20Taxonomy%201.1.tsv // IAB Tech Lab Audience Taxonomy 1.1 = 4 // https://github.com/InteractiveAdvertisingBureau/Taxonomies/blob/main/Content%20Taxonomies/Content%20Taxonomy%202.2.tsv // IAB Tech Lab Content Taxonomy 2.2 = 6 // https://github.com/InteractiveAdvertisingBureau/Taxonomies/blob/main/Content%20Taxonomies/Content%20Taxonomy%203.0.tsv // IAB Tech Lab Content Taxonomy 3.0 = 7 // https://github.com/patcg-individual-drafts/topics/blob/main/taxonomy_v1.md // Chromium Topics API = 600 // https://github.com/patcg-individual-drafts/topics/blob/main/taxonomy_v2.md // Chromium Topics API V2 = 601 optional int32 segtax = 1; // The version of the classifier which produced the segment IDs within the // taxonomy. For example, in the case of Chrome Topics API (segtax=600), this // is the version of the classifier used by the browser to map hostnames to // topics in the taxonomy. optional string segclass = 2; } message DeviceExt { // Represents a short-lived user session on CTV/OTT devices, // with a maximum session duration of 6 hours. // The use of session_id is never allowed for ads personalization. // session_id may only be used for frequency capping, competitive exclusions // or related purposes. This field is populated with web-safe base64 alphabet. optional string session_id = 1; // (iOS Only) An integer passed to represent the app's app tracking // authorization status, where 0 = not determined 1 = restricted 2 = denied // 3 = authorized. This value is retrieved from ATTrackingManager and // provided as is. See // https://github.com/InteractiveAdvertisingBureau/openrtb/blob/master/extensions/community_extensions/skadnetwork.md#bid-request-1 // // For more information about iOS's app tracking authorization status, see: // https://developer.apple.com/documentation/apptrackingtransparency/attrackingmanager/authorizationstatus optional int32 atts = 3; // Chrome-facilitated cookie deprecation testing label as received from // Chrome. // https://developer.chrome.com/en/docs/privacy-sandbox/chrome-testing/ optional string cdep = 7; } message RegsExt { // This field will be set to true in either of the two following cases: // 1. Google receives a valid IAB Transparency and Consent Framework (TCF) // v2 consent string and the Consent Management Platform indicates that // GDPR applies to this ad request. // 2. Google does not receive an IAB TCF v2 consent string and, based on // information available to Google, this impression will serve to an // EEA user. // It does not constitute legal guidance on GDPR. optional bool gdpr = 1; // This field will be set to true when, based on information available to // Google, this impression will serve to a user in Brazil. See // https://storage.googleapis.com/adx-rtb-dictionaries/lgpd-providers.csv for // the list of ad tech providers that are allowed to serve on LGPD-enforced // requests. // // See https://support.google.com/authorizedbuyers/answer/9928204 for more // information on LGPD. optional bool lgpd = 2; // The Digital Services Act (DSA) transparency requirements. See // https://support.google.com/admanager/answer/14335032. message Dsa { // Values indicating whether DSA declarations should be included in the bid // response and, if so, whether or not the publisher is an Online Platform // (OP) or Very Large Online Platform (VLOP), as defined by the DSA. enum DsaSupport { // DSA declarations are not required in the bid response. NOT_REQUIRED = 0; // DSA declarations are supported, but not required in the bid response. SUPPORTED = 1; // DSA declarations are required in the bid response. REQUIRED = 2; // DSA declarations are required in the bid response and the publisher is // an OP or VLOP. REQUIRED_BY_ONLINE_PLATFORM = 3; } // Indicates if DSA declarations should be included in the bid response. // Bids where DSA declarations are required but not included will not be // accepted. optional DsaSupport dsarequired = 1; // Options describing a publisher's ability to render DSA transparency // declarations. enum PublisherRenderingSupport { // Publisher can't render. PUBLISHER_UNABLE_TO_RENDER = 0; // Publisher could render depending on the buyer's rendering capability as // described in the Bid.ext.dsa.adrender field. PUBLISHER_CAN_RENDER = 1; // Publisher will render regardless of the buyer's rendering capability as // described in the Bid.ext.dsa.adrender field. PUBLISHER_WILL_RENDER = 2; } // Indicates if the publisher will render the DSA Transparency info. This // will signal if the publisher is able to and intends to render the icon // or other appropriate user-facing symbol and display the DSA transparency // info to the end user. optional PublisherRenderingSupport pubrender = 2; // Options describing if a publisher requires DSA transparency declarations. enum DataToPublisher { // Do not send transparency data. DO_NOT_SEND = 0; // Optional to send transparency data. OPTIONAL = 1; // Send transparency data. SEND = 2; } // Indicates whether the bidder should provide DSA transparency declarations // in the bid response. A publisher may need this information for audit or // other purposes, even if they will not render the transparency // declarations themselves. optional DataToPublisher datatopub = 3; } // The Digital Services Act (DSA) transparency information requirements. optional Dsa dsa = 3; } message DealExt { // The type of the deal. Note that Authorized Buyers policy overrides apply to // all Programmatic Guaranteed and Preferred Deal bids, and do not apply to // bids for other deal types. enum DealType { UNKNOWN_DEAL_TYPE = 0; // Bids are fixed-price and evaluated before the Open Auction. Bidders are // not required to bid with Preferred Deals when they are present on the bid // request. See https://support.google.com/authorizedbuyers/answer/2604595 // for more information. PREFERRED_DEAL = 1; // Bids participate in a Private Auction against a select list of buyers // with specific floors. See // https://support.google.com/authorizedbuyers/answer/2839853 for more // information. PRIVATE_AUCTION = 2; // Bids are fixed-price and evaluated before the Open Auction. Bidders are // expected to bid with Programmatic Guaranteed deals whenever they are // present on a bid request and the must_bid field is true in order to // ensure that the number of impressions agreed upon for a given deal are // served. See https://support.google.com/authorizedbuyers/answer/7174589 // for more information. PROGRAMMATIC_GUARANTEED = 3; // The deal ID is an identifier for a collection of Open Auction inventory // matching a given set of targeting criteria. See // https://support.google.com/authorizedbuyers/answer/7516884 for more // information. AUCTION_PACKAGE = 4; // Package of inventory that a publisher makes available to either all // buyers or selected bidders. Bids participate in auction in the same way // as private auction candidates. See // https://support.google.com/authorizedbuyers/answer/12817370 for more // information. MARKETPLACE_PACKAGE = 5; } optional DealType deal_type = 1 [default = UNKNOWN_DEAL_TYPE]; // This field is only applicable to Programmatic Guaranteed deals. The // buyer is allowed to skip bidding on the impression if this field is // false. When it is true, the buyer is required to bid on this deal for // this impression opportunity. This field will always be filled explicitly // for the JSON wire format. optional bool must_bid = 2 [default = true]; // Whether the publisher has exempted this deal from configured blocks. This // setting does not override AdX policies or Ad Review Center decisions. See // https://support.google.com/authorizedbuyers/answer/6114194 for more // information. optional bool publisher_blocks_overridden = 3; // Experimental field; subject to change. // An enum declaring the host of the creative, which will only be // populated for Programmatic Guaranteed deals. // Currently, this field should only ever be set to // CREATIVE_SOURCE_ADVERTISER. enum CreativeSourceType { CREATIVE_SOURCE_UNKNOWN = 0; // The creative is hosted by the advertiser, which means the bidder is // required to provide a creative in the bid response. CREATIVE_SOURCE_ADVERTISER = 1; // The creative is hosted by the publisher, which means the bidder // does not need to include a creative in the bid response. // For more information on publisher-hosted creatives, see // https://support.google.com/admanager/answer/9243220. // This feature isn't currently supported for RTB bidders. CREATIVE_SOURCE_PUBLISHER = 2; } optional CreativeSourceType creative_source = 4 [default = CREATIVE_SOURCE_ADVERTISER]; // Constraints for creatives that can apply when bidding on a deal. message CreativeConstraints { // The allowed ad types of the deal. If empty, there are no deal-specific // allowed ad type restrictions for the deal. In that case, bidders should // refer to the presence of Banner, Video, Audio or Native objects in the // BidRequest to check the allowed formats. repeated .com.google.openrtb.CreativeMarkupType mtypes = 1 [packed = true]; // Possible creative skippability requirements. enum SkippabilityConstraint { // Skippable and non-skippable creatives are allowed. ALLOW_SKIPPABLE = 0; // Only skippable creatives are allowed. REQUIRE_SKIPPABLE = 1; // Only non-skippable creatives are allowed. BLOCK_SKIPPABLE = 2; } // Whether skippable creatives are allowed. For PROGRAMMATIC_GUARANTEED or // PREFERRED_DEAL deals that specifically allow video or audio ad types, it // is always set. For the skippability setting of other deal types or open // auction bidding, refer to the corresponding BidRequest-level field // video.skip. optional SkippabilityConstraint skippability = 2 [default = ALLOW_SKIPPABLE]; // Maximum video ad duration in seconds. For PROGRAMMATIC_GUARANTEED or // PREFERRED_DEAL deals that specifically allow video or audio ad types, it // is always set. For the allowed max duration of other deal types or open // auction bidding, refer to the corresponding BidRequest-level field // video.maxduration. optional int32 maxduration = 3; } // Creative constraints for this deal. If this is not set, bidders should // refer to the BidRequest-level setting of each field. optional CreativeConstraints creative_constraints = 5; // Indicates the eligible billing IDs for this deal. If this list is not // empty, the billing ID selected in `BidResponse.seatbid.bid.ext.billing_id` // must be one of these IDs when submitting a bid on this deal. If this list // is empty, then the bid on this deal can be attributed to any of the billing // IDs in `BidRequest.imp.ext.billing_id`. repeated int64 billing_id = 6 [packed = true]; } message SourceExt { // Identifier of the OM SDK integration. Equivalent to // BidRequest.AdSlot.omidpn in the Google protocol. For more info, // see the OpenRTB Advisory for Open Measurement SDK: // https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/master/OpenRTB%20support%20for%20OMSDK.md#openrtb-and-adcom. optional string omidpn = 1; // Version of the OM SDK integration. Equivalent to BidRequest.AdSlot.omidpv // in the Google protocol. For more info, see the OpenRTB Advisory for // Open Measurement SDK: // https://github.com/InteractiveAdvertisingBureau/AdCOM/blob/master/OpenRTB%20support%20for%20OMSDK.md#openrtb-and-adcom. optional string omidpv = 2; // OpenRTB SupplyChain object. For more information, see // https://github.com/InteractiveAdvertisingBureau/openrtb/blob/master/supplychainobject.md. message SupplyChain { // Indicates 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. optional int32 complete = 1; 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. optional string asi = 1; // The identifier associated with the seller or reseller account within // the advertising system. This must contain the same value used in // 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. optional string sid = 2; // The OpenRTB RequestId of the request as issued by this seller. optional 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. optional 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. optional 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. optional int32 hp = 6; } // 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, for // example, 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". optional string ver = 3; } // Deprecated. This will be removed in December 2023. Use the standard field // schain instead. optional SupplyChain schain = 3; } message GeoExt { // The device's approximate geographic location. See the geo-table.csv table // available at https://developers.google.com/authorized-buyers/rtb/data for // a list of IDs. This field is provisional, intended only to help with // migration from the Google Authorized Buyers protocol to OpenRTB; it will // be removed in the future. The standard fields in BidRequest.device.geo // should be used instead; they contain the same location as the // geo_criteria_id and both are subject to the same privacy treatments. // See Geotargeting Guide: // https://developers.google.com/authorized-buyers/rtb/geotargeting optional int32 geo_criteria_id = 1; } message VideoExt { // Video placement type inferred by Google for this impression. This field // is always filled and can be different from BidRequest.imp.video.plcmt (the // publisher-declared placement type). optional .com.google.openrtb.Plcmt inferredplcmt = 3 [default = PLCMT_UNKNOWN]; // If true, the video is embedded on a page outside the publisher's domain. // When this is set, BidRequest.{app/site}.content.producer.domain points to // the domain of the content producer, and the BidRequest.{app/site}.page // field is the page in which the video is embedded. optional bool embeddedoffsite = 4; // Indicates that this bid request is fetching impressions in advance of a // future ad break in a live video stream. The impression may not be rendered // if, for example, the user closes the video player before the ad break // begins. The bid request for the same opportunity may also be retried in // some cases, such as updated publisher settings. optional bool prefetch = 5; } extend .com.google.openrtb.BidRequest.Imp { // Extension key for AdX Imp.ext. optional ImpExt imp = 1009; } extend .com.google.openrtb.BidRequest.App { // Extension key for AdX App.ext. optional AppExt app = 1011; } extend .com.google.openrtb.BidRequest.Imp.Banner { optional BannerExt banner_ext = 1014; } extend .com.google.openrtb.BidResponse { // Extension key for AdX BidResponse.ext. optional BidResponseExt bid_response = 1005; } extend .com.google.openrtb.BidResponse.SeatBid.Bid { // Extension key for AdX Bid.ext. optional BidExt bid = 1014; } extend .com.google.openrtb.NativeRequest { // Extension key for the AdX Native.ext. optional NativeRequestExt native_ext = 1001; } extend .com.google.openrtb.NativeResponse.EventTracker { // Extension key for the AdX EventTracker.ext. optional EventTrackerExt eventtrackers = 1000; } extend .com.google.openrtb.BidRequest.Publisher { // Extension key for the AdX Publisher.ext optional PublisherExt publisher = 1002; } extend .com.google.openrtb.BidRequest.Site { // Extension key for the Adx Site.ext optional SiteExt site = 1010; } extend .com.google.openrtb.BidRequest { // Extension key for the Adx BidRequest.ext optional BidRequestExt bid_request = 1018; } extend .com.google.openrtb.BidRequest.User { // Extension key for the Adx User.ext optional UserExt user = 1007; } extend .com.google.openrtb.BidRequest.User.EID.UID { // Extension key for the AdX User.eids.uids.ext. optional UIDExt uids = 1001; } extend .com.google.openrtb.BidRequest.Data { // Extension key for the AdX Data.ext optional DataExt data = 1000; } extend .com.google.openrtb.BidRequest.Device { optional DeviceExt device = 1066; } extend .com.google.openrtb.BidRequest.Regs { // Extension key for the Adx Regs.ext optional RegsExt regs = 1001; } extend .com.google.openrtb.BidRequest.Imp.Pmp.Deal { // Extension key for AdX Deal.ext. optional DealExt deal = 1010; } extend .com.google.openrtb.BidRequest.Source { // Extension key for Source.ext optional SourceExt source = 1059; } extend .com.google.openrtb.BidRequest.Geo { // Extension key for Geo.ext optional GeoExt geo = 1004; } extend .com.google.openrtb.BidRequest.Imp.Video { // Extension key for Video.ext optional VideoExt video = 1031; } // SKAdNetwork API starting from version 2.2 supports multiple ad // presentation options specified by the `fidelity-type` parameter of the // SKAdNetwork signature. The following are the fidelity types supported by // Apple. For more info visit: // https://developer.apple.com/documentation/storekit/skadnetwork/signing_and_providing_ads enum SKAdNetworkFidelityType { // Attribution for app installs within 24 hours of viewing an ad for at least // 3 seconds. Supported for SKAdnetwork version 2.2 and up. For more info see: // https://developer.apple.com/documentation/storekit/skadnetwork/generating_the_signature_to_validate_view-through_ads VIEW_THROUGH_ADS = 0; // Attribution for app installs initiated from the StoreKit-rendered App Store // product page driven by ad clicks. Supported for all SKAdNetwork versions. // For more info see: // https://developer.apple.com/documentation/storekit/skadnetwork/generating_the_signature_to_validate_storekit-rendered_ads STOREKIT_RENDERED_ADS = 1; }