diff --git a/_data/sidebar.yml b/_data/sidebar.yml index 8e817b5682..3e6518302b 100644 --- a/_data/sidebar.yml +++ b/_data/sidebar.yml @@ -27,14 +27,6 @@ sectionTitle: subgroup: 0 -- sbSecId: 0 - title: About Prebid.org - link: /overview/what-is-prebid-org.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 0 - - sbSecId: 0 title: Project Principles link: /principles.html @@ -43,22 +35,6 @@ sectionTitle: subgroup: 0 -- sbSecId: 0 - title: Membership - link: /partners/partners.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 0 - -- sbSecId: 0 - title: Prebid Management Committees - link: /overview/prebid-management-committees.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 0 - - sbSecId: 0 title: Developers link: /developers.html @@ -83,13 +59,6 @@ sectionTitle: subgroup: 0 -- sbSecId: 0 - title: '  Community' - link: /overview/community-code-of-conduct.html - isHeader: 0 - isSectionHeader: 0 - subgroup: 0 - - sbSecId: 0 title: '  Module Rules' link: /dev-docs/module-rules.html @@ -137,14 +106,6 @@ isSectionHeader: 0 subgroup: 0 -- sbSecId: 0 - title: "Other" - link: - isHeader: 0 - isSectionHeader: 0 - isCatHeader: 1 - sectionTitle: - subgroup: 1 #--------------Prebid.js--------------| @@ -184,6 +145,14 @@ sectionTitle: subgroup: 0 +- sbSecId: 1 + title: Consent Management Best Practices + link: /dev-docs/cmp-best-practices.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 0 + - sbSecId: 1 title: Examples link: @@ -486,6 +455,14 @@ sectionTitle: subgroup: 5 +- sbSecId: 1 + title: Instream Video Ads Tracking + link: /dev-docs/modules/instreamTracking.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 5 + - sbSecId: 1 title: Freewheel Module link: /dev-docs/modules/freewheel.html @@ -627,6 +604,14 @@ sectionTitle: subgroup: 8 +- sbSecId: 1 + title: First Party Data + link: /features/firstPartyData.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 8 + #--------------Prebid Mobile--------------| @@ -1127,6 +1112,22 @@ sectionTitle: subgroup: 0 +- sbSecId: 3 + title: Setup Rewarded Video Line Items For MoPub + link: /prebid-mobile/adops-setup-rewarded-video-mopub.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 0 + +- sbSecId: 3 + title: Setup Full Screen Video Line Items For MoPub + link: /prebid-mobile/adops-setup-full-screen-video-mopub.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 0 + - sbSecId: 3 title: Setup Native Ads link: /prebid-mobile/adops-native-setup.html @@ -1801,6 +1802,14 @@ sectionTitle: subgroup: 3 +- sbSecId: 5 + title: First Party Data + link: /prebid-server/features/pbs-fpd.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 3 + - sbSecId: 5 title: Developers link: @@ -2076,7 +2085,7 @@ - sbSecId: 7 title: Blog - link: /blog.html + link: https://prebid.org/blog/ isHeader: 0 isSectionHeader: 0 sectionTitle: diff --git a/_includes/footer.html b/_includes/footer.html index 668058859f..bffb0c8508 100644 --- a/_includes/footer.html +++ b/_includes/footer.html @@ -9,15 +9,16 @@ - + + - - + + + + @@ -31,8 +30,6 @@ - - diff --git a/assets/images/ad-ops/mopub/full/mopub-lineitem-full-adunit.png b/assets/images/ad-ops/mopub/full/mopub-lineitem-full-adunit.png new file mode 100644 index 0000000000..45485964f3 Binary files /dev/null and b/assets/images/ad-ops/mopub/full/mopub-lineitem-full-adunit.png differ diff --git a/assets/images/ad-ops/mopub/full/mopub_lineitem_full_vasttag.png b/assets/images/ad-ops/mopub/full/mopub_lineitem_full_vasttag.png new file mode 100644 index 0000000000..ec952a815c Binary files /dev/null and b/assets/images/ad-ops/mopub/full/mopub_lineitem_full_vasttag.png differ diff --git a/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-advanced.png b/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-advanced.png new file mode 100644 index 0000000000..423d9e4eac Binary files /dev/null and b/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-advanced.png differ diff --git a/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-rewarded copy.png b/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-rewarded copy.png new file mode 100644 index 0000000000..5bf220d953 Binary files /dev/null and b/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-rewarded copy.png differ diff --git a/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-rewarded.png b/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-rewarded.png new file mode 100644 index 0000000000..dafdbd7081 Binary files /dev/null and b/assets/images/ad-ops/mopub/rewarded/mopub-lineitem-rewarded.png differ diff --git a/assets/images/ad-ops/mopub/rewarded/mopub_lineitem_vasttag.png b/assets/images/ad-ops/mopub/rewarded/mopub_lineitem_vasttag.png new file mode 100644 index 0000000000..cda6243ce5 Binary files /dev/null and b/assets/images/ad-ops/mopub/rewarded/mopub_lineitem_vasttag.png differ diff --git a/assets/images/ad-ops/mopub/rewarded/mopub_lineitem_vasttag2.png b/assets/images/ad-ops/mopub/rewarded/mopub_lineitem_vasttag2.png new file mode 100644 index 0000000000..b5eadf1500 Binary files /dev/null and b/assets/images/ad-ops/mopub/rewarded/mopub_lineitem_vasttag2.png differ diff --git a/assets/images/flowcharts/FirstPartyData-Detailed.png b/assets/images/flowcharts/FirstPartyData-Detailed.png new file mode 100644 index 0000000000..1e4125ffb8 Binary files /dev/null and b/assets/images/flowcharts/FirstPartyData-Detailed.png differ diff --git a/assets/images/flowcharts/FirstPartyData-Summary.png b/assets/images/flowcharts/FirstPartyData-Summary.png new file mode 100644 index 0000000000..cd9ac8cd84 Binary files /dev/null and b/assets/images/flowcharts/FirstPartyData-Summary.png differ diff --git a/dev-docs/bidders/ablida.md b/dev-docs/bidders/ablida.md index 1ccd290043..590cc756df 100644 --- a/dev-docs/bidders/ablida.md +++ b/dev-docs/bidders/ablida.md @@ -3,8 +3,9 @@ layout: bidder title: ablida description: Prebid ablida Bidder Adaptor pbjs: true -media_types: banner, native biddercode: ablida +media_types: banner, native, video +gdpr_supported: true --- diff --git a/dev-docs/bidders/adagio.md b/dev-docs/bidders/adagio.md index e6cec401d8..287604e16f 100644 --- a/dev-docs/bidders/adagio.md +++ b/dev-docs/bidders/adagio.md @@ -6,6 +6,8 @@ pbjs: true biddercode: adagio media_types: banner gdpr_supported: true +usp_supported: true +coppa_supported: true schain_supported: true tcf2_supported: true gvl_id: 617 diff --git a/dev-docs/bidders/adform.md b/dev-docs/bidders/adformPbjs.md similarity index 97% rename from dev-docs/bidders/adform.md rename to dev-docs/bidders/adformPbjs.md index 7aefb1e764..a27591e5f6 100644 --- a/dev-docs/bidders/adform.md +++ b/dev-docs/bidders/adformPbjs.md @@ -1,7 +1,7 @@ --- layout: bidder title: Adform -description: Prebid Adform Bidder Adaptor +description: Prebid.js Adform Bidder Adaptor biddercode: adform media_types: banner, video gdpr_supported: true @@ -9,7 +9,7 @@ usp_supported: true tcf2_supported: true prebid_member: true pbjs: true -pbs: true +pbs: false userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, sharedId, unifiedId gvl_id: 50 --- diff --git a/dev-docs/bidders/adformPbs.md b/dev-docs/bidders/adformPbs.md new file mode 100644 index 0000000000..cdb6b81922 --- /dev/null +++ b/dev-docs/bidders/adformPbs.md @@ -0,0 +1,48 @@ +--- +layout: bidder +title: Adform +description: Prebid Server Adform Bidder Adaptor +biddercode: adform +media_types: banner +gdpr_supported: true +usp_supported: true +tcf2_supported: true +prebid_member: true +pbjs: false +pbs: true +userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, sharedId, unifiedId +gvl_id: 50 +--- + + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------|----------|-----------------------------------------------|----------------------------|-----------| +| `mid` | required | | `12345` | `integer` | +| `adxDomain` | optional | The Adform domain | `'adx.adform.net'` | `string` | +| `priceType` | optional | An expected price type (net or gross) of bids | `'net'` | `string` | +| `mkv` | optional | Comma-separated key-value pairs | `'city:NY'` | `string` | +| `mkw` | optional | Comma-separated keywords | `'news,sport'` | `string` | +| `minp` | optional | Minimum CPM price | `2.55` | `number` | +| `cdims` | optional | Comma-separated creative dimentions | `'300x250'` | `string` | +| `url` | optional | Custom targeting URL | `'https://some.app/?home'` | `string` | + +Note: Spaces are not allowed between comma-separated list values. For example: +``` +// valid params +{ + mid: 12345, + mkv: 'city:NY,city:London', + mkv: 'news,sport', + cdims: '300x250,250x300' +} +// invalid params +{ + mid: 12345, + mkv: 'city:NY, city:London', + mkv: 'news, sport', + cdims: '300x250, 250x300' +} +``` diff --git a/dev-docs/bidders/adnow.md b/dev-docs/bidders/adnow.md new file mode 100644 index 0000000000..be7944b160 --- /dev/null +++ b/dev-docs/bidders/adnow.md @@ -0,0 +1,17 @@ +--- +layout: bidder +title: AdNow +description: Prebid AdNow Bidder Adaptor +biddercode: adnow +pbjs: true +media_types: native, banner +--- +### Note: +The Example Bidding adapter requires setup before beginning. Please contact us at support@adnow.com + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|------------|----------|------------------------|---------|----------| +| codeId | required | CodeId parameter in AdNow Network | 123456 | number | diff --git a/dev-docs/bidders/adrelevantis.md b/dev-docs/bidders/adrelevantis.md new file mode 100644 index 0000000000..d291678721 --- /dev/null +++ b/dev-docs/bidders/adrelevantis.md @@ -0,0 +1,38 @@ +--- +layout: bidder +title: Adrelevantis +description: Prebid Adrelevantis (adrelevantis.xyz) Bidder Adaptor +biddercode: adrelevantis +media_types: banner, video, native +pbjs: true +--- + +### Note: +This adapter is for displaying ads relevant to page content. Page content is analyzed dynamically in realtime to get its IAB Categories and keywords. The IAB Categories and keywords are sent as First Party Data of the bidder. DSP can, then, bid on the IAB Categories and keywords. You can find more info at (https://adrelevantis.xyz/2020/06/28/content-driven-header-bidding-with-prebid-js/). + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-------------|---------|----------| +| `placementId` | required | Placement id | `234234` | `integer` | +| `cpm` | optional | forces bidder to insert custom cpm bid | 0.50 | `decimal` | + +#### First Party Data +Page content is analyzed at DOMContentLoaded event. The results (keywords and categories) are set as fpd of the bidder prior to requesting bids. + +``` +pbjs.setBidderConfig({ + bidders: ['adrelevantis'], + config: { + fpd: { + context: { + keywords: keywords, + data: { + category: categories + } + } + } + } +}); +``` diff --git a/dev-docs/bidders/adtarget.md b/dev-docs/bidders/adtarget.md index c333225880..083d097c49 100644 --- a/dev-docs/bidders/adtarget.md +++ b/dev-docs/bidders/adtarget.md @@ -15,7 +15,7 @@ pbs: true ### Registration -To use the Adtarget bidder you will need an aid from an exchange account on [https://console.adtarget.com.tr](adtarget.com.tr). For further information, please contact kamil@adtarget.com.tr. +To use the Adtarget bidder you will need an aid from an exchange account on [https://adtarget.com.tr](https://adtarget.com.tr). For further information, please contact kamil@adtarget.com.tr. ### Bid params diff --git a/dev-docs/bidders/amx-rtb.md b/dev-docs/bidders/amx-rtb.md index 5a9dec06bf..15ed4082e2 100644 --- a/dev-docs/bidders/amx-rtb.md +++ b/dev-docs/bidders/amx-rtb.md @@ -6,7 +6,9 @@ hide: true schain_supported: false gdpr_supported: true usp_supported: true -tcf2_supported: false +coppa_supported: true +userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId +tcf2_supported: true biddercode: amx safeframes_ok: true media_types: banner, video @@ -16,10 +18,11 @@ pbjs: true ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------------|----------|--------------------------------------|---------------------------------|----------| -| `testMode` | optional | Activate 100% fill ads | `true` | `boolean`| -| `tagId` | optional | Tag ID | `'cHJlYmlkLm9yZw'` | `string` | +| Name | Scope | Description | Example | Type | +|-------------|----------|-----------------------------------------------------------------|---------------------------------|----------| +| `testMode` | optional | Activate 100% fill ads | `true` | `boolean`| +| `tagId` | optional | Tag ID | `'cHJlYmlkLm9yZw'` | `string` | +| `adUnitId` | optional | Ad Unit ID used in reporting. Will default to `bid.adUnitCode` | `'sticky_banner'` | `string` | ### Test Parameters diff --git a/dev-docs/bidders/apstream.md b/dev-docs/bidders/apstream.md index c9bb869bb1..b7e5bc4cc2 100644 --- a/dev-docs/bidders/apstream.md +++ b/dev-docs/bidders/apstream.md @@ -15,9 +15,29 @@ gvl_id: 394 {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | type | | :----------- | :--------- | :------------ | :----------------- | :--- | -| `publisherId` | required | Publisher Id will be generated on AP Stream. | '1234' | string | +| `publisherId` | optional* | Publisher Id will be generated on AP Stream. | '1234' | string | | `code` | optional | Ad code | 'S1_Leaderboard' | string | | `adunitId` | optional | Ad unit Id | 1234 | integer | | `endpoint` | optional | Endpoint for custom bidder | 'site.com/v1' | string | -| `test` | optional | Use test endpoint | true | boolean | +| `test` | optional* | Use test endpoint | true | boolean | | `sendDsu` | optional | Send DSU to bidder (default `true`) | false | boolean | + +\* see description below + +# + +### Bidder config + +Here parameters `test` and `publisherId` can be set globally, but will be overrided if set in specific bid. + +``` +pbjs.setBidderConfig({ + bidders: ["apstream"], + config: { + appstream: { + publisherId: '1234 + test: true + } + } +}); +``` \ No newline at end of file diff --git a/dev-docs/bidders/bridgewell.md b/dev-docs/bidders/bridgewell.md index b0c8c4fd82..73800508ce 100644 --- a/dev-docs/bidders/bridgewell.md +++ b/dev-docs/bidders/bridgewell.md @@ -4,12 +4,13 @@ title: Bridgewell description: Prebid Bridgewell Bidder Adaptor pbjs: true biddercode: bridgewell -media_types: native +media_types: display, native --- ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------------|----------|---------------------------------|--------------------------------------------|----------| -| `ChannelID` | required | The channel ID from Bridgewell. | `'CgUxMjMzOBIBNiIFcGVubnkqCQisAhD6ARoBOQ'` | `string` | +| Name | Scope | Description | Example | Type | +|-------------|----------|-----------------------------------------|--------------------------------------------|-----------| +| `ChannelID` | required | (deprecated) Should be replaced by cid. | `'CgUxMjMzOBIBNiIFcGVubnkqCQisAhD6ARoBOQ'` | `string` | +| `cid` | required | The channel ID from Bridgewell. | `12345` | `integer` | diff --git a/dev-docs/bidders/brightroll.md b/dev-docs/bidders/brightroll.md index cdf6e0d358..931627b9ed 100644 --- a/dev-docs/bidders/brightroll.md +++ b/dev-docs/bidders/brightroll.md @@ -1,10 +1,16 @@ --- layout: bidder title: Brightroll +description: Prebid Brightroll(Verizon Media) S2S Bidder Adaptor pbs: true -media_types: video +media_types: display, video biddercode: Brightroll prebid_member: true +gdpr_supported: true +tcf2_supported: true +coppa_supported: true +ccpa_supported: true +schain_supported: true --- ### Registration diff --git a/dev-docs/bidders/cointraffic.md b/dev-docs/bidders/cointraffic.md new file mode 100644 index 0000000000..03f3974f41 --- /dev/null +++ b/dev-docs/bidders/cointraffic.md @@ -0,0 +1,15 @@ +--- +layout: bidder +title: Cointraffic +description: Prebid Cointraffic Bidder Adaptor +pbjs: true +biddercode: cointraffic +--- + + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|------------------|---------|----------| +| `placementId` | required | The placement ID (Tracker key) | | `string` | diff --git a/dev-docs/bidders/connectad.md b/dev-docs/bidders/connectad.md index 86d0e0dc1f..cdb2d17e8b 100644 --- a/dev-docs/bidders/connectad.md +++ b/dev-docs/bidders/connectad.md @@ -8,12 +8,17 @@ gdpr_supported: true usp_supported: true coppa_supported: true schain_supported: true -userIds: id5Id, liveIntentId, parrableId, pubCommonId, unifiedId +userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId prebid_member: true +safeframes_ok: true tcf2_supported: true pbjs: true +pbs: true +gvl_id: 138 --- +### Prebid Server Note: +Please reach out to your ConnectAd Account Manager before configuring the S2S adapter for approval and setup. ### Bid Params @@ -22,4 +27,4 @@ pbjs: true |-------------|----------|--------------------------------|---------|-----------| | `siteId` | required | The site ID from ConnectAd. | 12345 | integer | | `networkId` | required | The network ID from ConnectAd. | 10047 | integer | -| `floorprice`| optional | Requested Floorprice | 0.15 | integer | +| `bidfloor` | optional | Requested Floorprice | 0.15 | number | diff --git a/dev-docs/bidders/gjirafa.md b/dev-docs/bidders/gjirafa.md index 168f1a850d..29b25d2cd6 100644 --- a/dev-docs/bidders/gjirafa.md +++ b/dev-docs/bidders/gjirafa.md @@ -1,21 +1,16 @@ - --- layout: bidder title: Gjirafa description: Prebid Gjirafa Bidder Adaptor pbjs: true biddercode: gjirafa -gdpr_supported: true +media_types: banner, video --- -### Note: -The Gjirafa Header Bidding adapter requires to have: placementId param in place OR minCPM and minCPC params. ### Bid Params -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|---------------|----------|------------------------------------------------------------------------------------|----------|----------| -| `placementId` | optional | Your PlacementId (provided by Gjirafa) | `'71-1'` | `string` | -| `minCPM` | optional | The minCPM for units returned by Gjirafa (required if placementId is not provided) | `0.50` | `float` | -| `minCPC` | optional | The minCPC for units returned by Gjirafa (required if placementId is not provided) | `0.50` | `float` | +| Name | Scope | Example | Type | +|---------------|----------|--------------------|-----------| +| `propertyId` | required | `"12345"` | `string` | +| `placementId` | required | `"54321"` | `string` | \ No newline at end of file diff --git a/dev-docs/bidders/gumgum.md b/dev-docs/bidders/gumgum.md index 5ec31ce3f2..4fa35521f5 100644 --- a/dev-docs/bidders/gumgum.md +++ b/dev-docs/bidders/gumgum.md @@ -19,14 +19,25 @@ The GumGum Header Bidding adaptor requires setup and approval from the GumGum team. Please reach out to your account manager or for more information. -### Bid Params +### Server and Client Side Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|----------------|----------|-------------|--------------|-----------| -| `inScreen` | optional | Tracking ID | `'ggumtest'` | `string` | -| `inScreenPubID`| optional | Publisher ID| `123` | `integer` | -| `inSlot` | optional | Slot ID | `9` | `integer` | -| `video` | optional | Tracking ID | `'ggumtest'` | `string` | -| `videoPubID` | optional | Publisher ID| `123` | `integer` | -| `inVideo` | optional | Tracking ID | `'ggumtest'` | `string` | +| Name | Scope | Description | Example | Type | +|----------------|----------|-------------------|------------------------|-----------| +| `zone` | optional | Tracking ID | `'ggumtest'` | `string` | + +# Client Side only Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------------|----------|-------------------|------------------------|-----------| +| `pubId` | optional | Publisher ID | `123` | `integer` | +| `slot` | optional | Slot ID | `9` | `integer` | +| `native` | optional | Native ID | `19` | `integer` | +| `iriscat` | optional | Iris.tv segments | `'segment1,segment2'` | `string` | +| `inScreen` | optional | Tracking ID | `'ggumtest'` | `string` | +| `inScreenPubID`| optional | Publisher ID | `123` | `integer` | +| `inSlot` | optional | Slot ID | `9` | `integer` | +| `video` | optional | Tracking ID | `'ggumtest'` | `string` | +| `videoPubID` | optional | Publisher ID | `123` | `integer` | +| `inVideo` | optional | Tracking ID | `'ggumtest'` | `string` | diff --git a/dev-docs/bidders/indexExchange.md b/dev-docs/bidders/indexExchange.md index c724f18be0..5ed73f868a 100644 --- a/dev-docs/bidders/indexExchange.md +++ b/dev-docs/bidders/indexExchange.md @@ -24,16 +24,18 @@ Maintainer: prebid.support@indexexchange.com ## Description -This module connects publishers to Index Exchange's (IX) network of demand -sources through Prebid.js. This module is GDPR and CCPA compliant. +Publishers may access Index Exchange's (IX) network of demand +sources through our Prebid.js and Prebid Server adapters. Both of these modules are GDPR and CCPA compliant. -It is compatible with both the older ad unit format where the `sizes` and +### IX Prebid.js Adapter + +Our Prebid.js adapter is compatible with both the older ad unit format where the `sizes` and `mediaType` properties are placed at the top-level of the ad unit, and the newer format where this information is encapsulated within the `mediaTypes` object. We recommend that you use the newer format when possible as it will be better able to accommodate new feature additions. -If a mix of properties from both formats are present within an ad unit, the +If a mix of properties from both formats is present within an ad unit, the newer format's properties will take precedence. Here are examples of both formats. @@ -74,7 +76,7 @@ var adUnits = [{ }]; ``` -### Supported Media Types +### Supported Media Types (Prebid.js) {: .table .table-bordered .table-striped } | Type | Support | @@ -83,6 +85,15 @@ var adUnits = [{ | `Video` | Fully supported for all IX approved sizes. | | `Native` | Not supported. | +### Supported Media Types (Prebid Server) + +{: .table .table-bordered .table-striped } +| Type | Support | +| ------ | ------- | +| `Banner` | Fully supported for all IX approved sizes. | +| `Video` | Not supported. | +| `Native` | Not supported. | + ## Bid Parameters Each of the IX-specific parameters provided under the `adUnits[].bids[].params` @@ -322,12 +333,12 @@ gulp build --modules=bidderModules.json ## Setting First Party Data (FPD) -FPD allows you to specify key-value pairs which will be passed as part of the +FPD allows you to specify key-value pairs that are passed as part of the query string to IX for use in Private Marketplace Deals which rely on query string targeting for activation. For example, if a user is viewing a news-related page, you can pass on that information by sending `category=news`. -Then in the IX Private Marketplace setup screens you can create Deals which -activate only on pages which contain `category=news`. Please reach out to your +Then in the IX Private Marketplace setup screens, you can create Deals which +activate only on pages that contain `category=news`. Please reach out to your IX representative if you have any questions or need help setting this up. To include FPD in a bid request, it must be set before `pbjs.requestBids` is @@ -363,13 +374,41 @@ such: ```javascript pbjs.setConfig({ ix: { - timeout: 250 + timeout: 50 } }); ``` The timeout value must be a positive whole number in milliseconds. +## IX Prebid Server Adapter + +Publishers who would like to retrieve IX demand via a Prebid Server instance can do so by adding IX to the list of bidders for a Prebid Server bid request, with a valid site ID. For example: + +```javascript +"imp": [ + { + "id": "test2", + "banner": { + "format": [ + { + "w": 300, + "h": 600 + } + ] + }, + "ext": { + "ix": { + "siteId": "12345" + } + } + } +] +``` + +### Important Prebid Server Note +Any party operating their own hosted Prebid Server instances must reach out to IX (prebid.support@indexexchange.com) to receive approval and customized setup instructions. Please do not send Prebid Server requests without first contacting us -- you will not receive bid responses. + ## Additional Information ### Bid Request Limit @@ -402,9 +441,9 @@ unit we require the size to be explicitly stated. 2. An ad unit may have sizes that IX does not support. By explicitly stating the size, you can choose not to have IX bid on certain sizes that are invalid. -### How do I view IX's bid request in the network? +### How can I view the bid request sent to IX by Prebid.js? In your browser of choice, create a new tab and open the developer tools. In developer tools, select the network tab. Then, navigate to a page where IX is -setup to bid. Now, in the network tab, search for requests to +set up to bid. Now, in the network tab, search for requests to `casalemedia.com/cygnus`. These are the bid requests. diff --git a/dev-docs/bidders/inmobi.md b/dev-docs/bidders/inmobi.md new file mode 100644 index 0000000000..6c6a6ce60f --- /dev/null +++ b/dev-docs/bidders/inmobi.md @@ -0,0 +1,25 @@ +--- +layout: bidder +title: InMobi +description: InMobi Bidder Adapter +biddercode: inmobi +gdpr_supported: true +tcf2_supported: true +usp_supported: true +gvl_id: 333 +coppa_supported: true +media_types: banner, video +pbs: true +--- + +### Note: + +The InMobi Prebid adapter requires a setup to create placement IDs. Please contact your InMobi partner manager for setup assistance. +For queries, write to us at prebid-support@inmobi.com + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------|-----------|-----------| +| `plc` | required | Placement ID | `'1234'` | `string` | diff --git a/dev-docs/bidders/invibes.md b/dev-docs/bidders/invibes.md index ac767ce7e9..f55b190ea5 100644 --- a/dev-docs/bidders/invibes.md +++ b/dev-docs/bidders/invibes.md @@ -12,7 +12,10 @@ pbs: true ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-----------------|----------|--------------------------|--------------|----------| -| `placementId` | required | The Invibes placement ID | `'1234567'` | `string` | -| `adContainerId` | optional | Id of ad container | `'test-div'` | `string` | +| Name | Scope | Description | Example | Type | +|-----------------|----------|--------------------------------------|-------------------------------------------------|----------| +| `placementId` | required | The Invibes placement ID | `'1234567'` | `string` | +| `adContainerId` | optional | Id of ad container (only prebid js) | `'test-div'` | `string` | +| `domainId` | optional | Id of domain (only prebid server) | `1001` | `integer`| +| `debug` | optional | Debug paramentes (only prebid server)| `{ "testBvid": "1234", "testLog": true }` | `object` | + diff --git a/dev-docs/bidders/jixie.md b/dev-docs/bidders/jixie.md new file mode 100644 index 0000000000..c3bfec8ea2 --- /dev/null +++ b/dev-docs/bidders/jixie.md @@ -0,0 +1,22 @@ +--- +layout: bidder +title: Jixie +description: Prebid Jixie Bidder Adaptor +pbjs: true +pbs: true +biddercode: jixie +bidder_supports_deals: false +media_types: banner, video +gdpr_supported: false +--- + +### Registration + +To use this bidder you will need an account and a valid unit from us. For further information, please contact contact@jixie.io + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------------|----------|----------------------------------------------------------------------------------------------------------------------|-----------------------------------------------|------------| +| `unit` | required | The unit from jixie Digital. | `1000012-VyuoGmDF0A` | `string` | diff --git a/dev-docs/bidders/logicad.md b/dev-docs/bidders/logicad.md index e1e3733c0c..aca7dee243 100644 --- a/dev-docs/bidders/logicad.md +++ b/dev-docs/bidders/logicad.md @@ -6,7 +6,7 @@ pbjs: true pbs: true biddercode: logicad bidder_supports_deals: false -media_types: banner +media_types: banner, native gdpr_supported: false prebid_member: false --- diff --git a/dev-docs/bidders/malltv.md b/dev-docs/bidders/malltv.md new file mode 100644 index 0000000000..8b6562dd6c --- /dev/null +++ b/dev-docs/bidders/malltv.md @@ -0,0 +1,16 @@ +--- +layout: bidder +title: MallTv +description: Prebid MallTv Bidder Adaptor + +biddercode: malltv +media_types: banner, video +--- + + +### Bid Params + +| Name | Scope | Example | Type | +|---------------|----------|--------------------|-----------| +| `propertyId` | required | `"12345"` | `string` | +| `placementId` | required | `"54321"` | `string` | \ No newline at end of file diff --git a/dev-docs/bidders/medianet.md b/dev-docs/bidders/medianet.md index 063f9ed4cb..aae788d2ba 100644 --- a/dev-docs/bidders/medianet.md +++ b/dev-docs/bidders/medianet.md @@ -11,6 +11,7 @@ prebid_member: true tcf2_supported: true pbjs: true gvl_id: 142 +schain_supported: true --- ### Bid Params diff --git a/dev-docs/bidders/nobidBidAdapter.md b/dev-docs/bidders/nobidBidAdapter.md index e4142d674e..245f99075b 100644 --- a/dev-docs/bidders/nobidBidAdapter.md +++ b/dev-docs/bidders/nobidBidAdapter.md @@ -9,6 +9,7 @@ gdpr_supported: true usp_supported: true schain_supported: true coppa_supported: true +tcf2_supported: true --- ### Bid Params diff --git a/dev-docs/bidders/pubx.md b/dev-docs/bidders/pubx.md new file mode 100644 index 0000000000..e734c91ed6 --- /dev/null +++ b/dev-docs/bidders/pubx.md @@ -0,0 +1,20 @@ +--- +layout: bidder +title: Pub-X +description: Prebid Pub-X Bidder Adapter +biddercode: pubx +media_types: banner +gdpr_supported: false +coppa_supported: false +usp_supported: false +schain_supported: true +pbjs: true +--- + + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------|----------|---------------------------|----------|----------| +| `sid` | required | The AdUnit ID from Pub-X | `'eDMR'` | `string` | diff --git a/dev-docs/bidders/quantumdex.md b/dev-docs/bidders/quantumdex.md index 74fd2fa625..4e8ae33dac 100644 --- a/dev-docs/bidders/quantumdex.md +++ b/dev-docs/bidders/quantumdex.md @@ -6,6 +6,7 @@ pbjs: true biddercode: quantumdex media_types: banner, video gdpr_supported: true +tcf2_supported: true schain_supported: true usp_supported: true --- diff --git a/dev-docs/bidders/rubicon.md b/dev-docs/bidders/rubicon.md index 7ce7e46a0f..9445015b89 100644 --- a/dev-docs/bidders/rubicon.md +++ b/dev-docs/bidders/rubicon.md @@ -51,7 +51,7 @@ The following video parameters are supported: |----------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|-----------| | `playerWidth` | optional | Video player width in pixels. If not specified, takes width set in mediaTypes.video.playerSize | `'640'` | `string` | | `playerHeight` | optional | Video player height in pixels. If not specified, takes height set in mediaTypes.video.playerSize | `'360'` | `string` | -| `size_id` | optional | Integer indicating the Rubicon Project video ad format ID. If not set, infers from mediaTypes.video.context | `201` | `integer` | +| `size_id` | optional for Prebid.js, required for Prebid Server | Integer indicating the Rubicon Project video ad format ID. If not set, Prebid.js can infer from mediaTypes.video.context | `201` | `integer` | | `language` | recommended | Indicates the language of the content video, in ISO 639-1/alpha2. Highly recommended for successful monetization for pre-, mid-, and post-roll video ads. Not applicable for interstitial and outstream. | `'en'` | `string` | {: .alert.alert-warning :} diff --git a/dev-docs/bidders/smaato.md b/dev-docs/bidders/smaato.md index 57ab2aa655..eb1ad9b442 100644 --- a/dev-docs/bidders/smaato.md +++ b/dev-docs/bidders/smaato.md @@ -2,9 +2,9 @@ layout: bidder title: Smaato description: Prebid Smaato Bidder Adaptor -hide: true biddercode: smaato gdpr_supported: true +tcf2_supported: true usp_supported: true coppa_supported: true media_types: banner, video @@ -12,10 +12,18 @@ pbjs: true pbs: true --- +### Table of Contents + +- [Bid Params](#smaato-bid-params) +- [App Object](#smaato-app-object) +- [First Party Data](#smaato-first-party) + ### Registration The Smaato adapter requires setup and approval from the Smaato team, even for existing Smaato publishers. Please reach out to your account team or prebid@smaato.com for more information. + + ### Bid Params {: .table .table-bordered .table-striped } @@ -23,6 +31,20 @@ The Smaato adapter requires setup and approval from the Smaato team, even for ex |------------|----------|----------------------|------------|----------| | `publisherId` | required | Your Smaato publisher id | `'1100012345'` | `string` | | `adspaceId` | required | Your Smaato adspace id | `'11002234'` | `string` | +| `app` | optional | Object containing mobile app parameters. See the [App Object](#smaato-app-object) for details.| `app : { ifa: '56700000-9cf0-22bd-b23e-46b96e40003a'}` | `object` | + + + +#### App Object + +Smaato supports using prebid within a mobile app's webview. + +{: .table .table-bordered .table-striped } +| Name | Description | Example | Type | +|-------------------|---------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------|------------------| +| `ifa` | String that contains the advertising identifier of the user (e.g. idfa or aaid). | `'56700000-9cf0-22bd-b23e-46b96e40003a'` | `string` | +| `geo` | Object that contains the latitude (`lat`) and longitude (`lon`) of the user. | `{ lat: 33.3, lon: -88.8 }` | `object` | + ### Example Banner Ad Unit @@ -74,6 +96,9 @@ var adUnit = { }] }; ``` + + +### First Party Data The Smaato adapter supports passing through first party data configured in your prebid integration. @@ -98,7 +123,7 @@ Following example includes sample `imp` object with publisherId and adSlot which ``` "imp":[ { - "id":“1C86242D-9535-47D6-9576-7B1FE87F282C, + "id":"1C86242D-9535-47D6-9576-7B1FE87F282C", "banner":{ "format":[ { diff --git a/dev-docs/bidders/spotx.md b/dev-docs/bidders/spotx.md index bd851989a7..1578cecd18 100644 --- a/dev-docs/bidders/spotx.md +++ b/dev-docs/bidders/spotx.md @@ -29,11 +29,13 @@ gvl_id: 165 | `ad_volume` | optional | Value between 0 and 1 to denote the volume the ad should start at | `0.7` | `float` | | `price_floor` | optional | Set the current channel price floor in real time. | `10` | `integer` | | `hide_skin` | optional | Set to true to hide the SpotX skin | | `boolean` | -| `custom` | optional | An object containing key-value pairs for reporting. See SpotX documentation [here](https://developer.spotxchange.com/content/local/docs/sdkDocs/DirectSdk/README.md#custom-property-for-key-value-pair-reporting) | | `object` | +| `custom` | optional | An object containing key-value pairs for reporting. See SpotX documentation [here](https://developer.spotxchange.com/content/local/docs/sdkDocs/DirectSdk/dsdk-custom-configs.md#custom-key-value-pair-reporting) | | `object` | | `min_duration` | optional | Minimum video ad duration in seconds | | `integer` | | `max_duration` | optional | Maximum video ad duration in seconds | | `integer` | -| `placement_type` | optional | Number corresponding to the type of ad placement. See SpotX documentation [here](https://developer.spotxchange.com/content/local/docs/sdkDocs/EASI/README.md) | | `integer` | -| `position` | optional | Number corresponding to the position of the ad. See SpotX documentation [here](https://developer.spotxchange.com/content/local/docs/sdkDocs/EASI/README.md) | | `integer` | +| `placement_type` | optional | Number corresponding to the type of ad placement. See SpotX documentation [here](https://developer.spotxchange.com/content/local/docs/sdkDocs/EASI/easi-integration.md#common-javascript-attributes) | | `integer` | +| `position` | optional | Number corresponding to the position of the ad. See SpotX documentation [here](https://developer.spotxchange.com/content/local/docs/sdkDocs/EASI/easi-integration.md#common-javascript-attributes) | | `integer` | +| `page` | optional | The URL of the page the ad is being displayed on. Used to override the detected referrer if necessary | `'https://www.spotx.tv'` | `string` | + @@ -46,4 +48,4 @@ gvl_id: 165 | `ad_mute` | optional | Set to true to start the ad with the volume muted. | `true` | `boolean` | | `playersize_auto_adapt` | optional | Set to true to make video auto-adapt to the ad's dimensions | `true` | `boolean` | | `in_iframe` | optional | ID of iFrame element to insert EASI script tag. | `'iframe1'` | `string` | -| `custom_override` | optional | Object of script tag attributes to override from the list here: [EASI Attributes](https://developer.spotxchange.com/content/local/docs/sdkDocs/EASI/README.md#common-javascript-attributes). (Note: Exclude `data-spotx_` from attribute name; `channel_id`, `vast_url`, `content_page_url`, and `ad_unit` overrides are ignored.) | `{content_height: 300, content_width: 400}` | `object` | +| `custom_override` | optional | Object of script tag attributes to override from the list here: [EASI Attributes](https://developer.spotxchange.com/content/local/docs/sdkDocs/EASI/easi-integration.md#common-javascript-attributes). (Note: Exclude `data-spotx_` from attribute name; `channel_id`, `vast_url`, `content_page_url`, and `ad_unit` overrides are ignored.) | `{content_height: 300, content_width: 400}` | `object` | diff --git a/dev-docs/bidders/sublime.md b/dev-docs/bidders/sublime.md index c424fd1acf..2d323bed41 100644 --- a/dev-docs/bidders/sublime.md +++ b/dev-docs/bidders/sublime.md @@ -5,12 +5,13 @@ description: Prebid Sublime Bidder Adapter pbjs: true biddercode: sublime gdpr_supported: true +tcf2_supported: true gvl_id: 114 --- ### Note -Please contact us your account manager before using this adapter. +Please contact your Sublime account manager before using this adapter. ### Bid params @@ -19,3 +20,4 @@ Please contact us your account manager before using this adapter. | Name | Scope | Description | Example | Type | |------------|----------|------------------------------|------------|----------| | `zoneId` | required | Sublime's publisher zone id | `123` | `integer`| +| `notifyId` | required | Sublime's publisher notify id | `'foo'` | `string` | diff --git a/dev-docs/bidders/valueimpression.md b/dev-docs/bidders/valueimpression.md index d855981600..b8b8d25e11 100644 --- a/dev-docs/bidders/valueimpression.md +++ b/dev-docs/bidders/valueimpression.md @@ -2,10 +2,12 @@ layout: bidder title: Valueimpression description: Prebid Valueimpression Bidder Adapter +pbjs: true biddercode: valueimpression aliasCode: quantumdex media_types: banner, video gdpr_supported: true +tcf2_supported: true schain_supported: true usp_supported: true pbs: true diff --git a/dev-docs/bidders/waardex b/dev-docs/bidders/waardexak.md similarity index 100% rename from dev-docs/bidders/waardex rename to dev-docs/bidders/waardexak.md diff --git a/dev-docs/bidders/welect.md b/dev-docs/bidders/welect.md index 7e97bdf5cb..54d4a82c51 100644 --- a/dev-docs/bidders/welect.md +++ b/dev-docs/bidders/welect.md @@ -4,7 +4,8 @@ title: Welect description: Prebid Welect Bidder Adapter biddercode: welect media_types: no-display, video -gdpr_supported: true +tcf2_supported: true +gvlid: 282 pbjs: true --- diff --git a/dev-docs/bidders/yieldlab.md b/dev-docs/bidders/yieldlab.md index 5b7054f253..6414721b06 100644 --- a/dev-docs/bidders/yieldlab.md +++ b/dev-docs/bidders/yieldlab.md @@ -6,6 +6,7 @@ biddercode: yieldlab media_types: video gdpr_supported: true tcf2_supported: true +schain_supported: true userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId prebid_member: true pbjs: true diff --git a/dev-docs/cmp-best-practices.md b/dev-docs/cmp-best-practices.md index 6a4d0de35b..c6c6ba8bff 100644 --- a/dev-docs/cmp-best-practices.md +++ b/dev-docs/cmp-best-practices.md @@ -29,6 +29,7 @@ Instead, here are some general guidelines: - You can't just automatically turn on the GDPR Enforcement Module when not in GDPR scope. - You need to understand how your CMP works, how you want to handle the "first page" scenario where the user hasn't yet had time to answer CMP questions, and how your site is laid out geographically. +- We recommend that the page first load a CMP stub synchronously, then asynchronously load the CMP code and the Prebid code ## The Role & Relations of the CMP/TCF gdprApplies and Prebid gdpr.defaultGdprScope diff --git a/dev-docs/faq.md b/dev-docs/faq.md index fdbd0277f5..17c4ed7e1f 100644 --- a/dev-docs/faq.md +++ b/dev-docs/faq.md @@ -22,7 +22,7 @@ Nope. The only approval process is a code review. There are separate instruction - [adding a bidder in Prebid.js](/dev-docs/bidder-adaptor.html) - [adding an analytics adapter in Prebid.js](/dev-docs/integrate-with-the-prebid-analytics-api.html) -As for [membership](/partners/partners.html) in Prebid.org, that's entirely optional -- we'd be happy to have you join and participate in the various committees, +As for [membership](https://prebid.org/membership/) in Prebid.org, that's entirely optional -- we'd be happy to have you join and participate in the various committees, but it's not necessary for contributing code as a community member. ## When starting out, what should my timeouts be? diff --git a/dev-docs/integrate-with-the-prebid-analytics-api.md b/dev-docs/integrate-with-the-prebid-analytics-api.md index 2eafcb6079..318e389f98 100644 --- a/dev-docs/integrate-with-the-prebid-analytics-api.md +++ b/dev-docs/integrate-with-the-prebid-analytics-api.md @@ -169,9 +169,10 @@ st of other analytics adapters. ### Step 6: Wait for Prebid volunteers to review -We sometimes get pretty busy, so it can take a couple of weeks for the review process to complete, so while you're waiting, consider [joining Prebid.org](/partners/partners.html) to help us out with code reviews. (!) +We sometimes get pretty busy, so it can take a couple of weeks for the review process to complete, so while you're waiting, consider [joining Prebid.org](https://prebid.org/membership/) to help us out with code reviews. (!) ## Further Reading - [Analytics for Prebid](/overview/analytics.html) (Overview and list of analytics providers) - [Module Rules](/dev-docs/module-rules.html) +- [Instream Video Ads Tracking](/dev-docs/modules/instreamTracking.html) diff --git a/dev-docs/modules/floors.md b/dev-docs/modules/floors.md index ddb7119d5d..498ce08abf 100644 --- a/dev-docs/modules/floors.md +++ b/dev-docs/modules/floors.md @@ -1145,3 +1145,11 @@ Below is a chart explaining the behavior of currency conversion, if necessary, w | USD | Undefined (currency module possibly not included) | EUR | Bid.cpm is converted to EUR then compared with floor. Bid.cpm is compared to floor. If bid meets or exceeds the floor, bid.originalCpm is sent to the ad server. | If the currency function is unable to derive the correct cpm in any of the scenarios above where a conversion is needed, then the associated bidResponse will just pass through into the auction as if a matching floor was not found. + + +## Floors Providers + +{: .table } +| Partners| Contact | +| | Contact Magnite (Formerly Rubicon Project) support at [globalsupport@mangite.com](mailto:globalsupport@magnite.com) to use Magnite as a floor provider. | +| pubx.ai | Reach out to PubX at [hello@pubx.ai](mailto:hello@pubx.ai) to learn more about our AI-powered dynamic floor optimization. | \ No newline at end of file diff --git a/dev-docs/modules/index.md b/dev-docs/modules/index.md index c7731e994a..dd5b4bf164 100644 --- a/dev-docs/modules/index.md +++ b/dev-docs/modules/index.md @@ -31,7 +31,7 @@ If you are looking for bidder adapter parameters, see [Bidders' Params]({{site.b | Module | Description | |---------------------+--------------| | [**Currency**](/dev-docs/modules/currency.html) | Converts bid currency into ad server currency based on data in a supplied exchange rate file. | -| **ConsentManagement** | Collecting and passing consent information in support of privacy regulations:{::nomarkdown}{:/} | +| **ConsentManagement** | Collecting and passing consent information in support of privacy regulations:{::nomarkdown}{:/} See [CMP Best Practices.](/dev-docs/cmp-best-practices.html) | | [**Google Ad Manager Express**](/dev-docs/modules/dfp_express.html) | A simplified installation mechanism for publishers that have Google Publisher Tag (GPT) ad calls in their pages. | | [**Supply Chain Object**](/dev-docs/modules/schain.html) | Validates and makes the Supply Object available to bidders | | [**User ID**](/dev-docs/modules/userId.html) | Sub-modules are available to support a range of identification approaches: Criteo RTUS, DigiTrust, ID5 Universal ID, IdentityLink, PubCommon ID, Unified ID and LiveIntent ID. | @@ -49,6 +49,7 @@ If you are looking for bidder adapter parameters, see [Bidders' Params]({{site.b | [**Freewheel**](/dev-docs/modules/freewheel.html) | Passes key value targeting to Freewheel SDK | | [**Google Ad Manager Video**](/dev-docs/modules/dfp_video.html) | Required for serving instream video through Google Ad Manager. | | [**IAB Category Translation**](/dev-docs/modules/categoryTranslation.html) | Converts IAB sub category to Ad server category for long-form videos. | +| [**Instream Video Ads Tracking**](/dev-docs/modules/instreamTracking.html) | Allow Analytics Adapters and Bid Adapters to track `BID_WON` events for Instream video bids. | | [**Konduit Accelerate**](/dev-docs/modules/konduit.html) | Provides Real Time Start Rate Performance per Bidder. | ## Testing and Debug Modules diff --git a/dev-docs/modules/instreamTracking.md b/dev-docs/modules/instreamTracking.md new file mode 100644 index 0000000000..ebace0a08d --- /dev/null +++ b/dev-docs/modules/instreamTracking.md @@ -0,0 +1,83 @@ +--- +layout: page_v2 +page_type: module +title: Module - Instream Video Ads Tracking +description: Allows to track `BID WON` events for instream ad units +module_code : instreamTracking +display_name : Instream Tracking +enable_download : true +sidebarType : 1 +--- + +# Instream Video Ads Tracking +{:.no_toc} + +* TOC +{:toc} + +## Overview + +Instream tracking module allows Analytics Adapters and Bid Adapters to track `BID_WON` events for Instream video bids. + +{: .alert.alert-warning :} +This module uses `window.getEntriesByType('resource')` to check the presence of Video Cache URL. + +## Configuration + +{: .table .table-bordered .table-striped } +| Field | Scope | Type | Description | +|----------+---------+--------+---------------------------------------------------------------------------------------| +| `instreamTracking` | Required | Object | Configuration object for instream tracking | +| `instreamTracking.enabled` | Required | Boolean | Enable/disable the instream tracking feature. Default: `false`. | +| `instreamTracking.maxWindow` | Optional | Integer | The time in ms after which polling for instream delivery stops. Default: `60000` i.e. 60 seconds | +| `instreamTracking.pollingFreq` | Optional | Integer |The frequency of polling. Default: `500`ms | +| `instreamTracking.urlPattern` | Optional | RegExp | Regex for cache url patterns, to avoid false positives. | + +#### Basic Example +{% highlight js %} +pbjs.setConfig({ + 'instreamTracking': { + enabled: true, + } +}); +{% endhighlight %} + +#### Example with urlPattern + +While checking for URLs having `videoCacheKey`, there are chances of false positives. To avoid those cases, we can set `instreamTracking.urlPattern: /REGEX_PATTERN/`. + +{% highlight js %} +pbjs.setConfig({ + 'instreamTracking': { + enabled: true, + urlPattern: /(prebid\.adnxs\.com\/pbc\/v1\/cache\.*)|(search\.spotxchange\.com\/ad\/vast\.html\?key=\.*)/ + } +}); +{% endhighlight %} + +## Intergation + +To install the module, follow these instructions: + +#### Step 1: Prepare the base Prebid file + +- Option 1: Use Prebid [Download](/download.html) page to build the prebid package. Ensure that you do check *Instream Tracking* module + +- Option 2: From the command line, run `gulp build --modules=instreamTracking,...` + +#### Step 2: Set configuration + +Enable `instreamTracking` using `pbjs.setConfig` + +{% highlight js %} +pbjs.setConfig({ + 'instreamTracking': { + enabled: true, + } +}); +{% endhighlight %} + +## Further Reading +​ +[Prebid.js for Video]({{site.baseurl}}/prebid-video/video-overview.html) +[Client-side Caching of VAST XML]({{site.baseurl}}/dev-docs/publisher-api-reference.html#setConfig-vast-cache) diff --git a/dev-docs/modules/userId.md b/dev-docs/modules/userId.md index 2a95b4c3f5..8624cca848 100644 --- a/dev-docs/modules/userId.md +++ b/dev-docs/modules/userId.md @@ -17,20 +17,7 @@ sidebarType : 1 ## Overview -The User ID module supports multiple ways of establishing pseudonymous IDs for users, which is an important way of increasing the value of header bidding. Instead of having several exchanges sync IDs with dozens of demand sources, a publisher can choose to integrate with one of these ID schemes: - -* **BritePool ID** - Britepool Identity Resolution userId submodule. Universal Identity resolution which does not depend on 3rd party cookies. -* **Criteo ID for Exchanges** – specific id for Criteo and its partners that enables optimal take rate on all web browsers. -* **ID+** - a universal identity solution that aims to empower the marketing ecosystem with a privacy-compliant mechanism to overcome identity resolution challenges arising from ID fragmentation, cookie restrictions, and increasingly stringent privacy and security regulation. Powered by zeotap and built upon the extensive marketing identity graph, ID+ offers a solution for the future of marketing. -* **ID5 Universal ID** - a neutral identifier for digital advertising that can be used by publishers, brands and ad tech platforms (SSPs, DSPs, DMPs, Data Providers, etc.) to eliminate the need for cookie matching. -* **Identity Link** – provided by LiveRamp, this module calls out to the ATS (Authenticated Traffic Solution) library or a URL to obtain the user’s IdentityLink envelope. -* **IntentIQ ID** – An identity resolution pioneer, Intent IQ enables its partners to confidently identify clients and prospects who interact with their sites, apps and their brick and mortar establishments, whether across their various screens or in person. -* **LiveIntent ID** – a user identifier tied to an active, encrypted email in our graph and functions in cookie-challenged environments and browsers. -* **Lotame Panorama ID** - a people-based identifier available across all browsers -- including when third-party cookies are not available -- to connect and activate first, second, and third party data for programmatic advertising. -* **Parrable ID** - an encrypted pseudonymous ID that is consistent across all browsers and webviews on a device for every publisher the device visits. This module contacts Parrable to obtain the Parrable EID belonging to the specific device which can then be used by the bidder. -* **PubCommon ID** – an ID is generated on the user’s browser and stored for later use on this publisher’s domain. -* **Unified ID** – a simple cross-vendor approach – it calls out to a URL that responds with that user’s ID in one or more ID spaces (e.g. adsrvr.org). -* **netID** – provides an open, standardized, EU-GDPR compliant, IAB TCF aware, cross-device enabled Advertising Identifier Framework, which can be leveraged by publishers and advertisers (and vendors supporting them) to efficiently deliver targeted advertising bought through programmatic systems. +The User ID module supports multiple ways of establishing pseudonymous IDs for users, which is an important way of increasing the value of header bidding. Instead of having several exchanges sync IDs with dozens of demand sources, a publisher can choose to integrate with any of a number of ID schemes. ## How It Works @@ -71,7 +58,7 @@ of sub-objects. The table below has the options that are common across ID system {: .table .table-bordered .table-striped } | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | -| name | Required | String | May be: `"britepoolId"`, `"criteo"`, `"id5id"`, `identityLink`, `"intentIqId"`, `"liveIntentId"`, `"lotamePanoramaId"`, `"parrableId"`, `"netId"`, `"pubCommonId"`, `"unifiedId"`, `"zeotapIdPlus"` | `"unifiedId"` | +| name | Required | String | May be: `"britepoolId"`, `"criteo"`, `"haloId"`, `"id5id"`, `identityLink`, `"intentIqId"`, `"liveIntentId"`, `"lotamePanoramaId"`, `"merkleId"`, `"netId"`, `"parrableId"`, `"quantcastId"`, `"pubCommonId"`, `"pubProvidedId"`, `"sharedId"`, `"unifiedId"`, `"zeotapIdPlus"` | `"unifiedId"` | | params | Based on User ID sub-module | Object | | | | storage | Optional | Object | The publisher can specify some kind of local storage in which to store the results of the call to get the user ID. This can be either cookie or HTML5 storage. This is not needed when `value` is specified or the ID system is managing its own storage | | | storage.type | Required | String | Must be either `"cookie"` or `"html5"`. This is where the results of the user ID will be stored. | `"cookie"` | @@ -166,6 +153,40 @@ pbjs.setConfig({ }); {% endhighlight %} +### Halo ID from Audigent + +Audigent is a next-generation data management platform and a first-of-a-kind "data agency" containing some of the most exclusive content-consuming audiences across desktop, mobile and social platforms. Our HaloId module allows for user id resolution and Audigent user data segmentation to be retrieved for users across the web. For assistance setting up your module please contact us at [prebid@audigent.com](prebid@audigent.com). + +#### HaloId Configuration +Add the Halo ID system to your Prebid.js package with: + +{: .alert.alert-info :} +gulp build --modules=userId,haloIdSystem + +Add HaloId to the userSync configuration. + +``` +pbjs.setConfig({ + userSync: { + userIds: [{ + name: 'haloId', + storage: { + name: 'haloId', + type: 'html5' + } + }] + } +}); +``` + +The `request.userId.haloId` will contain the Audigent HaloId and associated segments: +``` +{ + "haloId": "user-halo-id", + "auSeg": ["segment1", "segment2"] +} +``` + ### ID+ ID+, powered by zeotap, enables the marketing ecosystem to overcome challenges posed by the demise of identifiers and a fast-changing regulatory landscape. ID+ is an open invitation to the entire industry to build the future of identity together. @@ -359,6 +380,8 @@ The IntentIQ ID privacy is covered under the [IntentIQ Privacy Policy](https://w | name | Required | String | `"intentIqId"` | `"intentIqId"` | | params | Required for IntentIqId | Object | Details for IntentIqId initialization. | | | params.partner | Required | String | This is the partner ID value obtained from registering with IntentIQ. | `"1177538"` | +| params.pcid | Optional | String | This is the partner cookie ID, it is a dynamic value attached to the request. | `"g3hC52b"` | +| params.pai | Optional | String | This is the partner customer ID / advertiser ID, it is a dynamic value attached to the request. | `"advertiser1"` | #### IntentIQ ID Examples @@ -405,6 +428,30 @@ pbjs.setConfig({ }); {% endhighlight %} + +3) Publisher supports IntentIQ and HTML5 local storage with extra dynamic params such as 'pcid' and 'pai'. + +{% highlight javascript %} +pbjs.setConfig({ + userSync: { + userIds: [{ + name: "intentIqId", + params: { + parnter: 123456 // valid partner id + pcid: PCID_VARIABLE // string value, dynamically loaded into a variable before setting the configuration + pai: PAI_VARIABLE // string value, dynamically loaded into a variable before setting the configuration + }, + storage: { + type: "html5", + name: "intentIqId", // set localstorage with this name + expires: 60 + } + }], + syncDelay: 3000 + } +}); +{% endhighlight %} + ### LiveIntent ID LiveIntent offers audience resolution by leveraging our next-generation identity solutions. The LiveIntent identity graph is built around a people-based set of data that is authenticated daily through active engagements with email newsletters and media across the web. The LiveIntent ID is a user identifier tied to an active, encrypted email in our graph and functions in cookie-challenged environments and browsers. @@ -539,59 +586,87 @@ pbjs.setConfig({ }) ``` -### netID +### Lotame Panorama ID -The [European netID Foundation (EnID)](https://developerzone.netid.de/index.html) aims to establish with the netID an independent European alternative in the digital market for Demand and Supply side. With the netID Single-Sign-On, the EnID established an open standard for consumer logins for services of Buyers and Brands, that also includes user-centric consent management capabilities that results in a standardized, EU-GDPR compliant, IAB TCF aware, cross-device enabled Advertising Identifier, which can be leveraged by publishers and advertisers (and vendors supporting them) to efficiently deliver targeted advertising through programmatic systems to already more than 38 million Europeans on mobile and desktop devices. +Lotame Panorama is a suite of data-enrichment solutions for digital advertising that empowers marketers, agencies, publishers and media companies to transform consumer personas into addressable audiences. At the heart of Lotame Panorama is the Panorama ID, a people-based identifier powered by deterministic and probabilistic data, available across the cookie-challenged web and all browsers. -The EnID is a non-profit organization which is open to any contributing party on both, the demand and supply side to make identity work for consumers as well as the advertising ecosystem. +The Lotame privacy policy is at [https://www.lotame.com/about-lotame/privacy/](https://www.lotame.com/about-lotame/privacy/). -#### netID Examples +Add it to your Prebid.js package with: -1) Publisher stores netID via his own logic +{: .alert.alert-info :} +gulp build --modules=lotamePanoramaId + +#### Lotame Panorama ID Configuration + +The Lotame Panorama ID module does not require any configuration parameters. It should work as-is provided that bidders use it in their adapters. + +{: .alert.alert-info :} +NOTE: For optimal performance, the Lotame Panorama Id module should be called at every opportunity. It is best not to use `params.storage` with this module as the module has its own optimal caching mechanism. + +#### Lotame Panorama ID Example {% highlight javascript %} pbjs.setConfig({ userSync: { userIds: [{ - name: "netId", - value: { - "netId":"fH5A3n2O8_CZZyPoJVD-eabc6ECb7jhxCicsds7qSg" - } + name: "lotamePanoramaId", }] } }); {% endhighlight %} -### Lotame Panorama ID +### Merkle ID -Lotame Panorama is a suite of data-enrichment solutions for digital advertising that empowers marketers, agencies, publishers and media companies to transform consumer personas into addressable audiences. At the heart of Lotame Panorama is the Panorama ID, a people-based identifier powered by deterministic and probabilistic data, available across the cookie-challenged web and all browsers. +[Merkury by Merkle](https://merkury.merkleinc.com/contact) enables marketers, media owners, and publishers to own, build, and control a cookie-less Private Identity Graph. Merkury uses an organization’s first-party CRM data and valuable interactions such as logins, outbound email campaigns and media reach to create and grow a universe of person-based IDs for cross-channel targeting, personalization, measurement and more. -The Lotame privacy policy is at [https://www.lotame.com/about-lotame/privacy/](https://www.lotame.com/about-lotame/privacy/). +#### Merkury by Merkle ID Examples -Add it to your Prebid.js package with: +Publisher stores Merkury by Merkle in local storage for 30 days -{: .alert.alert-info :} -gulp build --modules=lotamePanoramaId +{% highlight javascript %} +pbjs.setConfig({ + userSync: { + userIds: [{ + name: 'merkleId', + params: { + ptk: 'example', + pubid: 'EXAMPLE' + }, + storage: { + type: 'html5', + name: 'merkleId', + expires: 30 + } + }] + } +}); +{% endhighlight %} -#### Lotame Panorama ID Configuration +### netID -The Lotame Panorama ID module does not require any configuration parameters. It should work as-is provided that bidders use it in their adapters. +The [European netID Foundation (EnID)](https://developerzone.netid.de/index.html) aims to establish with the netID an independent European alternative in the digital market for Demand and Supply side. With the netID Single-Sign-On, the EnID established an open standard for consumer logins for services of Buyers and Brands, that also includes user-centric consent management capabilities that results in a standardized, EU-GDPR compliant, IAB TCF aware, cross-device enabled Advertising Identifier, which can be leveraged by publishers and advertisers (and vendors supporting them) to efficiently deliver targeted advertising through programmatic systems to already more than 38 million Europeans on mobile and desktop devices. -{: .alert.alert-info :} -NOTE: For optimal performance, the Lotame Panorama Id module should be called at every opportunity. It is best not to use `params.storage` with this module as the module has its own optimal caching mechanism. +The EnID is a non-profit organization which is open to any contributing party on both, the demand and supply side to make identity work for consumers as well as the advertising ecosystem. -#### Lotame Panorama ID Example +#### netID Examples + +1) Publisher stores netID via his own logic {% highlight javascript %} pbjs.setConfig({ userSync: { userIds: [{ - name: "lotamePanoramaId", + name: "netId", + value: { + "netId":"fH5A3n2O8_CZZyPoJVD-eabc6ECb7jhxCicsds7qSg" + } }] } }); {% endhighlight %} + ### Parrable ID The Parrable ID is a Full Device Identifier that can be used to identify a device across different browsers and webviews on a single device including browsers that have third party cookie restrictions. @@ -715,9 +790,111 @@ pbjs.setConfig({ }); {% endhighlight %} +### PubProvided ID + +The PubProvided Id module allows publishers to set and pass a first party user id into the bid stream. This module has several unique characteristics: + +1. The module supports a user defined function, that generates an eids-style object: + +``` +pbjs.setConfig({ + userSync: { + userIds: [{ + name: "publisherProvided", + params: { + eidsFunction: getIdsFn // any function that exists in the page + } + }] + } +}); +``` + +Or, the eids values can be passed directly into the `setConfig` call: +``` +pbjs.setConfig({ + userSync: { + userIds: [{ + name: "example.com", + params: { + eids: [{ + source: "domain.com", + uids:[{ + id: "value read from cookie or local storage", + atype: 1, + ext: { + stype: "ppuid" + } + + }] + },{ + source: "3rdpartyprovided.com", + uids:[{ + id: "value read from cookie or local storage", + atype: 3, + ext: { + stype: "dmp" + } + }] + }] + } + }] + } +}); +``` + +In either case, bid adapters will receive the eid values after consent is validated. + +2. This design allows for the setting of any number of uuids in the eids object. Publishers may work with multiple ID providers and nest their own id within the same eids object. The opportunity to link a 1st party uuid and a 3rd party generated UUID presents publishers with a unique ability to address their users in a way demand sources will understand. + +3. Finally, this module allows publishers to broadcast their user id, derived from in-house tech, directly to buyers within the confines of existing compliance (CCPA & GDPR) frameworks. + +4. The `eids.uids.ext.stype` "source-type" extension helps downstream entities know what do with the data. Currently defined values are: + +- dmp - this uid comes from the in-page dmp named in eids.source +- ppuid - this uid comes from the publisher named in eids.source +- other - TBD + +5. Bid adapters listening for "userIds.pubProvidedId" will not receive a string, please use the userIdAsEids value/function to return the userid as a string. + + +### Quantcast ID + +Quantcast ID enables publishers that use Quantcast Measure tag to uniquely identify +their clients within Quantcast's extensive publisher network without relying on third party +cookies. The Quantcast User ID submodule makes the existing Quantcast first party +cookie available in the bid request. The first party cookie allows Quantcast to correlate +the bid request with Quantcast's Measure dataset. + +Currently, Quantcast ID only works with the presence of Quantcast Measure tag. More information +about Measure can be found in https://www.quantcast.com/measure. + +The Quantcast privacy policy is at https://www.quantcast.com/privacy/. + +Add it to your Prebid.js package with: + +{: .alert.alert-info :} +gulp build --modules=userId,quantcastIdSystem + +#### Quantcast ID Configuration + +Quantcast ID module does not require any configuration parameters at this time. + +#### Quantcast ID Example + +{% highlight javascript %} +pbjs.setConfig({ + userSync: { + userIds: [{ + name: "quantcastId", + }] + } +}); +{% endhighlight %} + + ### Shared ID User ID Submodule -Shared ID User ID Module generates a UUID that can be utilized to improve user matching.This module enables timely synchronization which handles sharedId.org optout. This module does not require any registration. +The Shared ID User Module generates a UUID that can be utilized to improve user matching. This module enables timely synchronization and handles opt-out via sharedId.org. This module does not require any registration. #### Building Prebid with Shared Id Support Your Prebid build must include the modules for both **userId** and **sharedId** submodule. @@ -873,17 +1050,21 @@ Bidders that want to support the User ID module in Prebid.js, need to update the | --- | --- | --- | --- | --- | --- | | BritePool ID | BritePool | bidRequest.userId.britepoolid | `"1111"` | | CriteoID | Criteo | bidRequest.userId.criteoId | `"1111"` | +| Halo ID | Audigent | bidRequest.userId.haloId | `{"haloId":"user-halo-id", "auSeg":["segment1","segment2"]}` | | ID+ | Zeotap | bidRequest.userId.IDP | `"1111"` | | ID5 ID | ID5 | bidRequest.userId.id5id | `"1111"` | | IdentityLink | Trade Desk | bidRequest.userId.idl_env | `"1111"` | -| LiveIntent ID | Live Intent | bidRequest.userId.lipb.lipbid | `"1111"` | | IntentIQ ID | IntentIQ | bidRequest.userId.intentiqid | `"1111"` | +| LiveIntent ID | Live Intent | bidRequest.userId.lipb.lipbid | `"1111"` | | Lotame Panorama ID | Lotame | bidRequest.userId.lotamePanoramaId | `"e4b96a3d9a8e8761cef5656fb05f16d53938069f1684df4b2257e276e8b89a0e"` | +| merkleID | Merkle | bidRequest.userId.merkleId | `"1111"` | +| netID | netID | bidRequest.userId.netId | `"fH5A3n2O8_CZZyPoJVD-eabc6ECb7jhxCicsds7qSg"` | | Parrable ID | Parrable | bidRequest.userId.parrableId | `{"eid":"01.1594654046.cd0972d861e98ff3723a368a6efa69287a0df3f1cac9142afc2e7aed1caa8dd1b7fc0590b3baf67525f53e1228024c2805b6041206c7a23e34bb823b0659547d7d1d0dac2a11938e867f"}` | | PubCommon ID | n/a | bidRequest.userId.pubcid | `"1111"` | -| Unified ID | Trade Desk | bidRequest.userId.tdid | `"1111"` | -| netID | netID | bidRequest.userId.netId | `"fH5A3n2O8_CZZyPoJVD-eabc6ECb7jhxCicsds7qSg"` | +| PubProvided ID | n/a | bidRequest.userId.pubcid | `"1111"` | +| Quantcast ID | n/a | bidRequest.userId.quantcastId | `"1111"` | | Shared ID | SharedId | bidRequest.userId.sharedid | `{"id":"01EAJWWNEPN3CYMM5N8M5VXY22","third":"01EAJWWNEPN3CYMM5N8M5VXY22"}` | +| Unified ID | Trade Desk | bidRequest.userId.tdid | `"1111"` | For example, the adapter code might do something like: @@ -926,13 +1107,19 @@ Bidders that want to support the User ID module in Prebid Server, need to update uids: [{ id: "01.1594654046.cd0972d861e98ff3723a368a6efa69287a0df3f1cac9142afc2e7aed1caa8dd1b7fc0590b3baf67525f53e1228024c2805b6041206c7a23e34bb823b0659547d7d1d0dac2a11938e867f" }] + },{ + "source": "audigent.com", + "atype": 1, + "uids": [{ + "id": "11111111" + }] },{ "source": "identityLink", "uids": [{ "id": "11111111" }] },{ - "source": "criteo", + "source": "criteo.com", "uids": [{ "id": "11111111" }] @@ -964,6 +1151,16 @@ Bidders that want to support the User ID module in Prebid Server, need to update "third": "01EAJWWNEPN3CYMM5N8M5VXY22" } }] + }, + { + "source": "pub.com", // Publisher must configure their domain here + "uids": [{ + "id": "01EAJWWNEPN3CYMM5N8M5VXY22", + "atype":1 //ADCOM - Type of user agent the match is from + "ext": { + "stype": "dmp" //currently supported values (dmp,ppuid,other) + } + }] }] } } diff --git a/dev-docs/publisher-api-reference.md b/dev-docs/publisher-api-reference.md index aebe9b1ff5..4269d8dd94 100644 --- a/dev-docs/publisher-api-reference.md +++ b/dev-docs/publisher-api-reference.md @@ -24,6 +24,7 @@ This page has documentation for the public API methods of Prebid.js. * [.getAdserverTargetingForAdUnitCode([adUnitCode])](#module_pbjs.getAdserverTargetingForAdUnitCode) * [.getBidResponses()](#module_pbjs.getBidResponses) * [.getBidResponsesForAdUnitCode(adUnitCode)](#module_pbjs.getBidResponsesForAdUnitCode) + * [.getEvents()](#module_pbjs.onEvent) * [.getHighestCpmBids([adUnitCode])](#module_pbjs.getHighestCpmBids) * [.getAllWinningBids()](#module_pbjs.getAllWinningBids) * [.getAllPrebidWinningBids()](#module_pbjs.getAllPrebidWinningBids) @@ -63,6 +64,7 @@ This page has documentation for the public API methods of Prebid.js. * [COPPA](#setConfig-coppa) * [first party data](#setConfig-fpd) * [cache](#setConfig-vast-cache) + * [instreamTracking](#setConfig-instream-tracking) - requires [Instream Tracking Module](/dev-docs/modules/instreamTracking.html) * [site](#setConfig-site) * [Generic Configuration](#setConfig-Generic-Configuration) * [Troubleshooting your config](#setConfig-Troubleshooting-your-configuration) @@ -1179,8 +1181,12 @@ If a custom adServerTargeting function can return an empty value, this boolean f ### pbjs.offEvent(event, handler, id) +### pbjs.getEvents() ⇒ `Array` + The methods `onEvent` and `offEvent` are provided for you to register -a callback to handle a Prebid.js event. +a callback to handle a Prebid.js event. + +The `getEvents` method returns a copy of all emitted events. The optional `id` parameter provides more finely-grained event callback registration. This makes it possible to register callback @@ -2278,14 +2284,13 @@ pbjs.setConfig({coppa: true}); #### First Party Data -A number of adapters support taking key/value pairs as arguments, but they're all different. For example: +Historically, a number of adapters supported taking key/value pairs as arguments, but they were all different. For example: -- RubiconProject takes `keywords`, `inventory` and `visitor` parameters -- AppNexus takes `keywords` and `user` -- OpenX takes `customParams` +- RubiconProject took `keywords`, `inventory` and `visitor` parameters +- AppNexus took `keywords` and `user` +- OpenX took `customParams` -This feature allows publishers a way to specify key/value data in one place where each compatible bid adapter -can read it. +First party data allows publishers to specify key/value data in one place where each compatible bid adapter can read it. {: .alert.alert-warning :} Not all bid adapters currently support reading first party data in this way, but support should increase over time. @@ -2352,6 +2357,8 @@ pbjs.setBidderConfig({ +See [Prebid Server First Party Data](/prebid-server/features/pbs-fpd.html) for details about passing data server-side. + #### Client-side Caching of VAST XML When serving video ads, VAST XML creatives must be cached on the network so the @@ -2398,6 +2405,36 @@ Setting the `vasttrack` parameter to `true` supplies the POST made to the `/vtra Prebid Server endpoint with a couple of additional parameters needed by the analytics system to join the event to the original auction request. + + +#### Instream tracking + +{: .alert.alert-info :} +To enable this tracking, include the `instreamTracking` module in your Prebid.js build. + +This configuration will allow Analytics Adapters and Bid Adapters to track `BID_WON` events for Instream video bids. + +{: .table .table-bordered .table-striped } +| Field | Scope | Type | Description | +|----------+---------+--------+---------------------------------------------------------------------------------------| +| `instreamTracking` | Required | Object | Configuration object for instream tracking | +| `instreamTracking.enabled` | Required | Boolean | Enable/disable the instream tracking feature. Default: `false`. | +| `instreamTracking.maxWindow` | Optional | Integer | The time in ms after which polling for instream delivery stops. Default: `60000` i.e. 60 seconds | +| `instreamTracking.pollingFreq` | Optional | Integer |The frequency of polling. Default: `500`ms | +| `instreamTracking.urlPattern` | Optional | RegExp | Regex for cache url patterns, to avoid false positives. | + +#### Example + +{% highlight js %} +pbjs.setConfig({ + 'instreamTracking': { + enabled: true, + } +}); +{% endhighlight %} + +More examples [here](/dev-docs/modules/instreamTracking.html#example-with-urlpattern). + #### Site Configuration diff --git a/dev-docs/show-outstream-video-ads.md b/dev-docs/show-outstream-video-ads.md index 45baeb3b20..450a8cc999 100644 --- a/dev-docs/show-outstream-video-ads.md +++ b/dev-docs/show-outstream-video-ads.md @@ -67,16 +67,17 @@ To display an outstream video, two things are needed: Prebid.js will select the `renderer` used to display the outstream video in the following way: -1. If a `renderer` is associated with the Prebid adUnit, it will be used to display any outstream demand associated with that adUnit. Below, we will provide an example of an adUnit with an associated `renderer`. -2. If no `renderer` is specified on the Prebid adUnit, Prebid will invoke the renderer associated with the winning (or selected) demand partner video bid. +1. If a `renderer` is associated with the Prebid adUnit, it will be used to display any outstream demand associated with that adUnit. Below, we will provide an example of an adUnit with an associated `renderer`. If that renderer is specified as backup only, it will only be used when no other renderer is found. +2. If no `renderer` is specified on the Prebid adUnit, Prebid will invoke the renderer associated with the winning (or selected) demand partner video bid. Choosing a backup only renderer allows publishers to access demand with or without an attached renderer. {: .alert.alert-warning :} At this time, since not all demand partners return a renderer with their video bid responses, we recommend that publishers associate a `renderer` with their Prebid video adUnits, if possible. By doing so, any Prebid adapter that supports video will be able to provide demand for a given outstream slot. -Renderers are associated with adUnits through the `adUnit.renderer` object. This object contains two fields: +Renderers are associated with adUnits through the `adUnit.renderer` object. This object contains three fields: 1. `url` -- Points to a file containing the renderer script. 2. `render` -- A function that tells Prebid.js how to invoke the renderer script. +3. `backupOnly` -- Optional field, if set to true, buyer or adapter renderer will be preferred {% highlight js %} @@ -90,14 +91,26 @@ pbjs.addAdUnit({ }, renderer: { url: 'https://acdn.adnxs.com/video/outstream/ANOutstreamVideo.js', + backupOnly: true, // prefer demand renderer render: function (bid) { - ANOutstreamVideo.renderAd({ - targetId: bid.adUnitCode, - adResponse: bid.adResponse, + adResponse = { + ad: { + video: { + content: bid.vastXml, + player_height: bid.playerHeight, + player_width: bid.playerWidth + } + } + } + // push to render queue because ANOutstreamVideo may not be loaded yet. + bid.renderer.push(() => { + ANOutstreamVideo.renderAd({ + targetId: bid.adUnitCode, // target div id to render video. + adResponse: adResponse + }); }); } - }, - ... + } }); {% endhighlight %} diff --git a/download.md b/download.md index 75df60e3ee..02bb783a1e 100644 --- a/download.md +++ b/download.md @@ -178,10 +178,7 @@ Prebid.js is open source software that is offered for free as a convenience. Whi

Select Bidder Adapters

-{% for page in bidder_pages %} - {% if page.s2s_only == true %} - {% continue %} - {% endif %} +{% for page in bidder_pages %}{% if page.pbjs == true %}
- +
-{% endfor %} +{% endif %}{% endfor %}
@@ -517,13 +512,13 @@ Prebid.js is open source software that is offered for free as a convenience. Whi
- +
- +
- +
@@ -535,19 +530,34 @@ Prebid.js is open source software that is offered for free as a convenience. Whi
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
- +
diff --git a/faq/prebid-server-faq.md b/faq/prebid-server-faq.md index edf31a3d0d..326b22aa11 100644 --- a/faq/prebid-server-faq.md +++ b/faq/prebid-server-faq.md @@ -20,7 +20,7 @@ Nope. The only approval process is a code review. There are separate instruction - [Prebid Server - Go](https://github.com/prebid/prebid-server/blob/master/docs/developers/add-new-bidder.md) - [Prebid Server - Java](https://github.com/rubicon-project/prebid-server-java/blob/master/docs/developers/add-new-bidder.md) -As for [membership](/partners/partners.html) in Prebid.org, that's entirely optional -- we'd be happy to have you join and participate in the various committees, +As for [membership](https://prebid.org/membership/) in Prebid.org, that's entirely optional -- we'd be happy to have you join and participate in the various committees, but it's not necessary for contributing code as a community member. ## How can I debug Prebid Server requests? @@ -70,36 +70,11 @@ pbjs.setConfig({ ``` ## How do user ID cookies and ID syncing work in Prebid Server? -There are 3 answers here. The easy answer is for requests coming into Prebid Server from the Prebid SDK - there's no concept of cookies there, so no syncing takes place in that scenario. ID in mobile is based on IDFA. +For Prebid SDK there's no concept of cookies, so no syncing takes place in that scenario. ID in mobile is based on IDFA. -For other scenarios, Prebid Server sets up and manages a multi-vendor ID match table in the `uids` cookie in the host company's -domain. i.e. adnxs.com, rubiconproject.com, or whichever Prebid Server vendor you're utilizing. When the user has a `uids` cookie, -Prebid Server parses it and passes the vendor-specific IDs to the relevant server-side bid adapters. +For Prebid.js and AMP, see [Prebid Server User ID sync](/prebid-server/developers/pbs-cookie-sync.html) -Syncing in the AMP scenario uses the [load-cookie.html](/dev-docs/show-prebid-ads-on-amp-pages.html#user-sync) file that's part of -the Prebid Universal Creative package. When placed into an AMP-iframe, this file will call /cookie-sync and initiate a sync that -creates or updates the `uids` cookie. - -The most common source of requests for Prebid Server is from Prebid.js in a scenario where the user doesn't have any cookies for the Prebid Server domain. -1. The user loads a page with Prebid.js that's going to call Prebid Server -- i.e. the pub has set up s2sConfig. -2. Immediately after confirming that s2sConfig is setup, Prebid.js calls Prebid Server's /cookie-sync endpoint to initiate syncing -3. Prebid Server determines there is no `uids` cookie and responds to the browser with a list of pixel syncs for bidders that need to be synced. -4. Prebid.js places all of the pixels on the page and initiates the auction. -5. Because the syncs haven't completed, the auction call to Prebid Server will not contain the uids cookie. -6. The first auction occurs without IDs -7. At some point later, the pixels come back to Prebid Server through a /setuid redirect, setting (or updating) the uids cookie. -8. The second page view will have the IDs available. - - - -{: .alert.alert-info :} -Note: the company that's hosting Prebid Server can configure it to read and utilize their exchange's -native cookie. i.e. if you're using Rubicon Project's Prebid Server, it can read their 'khaos' cookie, and if you're using -AppNexus' Prebid Server, it can read their 'uuid2' cookie. In other words, if the host company is an exchange and the user -has the exchange cookie, the host company will have an ID one page-view sooner than the other bidders. This gives a slight edge to -the hosting company in some scenarios, but it's technically unavoidable and better for both buyers and sellers to have one ID available rather than zero. - -## How does Prebid Server support privay signals? +## How does Prebid Server support privacy signals? See the [Prebid Server Privacy Feature Page](/prebid-server/features/pbs-privacy.html) @@ -107,7 +82,7 @@ See the [Prebid Server Privacy Feature Page](/prebid-server/features/pbs-privacy For Prebid.js-initated server requests, we've found that cookie match rates are about what can be expected given the constraints: -- The [/cookie_sync](/prebid-server/developers/pbs-cookie-sync.html) process is initiated by Prebid.js the moment the [s2sConfig](https://docs.prebid.org/dev-docs/publisher-api-reference.html#setConfig-Server-to-Server) is parsed. +- The [/cookie_sync](/prebid-server/developers/pbs-cookie-sync.html) process is initiated by Prebid.js the moment the [s2sConfig](https://docs.prebid.org/dev-docs/publisher-api-reference.html#setConfig-Server-to-Server) is parsed. - A limited number of bidders will be synced at once. PBS-Go will sync all the bidders listed in the `bidders` array. PBS-Java will sync all of them and possibly additional bidders. Publishers can change the number of syncs by specifying `userSyncLimit` on the s2sConfig. - Privacy settings (e.g. GDPR) can affect sync rate. e.g. If a lot of your traffic is in the EEA, it's going to be harder to set cookies. @@ -118,3 +93,16 @@ For Prebid.js-initated server requests, we've found that cookie match rates are - The [/cookie_sync](/prebid-server/developers/pbs-cookie-sync.html) call is initiated from `load-cookie.html`, but there are many adapters on the server side, and a limited number of them will be synced at once. Consider setting `max_sync_count` higher to get all bidders synced faster, - In a GDPR context, AMP doesn't supply the `gdprApplies` field. Prebid Server will determine for itself whether it can sync cookies, but it will not tell bidders whether the request is in GDPR-scope, so each bidder will have to determine scope for itself. +## How does the Notice URL work for Prebid Server? + +**Banner** + +If a bidder adapter supplies 'nurl' in the bidResponse object, there are two paths: + +1) If it's cached in Prebid Cache (e.g. AMP and App), then the 'nurl' is cached along with the 'adm' and utilized by the Prebid Universal Creative. +2) If it's not cached, the Prebid.js PrebidServerBidAdapter will append the 'nurl' to the bottom of the creative in a new div. + +**Video** + +If a bidder adapter supplies 'nurl' in the bidResponse object instead of 'adm', +this URL will be treated as the location of the VAST XML. diff --git a/features/firstPartyData.md b/features/firstPartyData.md new file mode 100644 index 0000000000..c1786fbfa2 --- /dev/null +++ b/features/firstPartyData.md @@ -0,0 +1,160 @@ +--- +layout: page_v2 +title: Prebid.js First Party Data +description: First Party Data - Prebid.js +sidebarType: 1 +--- + +# First Party Data - Prebid.js +{: .no_toc} + +* TOC +{:toc} + +Prebid allows publishers to supply attributes related to their content +and users, and to apply permissions so only certain bidders are allowed +to access those attributes. + +{: .alert.alert-warning :} +These conventions aren't implemented by all adapters. Please +check with each of your bidders to make sure they're reading first +party data from the standard Prebid locations. + +## How It Works + +Here's a summary of how first party data (FPD) works: + +![First Party Data Summary](/assets/images/flowcharts/FirstPartyData-Summary.png){: .pb-lg-img :} + +This diagram shows a page that can provide: + +- Global context (site) data that applies to all AdUnits and all bidders +- Global user data that applies to all AdUnits and all bidders +- AdUnit-specific data that applies to all bidders +- Bidder-specific context data that applies to all AdUnits +- Bidder-specific user data that applies to all AdUnits + +## In-Page Examples + +The Prebid First Party Data JSON structure reflects the OpenRTB standard. +Arbitrary values should go in fpd.context.data or fpd.user.data. Fields +that are meant to be standard [OpenRTB 2.5](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf) values should be in fpd.context or fpd.user. Specfically, the standard values for `site` are: name, domain, cat, sectioncat, pagecat, page, ref, search, keywords. For `user` these are: yob, gender, keywords. + +{: .alert.alert-info :} +'Context' corresponds to the OpenRTB 'site' object. + +### Supplying Global Data + +Here's how a publisher can let all bid adapters have access +to first party data that might be useful in ad targeting: +{% highlight js %} +pbjs.setConfig({ + fpd: { + context: { + keywords: "power tools", // keywords is a standard OpenRTB field + search: "drill", // same with search and content + content: { userrating: 4 }, + data: { + pageType: "article", + category: "tools" + } + }, + user: { + keywords: "a,b", // keywords is a standard OpenRTB field + data: { + registered: true, + interests: ["cars"] + } + } + } +}); +{% endhighlight %} + +{: .alert.alert-warning :} +Note that supplying first party **user** data may require special +consent in certain regions. Prebid does **not** police the passing +of user data as part of its GDPR or CCPA modules. + +### Supplying AdUnit-Specific Data + +If an attribute is specific to an AdUnit, it can be passed this way: + +{% highlight js %} +pbjs.addAdUnits({ + code: "test-div", + mediaTypes: { + banner: { + sizes: [[300,250]] + } + }, + fpd: { + context: { + pbAdSlot: "homepage-top-rect", + adUnitSpecificContextAttribute: "123" + } + }, + ... +}); +{% endhighlight %} + +{: .alert.alert-info :} +Prebid does not support AdUnit-Specific **user** data. + +### Supplying Bidder-Specific Data + +Use the [`setBidderConfig()`](/dev-docs/publisher-api-reference.html#module_pbjs.setBidderConfig) function to supply bidder-specific data. In this example, only bidderA and bidderB will get access to the supplied +global data. + +{% highlight js %} +pbjs.setBidderConfig({ + bidders: ['bidderA', 'bidderB'], + config: { + fpd: { + context: { + data: { + pageType: "article", + category: "tools" + } + }, + user: { + data: { + registered: true, + interests: ["cars"] + } + } + } + } +}); + +pbjs.setBidderConfig({ // different bidders can receive different data + bidders: ['bidderC'], + config: { + fpd: { ... } + } +}); +{% endhighlight %} + +{: .alert.alert-info :} +Applying permissions to AdUnit-specific First Party Data has +to be done manually by using an event handler -- [pbjs.onEvent('beforeRequestBids', function())](/dev-docs/publisher-api-reference.html#module_pbjs.onEvent) + +## How Bid Adapters Should Read First Party Data + +To access global data, a Prebid.js bid adapter needs only to call [`getConfig()`](/dev-docs/publisher-api-reference.html#module_pbjs.getConfig), like this: + +{% highlight js %} +config.getConfig('fpd.context')) +config.getConfig('fpd.user')) +{% endhighlight %} + +AdUnit-specific values must be parsed out of the AdUnit object. + +The assumption is that bid adapters will copy the values to the appropriate protocol location for their endpoint. + +See [Prebid Server First Party Data](/prebid-server/features/pbs-fpd.html) for a discussion of this feature for Prebid Server bid adapters. + +## Further Reading + +- The [Prebid.js Publisher API](/dev-docs/publisher-api-reference.html) +- The [AdUnit Reference](/dev-docs/adunit-reference.html) +- [Prebid Server First Party Data support](/prebid-server/features/pbs-fpd.html) diff --git a/formats/video.md b/formats/video.md index 7ae5f3295d..8316a7a702 100644 --- a/formats/video.md +++ b/formats/video.md @@ -10,7 +10,7 @@ sidebarType: 6 # Prebid Video Ads {:.no_toc} -Video ads are supported by Prebid.js. Prebid Server support is coming soon. +Video ads are supported by both Prebid.js and Prebid Server. ## Prebid.js @@ -23,6 +23,8 @@ Video ads are supported by Prebid.js. Prebid Server support is coming soon. - [Getting started with video](/prebid-video/video-getting-started.html) - [Outstream video ads](/dev-docs/show-outstream-video-ads.html) +- [Prebid Server video ads](/use-cases/pbs-pbjs.html) +- [Prebid Server Long Form Video](r/use-cases/pbs-lfv.html) ### Prebid.js bid adapters that support instream and outstream video ads diff --git a/guide.md b/guide.md index 35e8d5a788..0cf5e9e7da 100644 --- a/guide.md +++ b/guide.md @@ -16,39 +16,39 @@ Sept 7, 2019 ## Core Technologies -The Prebid website is developed using [Jekyll](https://jekyllrb.com/), a static site generator which uses the following technology to create and style HTML pages. +The Prebid website is developed using [Jekyll](https://jekyllrb.com/), a static site generator which uses the following technology to create and style HTML pages. -**Markdown**: The majority of the content is written in Markdown language. Jekyll transform this into raw HTML. +**Markdown**: The majority of the content is written in Markdown language. Jekyll transform this into raw HTML. Learn more about Markdown](https://www.markdownguide.org/) -**Bootstrap**: A CSS template for responsive site design. Bootstrap provides the base formatting for the site. +**Bootstrap**: A CSS template for responsive site design. Bootstrap provides the base formatting for the site. Learn more about [Bootstrap](https://getbootstrap.com/docs/4.1/getting-started/introduction/_) -**Liquid**: A language created by Shopify to enable dynamic HTML creation. +**Liquid**: A language created by Shopify to enable dynamic HTML creation. Learn more about [Liquid](https://help.shopify.com/en/themes/liquid/basics) -**Javascript**: A combination of Javascript libraries are utilized for the Prebid site to include [JQuery](https://jquery.com/) and [BootstrapJS](https://getbootstrap.com/docs/3.3/javascript/) as well as custom code. +**Javascript**: A combination of Javascript libraries are utilized for the Prebid site to include [JQuery](https://jquery.com/) and [BootstrapJS](https://getbootstrap.com/docs/3.3/javascript/) as well as custom code. -**CSS**: The site builds on the base Bootstrap template with custom CSS stored in the style.css file. +**CSS**: The site builds on the base Bootstrap template with custom CSS stored in the style.css file. *** ## Site Config -The _config.yml file (note underscore prefix) sets the base configuration for the site. Refer to [Jekyll](https://jekyllrb.com/docs/configuration/) documentation on which properties can be set in the _congig.yml file. +The _config.yml file (note underscore prefix) sets the base configuration for the site. Refer to [Jekyll](https://jekyllrb.com/docs/configuration/) documentation on which properties can be set in the _congig.yml file. *** ## Directory Structure -Jekyll requires adherence to a certain directory structure to generate the site. Directories prefixed with an underscore contain files used to construct the html files of the site. +Jekyll requires adherence to a certain directory structure to generate the site. Directories prefixed with an underscore contain files used to construct the html files of the site. ### File Construction -For the Prebid.org site the following directories are used: +For the Prebid.org site the following directories are used: **_data** Jekyll was originally designed specifically for creation of blogging websites and not for dynamic, data-driven sites. However, by including the _data directory we can mimic a database structure to create a more robust site. Files in this directory can be saved in either *json*, *yml* or *csv* format. For Prebid.org they have been saved in *yml*. @@ -67,32 +67,32 @@ The contents of these files are used throughout the Prebid.org site for dynamica **_layouts** -The layout directory contains HTML files that, in conjunction with CSS and JS files, format the layout of pages throughout the site. +The layout directory contains HTML files that, in conjunction with CSS and JS files, format the layout of pages throughout the site. **_includes** -The includes directory contains HTML files that can be included within files, such as a file for the header and footer. +The includes directory contains HTML files that can be included within files, such as a file for the header and footer. **_posts** -The posts directory contains the files that make up the content of the blog section of the site. Unlike the layouts and includes directories, the posts files are written in Markdown. A blog.html file in the layout directory provides the formatting for these Markdown files. +The posts directory contains the files that make up the content of the blog section of the site. Unlike the layouts and includes directories, the posts files are written in Markdown. A blog.html file in the layout directory provides the formatting for these Markdown files. -**_bidders** +**_bidders** -The bidders directory is not a standard part of Jekyll; it’s a special use directory specifically for the Prebid.org site. The files in this directory are used to construct the table of partners on the partners/partners.html page. +The bidders directory is not a standard part of Jekyll; it’s a special use directory specifically for the Prebid.org site. The files in this directory are used to construct the table of partners on the partners/partners.html page. **_sites** -The sites directory is created by Jekyll. It contains the live site generated from the collected files and data listed above, combined with the CSS, JS and image assets and the Markdown files for individual pages. +The sites directory is created by Jekyll. It contains the live site generated from the collected files and data listed above, combined with the CSS, JS and image assets and the Markdown files for individual pages. *** ## Assets -The assets directory contains the CSS, Javascript, images and other assets used to create the site. +The assets directory contains the CSS, Javascript, images and other assets used to create the site. -The base CSS file used is Bootstrap (version 3.7.1) Custom CSS and modifications to Bootstrap classes are contained in the style.css file. +The base CSS file used is Bootstrap (version 3.7.1) Custom CSS and modifications to Bootstrap classes are contained in the style.css file. The JS directory contains the Javascript files required for the Prebid.org site. It includes JQuery and Bootstrap javascript frameworks as well as other third party libraries and custom javascript written specifically for the Prebid site. For JQuery and Bootstrap both the expanded and minified versions of the javascript files are included but only the minified files are linked from the site header. @@ -104,34 +104,34 @@ The JS directory contains the Javascript files required for the Prebid.org site. This file contains custom CSS classes and modifications to Bootstrap classes. The file is broken up into the various sections relating to navigaton, homepage and content pages. *Navbar* -The navbar class is a Bootstrap class. It controls the formatting of the top level navigation. Portions of it have been modified specifically for Prebid formatting. +The navbar class is a Bootstrap class. It controls the formatting of the top level navigation. Portions of it have been modified specifically for Prebid formatting. *Dropdown* The dropdown class is a Boostrap class. It controls the formatting and functionality of the dropdown items of the top navigation. Portions of it have been modified specifically for Prebid formatting. *Sidebar* -The sidebar class is a Boostrap class. It controls the formatting and functionality of the dropdown items of the top navigation. Portions of it have been modified specifically for Prebid formatting. Additional custom classes have been created for specific formatting or functionality required by Prebid. +The sidebar class is a Boostrap class. It controls the formatting and functionality of the dropdown items of the top navigation. Portions of it have been modified specifically for Prebid formatting. Additional custom classes have been created for specific formatting or functionality required by Prebid. *Homepage* -The classes in the homepage secton are custom classes created to format the top portion of the Prebid website homepage. +The classes in the homepage secton are custom classes created to format the top portion of the Prebid website homepage. *Container* -A custom container class created for the Prebid website. +A custom container class created for the Prebid website. *Hover Effect* -A custom series of classes created to control the formatting functionalty of the icon buttons on the Prebid website homepage. +A custom series of classes created to control the formatting functionalty of the icon buttons on the Prebid website homepage. *Message* -A custom series of classes created to control the formatting of the message box on the Prebid website homepage. +A custom series of classes created to control the formatting of the message box on the Prebid website homepage. *Benfits* -A custom series of classes created to control the formatting of the Benefits section of the Prebid website homepage. +A custom series of classes created to control the formatting of the Benefits section of the Prebid website homepage. *Carousel* -The carousel class is a Bootstrap class. It controls the formatting and functionality of the carousel displayed on the homepage. Portions of it have been modified specifically for Prebid formatting. Additional custom classes have been created for specific formatting or functionality required by Prebid. +The carousel class is a Bootstrap class. It controls the formatting and functionality of the carousel displayed on the homepage. Portions of it have been modified specifically for Prebid formatting. Additional custom classes have been created for specific formatting or functionality required by Prebid. *Partners* -A custom series of classes created to control the formatting of the [partners](/partners/partners.html) page. +A custom series of classes created to control the formatting of the [partners](/partners/partners.html) page. *Blog* A custom series of classes created to control the formatting of the blog pages. @@ -146,8 +146,8 @@ A custom class created to control the formatting of the footer. The CSS file has multiple @media sections that handle the formatting of the website pages at specific screen widths. Those widths (in pixels) are: -| Width | Device | -| --- | --- | +| Width | Device | +| --- | --- | | 1300 | Small browsers | | 1024 | Large tablets e.g. iPadPro | | 768 | Regular tablets e.g. iPads | @@ -161,21 +161,21 @@ The CSS file has multiple @media sections that handle the formatting of the webs ## Data Models -The data files are stored in the __data directory. +The data files are stored in the __data directory.
- + ### Partners There are three locations important for adding a new partner onto the [Partners Page](/partners/partners.html) @@ -346,7 +346,7 @@ The attributes in the Jekyll 'front matter' drive various behaviors and dynamic | userIds | no | comma-separated list of supported user id modules | For display. | | prebid_member | no | true or false, whether this company is a prebid.org member | For display. | -The bidderCode, aliasCode, and prevBiddercode parameters bear some description. +The bidderCode, aliasCode, and prevBiddercode parameters bear some description. Some adapters have a longer bidderCode and a shorter bidderCode -- their adapter supports both (with the `alias` feature) but there's only one documentation file and of course one PBJS adapter file. An relatively common scenario is when the company started off with a long bidderCode, but found it awkward to set up ad server targeting variables because GAM limits you to 20 chars, which is easy to exceed diff --git a/overview/intro.md b/overview/intro.md index d36bb8a659..5f623d4ff8 100644 --- a/overview/intro.md +++ b/overview/intro.md @@ -12,6 +12,9 @@ sidebarType: 0 ## Overview +{: .alert.alert-info :} +If you're looking for a more high-level overview of Prebid.org, including product features, membership, events, and so on, visit [Prebid.org](https://prebid.org/). + Prebid is more than a product; it's a product suite, a community, and an organization. - **Product Suite:** A free and open source suite of software products designed to enable publishers to implement header bidding on their websites and from within their apps. Our product line includes: @@ -19,7 +22,7 @@ Prebid is more than a product; it's a product suite, a community, and an organiz - **Prebid Server:** Provides a hosted or custom server-side solution for header bidding. Utilizing Prebid Server can reduce latency between bid request and ad selection, and speed the presentation of your site and ads. - **Prebid Mobile:** Our native iOS and Android solutions to enable header bidding within a mobile app. - **Community:** The developers that maintain and improve our products. -- **Organization:** A collection of leaders within the ad tech industry that promotes our products, works with the ad tech community to expand the solutions our products can provide, and encourages the development of the platform. +- **Organization:** A collection of leaders within the ad tech industry that promotes our products, works with the ad tech community to expand the solutions our products can provide, and encourages the development of the platform. For more about the organization, see the [Prebid.org](https://prebid.org/) website. {% include alerts/alert_note.html content="Our flagship product, Prebid.js, is sometimes referred to as simply *Prebid*, but please be aware that the Prebid product line supports header bidding for web, AMP, and mobile apps, using both client- and server-side project components." %} diff --git a/overview/what-is-prebid-org.md b/overview/what-is-prebid-org.md index 213e6a5388..f3577affc8 100644 --- a/overview/what-is-prebid-org.md +++ b/overview/what-is-prebid-org.md @@ -13,7 +13,7 @@ Formed in September of 2017, Prebid.org is an independent organization designed Prebid.org is open to all companies who are part of the programmatic ecosystem, from ad tech vendors to publishers and others. We believe strongly that by working together, we can do some great things in the industry. -[Learn more](/partners/partners.html) about becoming a member of Prebid.org. +[Learn more](https://prebid.org/membership/) about becoming a member of Prebid.org. ## Operations Managed through Product Management Committees (PMCs) @@ -44,6 +44,6 @@ Prebid welcomes any contribution on these projects! Read more here: -* [Prebid.org Members and Partners](/partners/partners.html) +* [Prebid.org Members and Partners](https://prebid.org/membership/) * [The Drum reporting on Prebid.org](https://www.thedrum.com/news/2017/09/11/appnexus-and-rubicon-project-launch-prebidorg-hailing-open-source-approach-header) -* [Current members of Prebid.org]({{site.baseurl}}/partners/partners.html) +* [Current members of Prebid.org](https://prebid.org/membership/member-directory/) diff --git a/prebid-mobile/adops-line-item-setup-mopub.md b/prebid-mobile/adops-line-item-setup-mopub.md index b8923eb326..cd5d578c87 100644 --- a/prebid-mobile/adops-line-item-setup-mopub.md +++ b/prebid-mobile/adops-line-item-setup-mopub.md @@ -11,12 +11,12 @@ sidebarType: 3 -# Step by Step Line Item Setup for MoPub +# Step-by-Step Line Item Setup for MoPub * TOC {:toc } -This page describes step by step how to set up Prebid Mobile line items for MoPub to serve ads on app with the Prebid SDK. It is using the Universal Prebid Creative. +This page provides step-by-step instructions to set up Prebid Mobile line items for MoPub to serve ads on app with the Prebid SDK. It is using the Universal Prebid Creative. ## Step 1. Add a line item diff --git a/prebid-mobile/adops-setup-full-screen-video-mopub.md b/prebid-mobile/adops-setup-full-screen-video-mopub.md new file mode 100644 index 0000000000..429c0488d3 --- /dev/null +++ b/prebid-mobile/adops-setup-full-screen-video-mopub.md @@ -0,0 +1,57 @@ +--- +layout: page_v2 +title: Setup Rewarded Video for MoPub +description: Setup Full Screen Video for MoPub +pid: 1 +top_nav_section: prebid-mobile +nav_section: prebid-mobile-adops +sidebarType: 3 +--- + +# Step-by-Step Line Item Setup for Full-screen Video on MoPub + +* TOC +{:toc } + +This page provides step-by-step instructions to set up full-screen video line items on MoPub to be used with the Prebid Mobile SDK. + +## Step 1. Create full screen adUnit +Under New ad unit, select Fullscreen.   + +## Step 2. Add a line item +In the *Add a Line Item* section: +1. For the *Type and Priority* settings, select *Non-Guaranteed* as the type and set the priority to *12*. This ensures the line item will compete with all other demand. +2. Set the Rate to the price you want to target.  +For the Type and Priority settings, select Non-Guaranteed as the type and set the priority to 12   +3. In the *Advanced Targeting* section, set the target for *Keywords* to `hb_pb:0.50`  +In the Advanced Targeting section, set the target for Keywords to hb_pb:0.50   + +For each level of pricing granularity required, one line item/creative pairing will need to be set up. + +Line items must be set up to target custom keywords that include bid price information. The bid price keywords will contain how much the buyer bid on the impression. + +Prebid Mobile, by default, will send the highest bid price to MoPub using the keyword `hb_pb` but will also submit the key `hb_pb_BIDDERCODE` for each bidder. You can decide to create one set of line items for all bidders or one set of line items for each bidder. + +## Step 3. Add creatives to your line item +Full-screen video creatives must have a *VAST tag* with the *Format* set to *Fullscreen* that includes the code below: +``` + + + + MoPub + + + + + +``` +
+MoPub VAST tag code   + +The `hb_uuid` variable value is the cache id that will load the ad markup from the bid stored in Prebid Cache. Within each line item, for each ad unit size, there should be one creative with this content. + +The XML can be constructed by providing the VAST tag URL as: +`https://%%KEYWORD:hb_cache_host%%%%KEYWORD:hb_cache_path%%?uuid=%%KEYWORD:hb_uuid%%` + +## Step 4. Duplicate line items +Duplicate your line items according to your [price granularity](/prebid-mobile/adops-price-granularity.html) setting. diff --git a/prebid-mobile/adops-setup-rewarded-video-mopub.md b/prebid-mobile/adops-setup-rewarded-video-mopub.md new file mode 100644 index 0000000000..839a8593e7 --- /dev/null +++ b/prebid-mobile/adops-setup-rewarded-video-mopub.md @@ -0,0 +1,55 @@ +--- +layout: page_v2 +title: Setup Rewarded Video for MoPub +description: Setup Rewarded Video for MoPub +pid: 1 +top_nav_section: prebid-mobile +nav_section: prebid-mobile-adops +sidebarType: 3 +--- + +# Step-by-Step Line Item Setup for Rewarded Video on MoPub + +* TOC +{:toc } + +This page provides step-by-step instructions to set up rewarded-video line items on MoPub to be used with the Prebid Mobile SDK. + +## Step 1. Add a line item + + In the *Add a Line Item* section: + 1. For the *Type and Priority* settings, select *Non-Guaranteed* as the type and set the priority to *12*. This ensures the line item will compete with all other demand. + 2. Set the Rate to the price you want to target.  + For the Type and Priority settings, select Non-Guaranteed as the type and set the priority to 12   + 3. In the *Advanced Targeting* section, set the target for *Keywords* to `hb_pb:0.50`  + In the Advanced Targeting section, set the target for Keywords to hb_pb:0.50   + +For each level of pricing granularity required, one line item/creative pairing will need to be set up. + +Line items must be set up to target custom keywords that include bid price information. The bid price keywords will contain how much the buyer bid on the impression. + +Prebid Mobile, by default, will send the highest bid price to MoPub using the keyword `hb_pb` but will also submit the key `hb_pb_BIDDERCODE` for each bidder. You can decide to create one set of line items for all bidders or one set of line items for each bidder. + +## Step 2. Add creatives to your line item +Rewarded video creatives must have a *VAST tag* with the *Format* set to *Rewarded Video* that includes the code below: + +``` + + + + MoPub + + + + +``` + +
+MoPub VAST tag code   +The `hb_uuid` variable value is the cache id that will load the ad markup from the bid stored in Prebid Cache. Within each line item, for each ad unit size, there should be one creative with this content. + +The XML can be constructed by providing the VAST tag URL as: +`https://%%KEYWORD:hb_cache_host%%%%KEYWORD:hb_cache_path%%?uuid=%%KEYWORD:hb_uuid%%` + +## Step 3. Duplicate line items +Duplicate your line items according to your [price granularity](/prebid-mobile/adops-price-granularity.html) setting. diff --git a/prebid-mobile/dr-prebid.md b/prebid-mobile/dr-prebid.md index d672e5b846..799f8dab86 100644 --- a/prebid-mobile/dr-prebid.md +++ b/prebid-mobile/dr-prebid.md @@ -55,6 +55,8 @@ The type of ad you want to test. This will be the ad type that is associated wit Select from: - *Banner* - *Interstitial* +- *Native* +- *Video* **Ad Size** @@ -94,6 +96,10 @@ Select your Prebid Server host: - *AppNexus* - *Rubicon* +- *Custom* + +**Custom Server Host** +Provide the url of the custom hosted prebid server **Account ID** diff --git a/prebid-mobile/pbm-api/android/pbm-adunit-android.md b/prebid-mobile/pbm-api/android/pbm-adunit-android.md index 5a2acdc87d..5bdddecf88 100755 --- a/prebid-mobile/pbm-api/android/pbm-adunit-android.md +++ b/prebid-mobile/pbm-api/android/pbm-adunit-android.md @@ -47,12 +47,62 @@ PB Ad Slot is an identifier tied to the placement the ad will be delivered in. T Trigger a call to Prebid Server to retrieve demand for this Prebid Mobile ad unit. +#### Mopub or GAM + +By default, Prebid SDK uses inflection to determine the publisher ad server, one of Mopub or Google Ad Manager (GAM), to convert Prebid's targeting keys (PBS bid keys, host and cache key) to trigger targeted line items. To render ads in ad servers other than Mopub or GAM, follow the instructions in the 3rd party ad server below. + + **Parameters** - `adObj`: This is the ad server request object (for [Google Ad Manager](https://developers.google.com/android/reference/com/google/android/gms/ads/doubleclick/PublisherAdRequest) and for [Mopub](https://developers.mopub.com/publishers/reference/android/MoPubView/)). If you do not wish to add any additional /custom key values to the ad server after the Prebid auction, pass `adObj` to the fetchDemand function, where Prebid SDK will set all the Prebid targeting keys as well as any keys added prior to auction - As of Prebid SDK 1.7, a publisher can optionally pass the Google Ad Manager `builder` object of the [Google Ad Manager Mobile Ads SDK](https://developers.google.com/android/reference/com/google/android/gms/ads/doubleclick/PublisherAdRequest.Builder) to pass custom keys to Google Ad Manager after the Prebid Auction - `onCompleteListener`: listener object +#### 3rd Party Ad Server + +The default ad servers for Prebid's Mobile SDK are MoPub and GAM. The SDK can be expanded to include support for 3rd party ad servers through the fetchDemand function. This function returns the Prebid Server bidder key/values (targeting keys), which can then be passed to the ad server of choice. + +In this mode, the publisher will be responsible for the following actions: +* Call fetchDemand with extended targetingDict callback +* Retrieve targeting keys from extended fetchDemand function +* Convert targeting keys into the format for your ad server +* Pass converted keys to your ad server +* Render ad with Prebid Universal Creative or custom renderer + + +**Function Callbacks** + +* `ResultCode`: enum [result codes](https://docs.prebid.org/prebid-mobile/pbm-api/android/pbm-api-result-codes-android.html) +* `unmodifiableMap`: [Prebid Server Response targeting keys](https://docs.prebid.org/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#targeting) + + +``` +func fetchDemand(completion: @escaping(_ result: ResultCode, _ kvResultDict: [String : String]?) -> Void) +``` + +{: .alert.alert-warning :} +unmodifiableMap is an immutable object. Attempting to modify at runtime will throw an UnsupportedOperationException error. This is to prevent accidental changes to the Prebid targeting keys. If there is a desire to update, create or remove a key, making a copy of unmodifiableMap is recommended before passing to the ad server. + + +Example: + +```java +func loadMPRewardedVideo() { +private void loadMPRewardedVideo() { + + adUnit.fetchDemand(new OnCompleteListener2() { + @Override + public void onComplete(ResultCode resultCode, Map unmodifiableMap) { + //copy of unmodifiableMap. It is an extra step to avoid runtime exception during changing unmodifiableMap + Map kvMap = new HashMap<>(unmodifiableMap); + String mpKeywords = Util.convertMapToMoPubKeywords(kvMap); + adServerRewardedVideoManager.RequestParameters parameters = new adServerRewardedVideoManager.RequestParameters(mpKeywords); + adServerObject.loadRewardedVideo(ADUNITID_REWARDED, parameters); + } + }); + +} +``` diff --git a/prebid-mobile/pbm-api/android/pbm-targeting-params-android.md b/prebid-mobile/pbm-api/android/pbm-targeting-params-android.md index 57bd5862e7..f299f4ad67 100755 --- a/prebid-mobile/pbm-api/android/pbm-targeting-params-android.md +++ b/prebid-mobile/pbm-api/android/pbm-targeting-params-android.md @@ -113,6 +113,66 @@ storeUrl = TargetingParams.getStoreUrl(); TargetingParams.setStoreUrl(storeUrl); ``` + +### Open Measurment SDK (OMSDK) + +OMSDK is designed to facilitate 3rd party viewability and verification measurement for ads served in mobile app enviroments. Prebid SDK will provide the signaling component to Bid Adapters, by way of Prebid Server, indicating the impression is elligible for OMSDK support. Prebid SDK does not currently integrate with OMSDK itself, instead it will rely on a publisher ad server to render viewability and verification measurement code. + +There three components to signaling support for OMSDK: +* Partner Name +* Partner Version +* API code + +**Partner Name** + +This will be the [IAB OMSDK compliant partner name](https://complianceomsdkapi.iabtechlab.com/compliance/latest) responsible for integrating with the OMSDK spec. See below for configuration and examples + +#### omidPartnerName +Open Measurement partner name. + +``` +TargetingParams.setOmidPartnerName() +``` + +Examples: + +Java +```java +TargetingParams.setOmidPartnerName("Google") +``` + +**Partner Version** + +The OMSDK version number the partner integrated with. See below for configuration and examples. + + +#### omidPartnerVersion +Partner's OMSDK version number implementation +``` +TargetingParams.setOmidPartnerVersion(); +``` + +Examples: + +Java +```java +TargetingParams.setOmidPartnerVersion("1.0"); +``` + +**API Code** + +Per OpenRTB 2.5, support for OMSDK is signaled using the imp.[media type].api field represented in Prebid SDK withing each ad format type under the parameters object. Refer to the documentation of the respective ad unit class. + +Example: +``` +BannerAdUnit bannerAdUnit = new BannerAdUnit("PREBID_SERVER_CONFIGURATION_ID", 300, 250); +bannerAdUnit.setUserKeyword("my_key", "my_value"); +BannerBaseAdUnit.Parameters parameters = new BannerBaseAdUnit.Parameters(); +parameters.setApi(Arrays.asList(new Signals.Api(6, 7))); +``` + + + ### Inventory (Context) Keywords Context Keywords are a list of keywords about the app as referenced in OpenRTB 2.5 as app.keywords. Any keyword passed in the context keyword field may be passed to the buyer for targeting. diff --git a/prebid-mobile/pbm-api/ios/pbm-adunit-ios.md b/prebid-mobile/pbm-api/ios/pbm-adunit-ios.md index db5aea1f42..91c656bb60 100755 --- a/prebid-mobile/pbm-api/ios/pbm-adunit-ios.md +++ b/prebid-mobile/pbm-api/ios/pbm-adunit-ios.md @@ -53,14 +53,88 @@ PB Ad Slot is an identifier tied to the placement the ad will be delivered in. T Trigger a call to Prebid Server to retrieve demand for this Prebid Mobile ad unit. +#### Mopub or GAM + +By default, Prebid SDK uses inflection to determine the publisher ad server, one of Mopub or Google Ad Manager (GAM), to convert Prebid's targeting keys (PBS bid keys, host and cache key) to trigger targeted line items. To render ads in ad servers other than Mopub or GAM, use the next section's 3rd party ad server support feature. + **Parameters** `adObject`: adServer object to which the Prebid keys need to be attached. `completion`: Closure which receives one argument, the enum `ResultCode`. There is no return value. -{% include alerts/alert_warning.html content="Ad Unit *User* keywords will be deprecated in favor of [targeting keywords](pbm-targeting-ios#user-keywords) for Prebid versions 1.2+. Support will continue for Ad Unit User Keywords as users migrate to targeting user keywords." %} +#### 3rd Party Ad Server + +The default ad servers for Prebid's Mobile SDK are MoPub and GAM. The SDK can be expanded to include support for 3rd party ad servers through the fetchDemand function. This function returns the Prebid Server bidder key/values (targeting keys), which can then be passed to the ad server of choice. + +In this mode, the publisher will be responsible for the following actions: +* Call fetchDemand with extended targetingDict callback +* Retrieve targeting keys from extended fetchDemand function +* Convert targeting keys into the format for your ad server +* Pass converted keys to your ad server +* Render ad with Prebid Universal Creative or custom renderer + + +**Function callbacks** + +* `ResultCode`: enum [result codes](https://docs.prebid.org/prebid-mobile/pbm-api/ios/pbm-api-result-codes-ios.html) +* `targetingDict`: [Prebid Server Response targeting keys](https://docs.prebid.org/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#targeting) + + +``` +func fetchDemand(completion: @escaping(_ result: ResultCode, _ kvResultDict: [String : String]?) -> Void) +``` + +Examples: + +Swift +```swift +func loadBanner() { + + //adUnit is BannerAdUnit type + adUnit.fetchDemand { [weak self] (resultCode: ResultCode, targetingDict: [String : String]?) in + + self?.adServerRequest.customTargeting = targetingDict + self?.adServerBanner.load(self?.adServerRequest) + } +} + + +func loadRewardedVideo() { + let adUnit = RewardedVideoAdUnit(configId: "1001-1") + adUnit.fetchDemand { [weak self] (resultCode: ResultCode, targetingDict: [String : String]?) in + + //Publisher should provide support for converting keys into format of 3rd party ad server and loading ads + let keywords = convertDictToAdServerKeywords(dict: targetingDict) + AdServerLoadAds.loadAd(withAdUnitID: "46d2ebb3ccd340b38580b5d3581c6434", keywords: keywords) + } +} +``` + +Objective-C +```objective-C +-(void) loadAdServerBanner { + + //adUnit is BannerAdUnit Type + [self.adUnit fetchDemandWithCompletion:^(enum ResultCode resultCode, NSDictionary * _Nullable targetingDict) { + + [self.request setCustomTargeting:targetingDict]; + [self.adServerView loadRequest:self.request]; + }]; +} + +-(void) loadAdServerRewardedVideo { + + //adUnit is RewardedVideoAdUnit Type + [adUnit fetchDemandWithCompletion:^(enum ResultCode resultCode, NSDictionary * _Nullable targetingDict) { + + NSString *keywords = [Utils.shared convertDictToMoPubKeywordsWithDict:targetingDict]; + [adServerRewardedVideo loadRewardedVideoAdWithAdUnitID:@"46d2ebb3ccd340b38580b5d3581c6434" keywords:keywords ]; + + }]; +} +``` ### addUserKeyword diff --git a/prebid-mobile/pbm-api/ios/pbm-targeting-ios.md b/prebid-mobile/pbm-api/ios/pbm-targeting-ios.md index deb7bbfa52..334587b370 100644 --- a/prebid-mobile/pbm-api/ios/pbm-targeting-ios.md +++ b/prebid-mobile/pbm-api/ios/pbm-targeting-ios.md @@ -151,6 +151,77 @@ Targeting.shared.itunesID Targeting.shared.itunesID = itunesID ``` +### Open Measurment SDK (OMSDK) + +OMSDK is designed to facilitate 3rd party viewability and verification measurement for ads served in mobile app enviroments. Prebid SDK will provide the signaling component to Bid Adapters, by way of Prebid Server, indicating the impression is elligible for OMSDK support. Prebid SDK does not currently integrate with OMSDK itself, instead it will rely on a publisher ad server to render viewability and verification measurement code. + +There three components to signaling support for OMSDK: +* Partner Name +* Partner Version +* API code + +**Partner Name** + +This will be the [IAB OMSDK compliant partner name](https://complianceomsdkapi.iabtechlab.com/compliance/latest) responsible for integrating with the OMSDK spec. See below for configuration and examples + +#### omidPartnerName +Open Measurement partner name. + +``` +Targeting.shared.omidPartnerName +``` + +Examples: + +Swift +```swift +Targeting.shared.omidPartnerName = "Google" +``` + +Objective C +```objective_c +Targeting.shared.omidPartnerName = @"Google"; +``` + + +**Partner Version** + +The OMSDK version number the partner integrated with. See below for configuration and examples. + + +#### omidPartnerVersion +Partner's OMSDK version number implementation +``` +Targeting.shared.omidPartnerVersion +``` + +Examples: + +Swift +```swift +Targeting.shared.omidPartnerVersion = "1.0" +``` + +Objective C +```objective_c +Targeting.shared.omidPartnerVersion = @"1.0"; +``` + +**API Code** + +Per OpenRTB 2.5, support for OMSDK is signaled using the imp.[media type].api field represented in Prebid SDK withing each ad format type under the parameters object. Refer to the documentation of the respective ad unit class. + +Example: +``` +let bannerUnit = BannerAdUnit(configId: "6ace8c7d-88c0-4623-8117-75bc3f0a2e45", size: CGSize(width: 300, height: 250)) +let parameters = BannerAdUnit.Parameters() +parameters.api = [Signals.Api(7)] +adUnit.setParameters(parameters); +``` + + + + ## Inventory (Context) Keywords Context Keywords are a list of keywords about the app as referenced in OpenRTB 2.5 as app.keywords. Any keyword passed in the context keyword field may be passed to the buyer for targeting. diff --git a/prebid-server/developers/add-new-bidder-go.md b/prebid-server/developers/add-new-bidder-go.md index 665a26e079..4f35c310c8 100644 --- a/prebid-server/developers/add-new-bidder-go.md +++ b/prebid-server/developers/add-new-bidder-go.md @@ -49,6 +49,20 @@ Bidder implementations may assume that any params have already been validated ag {: .alert.alert-warning :} Prebid Server bid adapters must follow all required conventions defined in the [Module Rules](/dev-docs/module-rules.html). Not doing so could lead to delays in approving your adapter for inclusion in Prebid Server. If you'd like to apply for an exception to one of the rules, make your request in a new [Prebid Server issue](https://github.com/prebid/prebid-server/issues). +### Bid Request Standards + +Prebid clients ([Prebid.js](/use-cases/pbs-pbjs.html), [Prebid SDK](/use-cases/pbs-sdk.html), and [AMP](/use-cases/pbs-amp.html)) pass a number of parameters +that bid adapters should take into account: + +- Currency: The publisher's desired bid currency is in the OpenRTB `cur` field. If your bid is in a different currency, you must set the bid currency in the response. +- Bid Floor: `imp[].bidfloor` and `imp[].bidfloorcur` - please make use of this value before responding with a bid. +- First Party Data: bidders should look in these locations for first party data: `imp[].ext.context.data.*`, `site.ext.data.*`, `app.ext.data.*`, and `user.ext.data.*`. +- Supply Chain: `source.ext.schain` +- GDPR: `regs.ext.gdpr` and `user.ext.consent` +- CCPA: `regs.ext.us_privacy` +- COPPA: `regs.coppa` +- Test: Bidders should be aware that the OpenRTB `test` flag indicates non-production traffic. + ### Bid Response Metadata In addition to the standard OpenRTB2.5 response fields, Prebid encourages bidders to diff --git a/prebid-server/developers/add-new-bidder-java.md b/prebid-server/developers/add-new-bidder-java.md index 8fdad707b9..5a4d296f70 100644 --- a/prebid-server/developers/add-new-bidder-java.md +++ b/prebid-server/developers/add-new-bidder-java.md @@ -88,6 +88,23 @@ Bidder response processing: 1. Extract bids from response; 2. Set each bid type and currency; +### Bid Request Standards + +Prebid clients ([Prebid.js](/use-cases/pbs-pbjs.html), [Prebid SDK](/use-cases/pbs-sdk.html), and [AMP](/use-cases/pbs-amp.html)) pass a number of parameters +that bid adapters should take into account: + +- Currency: The publisher's desired bid currency is in the OpenRTB `cur` field. I +f your bid is in a different currency, you must set the bid currency in the respo +nse. +- Bid Floor: `imp[].bidfloor` and `imp[].bidfloorcur` - please make use of this v +alue before responding with a bid. +- First Party Data: bidders should look in these locations for first party data: `imp[].ext.context.data.*`, `site.ext.data.*`, `app.ext.data.*`, and `user.ext.data.*`. +- Supply Chain: `source.ext.schain` +- GDPR: `regs.ext.gdpr` and `user.ext.consent` +- CCPA: `regs.ext.us_privacy` +- COPPA: `regs.coppa` +- Test: Bidders should be aware that the OpenRTB `test` flag indicates non-production traffic. + ### Bid Response Metadata In addition to the standard OpenRTB2.5 response fields, Prebid encourages bidders to diff --git a/prebid-server/developers/pbs-cookie-sync.md b/prebid-server/developers/pbs-cookie-sync.md index 921f5b8a9f..5f7de31627 100644 --- a/prebid-server/developers/pbs-cookie-sync.md +++ b/prebid-server/developers/pbs-cookie-sync.md @@ -6,6 +6,10 @@ title: Prebid Server | Developer | User ID Sync --- # Prebid Server User ID Sync +{: .no_toc} + +* TOC +{:toc} ## Motivation @@ -21,7 +25,11 @@ Prebid Server stores bidder IDs in the `uids` cookie in the host domain. For exa {"uids":{},"tempUIDs":{"adnxs":{"uid":"4722255122219375043","expires":"2020-07-30T22:10:28.961Z"},"triplelift":{"uid":"9328941297032053459","expires":"2020-07-30T22:10:33.496Z"},"yieldone":{"uid":"8c41c3b1-ce22-44fd-9bd7-454cd79e3c91","expires":"2020-07-30T22:10:33.229Z"},"ix":{"uid":"XlV6w9HM6LYAAHx2YJ4AAACZ&476","expires":"2020-07-30T22:10:31.916Z"},"yieldmo":{"uid":"ge515bd6c7da71cdc98a","expires":"2020-07-30T22:10:32.569Z"},"adform":{"uid":"1707054018971720697","expires":"2020-07-30T22:10:30.453Z"},"brightroll":{"uid":"y-S8Fq5QZ1lwWKPeXdoZ9vSeZx47maINFrJeY53pDtokA2FlaPmwvrJg--","expires":"2020-07-30T22:10:29.867Z"},"consumable":{"uid":"ue1-sb1-aa634f4b-d618-4378-b8c3-9baa56dcb91a","expires":"2020-07-30T22:10:28.07Z"},"pubmatic":{"uid":"2ECE1904-7EB2-4C38-98A4-38E97535AA9C","expires":"2020-07-30T22:10:27.559Z"},"rubicon":{"uid":"KACWYIER-P-59CH","expires":"2020-07-30T22:22:42.432Z"},"pulsepoint":{"uid":"dcxvyKqDV5VV","expires":"2020-07-30T22:10:26.915Z"},"sovrn":{"uid":"bad97f98b08c9204fe6b9826","expires":"2020-07-30T22:10:25.588Z"},"openx":{"uid":"f1f4ac13-99f8-46da-82f8-b52c29b378e0","expires":"2020-07-30T22:10:25.93Z"}},"bday":"2020-05-18T20:01:18.934Z"} ``` -Here's how these IDs get placed in the cookie: +## Setting the uids Cookie + +### Setting the uids cookie from Prebid.js + +Here's how these IDs get placed in the cookie from Prebid.js: ![Prebid Server Cookie Sync](/assets/images/prebid-server/pbs-cookie-sync.png){:class="pb-lg-img"} @@ -46,7 +54,7 @@ POST https://prebid-server.example.com/cookie_sync 5) When the browser receives this redirect, it contacts Prebid Server, which will once again check the privacy settings and will update the `uids` cookie if allowed. -### How It Works for AMP +### Setting the uids cookie from AMP Cookie sync for AMP works in a way quite similar to Prebid.js. @@ -70,7 +78,7 @@ Note that the only two values currently valid for 'endpoint' are 'appnexus' and 3) At runtime, the `load-cookie` script just calls the Prebid Server /cookie_sync endpoint. The rest works the same as described for Prebid.js above. -## Building a Sync Endpoint +## Bidder Instructions for Building a Sync Endpoint Bidders must implement an endpoint under their domain which accepts an encoded URI for redirects. This URL should be able to accept privacy parameters: @@ -100,3 +108,9 @@ Prebid Server would then save this ID mapping of `somebidder: 132` under the coo When the client then calls `www.prebid-domain.com/openrtb2/auction`, the ID for `somebidder` will be available in the Cookie. Prebid Server will then stick this into `request.user.buyeruid` in the OpenRTB request it sends to `somebidder`'s Bidder. + +## Further Reading + +- [Prebid Server Overview](/prebid-server/overview/prebid-server-overview.html) +- [Prebid.js s2sConfig](/dev-docs/publisher-api-reference.html#setConfig-Server-to-Server) +- [Prebid AMP Implementation Guide](/dev-docs/show-prebid-ads-on-amp-pages.html) diff --git a/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.md b/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.md index 493c7b37aa..6dd89dfe28 100644 --- a/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.md +++ b/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.md @@ -27,7 +27,7 @@ For a more general reference, see the [Prebid AMP Implementation Guide | curl | optional | `String` | Added to OpenRTB request as site.page | | slot | optional | `String` | Added to OpenRTB request as imp[0].tagid | | timeout | optional | `String` | Added to OpenRTB request as tmax | -| targeting | optional | `String` | First Party Data | +| targeting | optional | `String` | First Party Data (PBS-Java only) | | gdpr_consent | optional | `String` | Consent string passed from CMP. Note this is used for both GDPR and CCPA. | | account | optional | `String` | Can be used to pass the Prebid-Server specific account ID. This is useful if `tag_id` parameters aren't unique across accounts. | | debug | optional | `integer` | If 1, returns additional debug info. | @@ -80,6 +80,84 @@ An example Stored Request is given below: } ``` +#### First Party Data + +(Currently only supported in PBS-Java) + +You can send first party data into an AMP request by encoding a JSON +targeting block like this: + +``` +GET /openrtb2/amp?tag_id=7470-Eater_AMP_ROS_ATF&w=300&h=250&ow=&oh=&ms=&slot=%2F172968584%2Feater%2Fgoogle%2Famp_med_rec_02&targeting=%7B%22site%22%3A%7B%22keywords%22%3A%22article%2C%20las%20vegas%22%2C%22cat%22%3A%7B%22blah%22%3A%221%22%7D%2C%22other-attribute%22%3A%22other-value%22%2C%22ext%22%3A%7B%22data%22%3A%7B%22entry_group%22%3A%5B%22front-page%22%2C%22featured-stories%22%5D%2C%22page_type%22%3A%22AMP%22%7D%7D%7D%2C%22user%22%3A%7B%22gender%22%3A%22m%22%7D%2C%22bidders%22%3A%5B%22rubicon%22%2C%22appnexus%22%5D%2C%22keywords%22%3A%22las%20vegas%20hospitality%20employees%22%2C%22foo%22%3A%7B%22bar%22%3A%22baz%22%7D%7D... +``` + +Prebid Server will expand the targeting value and merge the data into +the resulting OpenRTB JSON for the appropriate bidders. + +For example, if this AMP targeting is provided: +``` +{ + "site": { + "keywords": "article, las vegas", // (1) + "cat": { "blah": "1" }, // invalid data type, will be dropped + "other-attribute": "other-value", // not openrtb2, remove + "ext": { + "data": { + "entry_group": ["front-page","featured-stories"], // (4) + "page_type": "AMP" // (5) + } + } + }, + "user": { + "gender": "m", // (2) + }, + "bidders": ["rubicon","appnexus"], // (3) + "keywords": "las vegas hospitality employees", // (6) + "foo": { // (7) + "bar": "baz" + } +} +``` +The numbered elements from the raw targeting data above are merged into the resulting OpenRTB like this: +``` +{ + "imp": [...], + "site": { + "publisher": { … }, + "keywords": "article, las vegas" // (1) + "ext":{ + "data": { + "entry_group": ["front-page","featured-stories"], // (4) + "page_type": "AMP" // (5) + } + } + }, + "user": { + "gender": "m" // (2) + }, + "ext": { + "prebid": { + "data": { + "bidders": ["rubicon",appnexus"], // (3) + } + } + }, + "imp": [ + ... + "ext": { + "context": { + "data": { + "keywords": "las vegas hospitality employees", // (6) + "foo": { // (7) + "bar": "baz" + } + } + } + } + ] +} +``` + ### Response A sample response payload looks like this: @@ -198,3 +276,4 @@ Specifically: ## Further Reading - [Prebid and AMP](/formats/amp.html) - [Prebid Server AMP Use Case Overview](/prebid-server/use-cases/pbs-amp.html) +- [Prebid Server First Party Data](/prebid-server/features/pbs-fpd.html) diff --git a/prebid-server/endpoints/pbs-endpoint-admin.md b/prebid-server/endpoints/pbs-endpoint-admin.md index c17fb4afe4..15f77672ab 100644 --- a/prebid-server/endpoints/pbs-endpoint-admin.md +++ b/prebid-server/endpoints/pbs-endpoint-admin.md @@ -125,3 +125,27 @@ Information are: } ``` +## /logging/httpinteraction + +(PBS-Java only) + +This endpoint turns on temporary logging of raw HTTP requests and responses, mainly for troubleshooting production issues. + +Interaction is logged at INFO level using http-interaction logback logger so make sure this logger has at least INFO or more verbose level set (logback configuration bundled in JAR file sets this logger to INFO level). + +Query Params +- endpoint - endpoint to be affected; valid values: auction, amp; if omitted all valid endpoints will be affected +- statusCode - specifies that only interactions resulting in this response status code should be logged; valid values: >=200 and <=500 +- account - specifies that only interactions involving this account should be logged +- limit - number of interactions to log; there is an upper threshold for this value set in configuration + +## /logging/changelevel + +(PBS-Java only) + +This endpoint allows changing org.prebid.server logger level temporarily, mainly for troubleshooting production issues. + +Query Params +- level - desired logging level to set; must be one of error, warn, info, debug +- duration - for how long (in milliseconds) to change level before it gets reset to original; there is an upper threshold for this value set in configuration + diff --git a/prebid-server/features/pbs-feature-idx.md b/prebid-server/features/pbs-feature-idx.md index 89ad92180b..18683d93b4 100644 --- a/prebid-server/features/pbs-feature-idx.md +++ b/prebid-server/features/pbs-feature-idx.md @@ -35,8 +35,8 @@ title: Prebid Server | Features | [Stored Requests](/prebid-server/features/pbs-storedreqs.html) | Core | Accepts a stored request ID in the OpenRTB, looks it up against a local data store, and merges with the OpenRTB request record. | | | | Stored Responses | Stored Responses | Accepts a stored response ID in the OpenRTB, looks it up against a local data store, and merges with the OpenRTB response record. | | | | First Party Data | Core | Accepts core first party data attributes and supports ext.prebid.data.bidders. | | | -| First Party Data | Bidder-specific data | Accepts bidder-specific first party data attributes. | | | -| First Party Data | AMP first party data | Accepts first party data attributes on an AMP request. | | | +| First Party Data | Bidder-specific data | Accepts bidder-specific first party data attributes. | | | +| First Party Data | AMP first party data | Accepts first party data attributes on an AMP request. | | | | [Supply Chain](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#supply-chain-support) | Bidder-specific schains | Accepts bidder-specific schain | | | | Publisher Accounts | Core | Ability to enforce that requests coming in have a valid account ID. | | | | Publisher Accounts | AMP account parameter | Accept the account parameter on the AMP request. | | | @@ -61,3 +61,4 @@ title: Prebid Server | Features | Operations | Circuit breaker | Protects system performance during fault scenarios by detecting problems with external and internal endpoints, turning them off temporarily when a problem occurs. | | | | Operations | [Server default request](/prebid-server/features/pbs-default-request.html) | Support global defaults for incoming requests. | | | | Operations | IPv6 | Support taking IPv6 addresses and forwarding them to bidders. | | | +| Operations | [Request Logging Admin Endpoints](/troubleshooting/pbs-troubleshooting.html#request-logging) | Log a limited number of requests to understand the raw data clients are sending. | | | diff --git a/prebid-server/features/pbs-fpd.md b/prebid-server/features/pbs-fpd.md new file mode 100644 index 0000000000..a488c46dac --- /dev/null +++ b/prebid-server/features/pbs-fpd.md @@ -0,0 +1,130 @@ +--- +layout: page_v2 +sidebarType: 5 +title: First Party Data - Prebid Server +--- + +# First Party Data - Prebid Server +{: .no_toc} + +* TOC +{:toc} + +Prebid allows publishers to supply attributes related to their content +and users, and to apply permissions so only certain bidders are allowed +to access those attributes. + +{: .alert.alert-warning :} +For now, this feature is only supported in PBS-Java and these conventions aren't implemented by all adapters. Please +check with each of your bidders to make sure they're reading first +party data from the standard Prebid locations. + +## How It Works + +Each of the three main sources of Prebid Server traffic will place +First Party Data in the OpenRTB JSON in several places: + +{: .table .table-bordered .table-striped } +| OpenRTB Attribute | Description | PBJS Source | SDK Source | AMP Source | +| --- | --- | --- | --- | --- | +| site.ATTR | Only standard OpenRTB attributes should be here: name, domain, cat, sectioncat, pagecat, page, ref, search, keywords. | config.fpd.context.ATTR | n/a | site.ATTR | +| site.ext.data.ATTR | Any other site-related attributes should go here. | config.fpd.context.data | n/a | site.ext.data.ATTR | +| app.ext.data.ATTR | Any app-related attributes should go here. | n/a | Targeting addContextData() | n/a | +| user.ATTR | Only standard OpenRTB attributes should be here: yob, gender, keywords. | config.fpd.user.ATTR | n/a | user.ATTR | +| user.ext.data.ATTR | Any other user-related attributes should go here. | config.fpd.user.data.ATTR | Targeting addUserData() | user.ext.data.ATTR | +| imp[].ext.context.data.ATTR | AdUnit-specific attributes should go here. | AdUnit.fpd.context | AdUnit addContextData() | n/a | +| ext.prebid.data.bidders[] | If specified, only these bidders are allowed to see fields in {site/app/user}.ext.data. | n/a | addBidderToAccessControlList() | bidders | +| ext.prebid.bidderconfig | Bidder-specific config | [setBidderConfig()](/dev-docs/publisher-api-reference.html#module_pbjs.setBidderConfig) | n/a | n/a | + +This diagram summarizes how first party data flows into the OpenRTB JSON: + +![First Party Data Summary](/assets/images/flowcharts/FirstPartyData-Detailed.png){: .pb-lg-img :} + +{: .alert.alert-info :} +Note that Prebid.js supports the [`setBidderConfig`](/dev-docs/publisher-api-reference.html#module_pbjs.setBidderConfig) method of defining +bidder-specific first party data, while SDK and AMP only support the `ext.prebid.data.bidders[]` approach. + +## OpenRTB Examples + +In this example, only BidderA has access to the global first party data: +``` +{ + ext: { + prebid: { + data: { bidders: [ "bidderA" ] } // limit bidders that receive global data + } + }, + site: { + keywords: "", + search: "", + ext: { + data: { + // only seen by bidderA as named in ext.prebid.data.bidders[] + GLOBAL CONTEXT DATA + } + } + }, + user: { + keywords: "", + gender: "", + yob: 1999, + geo: {}, + ext: { + data: { + // only seen by bidderA as named in ext.prebid.data.bidders[] + GLOBAL USER DATA + } + } + }, + imp: [ + ... + ext: { + context: { + keywords: "", + search: "", + data: { + // everyone sees this data + ADUNIT SPECIFIC CONTEXT DATA + } + } + } + ] +} +``` + +This example shows an array of bidder-specific config: +``` +{ + ext: { + prebid: { + bidderconfig: [ { + bidders: [ 'bidderA', 'bidderB' ], + config: { + fpd: { site: { ... }, user: { ...} } + } + },{ + bidders: [ 'bidderC' ], + config: { + fpd: { site: { ... }, user: { ...} } + } + }] + } + } +} +``` + +## How Server-Side Bid Adapters Read First Party Data + +Bid adapters don't need to worry about whether the request came from +Prebid.js, the SDK, or AMP -- everything is merged into the OpenRTB JSON. If a bid adapter receives first party data on any of the fields noted in +the table above, they can simply pass that data to their endpoint in +the expected way. + +In other words, just be aware of site.ext.data.ATTR, app.ext.data.ATTR, user.ext.data.ATTR, +and imp[].ext.context.data.ATTR and either pass them straight through or map +attributes to where your endpoints expect them. + +## Further Reading + +- [Prebid.js First Party Data](/features/firstPartyData.html) +- [Prebid Server and AMP](/prebid-server/use-cases/pbs-amp.html) diff --git a/prebid-server/overview/prebid-server-overview.md b/prebid-server/overview/prebid-server-overview.md index 388cf8b059..89f1fe8603 100644 --- a/prebid-server/overview/prebid-server-overview.md +++ b/prebid-server/overview/prebid-server-overview.md @@ -12,7 +12,7 @@ Prebid Server is an open-source solution for server-to-server header bidding. It ![Prebid Server Architecture](/assets/images/flowcharts/prebid-server/pbs-basic-flow.png){:class="pb-xlg-img"} -Prebid Server is an intelligent proxy server with a growing list of features. At a high level, it works like this: +Prebid Server is a header bidding server with a growing list of features. At a high level, it works like this: 1. Prebid Server completes and validates incoming requests - Resolves dynamic stored requests @@ -60,4 +60,4 @@ If you're a demand source, we also have information about [creating your own ser If you need help with Prebid Server, the best ways to communicate with us are: - [Post an issue](https://github.com/prebid/prebid-server/issues) in the prebid-server GitHub repo. -- [Join prebid.org](/partners/partners.html) and get access to our Slack workspace. +- [Join prebid.org](https://prebid.org/membership/) and get access to our Slack workspace. diff --git a/prebid-server/use-cases/pbs-amp.md b/prebid-server/use-cases/pbs-amp.md index 98ae98d184..cfa2db3d5d 100644 --- a/prebid-server/use-cases/pbs-amp.md +++ b/prebid-server/use-cases/pbs-amp.md @@ -6,6 +6,10 @@ title: Prebid Server | Use Cases | AMP --- # Use Case: Prebid Server | AMP +{: .no_toc} + +* TOC +{:toc} [Accelerated Mobile Pages (AMP)](https://ampproject.org/) is an alternate web technology that can speed page performance, but as part of the tradeoff, header bidding wrappers like Prebid.js don't work well. Instead, AMP supports a method of header bidding called Real Time Configuration(RTC), which is implemented by Prebid Server. @@ -43,11 +47,12 @@ There are two basic ways of invoking AMP RTC: data-slot="/11111/amp_test" data-multi-size-validation="false" rtc-config='{"vendors": {"prebidrubicon": {"REQUEST_ID": "14062-amp-AMP_Test-300x250"}, "ACCOUNT_ID": "1001"}}' - json='{ "targeting": {"site": {"tags": "autoestima","url": "/amp/familia/materias/33559-princesa-africana-da-disney-lembra-por-que-toda-crianca-precisa-se-sentir-representada"}}}' > + json='{ "targeting": {"site":{"keywords":"article, las vegas","cat":{"blah":"1"},"other-attribute":"other-value","ext":{"data":{"entry_group":["front-page","featured-stories"],"page_type":"AMP"}}},"user":{"gender":"m"},"bidders":["bidderA","bidderB"],"keywords":"las vegas hospitality employees","foo":{"bar":"baz"}}' > ``` -**Note:** the `prebidrubicon` and `prebidappnexus` AMP vendors define different parameters. AppNexus uses "PLACEMENT_ID" as the argument to rtc-config while Rubicon uses "REQUEST_ID". +{: .alert.alert-info :} +**Note:** the `prebidrubicon` and `prebidappnexus` AMP vendor strings define slightly different parameters; AppNexus uses "PLACEMENT_ID" as the argument to rtc-config while Rubicon uses "REQUEST_ID". They both translate to `tag_id` when passed to Prebid Server. - The other option is to construct a direct URL from component pieces: w, h, slot, targeting, gdpr_consent, account, page url (purl), etc. @@ -60,6 +65,9 @@ There are two basic ways of invoking AMP RTC: ``` +{: .alert.alert-info :} +First party data may be passed in on the "targeting" field. See the [`/openrtb2/amp` endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html) documentation for more details. + ### Prebid Server Receives the AMP Request Prebid Server's first job on the [/openrtb2/amp endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html) is to create an OpenRTB block to pass to the adapters. @@ -158,6 +166,11 @@ So for the /openrtb2/amp URL above, the resulting OpenRTB might be: Note that most of the above OpenRTB was prepared offline and stored in the Prebid Server database indexed by the `tag_id`. Only a few dynamic parameters on the query string are integrated into the results from the database. +#### First Party Data Support + +Any targeting data passed in through the [`/openrtb2/amp`](/prebid-server/endpoints/openrtb2/pbs-endpoint-amp.html) endpoint is merged +into the OpenRTB JSON and permissions, if defined, are applied to each bidder. + #### Auction and Response From here, the header bidding auction is mostly the same as it is for Prebid.js: diff --git a/prebid-server/use-cases/pbs-lfv.md b/prebid-server/use-cases/pbs-lfv.md index 164dd35ed8..f61c5e085e 100644 --- a/prebid-server/use-cases/pbs-lfv.md +++ b/prebid-server/use-cases/pbs-lfv.md @@ -6,6 +6,10 @@ title: Prebid Server | Use Cases | Long Form Video --- # Use Case: Prebid Server | Long Form Video +{: .no_toc} + +* TOC +{:toc} Prebid Server (PBS) supports filling _pods_ of multiple video advertisements, including support for competitve separation. diff --git a/prebid-server/use-cases/pbs-pbjs.md b/prebid-server/use-cases/pbs-pbjs.md index da9b6a888c..414d745f3c 100644 --- a/prebid-server/use-cases/pbs-pbjs.md +++ b/prebid-server/use-cases/pbs-pbjs.md @@ -6,6 +6,10 @@ title: Prebid Server | Use Cases | Prebid.js --- # Use Case: Prebid Server | Prebid.js +{: .no_toc} + +* TOC +{:toc} When publishers specify bidders in [Prebid.js `s2sConfig`](/dev-docs/publisher-api-reference.html#setConfig-Server-to-Server), the browser connects to Prebid Server to coordinate the header bidding auction for those bidders. diff --git a/prebid-server/use-cases/pbs-sdk.md b/prebid-server/use-cases/pbs-sdk.md index 37daa28bdb..f1500f8b2e 100644 --- a/prebid-server/use-cases/pbs-sdk.md +++ b/prebid-server/use-cases/pbs-sdk.md @@ -6,6 +6,10 @@ title: Prebid Server | Use Cases | Mobile SDK --- # Use Case: Prebid Server | Prebid Mobile SDK +{: .no_toc} + +* TOC +{:toc} Unlike Prebid.js, the [Prebid Mobile SDK](/prebid-mobile/prebid-mobile.html) doesn't make requests to demand sources directly. Instead, it relies entirely on Prebid Server to handle the bidder communication. diff --git a/prebid/prebidjsReleases.md b/prebid/prebidjsReleases.md index 9ec879476c..068e50e609 100644 --- a/prebid/prebidjsReleases.md +++ b/prebid/prebidjsReleases.md @@ -16,6 +16,15 @@ The table below is a summary of feature changes and important bug fixes in core {: .table .table-bordered .table-striped } | Release | Feature | | --- | --- | +| 4.8 | GDPR updates around modules and storage manager. | +| 4.6 | Removed cmpuishown event for TCF2 logic | +| 4.5 | Price Floors: Add bid object into cpmAdjustment function | +| 4.4 | DFP Video Module supports VAST 4 | +| 4.3 | DFP Video Module bug fixed | +| 4.1.1 | Release of the [GPT Pre-Auction Module](https://docs.prebid.org/dev-docs/modules/gpt-pre-auction.html). Price Floors: new signals (location: noData + floorProvider) | +| 4.0 | TCF Purpose 1 and Purpose 2 enforced by default when GDPR enforcement module turned on. Removed Digitrust userId module. Removed audienceNetworkBidAdapter. | +| 3.27.1 | DFP Video Module bug fixed | +| 3.27 | An important bug in the DFP Video Module was introduced with this release and fixed in 4.3 and 3.27.1. The dfpVideoModule only looked in adunit.sizes but adunit.sizes was stripped. Unfortunately there's not a workaround - if you use that video module, you shouldn't use Prebid.js 3.27 through 4.2 inclusive. | | 3.24 | PBS Bid Adapter allows setting site params | | 3.23 | If a server-side bid contains imp.ext.prebid.event.win, pbsBidAdapter listens to BidsWon events and hits the URL. | | 3.22 | Secure creatives use event.origin rather than a hard coded adServerDomain | diff --git a/troubleshooting/pbs-troubleshooting.md b/troubleshooting/pbs-troubleshooting.md index 0a1abab007..4175cd2f47 100644 --- a/troubleshooting/pbs-troubleshooting.md +++ b/troubleshooting/pbs-troubleshooting.md @@ -121,6 +121,22 @@ Could result in this response, assuming that the IDs exist in the database table } {% endhighlight %} +## Request Logging + +(PBS-Java only) + +Sometimes you want to see what's coming into the server before being processed by PBS. +If the admin endpoints are enabled and you have the admin endpoint password, you can +hit these two URLs with the desired parameter values: + +- https://HOST/logging/[changelevel](/prebid-server/endpoints/pbs-endpoint-admin.html#loggingchangelevel)?level=debug&duration=10000 +- https://HOST/logging/[httpinteraction](/prebid-server/endpoints/pbs-endpoint-admin.html#logginghttpinteraction)?limit=100&endpoint=auction&account=1111 + +Then you can check server logs for output like: +``` +http-interaction : Requested URL: "/openrtb2/auction?debug=1", request body: "{ ... }" +``` + ## Related Topics {:.no_toc} diff --git a/wrapper_code_of_conduct.md b/wrapper_code_of_conduct.md index 81c4bf654a..608521d72b 100644 --- a/wrapper_code_of_conduct.md +++ b/wrapper_code_of_conduct.md @@ -57,3 +57,4 @@ This Wrapper Code of Conduct establishes the principles by which we believe head + [Project Principles]({{site.baseurl}}/principles.html) + [Getting Started]({{site.baseurl}}/overview/getting-started.html) ++ [Prebid.org Community Code of Conduct](https://prebid.org/code-of-conduct/)