Skip to content

Latest commit

 

History

History
433 lines (383 loc) · 15.4 KB

Protected Audience Support.md

File metadata and controls

433 lines (383 loc) · 15.4 KB

Bid Request Values

Object: InterestGroupAuctionSupport

BidRequest.imp.ext.igs: This extension to "Object: Imp" allows sellers to signal Interest Group auction support for an Impression to buyers.

Attribute Type Description
ae integer;
default 1
Interest Group auction environment support for this impression:
0 = Interest Group auction not supported
1 = on-device-orchestrated Interest Group auction
3 = server-orchestrated 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 OpenRTB (aka contextual) auction, if any, will serve instead.
biddable integer;
default 0
Indicates whether the buyer is allowed to participate in the Interest Group auction. Depending on account settings and other factors, a bidder might be disallowed from participating in an auction or submitting Interest Group bids, even though an Interest Group auction may ultimately decide the winning ad. The seller sets this.
Example: the publisher intends to enable Interest Group, but the seller has not onboarded this buyer for Interest Group auctions. Buyers should only expect sellers to honor corresponding Interest Group Intent signals when this field is 1.

0 = no, the buyer is not allowed
1 = yes, the buyer is allowed

Bid Response Values

Object: InterestGroupAuctionIntent

BidResponse.ext.igi: This extension to "Object: BidResponse" allows buyers and sellers to provide necessary signals in order to operate an Interest Group auction for a given ad slot.
Must include at least a buyer object (igb, in the bid response from the buyer to the seller) or seller object (igs, from the seller to the publisher), but not both.

Attribute Type Description
impid string; required* ID of the Imp object in the related bid request. Used to link Interest Group buyer information to the specific ad slot.
*Only required in the bid response from the buyer to the seller
igb array; required One or more InterestGroupAuctionBuyer objects. Required and mutually exclusive with igs.
igs array; required One or more InterestGroupAuctionSeller objects. Required and mutually exclusive with igb.

Object: InterestGroupAuctionBuyer

BidResponse.ext.igi.igb: Information provided by the buyer and necessary for the seller to build the associated config.

Attribute Type Description
origin string; required Origin of the Interest Group buyer to participate in the IG auction. See https://developer.mozilla.org/en-US/docs/Glossary/Origin.
maxbid double Maximum Interest Group bid price expressed in CPM currency that a bidder agrees to pay if they win an in-browser Interest Group auction expressed expressed in the currency denoted by the cur attribute. Actual winning bid in the in-browser auction that determines the amount a bidder pays for the impression may be lower than this amount. This constraint reduces the risks from in-browser auction bids submitted in error or reported due to fraud and abuse.
cur string;
default "USD"
The buyer's currency signals, an object mapping string keys to Javascript numbers. If specified, the seller will add to its auction config perBuyerCurrencies attribute map, keyed by the Interest Group buyer origin. Indicates the currency in which Interest Group bids will be placed. The maxbid should always match the cur value.

Value must be a three digit ISO 4217 alpha currency code (e.g. "USD").
pbs any valid JSON expression Buyer-specific signals ultimately provided to this buyer's generateBid() function as the perBuyerSignals argument. If specified, the seller will add to its auction config perBuyerSignals attribute map, keyed by the Interest Group buyer Origin. Per PA API spec, the value may be any valid JSON serializable value.
ps object The buyer’s priority signals, an object mapping string keys to Javascript numbers. If specified, the seller will add to its auction config perBuyerPrioritySignals attribute map, keyed by the Interest Group buyer origin. See https://github.com/WICG/turtledove/blob/main/FLEDGE.md#35-filtering-and-prioritizing-interest-groups

Object: InterestGroupAuctionSeller

BidResponse.ext.igi.igs: Information provided by the seller and necessary to initiate an Interest Group component auction.
Component seller auction configuration should be submitted to the top-level seller's on-page library for inclusion in the Interest Group auction.

Attribute Type Description
impid string; required ID of the Imp object in the related bid request. Used to link Interest Group seller information to the specific ad slot.
config object; required Auction config for a component seller

Non-OpenRTB Signaling

The objects coming from sellers or publishers are expected to be ‘namespaced.’ If OpenRTB is reused it is under the "ortb2" key.

NOTES:

  • If the publisher shares some vendor info that would be namespaced within the pub's windowHostname key, e.g. "prebid.org" or "vendor.com".
  • If sellers are using directFromSellerSignals to communicate this information, they should follow the same naming convention.
  • If ortb2 namespace is used, it is expected that the structured request matches OpenRTB object model and definitions. All deviations should be done as extensions and negotiated apriori between the parties wanting to send/receive non-standard signals.

Object: InterestGroupAuctionBuyerSignals

Early PAAPI auction provisioning practice was for buyers to supply their perBuyerSignals to seller partners as a passthrough value BidResponse.ext.igbid[].igbuyer[].buyerdata or some other means. The seller places this in the buyer’s key in auctionConfig.perBuyerSignals and PA then provides the value as the perBuyerSignals parameter to generateBid. This does not afford a clean way for the seller to provide signals to a specific buyer, such as Deals.

To accommodate this, the community extensions support a more open perBuyerSignals handling. In an OpenRTB BidRequest sellers can signal their ability to provide and in the BidResponse buyers may opt in to receive an InterestGroupAuctionBuyerSignals object in the interest group auction.

This object is a dictionary with support for some combination of the following enteries:

{
  let signalsFromMyOrigin        = perBuyerSignals[browserSignals.interestGroupOwner]; 
  let signalsFromComponentSeller = perBuyerSignals[browserSignals.seller];
  let signalsFromTopLevelSeller  = perBuyerSignals[browserSignals.topLevelSeller];
  let signalsFromPublisher       = perBuyerSignals[browserSignals.topWindowHostname];
}

The presence and placement of these entries determine the role of the Origin listed.

While the entities listed above and their associated Origins are defined values established and recognized by the PA APIs, others may be included based on specific agreement between partners that have been negotiated a priori. In that case, the canonical domain of the parties should be used.

See Namespacing section of implementation guidance for additional detail https://github.com/hillslatt/examplefork/edit/hillslatt-ig-support-ext/extensions/community_extensions/Protected%20Audience%20Support.md?pr=%2FInteractiveAdvertisingBureau%2Fopenrtb%2Fpull%2F175#namespacing

Implementation Guidance

Bid Request

Signaling Interest Group Auction Support

Following extends the basic banner example to advertise Interest Group auction support.

{
  "id": "80ce30c53c16e6ede735f123ef6e32361bfc7b22",
  "at": 1,
  "cur": [
    "USD"
  ],
  "imp": [
    {
      "id": "1",
      "bidfloor": 0.03,
      "banner": {
        "h": 250,
        "w": 300,
        "pos": 0
      },
      "ext": {
         "igs":{
            "ae": 1
         }
      }
   }],
  "site": {
    "id": "102855",
    "cat": [
      "IAB3-1"
    ],
    "domain": "www.example.com",
    "page": "http://www.example.com/1234.html",
    "publisher": {
      "id": "8953",
      "name": "example.com",
      "cat": [
        "IAB3-1"
      ],
      "domain": "example.com"
    },
    "user": {
      "id": "55816b39711f9b5acf3b90e313ed29e51665623f"
    }
  }
}

Bid Response

Bid Placed with Interest Group Auction Intent by the Buyer

Following extends the Ad Served On Win Notice example to demonstrate a bidder placing a bid into the standard OpenRTB auction and also signaling intent to the seller for one IG owner/buyer to participate in potential on-device auction.

{
  "id": "1234567890",
  "bidid": "abc1123",
  "cur": "USD",
  "seatbid": [
    {
      "seat": "512",
      "bid": [
        {
          "id": "1",
          "impid": "102",
          "price": 9.43,
          "nurl": "http://adserver.com/winnotice?impid=102",
          "iurl": "http://adserver.com/pathtosampleimage",
          "adomain": [
            "advertiserdomain.com"
          ],
          "cid": "campaign111",
          "crid": "creative112",
          "attr": [
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            12
          ]
        }
      ]
    }
  ],
 "ext": {
    "igi":[{
      "impid": "1",
      "igb":[{   	 
        "origin": "https://paapi.dsp.com",
        "pbs": "{\"key\": \"value\"}"
      }]
    }]
  }
}

No Bid with Interest Group Auction Intent by the Buyer

Following is an example where a bidder places no bid in the standard OpenRTB auction, but does signal intent to participate in potential on-device IG auction.

{
  "id": "1234567890", 
  "seatbid": [],
  "ext": {
    "igi":[{
        "impid": "1",
        "igb":[{   	 
          "origin": "https://paapi.dsp.com",
          "pbs": "{\"key\": \"value\"}"
        }]
    }]
  }
}

Auction Config Placed with Interest Group Auction Intent by the Seller

Following extends the Ad Served On Win Notice example to demonstrate a seller placing an auction config into the standard OpenRTB auction and also signaling intent to the publisher to participate in potential on-device auction.

{
  "id": "1234567890",
  "bidid": "abc1123",
  "cur": "USD",
  "seatbid": [
    {
      "seat": "512",
      "bid": [
        {
          "id": "1",
          "impid": "102",
          "price": 9.43,
          "nurl": "http://adserver.com/winnotice?impid=102",
          "iurl": "http://adserver.com/pathtosampleimage",
          "adomain": [
            "advertiserdomain.com"
          ],
          "cid": "campaign111",
          "crid": "creative112",
          "attr": [
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            12
          ]
        }
      ]
    }
  ],
  "ext": {
    "igi":[{
      "igs":[{
        "impid": "1",
        "config": {
          "key": "value"
        }
      }]
    }]
  }
}

Namespacing

Where participants in the auction are using the OpenRTB object model, the seller atrribute should always always have a sub-attribute called .ortb2.

Namespacing in auctionSignals

The auctionSignals metadata may originate from diverse sources, so this map should be ‘namespaced’ by the providing entity. Where an entity is using OpenRTB objects, it should provide them in an attribute named ortb2. For example:

{
   ...
   "auctionSignals": {
      "prebid": {
         "ortb2": {
            ... // sparse OpenRTB Bid Request attributes
         }
      },
      "seller": {
         "ortb2": {
            ...
         }
      }
   }
   ...
}

Name Spaced Multi-seller Auction

{
  'seller': 'https://www.example-toplevelseller.com',
  'componentAuctions': [
   {
     "seller": "https://www.example-ssp.com",
     "interestGroupBuyers": ["https://www.example-dsp.com"],
     "perBuyerSignals": {
       "https://www.example-dsp.com": {
         "https://www.example-toplevelseller.com": {}, /* top-level seller’s origin      */
         "https://www.example-ssp.com": {              /* seller’s origin                */
            "ortb2":{
               "imp":[
                  "pmp":{
                     "deals":[...]
                  }
               ]
            }
         },
         "https://www.example-dsp.com": igi.igb[].pbs, /* buyer’s origin                 */
         "www.example-publisher.com": {},              /* publisher host without scheme  */
       }
     },
     ...
   },
   ...
   ]
}

Within generateBid generateBid(interestGroup, auctionSignals, perBuyerSignals, trustedBiddingSignals, browserSignals, directFromSellerSignals)

{
   let signalsFromMyOrigin        = perBuyerSignals[browserSignals.interestGroupOwner]; 
   let signalsFromComponentSeller = perBuyerSignals[browserSignals.seller];
   let signalsFromTopLevelSeller  = perBuyerSignals[browserSignals.topLevelSeller];
   let signalsFromPublisher       = perBuyerSignals[browserSignals.topWindowHostname];
}

Name Spaced Single-seller Auction

 {
  'seller': 'https://www.example-seller.com',
  "interestGroupBuyers": ["https://www.example-dsp.com"],
  "perBuyerSignals": {
    "https://www.example-dsp.com": {
      "https://www.example-seller.com": {},         /* single-seller’s origin         */
      "https://www.example-dsp.com": igi.igb[].pbs, /* buyer’s origin                 */
      "www.example-publisher.com": {},              /* publisher host without scheme  */
    }
  },
  ...
}

Within generateBid

generateBid(interestGroup, auctionSignals, perBuyerSignals, trustedBiddingSignals, browserSignals, directFromSellerSignals) 
{
   let signalsFromMyOrigin        = perBuyerSignals[browserSignals.interestGroupOwner]; 
   let signalsFromSingleSeller    = perBuyerSignals[browserSignals.seller];
   let signalsFromPublisher       = perBuyerSignals[browserSignals.topWindowHostname];
}