From 1035c4576a7747ac1d313a6ea9ec0301832cee47 Mon Sep 17 00:00:00 2001 From: bretg Date: Fri, 5 Jun 2020 15:24:37 -0400 Subject: [PATCH 001/150] PMC update (#2034) --- overview/prebid-management-committees.md | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/overview/prebid-management-committees.md b/overview/prebid-management-committees.md index 449017a5b9..170c5974c5 100644 --- a/overview/prebid-management-committees.md +++ b/overview/prebid-management-committees.md @@ -6,23 +6,28 @@ sidebarType: 0 --- # Project Management Committees +{: .no_toc} Project Management Committees are responsible for the active management of one or more GitHub repositories, which are also identified by resolution of the Board. The committees meet periodically to: - establish and prioritize roadmap items -- discuss issues and policies +- review open issues and pull requests +- discuss policies - create development plans -The following sections describe the currently active committees. +The following sections describe the committees. + +* TOC +{:toc} ## Prebid.js {: .table .table-bordered .table-striped } | **Scope** | Prebid.js and related repositories | | **Description** | browser-based header bidding | -| **Chair** | Matt Kendall (Blockthrough) | +| **Chair** | Gareth Glaser (Rubicon Project) | | **Audience** | Product and Engineers | GitHub Repositories: @@ -31,6 +36,7 @@ GitHub Repositories: + https://github.com/prebid/Prebid.js-packager + https://github.com/prebid/prebid-universal-creative + https://github.com/prebid/currency-file-generator ++ https://github.com/prebid/prebid-js-build-generator ## Prebid Mobile @@ -75,6 +81,17 @@ GitHub Repositories: + https://github.com/prebid/header-bidder-expert +## Identity + +{: .table .table-bordered .table-striped } +| **Scope** | User Identification | +| **Description** | Chart Prebid's role in the future of identity on the web and coordinate any implementation efforts | +| **Chair** | Stephanie Layser (NewsCorp) | +| **Audience** | Product, Business, and Engineers | + +GitHub Repositories: + ++ TBD ## Video Taskforce @@ -102,6 +119,7 @@ GitHub Repositories: | **Audience** | Business | ## Further Reading +{: .no_toc} * [What is Prebid.org?](/overview/what-is-prebid-org.html) * [Prebid.org Membership and Partners](/partners/partners.html) From 8dd3ba0c62a509ee008567c17b95d9b88f5ebef9 Mon Sep 17 00:00:00 2001 From: bretg Date: Tue, 9 Jun 2020 13:49:29 -0400 Subject: [PATCH 002/150] PBS FAQ update (#2041) --- faq/prebid-server-faq.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/faq/prebid-server-faq.md b/faq/prebid-server-faq.md index eff4ccece4..46063c8bc7 100644 --- a/faq/prebid-server-faq.md +++ b/faq/prebid-server-faq.md @@ -38,9 +38,14 @@ ported it to Java because they had more Java talent than Go. + [Prebid Server - Java](https://github.com/rubicon-project/prebid-server-java) Both versions are live in production, and they are kept identical in external APIs -and quite close in functionality. See [https://github.com/rubicon-project/prebid-server-java/blob/master/docs/differenceBetweenPBSGo-and-Java.md](https://github.com/rubicon-project/prebid-server-java/blob/master/docs/differenceBetweenPBSGo-and-Java.md) for the list of differences. +and reasonably close in functionality. See [https://github.com/rubicon-project/prebid-server-java/blob/master/docs/differenceBetweenPBSGo-and-Java.md](https://github.com/rubicon-project/prebid-server-java/blob/master/docs/differenceBetweenPBSGo-and-Java.md) for the list of differences. -There are no plans at this point to stop development on either version. +For demand partners, we recommend building new bid adapters in Go - the team will port it to Java for you within a couple of months. + +For those looking to host a Prebid Server: +- If you plan to use long-form video, we recommend the Go version of the server. +- Look over the features and see if there's any important to you. +- Otherwise, just choose the language you're most comfortable with. ## How can I use Prebid Server in a mobile app post-bid scenario? From 5da7f625b1e6121acc32f6c63e7b65d2598c7605 Mon Sep 17 00:00:00 2001 From: Klaas-Jan Boon Date: Tue, 9 Jun 2020 20:30:35 +0200 Subject: [PATCH 003/150] Blue Billywig Adapter - fix dev-docs layout to be "bidder" (#2032) * Blue Billywig Adapter - fix layout to bidder Co-authored-by: Klaas-Jan Boon Co-authored-by: Scott --- dev-docs/bidders/bluebillywig.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/bluebillywig.md b/dev-docs/bidders/bluebillywig.md index 1312c42859..e63b6d986f 100644 --- a/dev-docs/bidders/bluebillywig.md +++ b/dev-docs/bidders/bluebillywig.md @@ -1,5 +1,5 @@ --- -layout: bluebillywig +layout: bidder title: Blue Billywig description: Prebid Blue Billywig Bidder Adaptor biddercode: bluebillywig From 2e5773ff28486658efdebbb5754538d40852594b Mon Sep 17 00:00:00 2001 From: John Salis Date: Wed, 10 Jun 2020 03:17:39 -0400 Subject: [PATCH 004/150] add tagid param to beachfront doc (#2036) Co-authored-by: John Salis --- dev-docs/bidders/beachfront.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/beachfront.md b/dev-docs/bidders/beachfront.md index 02538b9b56..fa34dc5cbb 100644 --- a/dev-docs/bidders/beachfront.md +++ b/dev-docs/bidders/beachfront.md @@ -30,6 +30,7 @@ userIds: unifiedId |------------------|----------|------------------------------------------------|-------------------------------------------|-----------------| | `appId` | optional | Beachfront Exchange ID for video bids. | `'11bc5dd5-7421-4dd8-c926-40fa653bec76'` | `string` | | `bidfloor` | optional | Bid floor for video bids. | `0.01` | `float` | +| `tagid` | optional | Tag ID | `'7cd7a7b4-ef3f-4aeb-9565-3627f255fa10'` | `string` | | `mimes` | optional | Array of strings listing supported MIME types. | `["video/mp4", "application/javascript"]` | `Array` | | `playbackmethod` | optional | Playback method supported by the publisher.
`1`: Auto-play sound on
`2`: Auto-play sound off
`3`: Click-to-play
`4`: Mouse-over | `1` | `integer` | | `maxduration` | optional | Maximum video ad duration in seconds. | `30` | `integer` | From 9a480496beca2ea679bc2b23dd490902497289de Mon Sep 17 00:00:00 2001 From: redaguermas Date: Wed, 10 Jun 2020 07:15:01 -0700 Subject: [PATCH 005/150] No bid version 1.2.6 (#2030) * Adde support for CCPA * Added support for Safeframe Co-authored-by: Reda Guermas --- dev-docs/bidders/nobidBidAdapter.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/dev-docs/bidders/nobidBidAdapter.md b/dev-docs/bidders/nobidBidAdapter.md index 44388419dd..0003c737e7 100644 --- a/dev-docs/bidders/nobidBidAdapter.md +++ b/dev-docs/bidders/nobidBidAdapter.md @@ -20,6 +20,12 @@ coppa_supported: true | `placementId` | optional | placementId is provided by your NoBid account manager(s). This parameter allows to report on a specific ad unit | | `integer` | | `video`| optional | Object containing video targeting parameters. See [Video Object](#nobid-video-object) for details. | `video: { playback_method: ['auto_play_sound_off'] }` | `object`| + +### Note +If you are using Google Ad Manager (GAM), it is highly recommended to make sure the “Serve in Safeframe” box in creative settings is unchecked. +If you absolutely want to run NoBid in a Saferame creative, please contact your Nobid repsentative to coordinate this setup. + + # Test Parameters ``` var adUnits = [ From 56c784f66ce1c7955d693669005801ec3b479b5e Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 11 Jun 2020 12:23:29 -0400 Subject: [PATCH 006/150] pubwise moved to publisher (#2049) --- _data/partners.yml | 10 +++++----- .../images/partners/community/Pubwise-logo.png | Bin 4838 -> 0 bytes 2 files changed, 5 insertions(+), 5 deletions(-) delete mode 100644 assets/images/partners/community/Pubwise-logo.png diff --git a/_data/partners.yml b/_data/partners.yml index 94a9592aec..12f52dd618 100644 --- a/_data/partners.yml +++ b/_data/partners.yml @@ -138,6 +138,11 @@ imgURL: /assets/images/partners/publisher/PCH-logo_v3.jpg type: publisher +- company: PubWise + link: https://pubwise.io + imgURL: /assets/images/partners/publisher/Pubwise-logo.png + type: publisher + - company: SHE Media link: https://www.shemedia.com/ imgURL: /assets/images/partners/publisher/SHE_Media_Logo.png @@ -223,11 +228,6 @@ imgURL: /assets/images/partners/community/Publica-Logo.png type: community -- company: PubWise - link: https://pubwise.io - imgURL: /assets/images/partners/community/Pubwise-logo.png - type: community - - company: Simplaex link: https://simplaex.com type: community diff --git a/assets/images/partners/community/Pubwise-logo.png b/assets/images/partners/community/Pubwise-logo.png deleted file mode 100644 index 96b99777fd30278742bfa2d47d5210d62183146b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4838 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 IOb!+FKV$)y Date: Thu, 11 Jun 2020 12:34:57 -0400 Subject: [PATCH 007/150] Pubwise pub tier (#2050) * pubwise moved to publisher * pubwise image fix --- assets/images/partners/publisher/Pubwise-logo.png | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/images/partners/publisher/Pubwise-logo.png diff --git a/assets/images/partners/publisher/Pubwise-logo.png b/assets/images/partners/publisher/Pubwise-logo.png new file mode 100644 index 0000000000..e69de29bb2 From ca40b27640b4225cc71a307e38d1eec756c20637 Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 11 Jun 2020 12:38:39 -0400 Subject: [PATCH 008/150] pubwise logo fix (#2051) --- .../images/partners/publisher/Pubwise-logo.png | Bin 0 -> 4838 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/images/partners/publisher/Pubwise-logo.png b/assets/images/partners/publisher/Pubwise-logo.png index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..96b99777fd30278742bfa2d47d5210d62183146b 100644 GIT binary patch literal 4838 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 IOb!+FKV$)y Date: Thu, 11 Jun 2020 13:08:51 -0400 Subject: [PATCH 009/150] download page note (#2052) --- download.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/download.md b/download.md index 8978e2174c..a578b3e864 100644 --- a/download.md +++ b/download.md @@ -165,8 +165,9 @@ To improve the speed and load time of your site, build Prebid.js for only the he {% assign bidder_pages = site.pages | where: "layout", "bidder" %} {% assign module_pages = site.pages | where: "page_type", "module" %} -{: .alert.alert-success :} -Note: If you receive an error during download you most likely selected a configuration that is not supported. Verify that each bidder / module is available in the selected version. +{: .alert.alert-info :} +Note: If you receive an error during download you most likely selected a configuration that is not supported. Verify that each bidder / module is available in the selected version. Also please note that even though you can download older versions of Prebid.js, +Prebid only supports the most recent major version. Within a month or so after a major release (e.g. 3.x), we won't patch the previous major release (e.g. 2.x).
From de795f376b999aee77e53b03e6c285561cdbc497 Mon Sep 17 00:00:00 2001 From: Steve Suranie Date: Thu, 11 Jun 2020 15:56:52 -0400 Subject: [PATCH 010/150] fixed typo --- prebid-video/video-long-form.md | 80 ++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/prebid-video/video-long-form.md b/prebid-video/video-long-form.md index 0220d0d99a..dbf436ed1b 100644 --- a/prebid-video/video-long-form.md +++ b/prebid-video/video-long-form.md @@ -141,6 +141,84 @@ A string indicating the type of content being displayed in the video player. The After you’ve defined your ad units, you can continue with the rest of your configuration. +#### Deal Support + +To prioritize certain video deals and ensure delivery and performance within the Freewheel stack Prebid has additional configurations that can be enabled. + +`prioritizeDeals` +A boolean that indicates if deals should be given a higher preference. If true, Prebid will set the value of `hb_pb_cat_dur` with `bid.video.tier` replacing the cpm value. For example: + +
+    hb_pb_cat_dur=dealId_395_15s
+  
+ +`dealTier` +An object that enables publishers to set a prefix and minimum deal tier for each bidder. The `dealTier` object enables publishers to have different line item setups with varying priorities. + +`dealTier.prefix` +A string that enables bidders to target deal line items. + +`dealTier.minDealTier` +An integer that will give higher preference to deal bids when the `minDealTier` value is greater than five (5). Bids with `minDealTier` values less than five will not be ignored, however their cache key will contain `dealId` in place of `cpm`. These bids will be auctioned as non-deal bids. + +
+    // This will replace the cpm with dealId in cache key as well as targeting kv pair when prioritizeDeals flag is set to true.
+        pbjs.setConfig({
+        adpod: {
+          prioritizeDeals: true,
+          dealTier: {
+            'appnexus': {
+              prefix: 'tier',
+              minDealTier: 5
+            },
+            'some-other-bidder': {
+              prefix: 'deals',
+              minDealTier: 20
+            }
+          }
+        }
+        })
+    
+ +For adpods, the bidder will return multiple bids. Each bid can have a different priority/deal tier setting. To enable publishers to have control over the deal tier a `filterBids` setting has been added to `pbjs.adServers.freewheel.getTargeting` to select certain deal bids. + +
+    pbjs.adServers.freewheel.getTargeting({
+      codes: [adUnitCode1],
+      callback: function(err, targeting) {
+          //pass targeting to player api
+      }
+    });
+  
+ +Below is an example of a bid response for deals. + +
+  // Sample return targeting key value pairs
+    {
+    'adUnitCode-1': [
+      {
+        'hb_pb_cat_dur': 'tier9_400_15s', // Bid with deal id
+      },
+      {
+        'hb_pb_cat_dur': 'tier7_401_15s', // Bid with deal id
+      },
+      {
+        'hb_pb_cat_dur': '15.00_402_15s',
+      },
+      {
+        'hb_cache_id': '123'
+      }
+    ]
+    }
+  
+ ### Examples -See [Prebid Video Examples](/examples/video/long-form/pb-ve-lf-freewheel.html) for examples of long-form video ads. +See [Prebid Video Examples](/examples/video/long-form/pb-ve-lf-freewheel.html) for examples of long-form video ads. + +## Further Reading + +- [Prebid.js for Video Overview]({{site.github.url}}/prebid-video/video-overview.html) +- [Getting Started with Video for Prebid.js]({{site.github.url}}/prebid-video/video-getting-started.html) +- [What is Prebid?]({{site.github.url}}/overview/intro.html) From 1ec1350fa802469c59abf6bf66394c0b184095e5 Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 11 Jun 2020 17:32:30 -0400 Subject: [PATCH 011/150] safeframe and tcf2 fields (#2056) * safeframe and tcf2 fields * added safeframes_ok note --- dev-docs/bidder-adaptor.md | 11 ++++++++++- dev-docs/bidders.md | 7 ++++--- dev-docs/bidders/adform.md | 1 + dev-docs/bidders/adformOpenRTB.md | 3 ++- dev-docs/bidders/beachfront.md | 1 + dev-docs/bidders/connectad.md | 1 + dev-docs/bidders/conversant.md | 1 + dev-docs/bidders/medianet.md | 1 + dev-docs/bidders/rakuten.md | 1 + dev-docs/bidders/rubicon.md | 1 + dev-docs/bidders/sovrn.md | 1 + 11 files changed, 24 insertions(+), 5 deletions(-) diff --git a/dev-docs/bidder-adaptor.md b/dev-docs/bidder-adaptor.md index a481a0dcc0..eef4fe6664 100644 --- a/dev-docs/bidder-adaptor.md +++ b/dev-docs/bidder-adaptor.md @@ -987,7 +987,16 @@ registerBidder(spec); - [Write unit tests](https://github.com/prebid/Prebid.js/blob/master/CONTRIBUTING.md) - Create a docs pull request against [prebid.github.io](https://github.com/prebid/prebid.github.io) - Fork the repo - - Copy a file in [dev-docs/bidders](https://github.com/prebid/prebid.github.io/tree/master/dev-docs/bidders) and modify + - Copy a file in [dev-docs/bidders](https://github.com/prebid/prebid.github.io/tree/master/dev-docs/bidders) and modify. Add the following metadata to the header of your .md file: + - If you support the GDPR consentManagement module and TCF1, add `gdpr_supported: true` + - If you support the GDPR consentManagement module and TCF2, add `tcf2_supported: true` + - If you support the US Privacy consentManagementUsp module, add `usp_supported: true` + - If you support one or more userId modules, add `userId: (list of supported vendors)` + - If you support video and/or native mediaTypes add `media_types: video, native`. Note that display is added by default. If you don't support display, add "no-display" as the first entry, e.g. `media_types: no-display, native` + - If you support COPPA, add `coppa_supported: true` + - If you support SChain, add `schain_supported: true` + - If your bidder doesn't work well with safeframed creatives, add `safeframes_ok: false`. This will alert publishers to not use safeframed creatives when creating the ad server entries for your bidder. + - If you're a member of Prebid.org, add `prebid_member: true` - Submit both the code and docs pull requests Within a few days, the code pull request will be assigned to a developer for review. diff --git a/dev-docs/bidders.md b/dev-docs/bidders.md index 91c8aa8def..63961e3071 100644 --- a/dev-docs/bidders.md +++ b/dev-docs/bidders.md @@ -98,9 +98,10 @@ The following parameters in the `bidResponse` object are common across all bidde {: .table .table-bordered .table-striped } | **Bidder Code** | {{ page.biddercode }} | **Prebid.org Member** | {% if page.prebid_member == true %}yes{% else %}no{% endif %} | -| **Media Types** | display{% if page.media_types contains 'video' %}, video{% endif %}{% if page.media_types contains 'native' %}, native{% endif %} | **GDPR Support** | {% if page.gdpr_supported == true %}yes{% else %}no{% endif %} | -| **User IDs** | {% if page.userIds and page.userIds != '' %}{{page.userIds}}{% else %}none{% endif %} | **COPPA Support** | {% if page.coppa_supported == true %}yes{% else %}no{% endif %} | -| **SChain Support** | {% if page.schain_supported == true %}yes{% else %}no{% endif %} | **USP/CCPA Support** | {% if page.usp_supported == true %}yes{% else %}no{% endif %} | +| **Media Types** | {% unless page.media_types contains 'no-display' %}display{% endunless %}{% if page.media_types contains 'video' %},{% endif %}{% if page.media_types contains 'video' %} video{% endif %}{% if page.media_types != "no-display, native" and page.media_types contains 'native' %}, native{% endif %}{% if page.media_types == "no-display, native" %}native{% endif %} | **GDPR TCF1 Support** | {% if page.gdpr_supported == true %}yes{% else %}no{% endif %} | +| **User IDs** | {% if page.userIds and page.userIds != '' %}{{page.userIds}}{% else %}none{% endif %} | **GDPR TCF2 Support** | {% if page.tcf2_supported == true %}yes{% else %}no{% endif %} | +| **SChain Support** | {% if page.schain_supported == true %}yes{% else %}no{% endif %} | **COPPA Support** | {% if page.coppa_supported == true %}yes{% else %}no{% endif %} | +| **Safeframes OK** | {% if page.safeframes_ok and page.safeframes_ok == false %}no{% elsif page.safeframes_ok and page.safeframes_ok == true %}yes{% else %}check with bidder{% endif %} | **USP/CCPA Support** | {% if page.usp_supported == true %}yes{% else %}no{% endif %} |

"Send All Bids" Ad Server Keys

diff --git a/dev-docs/bidders/adform.md b/dev-docs/bidders/adform.md index 90d71c47cb..ea1e9b0e43 100644 --- a/dev-docs/bidders/adform.md +++ b/dev-docs/bidders/adform.md @@ -6,6 +6,7 @@ hide: true biddercode: adform media_types: video gdpr_supported: true +prebid_member: true --- diff --git a/dev-docs/bidders/adformOpenRTB.md b/dev-docs/bidders/adformOpenRTB.md index 11a1207dfd..2a94ca6448 100644 --- a/dev-docs/bidders/adformOpenRTB.md +++ b/dev-docs/bidders/adformOpenRTB.md @@ -4,8 +4,9 @@ title: AdformOpenRTB description: Prebid AdformOpenRTB Bidder Adaptor hide: true biddercode: adformOpenRTB -media_types: native +media_types: no-display, native gdpr_supported: true +prebid_member: true --- ### Bid params diff --git a/dev-docs/bidders/beachfront.md b/dev-docs/bidders/beachfront.md index fa34dc5cbb..ce100cfe89 100644 --- a/dev-docs/bidders/beachfront.md +++ b/dev-docs/bidders/beachfront.md @@ -8,6 +8,7 @@ media_types: video gdpr_supported: true usp_supported: true userIds: unifiedId +prebid_member: true --- ### Bid Params diff --git a/dev-docs/bidders/connectad.md b/dev-docs/bidders/connectad.md index f12474e478..5eae5da426 100644 --- a/dev-docs/bidders/connectad.md +++ b/dev-docs/bidders/connectad.md @@ -10,6 +10,7 @@ usp_supported: true coppa_supported: true schain_supported: true userIds: digitrust, id5Id, liveIntentId, parrableId, pubCommonId, unifiedId +prebid_member: true --- diff --git a/dev-docs/bidders/conversant.md b/dev-docs/bidders/conversant.md index ee7306d9a8..2fba4aa5ee 100644 --- a/dev-docs/bidders/conversant.md +++ b/dev-docs/bidders/conversant.md @@ -7,6 +7,7 @@ biddercode: conversant media_types: video gdpr_supported: true userIds: criteo, digitrust, id5Id, identityLink, liveIntentId, parrableId, pubCommonId, unifiedId +prebid_member: true --- diff --git a/dev-docs/bidders/medianet.md b/dev-docs/bidders/medianet.md index fcc8293e15..b77838acb7 100644 --- a/dev-docs/bidders/medianet.md +++ b/dev-docs/bidders/medianet.md @@ -8,6 +8,7 @@ gdpr_supported: true media_types: banner,native usp_supported: true userIds: britepoolId, criteo, digitrust, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId +prebid_member: true --- ### Bid Params diff --git a/dev-docs/bidders/rakuten.md b/dev-docs/bidders/rakuten.md index bab343099d..9aec967d29 100644 --- a/dev-docs/bidders/rakuten.md +++ b/dev-docs/bidders/rakuten.md @@ -4,6 +4,7 @@ title: Rakuten description: Prebid Rakuten Bidder Adaptor hide: true biddercode: rakuten +prebid_member: true --- diff --git a/dev-docs/bidders/rubicon.md b/dev-docs/bidders/rubicon.md index dfab7df5e1..3d769506d8 100644 --- a/dev-docs/bidders/rubicon.md +++ b/dev-docs/bidders/rubicon.md @@ -12,6 +12,7 @@ schain_supported: true media_types: video userIds: digitrust, identityLink, liveIntentId, pubCommonId, unifiedId prebid_member: true +safeframes_ok: true --- ### Note: diff --git a/dev-docs/bidders/sovrn.md b/dev-docs/bidders/sovrn.md index c40c01993b..7b4b894678 100644 --- a/dev-docs/bidders/sovrn.md +++ b/dev-docs/bidders/sovrn.md @@ -7,6 +7,7 @@ biddercode: sovrn gdpr_supported: true usp_supported: true userIds: digitrust +prebid_member: true --- From 366f591b064da6b7f203170641148fa237684fc6 Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 11 Jun 2020 19:52:31 -0400 Subject: [PATCH 012/150] removing homepage message (#2057) --- _data/message.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_data/message.yml b/_data/message.yml index 8f13558da5..648d16c179 100644 --- a/_data/message.yml +++ b/_data/message.yml @@ -1,4 +1,4 @@ #-------------Message---------------- - messageId: 1 - messageText: Register for our virtual meetup on June 2nd: Prebid Product Roadmap - messageCreateDt: 05_19_2020 + messageText: + messageCreateDt: From d2bca6e52fd97e222f0b4ce1ad1a0c7894090d0e Mon Sep 17 00:00:00 2001 From: Ricardo Azpeitia Pimentel Date: Thu, 11 Jun 2020 18:57:05 -0500 Subject: [PATCH 013/150] Update NextRoll docs for native support (#2043) * Add native docs * changed banner to display will discuss with the group whether we should change everything to 'banner' to match PBJS terminology Co-authored-by: bretg --- dev-docs/bidders/nextroll.md | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/dev-docs/bidders/nextroll.md b/dev-docs/bidders/nextroll.md index e1fb11b600..b985ae1d77 100644 --- a/dev-docs/bidders/nextroll.md +++ b/dev-docs/bidders/nextroll.md @@ -4,7 +4,7 @@ title: NextRoll description: Prebid NextRoll Bidder Adapter hide: true biddercode: nextroll -media_types: display +media_types: display, native gdpr_supported: false usp_supported: true --- @@ -56,3 +56,28 @@ var adUnits = [ } ]; ``` + +#### Example of Native Ad-unit +``` +var adUnits = [ + { + code: 'div-1', + mediaTypes: { + native: { + title: { required: true, len: 80 }, + image: { required: true, sizes: [728, 90] }, + sponsoredBy: { required: false, len: 20 } + } + }, + bids: [{ + bidder: 'nextroll', + params: { + bidfloor: 1, + zoneId: "13144370", + publisherId: "publisherId", + sellerId: "sellerId", + } + }] + } +]; +``` From 5b9520ff177ff40009b871a77ec218aabe9a0e14 Mon Sep 17 00:00:00 2001 From: Jozef Bartek <31618107+jbartek25@users.noreply.github.com> Date: Fri, 12 Jun 2020 01:58:34 +0200 Subject: [PATCH 014/150] Improve Digital TCFv2 support (#2046) * Improve Digital: CCPA support * Improve Digital TCFv2 support --- dev-docs/bidders/improvedigital.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/improvedigital.md b/dev-docs/bidders/improvedigital.md index bbf3423981..bfc6cf9331 100644 --- a/dev-docs/bidders/improvedigital.md +++ b/dev-docs/bidders/improvedigital.md @@ -8,6 +8,7 @@ gdpr_supported: true usp_supported: true media_types: banner, native, video schain_supported: true +tcf2_supported: true --- ### Bid params From db5a4973dd14685fc49224e04d713efc7a7e389a Mon Sep 17 00:00:00 2001 From: Tim Holmes-Mitra Date: Fri, 12 Jun 2020 01:19:52 +0100 Subject: [PATCH 015/150] New Adaptor: Glimpse Protocol (#2005) * New Adapter: Glimpse Protocol * Initial submission * Author: Tim Holmes-Mitra * * Removed table of contents * Added placementId example and type --- dev-docs/bidders/glimpseProtocol.md | 96 +++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 dev-docs/bidders/glimpseProtocol.md diff --git a/dev-docs/bidders/glimpseProtocol.md b/dev-docs/bidders/glimpseProtocol.md new file mode 100644 index 0000000000..5b22e1098b --- /dev/null +++ b/dev-docs/bidders/glimpseProtocol.md @@ -0,0 +1,96 @@ +--- +layout: bidder +title: Glimpse Protocol +description: Glimpse Protocol Bidder Adapter +biddercode: glimpse +hide: true +gdpr_supported: true +tcf2_supported: true +media_types: banner +--- + +## Overview + +``` +Module Name: Glimpse Protocol Adaptor +Module Type: Bidder Adapter +Maintainer: tim@glimpseprotocol.io +``` + +## Description + +This module connects publishers to Glimpse Protocol's demand sources via Prebid.js. Our +innovative marketplace protects consumer privacy while allowing precise targeting. It is +compliant with GDPR, DPA and CCPA. + +This module was built and tested against prebid 3.21.0 and so compatibility against +version 2 and earlier is unknown. + +## Media Types + +| Type | Support | +| -------- | ------------------------------------------------------------------ | +| `Banner` | Fully supported for 320x50, 300x250, 300x600, 728x90, and 970x250. | + +## Bid Parameters + +The only parameter is `placementId` and it is required. + +### Banner + +| Name | Scope | Description | Example | Type | +| ------------- | -------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------- | ------ | +| `placementId` | Required | An identifier associated unique to a publisher and ad unit. Values can be obtained through our publisher portal. | 'glimpse-demo-300x250' | String | + +## Setup Guide + +Follow these steps to configure and add the glimpse module to your Prebid.js integration. + +### 0. Preconditions + +- A built prebid module with the glimpse adaptor included +- You've included the built prebid adaptor and GPT script in your websites html code +- You've setup GAM mappings + +### 1. Create an account and setup your domain via the Publisher Portal + +Coming soon. + +### 2. Enable Glimpse as a bidder on your ad units + +```javascript +const adUnits = { + code: 'your-ad-unit-div-id', + mediaTypes: { + banner: { + sizes: [[300, 250]], + }, + }, + bids: [ + { + bidder: 'glimpse', + params: { + placementId: 'placementId-from-publisher-portal', + }, + }, + ... + ], + ... +} +``` + +## FAQs + +### Can I test my setup without a Publisher Portal Account? + +Yep. Use a demo placementId: + +- glimpse-demo-320x50 +- glimpse-demo-300x250 +- glimpse-demo-300x600 +- glimpse-demo-728x90 +- glimpse-demo-970x250 + +### How do I get more help? + +Reach out to us at [hello@glimpseprotocol.io](mailto:hello@glimpseprotocol.io) From 6b0310a5b778e146c2c0ba5d27b70af5f2c0d5a1 Mon Sep 17 00:00:00 2001 From: matthieularere-msq <63732822+matthieularere-msq@users.noreply.github.com> Date: Fri, 12 Jun 2020 02:21:14 +0200 Subject: [PATCH 016/150] Mediasquare bidder documentation (#2017) * add dev-docs/bidders for mediasquare * Update mediasquare.md * added quotes around the strings in the examples * removing schain and usp as not supported yet Co-authored-by: Jean Stemp <38964447+jeanstemp@users.noreply.github.com> --- dev-docs/bidders/mediasquare.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 dev-docs/bidders/mediasquare.md diff --git a/dev-docs/bidders/mediasquare.md b/dev-docs/bidders/mediasquare.md new file mode 100644 index 0000000000..55fe005c3c --- /dev/null +++ b/dev-docs/bidders/mediasquare.md @@ -0,0 +1,21 @@ +--- +layout: bidder +title: MediaSquare +description: Prebid MediaSquare Bidder Adapter +hide: true +biddercode: mediasquare +gdpr_supported: true +tcf2_supported: true +usp_supported: false +schain_supported: false +media_types: banner +--- + + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------|--------------------------------------|-----------| +| `owner ` | required | Mediasquare owner ID | `'test'` | `string` | +| `code` | required | Mediasquare code ID | `'publishername_atf_desktop_rg_pave'` | `string` | From 38d3c1f624af58c858bc332f3f5499ef080ddc75 Mon Sep 17 00:00:00 2001 From: h12media <65672347+h12media@users.noreply.github.com> Date: Fri, 12 Jun 2020 03:21:40 +0300 Subject: [PATCH 017/150] Add module H12 Media (#2026) --- dev-docs/bidders/h12media.md | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 dev-docs/bidders/h12media.md diff --git a/dev-docs/bidders/h12media.md b/dev-docs/bidders/h12media.md new file mode 100644 index 0000000000..63c3649467 --- /dev/null +++ b/dev-docs/bidders/h12media.md @@ -0,0 +1,33 @@ +--- +layout: bidder +title: H12 Media +description: Prebid H12 Media Bidder Adaptor +hide: true +biddercode: h12media +media_types: banner +gdpr_supported: true +--- + + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|------------------------|-----------------------------|----------| +| `pubid` | required | Publisher ID | `123` | `string` | +| `placementid` | optional | Publisher placement ID | `321` | `string` | +| `size` | optional | Creative size | `'300x250'` | `string` | +| `endpointdom` | optional | Custom Endpoint URL | `https://h12-media.com/bid` | `string` | + +Example: + +``` bash +{ + bidder: "h12media", + params: { + pubid: 123, + placementid: 321, + size: '300x250' + } +} +``` From ae145b3bf828fe55f98922fcdf4a59298df2459b Mon Sep 17 00:00:00 2001 From: Simon Critchley Date: Fri, 12 Jun 2020 01:22:05 +0100 Subject: [PATCH 018/150] adds avocet bid adapter (#1990) --- dev-docs/bidders/avocet.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 dev-docs/bidders/avocet.md diff --git a/dev-docs/bidders/avocet.md b/dev-docs/bidders/avocet.md new file mode 100644 index 0000000000..3c6a9bd89d --- /dev/null +++ b/dev-docs/bidders/avocet.md @@ -0,0 +1,20 @@ +--- +layout: bidder +title: Avocet +description: Prebid Avocet Bidder Adapter +hide: true +biddercode: avct +gdpr_supported: true +media_types: banner, video +schain_supported: true +usp_supported: true +tcf2_supported: true +--- + + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------------|----------|------------------------------|------------------------------|-----------| +| `placement` | required | A Placement ID from Avocet. | `"5ebd27607781b9af3ccc3332"` | `string` | From 2ca29c9d340eb00017a51f073751d364f868eeb7 Mon Sep 17 00:00:00 2001 From: sumit sharma Date: Fri, 12 Jun 2020 05:53:24 +0530 Subject: [PATCH 019/150] add publisherId to appnexus adapter bid params (#1986) Co-authored-by: sumit sharma --- dev-docs/bidders/appnexus.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev-docs/bidders/appnexus.md b/dev-docs/bidders/appnexus.md index 8be0373b01..4839a083fb 100644 --- a/dev-docs/bidders/appnexus.md +++ b/dev-docs/bidders/appnexus.md @@ -36,9 +36,10 @@ All AppNexus placements included in a single call to `requestBids` must belong t {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |---------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------|------------------| -| `placementId` | required | The placement ID from AppNexus. You may identify a placement using the `invCode` and `member` instead of a placement ID. The `placementID` parameter can be either a `string` or `integer` for Prebid.js, however `integer` is preferred. Legacy code can retain the `string`value. **Prebid Server requires an integer value.** | `234234` | `integer` | +| `placementId` | required | The placement ID from AppNexus. You may identify a placement using the `invCode` and `member` instead of a placement ID. The `placementID` parameter can be either a `string` or `integer` for Prebid.js, however `integer` is preferred. Legacy code can retain the `string` value. **Prebid Server requires an integer value.** | `234234` | `integer` | | `member` | optional | The member ID from AppNexus. Must be used with `invCode`. | `'12345'` | `string` | | `invCode` | optional | The inventory code from AppNexus. Must be used with `member`. | `'abc123'` | `string` | +| `publisherId` | optional | The publisher ID from AppNexus. It is used by the AppNexus end point to identify the publisher when `placementId` is not provided and `invCode` goes wrong. The `publisherId` parameter can be either a `string` or `integer` for Prebid.js, however `integer` is preferred. | `12345` | `integer` | | `user` | optional | Object that specifies information about an external user. See [User Object](#appnexus-user-object) for details. | `user: { age: 25, gender: 0, dnt: true}` | `object` | | `allowSmallerSizes` | optional | If `true`, ads smaller than the values in your ad unit's `sizes` array will be allowed to serve. Defaults to `false`. | `true` | `boolean` | | `usePaymentRule` | optional | If `true`, Appnexus will return net price to Prebid.js after publisher payment rules have been applied. | `true` | `boolean` | From 9305f75b00b344c0fa931bea82d9357e6d4a6c2d Mon Sep 17 00:00:00 2001 From: preved-medved Date: Fri, 12 Jun 2020 01:24:13 +0100 Subject: [PATCH 020/150] Add documentation for AdPartner bid adapter (#1961) * Add documentation for AdPartner bid adapter * Add mock banner for test launch --- dev-docs/bidders/adpartner.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 dev-docs/bidders/adpartner.md diff --git a/dev-docs/bidders/adpartner.md b/dev-docs/bidders/adpartner.md new file mode 100644 index 0000000000..51e3705785 --- /dev/null +++ b/dev-docs/bidders/adpartner.md @@ -0,0 +1,16 @@ +--- +layout: bidder +title: AdPartner +description: Prebid AdPartner Bidder Adaptor +hide: true +biddercode: adpartner +media_types: banner + +--- + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-------------|----------------------|-----------| +| `unitId` | required | Unit ID. | `5809` | `integer` | From ea4391963fc4d8cf91e9cf83e2326968a065ef9b Mon Sep 17 00:00:00 2001 From: Ian Flournoy Date: Thu, 11 Jun 2020 20:30:55 -0400 Subject: [PATCH 021/150] PBID-11: Update Parrable ID system configuration example to remove storage options (#1973) --- dev-docs/modules/userId.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/dev-docs/modules/userId.md b/dev-docs/modules/userId.md index e2dc1bd541..c01e5cbb67 100644 --- a/dev-docs/modules/userId.md +++ b/dev-docs/modules/userId.md @@ -505,7 +505,7 @@ gulp build --modules=parrableIdSystem #### Parrable ID Registration -Please contact Parrable to obtain a Parrable Partner Client ID and/or use the Parrable Partner Client ID provided by the vendor for each Parrable-aware bid adapter you will be using. Note that if you are working with multiple Parrable-aware bid adapters you may use multiple Parrable Parter Client IDs. +Please contact Parrable to obtain a Parrable Partner Client ID and/or use the Parrable Partner Client ID provided by the vendor for each Parrable-aware bid adapter you will be using. Note that if you are working with multiple Parrable-aware bid adapters you may use multiple Parrable Partner Client IDs. The Parrable privacy policy as at [https://www.parrable.com/privacy-policy/](https://www.parrable.com/privacy-policy/). @@ -522,7 +522,10 @@ In addition to the parameters documented above in the Basic Configuration sectio {: .alert.alert-info :} NOTE: The Parrable ID that is delivered to Prebid is encrypted by Parrable with a time-based key and updated frequently in the browser to enforce consumer privacy requirements and thus will be different on every page view, even for the same user. -We recommend setting `storage.expires` to no more than`364` days, which is the default cookie expiration that Parrable uses in the standalone Parrable integration. +The Parrable ID system manages a cookie with the name of `_parrable_id` containing the ID and optout states of the user. +This cookie is used also by standalone Parrable integrations outside of Prebid. +It is for this reason that the cookie name is not configurable for the Parrable ID system. + #### Parrable ID Examples @@ -533,11 +536,6 @@ pbjs.setConfig({ name: `'parrableId'`, params: { partner: `'30182847-e426-4ff9-b2b5-9ca1324ea09b'` // change to the Parrable Partner Client ID(s) you received from the Parrable Partners you are using - }, - storage: { - type: `'cookie'`, - name: `'_parrable_eid'`, // create a cookie with this name - expires: 364 // cookie can last for up to 1 year } }], syncDelay: 1000 From 7f8ddd64b7a33b0e45c54fa0c3cad81e8bf1d65e Mon Sep 17 00:00:00 2001 From: Jurij Sinickij Date: Fri, 12 Jun 2020 03:31:54 +0300 Subject: [PATCH 022/150] adform adapters support us_privacy and tcf2 (#1968) Co-authored-by: bretg --- dev-docs/bidders/adform.md | 2 ++ dev-docs/bidders/adformOpenRTB.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/dev-docs/bidders/adform.md b/dev-docs/bidders/adform.md index ea1e9b0e43..acafc7e7b7 100644 --- a/dev-docs/bidders/adform.md +++ b/dev-docs/bidders/adform.md @@ -6,6 +6,8 @@ hide: true biddercode: adform media_types: video gdpr_supported: true +usp_supported: true +tcf2_supported: true prebid_member: true --- diff --git a/dev-docs/bidders/adformOpenRTB.md b/dev-docs/bidders/adformOpenRTB.md index 2a94ca6448..532a6b713e 100644 --- a/dev-docs/bidders/adformOpenRTB.md +++ b/dev-docs/bidders/adformOpenRTB.md @@ -6,6 +6,8 @@ hide: true biddercode: adformOpenRTB media_types: no-display, native gdpr_supported: true +usp_supported: true +tcf2_supported: true prebid_member: true --- From 58f3acab4d66edfebff91f729965a6f611973adb Mon Sep 17 00:00:00 2001 From: Konduit <55142865+konduit-dev@users.noreply.github.com> Date: Fri, 12 Jun 2020 03:32:30 +0300 Subject: [PATCH 023/150] Konduit Accelerate documentation update (#1985) * Konduit Module initial documentation version. * re-ordering modules in left-nav * minor edits added the gulp build command, general wordsmithing * Updated konduit documentation * Updated konduit.md file * Reverted chacges in sidebar.yml * "Send all bids" details added * fixed typo in konduit.md * Update konduit.md minor editorial updates Co-authored-by: Alexander Kislitsyn Co-authored-by: bretg Co-authored-by: Max Shevchenko Co-authored-by: Jean Stemp <38964447+jeanstemp@users.noreply.github.com> --- dev-docs/modules/konduit.md | 90 +++++++++++++++++++++++++------------ 1 file changed, 61 insertions(+), 29 deletions(-) diff --git a/dev-docs/modules/konduit.md b/dev-docs/modules/konduit.md index 86aa76663e..686b8575a7 100644 --- a/dev-docs/modules/konduit.md +++ b/dev-docs/modules/konduit.md @@ -8,55 +8,88 @@ display_name : Konduit Accelerate enable_download : true sidebarType : 1 --- -​ + # Konduit Accelerate Module {:.no_toc} -​ + The Konduit Accelerate module applies the [Konduit](https://konduitvideo.com/) video acceleration optimization to a publisher’s existing Prebid setup. This optimization provides publishers with tools to monetize previously lost revenue and drive higher fill rates on their video inventory. -​ + To install the module, follow these instructions: - + ### Step 1: Prepare the base Prebid file -​ + Build your Prebid.js package in one of two ways: -​ + - Receive an email package from the Prebid [Download](/download.html) page. -​ + - From the command line, run `gulp build --modules=konduitWrapper,...` -​ -​ + + ### Step 2: Implement module code on page -​ + - Add konduitId as config using `setConfig` prebid method (`pbjs.setConfig({ konduit: { konduitId: your_konduit_id } })`) -​ + - Insert the Konduit module code in the source code of your page. The module exposes the `pbjs.adServers.konduit.processBids` function. - -- Provide input parameters to the function (all parameters are shown in the table below). -​ + +- Provide input parameters to the function. (All parameters are shown in the following table.) + {: .table .table-bordered .table-striped } | Param | Type | Description | Default | |---+---+---+---+---| - | bid | object | prebid object with VAST url that should be cached | if the bid parameter is not passed then first winning bid will be used | + | bid | object | Prebid object with VAST URL that should be cached | If the bid parameter is not passed then first winning bid will be used | + | bids | array | An array of Prebid objects with VAST URL that should be cached | If the bids parameter is not passed then all received bids will be used | | adUnitCode | string | adUnitCode where a winner bid can be found | - | - | timeout | number | max time to wait for Konduit response with cache key and kCpm data | 1000 | - | callback | function | callback function is called once Konduit caches data for the bid. Arguments of this function are - `error` and `bids` (error should be `null` if Konduit request is successful). | - | + | timeout | number | Max time to wait for Konduit response with cache key and kCpm data | 1000 | + | callback | function | The callback function is called once Konduit caches data for the bid. Arguments of this function are `error` and `bids` (`error` should be `null` if Konduit request is successful). | - | -### Step 3: GAM related configuration -​ -In order for Konduit’s module to be completely integrated, line item Creatives need to be adjusted in GAM. -Please contact [support@konduit.me](mailto:support@konduit.me) for assistance. -​ -Standard implementation requires only Creative VAST URL update with the following URL: -``` -https://p.konduit.me/api/vastProxy?konduit_hb=1&konduit_hb_awarded=1&konduit_cache_key=%%PATTERN:konduit_cache_key%%&konduit_id=%%PATTERN:konduit_id%% +Konduit Accelerate module respects the Prebid `enableSendAllBids` flag and supports both ‘Send All Bids’ and ‘Use only the winning bid’ scenarios. + +Prebid set the `enableSendAllBids` flag to true by default and it can be explicitly disabled in Prebid config if needed. +```javascript +pbjs.setConfig({ + enableSendAllBids: false +}); ``` -​ +Please refer to [Publisher API Reference (Send All Bids)](https://prebid.org/dev-docs/publisher-api-reference.html#setConfig-Send-All-Bids) for more information on the Send All Bids settings. + +### Step 3: Configure Google Ad Manager (GAM) + +In order for Konduit’s module to be completely integrated, line item creatives need to be adjusted in GAM. +Please contact [support@konduit.me](mailto:support@konduit.me) for assistance. + +In most cases it will be enough to update a creative VAST URL in related GAM line items. + +Konduit platform supports the ‘Send all bids’ scenario, but the GAM configuration can differ slightly depending on whether or not this feature is enabled. + +- If Send all bids is disabled (a single winning bid is used), update the GAM line item creative URL as follows: +`https://p.konduit.me/api/vastProxy?konduit_hb=1&konduit_hb_awarded=1&konduit_cache_key=%%PATTERN:k_cache_key%%&konduit_id=%%PATTERN:k_id%%` + +- If Send all bids is enabled, update the GAM line item creative URL as shown here: +`https://p.konduit.me/api/vastProxy?konduit_hb=1&konduit_hb_awarded=1&konduit_cache_key=%%PATTERN:k_cache_key_BIDDERCODE%%&konduit_id=%%PATTERN:k_id%%` + +`k_cache_key_BIDDERCODE` is a bidder-specific macro. Replace ‘BIDDERCODE’ with an actual bidder code, such as `k_cache_key_appnexus`. + +Note that the creative URL contains a few custom macros that allow Konduit platform to combine different data for predictive insights functionality. + +{: .table .table-bordered .table-striped } + | Macro name | Example | Comment | + |---+---+---+---| + | k_id | %%PATTERN:k_id%% | The macro passes Konduit client id provided in a publisher call back to Konduit platform. Should be used as is. | + | konduit_id | %%PATTERN:konduit_id%% | *This macro is deprecated and k_id should be used instead* | + | k_cache_key | %%PATTERN:k_cache_key%% | The macro is passing a cache key so that Konduit platform is able to fetch current bid tag for processing. This macro is recommended for use in a ‘single bid’ mode. In ‘send all bids’ mode it always represents a winning bid. | + | konduit_cache_key | %%PATTERN:konduit_cache_key%% | *This macro is deprecated and k_cache_key should be used instead* | + | k_cache_key_BIDDERCODE | %%PATTERN:k_cache_key_rubicon%% | The macro is passing a cache key so that Konduit platform is able to fetch a bidder tag for processing. This macro should be used in a ‘send all bids’ mode. | + +Refer to the following documentation for more information on Google Ad Manager setup: +[Step By Step Guide to Google Ad Manager Setup](https://prebid.org/adops/step-by-step.html) +[Send all bids to the ad server - Ad Ops setup](https://prebid.org/adops/send-all-bids-adops.html) + ### Sample Code -​ + We recommended using the Konduit module function call in the `bidsBackHandler` callback function. -​ + ```javascript pbjs.que.push(function() { pbjs.setConfig({ @@ -86,7 +119,6 @@ pbjs.que.push(function() { }); ``` ​ -​ ## Further Reading ​ [Getting Started Example]({{site.baseurl}}/dev-docs/getting-started.html) From a8c80373247b3ac53a8a09e42c106bf9ab57f630 Mon Sep 17 00:00:00 2001 From: onlsol <48312668+onlsol@users.noreply.github.com> Date: Fri, 12 Jun 2020 02:33:04 +0200 Subject: [PATCH 024/150] Update dspx.md (#1997) * Update dspx.md * tweaks no longer any need for bidder_code_longer_than_12 * Update dspx.md Co-authored-by: bretg --- dev-docs/bidders/dspx.md | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/dev-docs/bidders/dspx.md b/dev-docs/bidders/dspx.md index d289658e14..a90094486b 100644 --- a/dev-docs/bidders/dspx.md +++ b/dev-docs/bidders/dspx.md @@ -1,13 +1,16 @@ --- layout: bidder -title: Dspx -description: Prebid Dspx Bidder Adaptor +title: DSPx +description: Prebid DSPx Bidder Adapter hide: true biddercode: dspx -media_types: banner -gdpr_supported: false +media_types: banner, video +gdpr_supported: true +tcf2_supported: true --- +### Note: +The DSPx Bidder Adapter requires setup and approval from DSPx team. Please reach out to your account team or prebid@dspx.tv for more information. ### Bid Params @@ -16,6 +19,13 @@ gdpr_supported: false | Name | Scope | Description | Example | Type | |---------------|----------|----------------------------------------------------------------------------|------------------------|-----------------| | `placement` | required | Placement ID from dspx. | `'101'` | `string` | -| `pfilter` | optional | Selection filter. See [here](https://github.com/prebid/Prebid.js/blob/master/modules/dspxBidAdapter.md) for more details. | `{"floorprice": 1000000}`| `object` | +| `pfilter` | optional | Selection filter. E.g. floorprice (min_cpm_micros) | `{"floorprice": 1000000}`| `object` | | `bcat` | optional | List of Blocked Categories (IAB) - comma separated. | `'IAB2,IAB4'` | `string` | -| `dvt` | optional | DeVice Type of `[desktop,smartphone,tv,tablet]` (autodetect if not exists). | `'desktop'` | `string` | + + +**Notice:** The creative type can be checked by the `type` property of `bidResponse` object. E.g.: +```js +bidsBackHandler: function(bids) { + var contentType = bids[0].type // JS InSkin|JS Interscroller Type A|...; +} +``` From 68a6d7bbe25a7deadcdd1bae9e8f172eb6edee96 Mon Sep 17 00:00:00 2001 From: susyt Date: Thu, 11 Jun 2020 17:33:57 -0700 Subject: [PATCH 025/150] GumGum: updates doc (#2007) * specifies us privacy is supported * adds video support to gumgum md * adds support for tcf 2 * adds new bid param to gumgum.md --- dev-docs/bidders/gumgum.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/gumgum.md b/dev-docs/bidders/gumgum.md index 2cbb7a71cc..c129461d0c 100644 --- a/dev-docs/bidders/gumgum.md +++ b/dev-docs/bidders/gumgum.md @@ -27,4 +27,5 @@ information. | `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` | From e19eb6b3771aff21ef9a925acca3b874eca861b6 Mon Sep 17 00:00:00 2001 From: Itay Nave <38345760+itaynave@users.noreply.github.com> Date: Fri, 12 Jun 2020 03:35:52 +0300 Subject: [PATCH 026/150] Add selectmedia video alias (#2035) * New adapter for aniview * Update aniview.md * Create selectmediavideo.md --- dev-docs/bidders/selectmediavideo.md | 42 ++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 dev-docs/bidders/selectmediavideo.md diff --git a/dev-docs/bidders/selectmediavideo.md b/dev-docs/bidders/selectmediavideo.md new file mode 100644 index 0000000000..9efbbac8be --- /dev/null +++ b/dev-docs/bidders/selectmediavideo.md @@ -0,0 +1,42 @@ +--- +layout: bidder +title: SelectMedia Video +description: SelectMedia Video Bidder Adapter +hide: true +biddercode: selectmediavideo +aliasCode: aniview +media_types: video +gdpr_supported: true +usp_supported: true +--- + +### Note: +For more information about [SelectMedia](http://www.selectmedia.asia/). + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|------------------|----------|------------------|------------------------------|----------| +| `AV_PUBLISHERID` | required | Publisher/Netid | `'55b88d4a181f465b3e8b4567'` | `string` | +| `AV_CHANNELID` | required | Channel id | `'5a5f17a728a06102d14c2718'` | `string` | + +### Test Parameters +``` +videoAdUnit = [ +{ + code: 'video1', + mediaTypes: { + video: { + playerSize: [[640, 480]], + context: 'outstream' + }, + }, + bids: [{ + bidder: 'selectmediavideo', + params: { + AV_PUBLISHERID: '55b78633181f4603178b4568', + AV_CHANNELID: '5d19dfca4b6236688c0a2fc4' + } + }] +}]; \ No newline at end of file From fb7f447f132fcc26e4c2013b5e3b3a3b58f1659a Mon Sep 17 00:00:00 2001 From: Olivier Date: Fri, 12 Jun 2020 02:36:39 +0200 Subject: [PATCH 027/150] Adagio: update scope params (#2037) --- dev-docs/bidders/adagio.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dev-docs/bidders/adagio.md b/dev-docs/bidders/adagio.md index 564313bfd0..a57c4b8be4 100644 --- a/dev-docs/bidders/adagio.md +++ b/dev-docs/bidders/adagio.md @@ -24,10 +24,10 @@ The Adagio bidder adaptor requires setup and approval from the Adagio team. Plea |--------------------|--------------------|----------------------------------------------------------------------------------------------------------------------|-----------------|-----------| | `organizationId` | required | Id of the Organization. Handed out by Adagio. | `'1010'` | `string` | | `site` | required | Name of the site. Handed out by Adagio.
- max length: 50 | `'mysite-com'` | `string` | +| `placement`* | required | Refers to the placement of an adunit in a page.
Must not contain any information about the type of device.
- max length: 30
- max distinctives values: 10 | `'ban_atf'` | `string` | | `adUnitElementId` | required | Refers to the adunit html attribute id in a page. | `'gpt-ban-atf'` | `string` | -| `environment`* | required | Environment where the page is displayed.
- max length: 30
- max distinctives values: 10 | `'desktop'` | `string` | -| `placement`* | required | Refers to the placement of an adunit in a page.
Must not contain any information about the type of device.
- max length: 30
- max distinctives values: 10 | `'ban_atf'` | `string` | -| `pagetype`* | recommended | Describes what kind of content will be present in the page.
- max length: 30
- max distinctives values: 50 | `'article'` | `string` | +| `pagetype`* | highly recommended | Describes what kind of content will be present in the page.
- max length: 30
- max distinctives values: 50 | `'article'` | `string` | +| `environment`* | recommended | Environment where the page is displayed.
- max length: 30
- max distinctives values: 10 | `'desktop'` | `string` | | `category`* | recommended | Category of the content displayed in the page.
- max length: 30
- max distinctives values: 50 | `'sport'` | `string` | | `subcategory`* | optional | Subcategory of the content displayed in the page.
- max length: 30
- max distinctives values: 50 | `'handball'` | `string` | | `postBid` | optional | Used in Post-Bid context only. | `true` | `boolean` | From 3c601721fa1e7ab9901da2ba8481d2ff57d6a5e8 Mon Sep 17 00:00:00 2001 From: MartianTribe Date: Fri, 12 Jun 2020 11:52:16 -0400 Subject: [PATCH 028/150] Fixed a typo. (#2058) Co-authored-by: Steve --- prebid-mobile/prebid-mobile.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prebid-mobile/prebid-mobile.md b/prebid-mobile/prebid-mobile.md index 13af05b1ba..7346125dd4 100644 --- a/prebid-mobile/prebid-mobile.md +++ b/prebid-mobile/prebid-mobile.md @@ -58,7 +58,7 @@ The following diagram shows how the Prebid Mobile header bidding solution works. 6. If the line item associated with the Prebid Mobile bid wins, the primary ad server returns the Prebid Mobile creative JavaScript to the ad server's SDK. -7. The Prebid Mobile creative JavaScript will fetch and render the corresponding creative con +7. The Prebid Mobile creative JavaScript will fetch and render the corresponding creative content from the winning Prebid Server demand partner. ## Mobile Analytics From ac81560ac07aa57a7898438fc256f4ac819a8962 Mon Sep 17 00:00:00 2001 From: bretg Date: Fri, 12 Jun 2020 18:02:31 -0400 Subject: [PATCH 029/150] gdprEnforcement fixing examples and legal basis (#2059) --- dev-docs/modules/gdprEnforcement.md | 42 +++++++---------------------- 1 file changed, 10 insertions(+), 32 deletions(-) diff --git a/dev-docs/modules/gdprEnforcement.md b/dev-docs/modules/gdprEnforcement.md index 8fd1bdfed4..fad8c51941 100644 --- a/dev-docs/modules/gdprEnforcement.md +++ b/dev-docs/modules/gdprEnforcement.md @@ -80,7 +80,7 @@ pbjs.setConfig({ purpose: "storage", enforcePurpose: true, enforceVendor: true - } + }] } } }); @@ -94,7 +94,7 @@ pbjs.setConfig({ enforcePurpose: true, enforceVendor: true, vendorExceptions: ["bidderA"] - } + }] 3) Enforce that the user consents to DeviceAccess as an activity, but don't consider their per-vendor selection. @@ -103,7 +103,7 @@ pbjs.setConfig({ purpose: "storage", enforcePurpose: true, enforceVendor: false, - } + }] 4) Enforce that the user consents to DeviceAccess as an activity, but don't consider their per-vendor selection. BidderA is entrusted to enforce the rules on their own. @@ -113,7 +113,7 @@ pbjs.setConfig({ enforcePurpose: true, enforceVendor: false, vendorExceptions: ["bidderA"] - } + }] 5) Turn off enforcement of Purpose 1: don't enforce either the user's DeviceAccess consent or their per-vendor selection. @@ -122,7 +122,7 @@ pbjs.setConfig({ purpose: "storage", enforcePurpose: false, enforceVendor: false - } + }] 6) Don't enforce the user's DeviceAccess consent, but do consider their per-vendor selection. @@ -131,7 +131,7 @@ pbjs.setConfig({ purpose: "storage", enforcePurpose: false, enforceVendor: true - } + }] 7) Don't enforce the user's DeviceAccess consent, but do consider their per-vendor selection except for BidderA. @@ -141,7 +141,7 @@ pbjs.setConfig({ enforcePurpose: false, enforceVendor: true, vendorExceptions: ["bidderA"] - } + }] ## Basic Enforcement @@ -154,35 +154,13 @@ Before allowing an activity tied to a TCF-protected Purpose for a given vendor, - Configuration rules enforce both consent and vendor signals and either: - we have the user’s purpose consent and the user’s vendor consent, or - - we confirmed the user’s LI (Legitimate Interest) Transparency is established for this purpose and the user’s Vendor LI field didn’t reject this vendor. + - (for Purpose 2 only) we've confirmed the user’s LI (Legitimate Interest) Transparency is established for this purpose - Configuration rules enforce only purpose consent and either: - we have the user’s purpose consent, or - - we confirmed the user’s LI Transparency is established for this purpose. -- Configuration rules enforce only vendor signals and either: - - we have the user’s vendor consent, or - - we confirmed the user’s Vendor LI field didn’t reject this vendor + - (for Purpose only) we confirmed the user’s LI Transparency is established for this purpose. +- Configuration rules enforce only vendor signals and we have the user’s vendor consent - Configuration rules enforce neither purpose consent nor vendor signal. -Technically these rules are defined as follows: - -1. enforcePurpose[P]==true AND PurposesConsent[P]==1 AND enforceVendor[P,V]==true AND VendorConsentBitfield[V]==1 -1. enforcePurpose[P]==true AND PurposesConsent[P]==1 AND enforceVendor[P,V]==false -1. enforcePurpose[P]==false AND enforceVendor[P,V]==true AND VendorConsentBitfield[V]==1 -1. enforcePurpose[P]==true AND PurposesLITransparency[P]==1 AND enforceVendor[P,V]==true AND VendorLegitimateInterestBitfield[V]==1 -1. enforcePurpose[P]==true AND PurposesLITransparency[P]==1 AND enforceVendor[P,V]==false -1. enforcePurpose[P]==false AND enforceVendor[P,V]==true AND VendorLegitimateInterestBitfield[V]==1 -1. enforcePurpose[P]==false AND enforceVendor[P,V]==false - -Where: - -- P is the Purpose number -- V is the vendor ID -- 'enforcePurpose' and 'enforceVendor' are Prebid.js config rules -- 'PurposesConsent' is the consent string field of the same name -- 'VendorConsentBitfield' is the consent string 'Vendor Consent Section' -- 'PurposesLITransparency' is the consent string field of the same name -- 'VendorLegitimateInterestBitfield' is the consent string 'Vendor Legitimate Interest Section' - See the [IAB TCF Consent String Format](https://github.com/InteractiveAdvertisingBureau/GDPR-Transparency-and-Consent-Framework/blob/master/TCFv2/IAB%20Tech%20Lab%20-%20Consent%20string%20and%20vendor%20list%20formats%20v2.md) for details. ## Build the Package From a7657ff867864685dd33facd70b4745f04bb198a Mon Sep 17 00:00:00 2001 From: Steve Suranie Date: Mon, 15 Jun 2020 11:22:17 -0400 Subject: [PATCH 030/150] Removed extraneous files. --- sandbox/alerttest.html | 25 - sandbox/apiCatgories/about.html | 54 -- sandbox/apiCatgories/adunit.html | 10 - sandbox/apiCatgories/bids.html | 16 - sandbox/apiCatgories/configuration.html | 34 -- sandbox/apiCatgories/server.html | 10 - sandbox/apiCatgories/targeting.html | 9 - .../html/adServersDFPBuildVideoUrl.html | 198 ------- .../html/adServersFreewheelGetTargeting.html | 85 --- sandbox/apiDocs/html/addAdUnits.html | 453 --------------- sandbox/apiDocs/html/aliasBidder.html | 95 ---- sandbox/apiDocs/html/app.html | 83 --- sandbox/apiDocs/html/bidResponseParams.html | 168 ------ sandbox/apiDocs/html/bidResponseSample.html | 46 -- sandbox/apiDocs/html/bidderOrder.html | 73 --- sandbox/apiDocs/html/bidderSettings.html | 298 ---------- sandbox/apiDocs/html/bidderTimeout.html | 50 -- sandbox/apiDocs/html/debugging.html | 51 -- sandbox/apiDocs/html/disableAjaxTimeout.html | 49 -- sandbox/apiDocs/html/enableSendAllBids.html | 59 -- sandbox/apiDocs/html/genericConfig.html | 77 --- .../apiDocs/html/getAdserverTargeting.html | 94 ---- .../getAdserverTargetingForAdUnitCode.html | 77 --- .../apiDocs/html/getAllPrebidWinningBids.html | 92 --- sandbox/apiDocs/html/getAllWinningBids.html | 88 --- sandbox/apiDocs/html/getBidResponses.html | 73 --- .../html/getBidResponsesForAdUnitCode.html | 40 -- sandbox/apiDocs/html/getConfig.html | 106 ---- sandbox/apiDocs/html/getHighestCpmBids.html | 64 --- sandbox/apiDocs/html/getNoBids.html | 85 --- .../apiDocs/html/markWinningBidAsUsed.html | 56 -- .../apiDocs/html/maxRequestsPerOrigin.html | 55 -- .../html/mediaTypePriceGranularity.html | 120 ---- sandbox/apiDocs/html/pb-api-template.html | 81 --- sandbox/apiDocs/html/priceGranularity.html | 231 -------- sandbox/apiDocs/html/publisherDomain.html | 50 -- sandbox/apiDocs/html/removeAdUnit.html | 78 --- sandbox/apiDocs/html/requestBids.html | 119 ---- sandbox/apiDocs/html/s2sConfig.html | 215 ------- sandbox/apiDocs/html/setTargetingForAst.html | 79 --- .../apiDocs/html/setTargetingForGPTAsync.html | 78 --- sandbox/apiDocs/html/sizeConfigAndLabels.html | 265 --------- sandbox/apiDocs/html/timeoutBuffer.html | 51 -- .../apiDocs/html/troubleshootingConfig.html | 43 -- sandbox/apiDocs/html/useBidCache.html | 56 -- sandbox/apiDocs/html/userSync.html | 222 -------- sandbox/apiDocs/md/api-template.md | 60 -- sandbox/apiDocs/md/bidderOrder.md | 9 - sandbox/apiDocs/md/bidderTimeout.md | 12 - sandbox/apiDocs/md/debugging.md | 9 - sandbox/apiDocs/md/disableAjaxTimeout.md | 7 - sandbox/apiDocs/md/enableSendAllBids.md | 68 --- sandbox/apiDocs/md/maxRequestsPerOrigin.md | 17 - sandbox/apiDocs/md/timeoutBuffer.md | 7 - sandbox/apiDocs/md/useBidCache.md | 12 - sandbox/apiDocs/text/pb-api-filenames.txt | 37 -- sandbox/codefencetest.html | 78 --- sandbox/demo/assets/images/prebid_logo.png | Bin 123917 -> 0 bytes sandbox/demo/basicPrebid.html | 528 ------------------ sandbox/demo/index.html | 345 ------------ sandbox/demo/instream-demo.html | 241 -------- sandbox/prebid-api-guide.md | 8 - sandbox/prebid-api-search.md | 8 - sandbox/prebid-api-template.md | 8 - 64 files changed, 5915 deletions(-) delete mode 100644 sandbox/alerttest.html delete mode 100644 sandbox/apiCatgories/about.html delete mode 100644 sandbox/apiCatgories/adunit.html delete mode 100644 sandbox/apiCatgories/bids.html delete mode 100644 sandbox/apiCatgories/configuration.html delete mode 100644 sandbox/apiCatgories/server.html delete mode 100644 sandbox/apiCatgories/targeting.html delete mode 100644 sandbox/apiDocs/html/adServersDFPBuildVideoUrl.html delete mode 100644 sandbox/apiDocs/html/adServersFreewheelGetTargeting.html delete mode 100644 sandbox/apiDocs/html/addAdUnits.html delete mode 100644 sandbox/apiDocs/html/aliasBidder.html delete mode 100644 sandbox/apiDocs/html/app.html delete mode 100644 sandbox/apiDocs/html/bidResponseParams.html delete mode 100644 sandbox/apiDocs/html/bidResponseSample.html delete mode 100644 sandbox/apiDocs/html/bidderOrder.html delete mode 100644 sandbox/apiDocs/html/bidderSettings.html delete mode 100644 sandbox/apiDocs/html/bidderTimeout.html delete mode 100644 sandbox/apiDocs/html/debugging.html delete mode 100644 sandbox/apiDocs/html/disableAjaxTimeout.html delete mode 100644 sandbox/apiDocs/html/enableSendAllBids.html delete mode 100644 sandbox/apiDocs/html/genericConfig.html delete mode 100644 sandbox/apiDocs/html/getAdserverTargeting.html delete mode 100644 sandbox/apiDocs/html/getAdserverTargetingForAdUnitCode.html delete mode 100644 sandbox/apiDocs/html/getAllPrebidWinningBids.html delete mode 100644 sandbox/apiDocs/html/getAllWinningBids.html delete mode 100644 sandbox/apiDocs/html/getBidResponses.html delete mode 100644 sandbox/apiDocs/html/getBidResponsesForAdUnitCode.html delete mode 100644 sandbox/apiDocs/html/getConfig.html delete mode 100644 sandbox/apiDocs/html/getHighestCpmBids.html delete mode 100644 sandbox/apiDocs/html/getNoBids.html delete mode 100644 sandbox/apiDocs/html/markWinningBidAsUsed.html delete mode 100644 sandbox/apiDocs/html/maxRequestsPerOrigin.html delete mode 100644 sandbox/apiDocs/html/mediaTypePriceGranularity.html delete mode 100644 sandbox/apiDocs/html/pb-api-template.html delete mode 100644 sandbox/apiDocs/html/priceGranularity.html delete mode 100644 sandbox/apiDocs/html/publisherDomain.html delete mode 100644 sandbox/apiDocs/html/removeAdUnit.html delete mode 100644 sandbox/apiDocs/html/requestBids.html delete mode 100644 sandbox/apiDocs/html/s2sConfig.html delete mode 100644 sandbox/apiDocs/html/setTargetingForAst.html delete mode 100644 sandbox/apiDocs/html/setTargetingForGPTAsync.html delete mode 100644 sandbox/apiDocs/html/sizeConfigAndLabels.html delete mode 100644 sandbox/apiDocs/html/timeoutBuffer.html delete mode 100644 sandbox/apiDocs/html/troubleshootingConfig.html delete mode 100644 sandbox/apiDocs/html/useBidCache.html delete mode 100644 sandbox/apiDocs/html/userSync.html delete mode 100644 sandbox/apiDocs/md/api-template.md delete mode 100644 sandbox/apiDocs/md/bidderOrder.md delete mode 100644 sandbox/apiDocs/md/bidderTimeout.md delete mode 100644 sandbox/apiDocs/md/debugging.md delete mode 100644 sandbox/apiDocs/md/disableAjaxTimeout.md delete mode 100644 sandbox/apiDocs/md/enableSendAllBids.md delete mode 100644 sandbox/apiDocs/md/maxRequestsPerOrigin.md delete mode 100644 sandbox/apiDocs/md/timeoutBuffer.md delete mode 100644 sandbox/apiDocs/md/useBidCache.md delete mode 100644 sandbox/apiDocs/text/pb-api-filenames.txt delete mode 100644 sandbox/codefencetest.html delete mode 100644 sandbox/demo/assets/images/prebid_logo.png delete mode 100644 sandbox/demo/basicPrebid.html delete mode 100644 sandbox/demo/index.html delete mode 100644 sandbox/demo/instream-demo.html delete mode 100644 sandbox/prebid-api-guide.md delete mode 100644 sandbox/prebid-api-search.md delete mode 100644 sandbox/prebid-api-template.md diff --git a/sandbox/alerttest.html b/sandbox/alerttest.html deleted file mode 100644 index 07b74b9c55..0000000000 --- a/sandbox/alerttest.html +++ /dev/null @@ -1,25 +0,0 @@ ---- - -layout: video_sample -title: Prebid Video | Video Outstream Example with Google Ad Manager -description: An example of an outstream video with a pre-roll ad using Prebid.js and Google Ad Manager. -videoType: pb-os-dfp -isVideo: true -sidebarType: 4 - ---- - -
-
-

{{ page.title }}

-

{{page.description }}

-
- - -
- -

Important: - This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

-
-
-
\ No newline at end of file diff --git a/sandbox/apiCatgories/about.html b/sandbox/apiCatgories/about.html deleted file mode 100644 index b0240800cc..0000000000 --- a/sandbox/apiCatgories/about.html +++ /dev/null @@ -1,54 +0,0 @@ -
- -
About
- -
Prebid API is a RESTful API that primarily utilizes the HTTP method GET to retrieve resources. The resources are returned as JSON-encoded responses. The API also enables users to create a custom configuration of Prebid.js to provide more specificity in bid requests and enable debugging and troubleshooting.
-
Prebid API format
-
The API format provides a brief description of each method, followed by a code example. If the method requires arguments or returns a response there will be a listing of parameters and possibly a code example. For example:
-
- -
Bidder Order
-
The order in which bidders are called.
-
- -
pbjs.setConfig({ bidderSequence: "fixed" })   /* default is "random" */
-
- -
-
Arguments:
-
-
    -
  • - bidderSequence: string -

    String indicating the bidder sequence type.

    - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    ValueDescription
    fixedOrder defined in adUnit.bids array on page
    randomThere is no order to the bidders. This is the default setting.
    -
  • -
-
-
- -
diff --git a/sandbox/apiCatgories/adunit.html b/sandbox/apiCatgories/adunit.html deleted file mode 100644 index 9d67a4d6a3..0000000000 --- a/sandbox/apiCatgories/adunit.html +++ /dev/null @@ -1,10 +0,0 @@ -
Ad Unit
- - \ No newline at end of file diff --git a/sandbox/apiCatgories/bids.html b/sandbox/apiCatgories/bids.html deleted file mode 100644 index b8487fc36e..0000000000 --- a/sandbox/apiCatgories/bids.html +++ /dev/null @@ -1,16 +0,0 @@ -
Bids
- - diff --git a/sandbox/apiCatgories/configuration.html b/sandbox/apiCatgories/configuration.html deleted file mode 100644 index d2b0c58a43..0000000000 --- a/sandbox/apiCatgories/configuration.html +++ /dev/null @@ -1,34 +0,0 @@ -
Configuration
- -
pbjs.setConfig(options)
- -
setConfig supports a number of advanced configuration options:
- - \ No newline at end of file diff --git a/sandbox/apiCatgories/server.html b/sandbox/apiCatgories/server.html deleted file mode 100644 index 3c9a7d0535..0000000000 --- a/sandbox/apiCatgories/server.html +++ /dev/null @@ -1,10 +0,0 @@ -
Server
- - \ No newline at end of file diff --git a/sandbox/apiCatgories/targeting.html b/sandbox/apiCatgories/targeting.html deleted file mode 100644 index 234d5425e7..0000000000 --- a/sandbox/apiCatgories/targeting.html +++ /dev/null @@ -1,9 +0,0 @@ -
Targeting
- - \ No newline at end of file diff --git a/sandbox/apiDocs/html/adServersDFPBuildVideoUrl.html b/sandbox/apiDocs/html/adServersDFPBuildVideoUrl.html deleted file mode 100644 index 23b93f5b7f..0000000000 --- a/sandbox/apiDocs/html/adServersDFPBuildVideoUrl.html +++ /dev/null @@ -1,198 +0,0 @@ - -
- -
Build DFP Video
-
Combines publisher-provided parameters with Prebid.js targeting parameters to build a DFP video ad tag URL that can be used by a video player.
-
-
pbjs.adServers.dfp.buildVideoUrl(options);
-
-
The DFP implementation of this function requires including the dfpAdServerVideo module in your Prebid.js build.
- - -
-
Arguments:
-
-
    -
  • - options: object -

    Object to be passed.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Option Object Parameters
    FieldScopeTypeDescription
    adUnitRequiredObjectThe Prebid ad unit to which the returned URL will map.
    paramsOptionalObjectQuerystring parameters that will be used to construct the DFP video ad tag URL. Publisher-supplied values will override values set by Prebid.js. See below for fields.
    urlOptionalStringThe video ad server URL. When given alongside params, the parsed URL will be overwritten with any matching components of params.
    bidOptionalObjectThe Prebid bid for which targeting will be set. If this is not defined, Prebid will use the bid with the highest CPM for the adUnit.
    - -
    One or both of options.params and options.url is required. In other words, you may pass in one, the other, or both, but not neither.
    - -
    The optional.params object
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Option Object Parameters
    FieldScopeTypeDescriptionExample
    iuRequiredStringDFP ad unit ID./19968336/prebid_cache_video_adunit
    cust_paramsOptionalObjectKey-value pairs merged with Prebid’s targeting values and sent to DFP on the video ad tag URL.{section: "blog", anotherKey: "anotherValue"}
    description_urlRequiredStringDescribes the video. Required for Ad Exchange. Prebid.js will build this for you unless you pass it explicitly.http://www.example.com
    - -
    For more information on any of these params, see the DFP video tag documentation.
    -
    - -
  • -
-
- -
Examples
-
There are several different ways to build up your video URL, as shown in the examples below:
-
Using options.params only:
- -
-

-pbjs.requestBids({
-    bidsBackHandler: function(bids) {
-        var videoUrl = pbjs.adServers.dfp.buildVideoUrl({
-            adUnit: videoAdUnit,
-            params: {
-                iu: '/19968336/prebid_cache_video_adunit',
-                cust_params: {
-                    section: "blog",
-                    anotherKey: "anotherValue"
-                },
-                hl: "en",
-                output: "xml_vast2",
-                url: "http://www.example.com",
-            }
-        });
-        invokeVideoPlayer(videoUrl);
-    }
-});pbjs.adServers.dfp.buildVideoUrl(options);
-				
-
- -
Using options.url only:
- -
-

-var adserverTag = 'https://pubads.g.doubleclick.net/gampad/ads?'
-+ 'sz=640x480andiu=/19968336/prebid_cache_video_adunitandimpl=sandgdfp_req=1'
-+ 'andenv=vpandoutput=xml_vast2andunviewed_position_start=1andhl=enandurl=http://www.example.com'
-+ 'andcust_params=section%3Dblog%26anotherKey%3DanotherValue';
-
-var videoUrl = pbjs.adServers.dfp.buildVideoUrl({
-    adUnit: videoAdUnit,
-    url: adserverTag
-});
-				
-
- -
In the event of collisions, querystring values passed via options.params take precedence over those passed via options.url.
- -
- - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
- diff --git a/sandbox/apiDocs/html/adServersFreewheelGetTargeting.html b/sandbox/apiDocs/html/adServersFreewheelGetTargeting.html deleted file mode 100644 index 951a1df9bd..0000000000 --- a/sandbox/apiDocs/html/adServersFreewheelGetTargeting.html +++ /dev/null @@ -1,85 +0,0 @@ - -
- -
Freewheel Get Targeting
-
This method gets targeting key-value pairs to be sent to the ad server.
-
-
pbjs.adServers.freewheel.getTargeting({options});
-
- -
The FreeWheel implementation of this function requires including the freeWheelAdserverVideo module in your Prebid.js build.
- - -
-
Arguments:
-
-
    -
  • - Options: object -

    Object to be passed containing codes and the callback function.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Options Object Parameters
    FieldScopeTypeDescription
    codesOptionalArrayAn array of adUnitCodes.
    callbackRequiredFunctionCallback function to execute when targeting data is back.
    -
  • -
-
-
- - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
- diff --git a/sandbox/apiDocs/html/addAdUnits.html b/sandbox/apiDocs/html/addAdUnits.html deleted file mode 100644 index 02ba27fd3d..0000000000 --- a/sandbox/apiDocs/html/addAdUnits.html +++ /dev/null @@ -1,453 +0,0 @@ - -
- -
Add Ad Units
-
Takes one ad unit object or an array of ad unit objects and adds them to the Prebid auction. For usage examples, see examples below and the Getting Started page.
-
-
pbjs.addAdUnits(Array|Object);
-
- - -
-
Arguments:
-
-
    -
  • - Array: [Object] -

    An array of adUnit objects.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    FieldScopeTypeDescription
    codeRequiredStringUnique identifier that you create and assign to this ad unit. Used to set query string targeting on the ad. If using GPT, we recommend setting this to slot element ID.
    sizesRequiredArray[Number] or Array[Array[Number]]All the sizes that this ad unit can accept. Examples: [400, 600], [[300, 250], [300, 600]]. For 1.0 and later, prefer mediaTypes.banner.sizes.
    bidsRequiredArray[Object]Each bid represents a request to a bidder. For a list of properties.
    mediaTypesOptionalObjectDefines one or multiple media types the ad unit supports.
    labelAnyOptionalArrayAn array of string labels, used for showing responsive ads. With the labelAny operator, just one label has to match for the condition to be true. Works with the sizeConfig object passed in to pbjs.setConfig.
    labelAllOptionalArrayAn array of string labels, used for showing responsive and conditional ads. With the labelAll conditional, every element of the target array must match an element of the label array in order for the condition to be true. Works with the sizeConfig object passed in to pbjs.setConfig.
    -
  • -
-
- -
Bids
-
The table below describes the list of properties in the bids array of the ad unit.
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Properties of Bid Array
FieldScopeTypeDescription
bidderRequiredStringBidder code. Find the complete reference for all supported bidders here..
paramsRequiredObjectBidder’s preferred way of identifying a bid request. Find the complete reference for all supported bidders here.
labelAnyOptionalArrayAn array of string labels, used for showing responsive ads. With the labelAny operator, just one label has to match for the condition to be true. Works with the sizeConfig object passed in to pbjs.setConfig.
labelAllOptionalArrayAn array of string labels, used for showing responsive and conditional ads. With the labelAll conditional, every element of the target array must match an element of the label array in order for the condition to be true. Works with the sizeConfig object passed in to pbjs.setConfig.
-
- -
Media Types
-
The table below describes the list of properties in the mediaTypes object of the ad unit.
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Properties of Media Types
FieldScopeTypeDescription
bannerOptional (If no other properties are specified, this is the default.)ObjectDefines properties of a banner ad.
nativeOptionalObjectDefines properties of a native ad.
videoOptionalObjectDefines properties of a video ad.
-
- -
Examples
-
Banner
- -
-
-
-					
-pbjs.addAdUnits({
-    code: slot.code,
-    mediaTypes: {
-        banner: {
-            sizes: [[300, 250]]
-        }
-    },
-    bids: [
-        {
-            bidder: 'appnexus',
-            params: {
-                placementId: 13144370
-            }
-        }
-    ]
-})
-					
-
- -
For more detailed instructions, see Getting Started.
- -
Native
- -
-
-
-					
-pbjs.addAdUnits({
-    code: slot.code,
-    mediaTypes: {
-        native: {
-            image: {
-                required: true,
-                sizes: [150, 50]
-            },
-            title: {
-                required: true,
-                len: 80
-            },
-            sponsoredBy: {
-                required: true
-            },
-            clickUrl: {
-                required: true
-            },
-            body: {
-                required: true
-            },
-            icon: {
-                required: true,
-                sizes: [50, 50]
-            }
-        }
-    },
-    bids: [
-        {
-            bidder: 'appnexus',
-            params: {
-                placementId: 13232354
-            }
-        }
-    ]
-});
-					
-
- -
For more detailed instructions, see Show Native Ads.
-
There are two methods for defining sizes for image-like assets (image and icon). Both are shown below, but the first example (using sizes) is more widely supported by demand partners.
-
Using mediaTypes.native.image.sizes (or mediaTypes.native.icon.sizes for icons):
- -
-
-
-						
-mediaTypes: {
-    native: {
-        image: {
-            required: true,
-            sizes: [150, 50]
-        }
-    }
-}
-					
-
- -
Using mediaTypes.native.image.aspect_ratios (or mediaTypes.native.icon.aspect_ratios for icons):
- -
-
-
-						
-mediaTypes: {
-    native: {
-        image: {
-            required: true,
-            aspect_ratios: [{
-                min_width: 300,        /* Optional */
-                ratio_width: 2,        /* Required */
-                ratio_height: 3,       /* Required */
-         }]
-        }
-    }
-}					
-						
-
- -
Video
-
For an example of an instream video ad unit, see below. For more detailed instructions, see Show Video Ads.
- -
-
-
-						
-pbjs.addAdUnits({
-    code: slot.code,
-    mediaTypes: {
-        video: {
-            context: 'instream',
-            playerSize: [640, 480]
-        },
-    },
-    bids: [{
-        bidder: 'appnexus',
-        params: {
-            placementId: 13232361,
-            video: {
-                skippable: true,
-                playback_methods: ['auto_play_sound_off']
-            }
-        }
-    }]
-});		
-						
-
- -
For an example of an outstream video ad unit, see below. For more detailed instructions, see Show Outstream Video Ads.
- -
-
-
-						
-pbjs.addAdUnit({
-    code: slot.code,
-    mediaTypes: {
-        video: {
-            context: 'outstream',
-            playerSize: [640, 480]
-        }
-    },
-    renderer: {
-        url: 'http://cdn.adnxs.com/renderer/video/ANOutstreamVideo.js',
-        render: function(bid) {
-            ANOutstreamVideo.renderAd({
-                targetId: bid.adUnitCode,
-                adResponse: bid.adResponse,
-            });
-        }
-    },
-    ...
-})	
-						
-
- -
Multi-format
-
Multiple media formats may be declared on a single ad unit, allowing any bidder that supports at least one of those media formats to participate in the auction. Any bidder that isn’t compatible with the specified mediaTypes will be dropped from the ad unit. If mediaTypes is not specified on an ad unit, banner is the assumed format and any banner bidder is eligible for inclusion. -
-
For examples of a multi-format ad units and behavior, see below.
- -
-
-
-						
-// each bidder supports at least one of the formats, so all will participate
-pbjs.addAdUnits({
-  code: 'div-banner-outstream-native',
-  mediaTypes: {
-    banner: { sizes: [[300, 250], [300, 600]] },
-    native: {
-        title: {required: true},
-        image: {required: true},
-        body: {required: false},
-    },
-    video: {
-        context: 'outstream',
-        playerSize: [400, 600],
-    },
-  },
-  bids: [
-    {
-      bidder: 'bannerBidder',
-      params: {placementId: '481'}
-    },
-    {
-      bidder: 'nativeBidder',
-      params: {titleAsset: '516'}
-    },
-    {
-      bidder: 'videoBidder',
-      params: {vidId: '234'}
-    },
-  ]
-});
-						
-
- -
-
-
-						
-// only nativeBidder and videoBidder will participate
-pbjs.addAdUnits({
-  code: 'div-native-outstream',
-  mediaTypes: {
-    native: { type: 'image' },
-    video: { context: 'outstream', playerSize: [400, 600] },
-  },
-  bids: [
-    {
-      bidder: 'bannerBidder',
-      params: {placementId: '481'}
-    },
-    {
-      bidder: 'nativeBidder',
-      params: {titleAsset: '516'}
-    },
-    {
-      bidder: 'videoBidder',
-      params: {vidId: '234'}
-    },
-  ]
-});
-						
-
- - -
- - - - - -
- -
Response
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
- -
Response Description
-
- -
{ response: example }
-
-
- - -
- diff --git a/sandbox/apiDocs/html/aliasBidder.html b/sandbox/apiDocs/html/aliasBidder.html deleted file mode 100644 index e6c17a10b5..0000000000 --- a/sandbox/apiDocs/html/aliasBidder.html +++ /dev/null @@ -1,95 +0,0 @@ - -
- -
Alias Bidder
-
Defining an alias can help avoid user confusion since it’s possible to send parameters to the same adapter but in different contexts (e.g, The publisher uses "appnexus" for demand and also uses "newAlias" which is an SSP partner that uses the "appnexus" adapter to serve their own unique demand).

-

It’s not technically necessary to define an alias, since each copy of an adapter with the same name gets a different ID in the internal bidder registry so Prebid.js can still tell them apart.

- -
-
pbjs.aliasBidder('appnexus', 'newAlias');
-
- -
If you define an alias and are using pbjs.sendAllBids, you must also set up additional line items in the ad server with keyword targeting that matches the name of the alias. - -
    -
  • hb_pb_newalias
  • -
  • hb_adid_newalias
  • -
  • hb_size_newalias
  • -
  • hb_deal_newalias
  • -
- -
- -
- - - -
-
Arguments:
-
-
    -
  • -

    aliasBidder accepts two arguments.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    AttributeTypeDescription
    adapterStringThe name of the adapter to create the alias for.
    aliasStringThe name of the alias.
    -
  • -
-
-
- - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
- diff --git a/sandbox/apiDocs/html/app.html b/sandbox/apiDocs/html/app.html deleted file mode 100644 index dd51ded2ff..0000000000 --- a/sandbox/apiDocs/html/app.html +++ /dev/null @@ -1,83 +0,0 @@ - -
- -
Mobile App Post-Bid
-
To support post-bid scenarios on mobile apps, the prebidServerBidAdapter module recognizes the app config object to forward details through the server.
-
-
pbjs.setConfig({
-   app: {
-      bundle: "org.prebid.mobile.demoapp",
-      domain: "prebid.org"
-   }
-
- - -
-
Arguments:
-
-
    -
  • - app: object -

    Object to hold app data.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    AttributeTypeDescription
    bundleStringThe app bundle name
    domainStringThe app domain.
    -
  • -
-
-
- - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
diff --git a/sandbox/apiDocs/html/bidResponseParams.html b/sandbox/apiDocs/html/bidResponseParams.html deleted file mode 100644 index 465c4659d4..0000000000 --- a/sandbox/apiDocs/html/bidResponseParams.html +++ /dev/null @@ -1,168 +0,0 @@ -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Attributes
ParameterTypeDescriptionExample
bidderStringThe bidder code. Used by ad server’s line items to identify biddersrubicon
adIdStringThe unique identifier of a bid creative. It’s used by the line item’s creative as in this example.123
widthIntegerThe width of the returned creative size.300
heightIntegerThe height of the returned creative size.500
sizeStringString representing the width and height of the returned creative.300x500
cpmFloatThe exact bid price from the bidder.1.50
pbLg,pbMg,pbHg,pbAg,pbDg,pbCgStringCPM quantized to a granularity: Low (pbLg), Medium (pbMg), High (pbHg), Auto (pbAg), Dense (pbDg), and Custom (pbCg).“5.00”
currencyStringThe currency of the returned bid.USD
netRevenueBooleanTrue if bid is Net, False if Gross.true
requestTimestampIntegerThe time stamp, in milliseconds, when the bid request is sent out.1444844944106
responseTimestampIntegerThe time stamp, in milliseconds, when the bid response is returned.14448476955432
timeToRespondIntegerThe amount of time, in milliseconds, for the bidder to respond with the bid.79
adUnitCodeStringadUnitCode to get the bid responses for.“/9968336/header-bid-tag-0”
creativeIdStringBidder-specific creative ID.1234567
mediaTypeString(Optional) If the bid is associated with a Deal, this field contains the deal ID..banner
dealIdStringOne of: banner, native, video.ABC_123
adserverTargetingObjectContains all the adserver targeting parameters.{ "hb_bidder": "appnexus", "hb_adid": "7a53a9d3" }
adserverTargetingObjectContains native key value pairs.{ "title": "", "body": "" }
statusStringStatus of the bid. Possible values: targetingSet, rendered"targetingSet"
statusMessageStringThe bid’s status message“Bid returned empty or error response” or “Bid available”.
ttlStringHow long (in seconds) this bid is considered valid. See this FAQ entry for more info.300
-
diff --git a/sandbox/apiDocs/html/bidResponseSample.html b/sandbox/apiDocs/html/bidResponseSample.html deleted file mode 100644 index 791c68c8ca..0000000000 --- a/sandbox/apiDocs/html/bidResponseSample.html +++ /dev/null @@ -1,46 +0,0 @@ - -
-
-
-			
-ad: "..."
-adId: "4dc776760a5b92"
-adUnitCode: "/19968336/header-bid-tag-0"
-adUrl: undefined
-adserverTargeting: {hb_bidder: "appnexus", hb_adid: "4dc776760a5b92", hb_pb: "0.50", hb_size: "300x600", hb_source: "client", …}
-appnexus: {buyerMemberId: 9325, dealPriority: undefined, dealCode: undefined}
-auctionId: "948d8732-eb5a-4fb6-80f0-e6edfd075ff9"
-bidder: "appnexus"
-bidderCode: "appnexus"
-cpm: 0.5
-creativeId: 98493581
-currency: "USD"
-dealId: undefined
-getSize: ƒ ()
-getStatusCode: ƒ ()
-height: 600
-mediaType: "banner"
-netRevenue: true
-params: [{…}]
-pbAg: "0.50"
-pbCg: ""
-pbDg: "0.50"
-pbHg: "0.50"
-pbLg: "0.50"
-pbMg: "0.50"
-requestId: "2a40633d4d671c"
-requestTimestamp: 1558009877924
-responseTimestamp: 1558009878328
-size: "300x600"
-source: "client"
-status: "rendered"
-statusMessage: "Bid available"
-timeToRespond: 404
-ttl: 300
-width: 300
-			
-		
-
-
- - \ No newline at end of file diff --git a/sandbox/apiDocs/html/bidderOrder.html b/sandbox/apiDocs/html/bidderOrder.html deleted file mode 100644 index e86b4e03be..0000000000 --- a/sandbox/apiDocs/html/bidderOrder.html +++ /dev/null @@ -1,73 +0,0 @@ -
- -
Bidder Order
-
The order in which bidders are called.
-
- -
pbjs.setConfig({ bidderSequence: "fixed" })   /* default is "random" */
-
- -
-
Arguments:
-
-
    -
  • - bidderSequence: string -

    String indicating the bidder sequence type.

    - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    ValueDescription
    fixedOrder defined in adUnit.bids array on page
    randomThere is no order to the bidders. This is the default setting.
    -
  • -
-
-
- -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
- diff --git a/sandbox/apiDocs/html/bidderSettings.html b/sandbox/apiDocs/html/bidderSettings.html deleted file mode 100644 index 6d590c5f58..0000000000 --- a/sandbox/apiDocs/html/bidderSettings.html +++ /dev/null @@ -1,298 +0,0 @@ - - - -
- -
Bidder Settings
-
The bidderSettings object provides a way to define some behaviors for the platform and specific adapters. The basic structure is a 'standard' section with defaults for all adapters, and then one or more adapter-specific sections that override behavior for that bidder.
-
-
pbjs.bidderSettings = {
-			    standard: {
-			         [...]
-			    },
-			    ix: {
-			        [...]
-			    },
-			    rubicon: {
-			        [...]
-			    },
-			}
-			
-
- -
Defining bidderSettings is optional; the platform has default values for all of the options. Adapters may specify their own default settings, though this isn't common. Some sample scenarios where publishers may wish to alter the default settings -
    -
  • Using bidder-specific ad server targeting instead of Prebid-standard targetin
  • -
  • Passing additional information to the ad server
  • -
  • Adjusting the bid CPM sent to the ad server
  • -
-
- - -
-
Bidder Setting Attributes:
-
-
    -
  • - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    AttributeScopeVersionDefaultDescription
    adserverTargetingStandard or Adapter-specificAllSee belowDefine which key/value pairs are sent to the ad server.
    bidCpmAdjustmentStandard or Adapter-specificAllN/ACould, for example, adjust a bidder's gross-price bid to net price.
    sendStandardTargetingAdapter-specific0.13.0TrueIf adapter-specific targeting is specified, can be used to suppress the standard targeting for that adapter.
    suppressEmptyKeysStandard or Adapter-specific0.13.0FalseIf custom adserverTargeting functions are specified that may generate empty keys, this can be used to suppress them.
    - -
  • - -
-
-
-
- - - - -
adserverTargeting
-
As described in the AdOps documentation, Prebid has a recommended standard set of ad server targeting that works across bidders. This standard targeting approach is defined in the adserverTargeting attribute in the 'standard' section, but can be overridden per adapter as needed. Both scenarios are described below.
-
Note that once standard.adserverTargeting is specified, you'll need to fully manage the targeting -- the default `hb_` targeting variables will not be added.
-
- - -
Keyword targeting for all bidders
-
The below code snippet is the default setting for ad server targeting. For each bidder's bid, Prebid.js will set 6 keys (hb_bidder, hb_adid, hb_pb, hb_size, hb_source, hb_format) with their corresponding values. In addition, video will receive additional keys: hb_cache_id, hb_uuid, and hb_cache_host. The key value pair targeting is applied to the bid's corresponding ad unit. Your ad ops team will have the ad server's line items and creatives to utilize these keys.
-
If you'd like to customize the key value pairs, you can overwrite the settings as the below example shows. *Note* that once you updated the settings, let your ad ops team know about the change, so they can update the line item targeting accordingly. See the [Ad Ops](/adops/before-you-start.html) documentation for more information.
-
There's no need to include the following code if you choose to use the *below default setting*.
- -
- -

-pbjs.bidderSettings = {
-    standard: {
-        adserverTargeting: [{
-            key: "hb_bidder",
-            val: function(bidResponse) {
-                return bidResponse.bidderCode;
-            }
-        }, {
-            key: "hb_adid",
-            val: function(bidResponse) {
-                return bidResponse.adId;
-            }
-        }, {
-            key: "hb_pb",
-            val: function(bidResponse) {
-                return bidResponse.pbMg;
-            }
-        }, {
-            key: 'hb_size',
-            val: function (bidResponse) {
-                return bidResponse.size;
-            }
-        }, {
-            key: 'hb_source',
-            val: function (bidResponse) {
-                return bidResponse.source;
-            }
-        }, {
-            key: 'hb_format',
-            val: function (bidResponse) {
-                return bidResponse.mediaType;
-            }
-        }]
-    }
-}
-					
-				
-
-
- - - -
Note that the existence of bidderSettings.adserverTargeting.standard will prevent the system from adding the standard display targeting values: hb_bidder, hb_adid, hb_pb, hb_size, hb_source, and hb_format. However, if the mediaType is video and bidderSettings.adserverTargeting.standard does not specify hb_uuid, hb_cache_id, or hb_cache_host, they will be added unless bidderSettings.sendStandardTargeting is set to false.
- - - -
Keyword targeting for a specific bidder
-
Let’s say the bidder prefers a separate set of line items. You can overwrite the bidder settings as the below example for AppNexus shows.
- -
Note that the line item setup has to match the targeting change
- -
- -

-pbjs.bidderSettings = {
-    appnexus: {
-      sendStandardTargeting: false,
-      adserverTargeting: [
-        {
-            key: "apn_pbMg",
-            val: function(bidResponse) {
-                return bidResponse.pbMg;
-            }
-        }, {
-            key: "apn_adId",
-            val: function(bidResponse) {
-                return bidResponse.adId;
-            }
-        }
-      ]
-    }
-}
-					
-				
-
-
- - -
In other words, the above config sends two pairs of key/value strings targeting for every AppNexus bid and for every ad unit. The 1st pair would be apn_pbMg => the value of bidResponse.pbMg. The second pair would be apn_adId => the value of bidResponse.adId. You can find the documentation of bidResponse object [here](bidders.html#common-bidresponse).
- -
Note that sendStandardTargeting is set to false so that the standard Prebid targeting (hb_bidder, etc.) aren't also sent to the ad server.
- - -
Price Buckets
-
Now let's say you would like to define a bidder-specific price bucket function rather than use the ones available by default in prebid.js. Even the [priceGranularity config](/dev-docs/publisher-api-reference.html#setConfig-Price-Granularity) option applies to all bidders -- with this approach you can overwrite price buckets.
- -
Note: this will only impact the price bucket sent to the ad server for targeting. It won't actually impact the cpm value used for ordering the bids.
- -
- -

-pbjs.bidderSettings = {
-    standard: {
-        [...]
-        adserverTargeting: [{
-            key: "hb_pb",
-            val: function(bidResponse) {
-                // define your own function to assign price bucket
-                if (cpm < 2)
-                    return "pb1"; // all bids less than $2 are assigned to price bucket 'pb1'
-                if (cpm < 3)
-                    return "pb2"; // all bids less than $3 are assigned to price bucket 'pb2'
-                if (cpm < 4)
-                    return "pb3"; // all bids less than $4 are assigned to price bucket 'pb3'
-                if (cpm < 5)
-                    return "pb4"; // all bids less than $5 are assigned to price bucket 'pb4'
-                if (cpm < 6)
-                    return "pb5"; // all bids less than $6 are assigned to price bucket 'pb5'
-                return "pb6"; // all bids $6 and above are assigned to price bucket 'pb6'
-            }
-        }]
-	[...]
-    }
-}
-			
-
- - -
bidCpmAdjustment
-
Some bidders return gross prices instead of the net prices (what the publisher will actually get paid). For example, a publisher's net price might be 15% below the returned gross price. In this case, the publisher may want to adjust the bidder's returned price to run a true header bidding auction. Otherwise, this bidder's gross price will unfairly win over your other demand sources who report the real price.
- -
- -

-pbjs.bidderSettings = {
-  standard: { ... }
-  aol: {
-    bidCpmAdjustment : function(bidCpm, bid){
-      // adjust the bid in real time before the auction takes place
-      console.log('Bidder is: ' + bid.bidderCode);
-      return bidCpm * .85;
-    }
-  }
-};
-			
-
- - -
In the above example, the AOL bidder will inherit from "standard" adserverTargeting keys, so that you don't have to define the targeting keywords again.
- - - -
sendStandardTargeting
-
This boolean flag minimizes key/value pairs sent to the ad server when adapter-specific targeting is specified. By default, the platform will send both adapter-specific adServerTargeting as well as the standard adServerTargeting.
- -
While sending extra targeting the ad server may not matter, this flag can be used to suppress the standard targeting for adapters that define their own.
- -
See the [example above](#key-targeting-specific-bidder) for example usage.
- -
suppressEmptyKeys - -
If a custom adServerTargeting function can return an empty value, this boolean flag can be used to avoid sending those empty values to the ad server.
- - - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - - - diff --git a/sandbox/apiDocs/html/bidderTimeout.html b/sandbox/apiDocs/html/bidderTimeout.html deleted file mode 100644 index 3745cbbdc7..0000000000 --- a/sandbox/apiDocs/html/bidderTimeout.html +++ /dev/null @@ -1,50 +0,0 @@ - -
- -
Bidder Timeout
-
Set a global bidder timeout. The bidderTimeout pauses the page's ad tag while the Prebid.js library fetches bids and creatives from the selected SSPs and exchanges.
-
- -
pbjs.setConfig({ bidderTimeout: 3000 })
-
- -
-
Arguments:
-
-
    -
  • - bidderTimeout: number
    -

    Number indicating the length, in milliseconds, of the timeout. The default setting is 3000.

    -
  • -
-
- -
Bid Timeouts and JavaScript Timers: Note that it’s possible for the timeout to be triggered later than expected, leading to a bid participating in the auction later than expected. This is due to how setTimeout works in JS: it queues the callback in the event loop in an approximate location that should execute after this time but it is not guaranteed. With a busy page load, bids can be included in the auction even if the time to respond is greater than the timeout set by Prebid.js. However, we do close the auction immediately if the threshold is greater than 200ms, so you should see a drop off after that period. For more information about the asynchronous event loop and setTimeout, see How JavaScript Timers Work.
-
- -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
diff --git a/sandbox/apiDocs/html/debugging.html b/sandbox/apiDocs/html/debugging.html deleted file mode 100644 index c2fa51a108..0000000000 --- a/sandbox/apiDocs/html/debugging.html +++ /dev/null @@ -1,51 +0,0 @@ - -
- -
Debugging
-
Pass true to the debug parameter to turn on debugging.
-
- -
pbjs.setConfig({ debug: true });
-
- -
-
Arguments:
-
-
    -
  • - debug: boolean -

    Boolean to indicate if debugging is turned on or off.

    -
  • -
-
-
- -
Note that turning on debugging for Prebid Server causes most server-side adapters to consider it a test request, meaning that they won’t count on reports.
- -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
- diff --git a/sandbox/apiDocs/html/disableAjaxTimeout.html b/sandbox/apiDocs/html/disableAjaxTimeout.html deleted file mode 100644 index 922ea3c2b0..0000000000 --- a/sandbox/apiDocs/html/disableAjaxTimeout.html +++ /dev/null @@ -1,49 +0,0 @@ - -
- -
Disable AJAX Timeout
-
Prebid.js adds a timeout that pauses the page's ad tag while the Prebid.js library fetches bids and creatives from the selected SSPs and exchanges. This XMLHttpRequest to retrieve bids is terminated once the time out is reached. All bids returned after timeout and once the auction begins are ignored. However, you have the option to disable this by using disableAjaxTimeout
-
- -
pbjs.setConfig({ disableAjaxTimeout: true });
-
- -
-
Arguments:
-
-
    -
  • - disableAjaxTimeout: boolean -

    Boolean to indicate if XMLHttpRequest to retrieve bids will be terminated after timeout has been reached.

    -
  • -
-
-
- - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
diff --git a/sandbox/apiDocs/html/enableSendAllBids.html b/sandbox/apiDocs/html/enableSendAllBids.html deleted file mode 100644 index 160317729c..0000000000 --- a/sandbox/apiDocs/html/enableSendAllBids.html +++ /dev/null @@ -1,59 +0,0 @@ - -
- -
Enable Send All Bids
-
Sends keyword-value pairs from all returned bids to the ad server.
-
-
pbjs.setConfig({ enableSendAllBids: false });
-
- - -
-
Arguments:
-
-
    -
  • - enableSendAllBids: boolean -

    Boolean to indicate if Prebid.js will send all bids to the ad server.

    -
  • -
- -
-
- -
Note: pbjs.getAdserverTargeting() determines which bid key-value pairs will be delivered to the ad server based on enableSendAllBids configuration.
-
andnbsp;
-
Warning: This config must be set before pbjs.setTargetingForGPTAsync() or pbjs.getAdserverTargeting() are called.
- - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
- - - - - diff --git a/sandbox/apiDocs/html/genericConfig.html b/sandbox/apiDocs/html/genericConfig.html deleted file mode 100644 index 4f6bae6ddc..0000000000 --- a/sandbox/apiDocs/html/genericConfig.html +++ /dev/null @@ -1,77 +0,0 @@ - -
- -
Generic setConfig Configuration
-
Some adapters may support other options, as defined in their documentation. To set arbitrary configuration values:
-
-
pbjs.setConfig({ key: value });
-
- - - -
-
Arguments:
-
-
    -
  • - debug: boolean -

    Boolean to indicate if debugging is turned on or off.

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    ParmDescription
    Fixed
    RandomThere is no order to the bidders. This is the default setting.
    -
  • -
-
-
- - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
diff --git a/sandbox/apiDocs/html/getAdserverTargeting.html b/sandbox/apiDocs/html/getAdserverTargeting.html deleted file mode 100644 index 132de89780..0000000000 --- a/sandbox/apiDocs/html/getAdserverTargeting.html +++ /dev/null @@ -1,94 +0,0 @@ - -
- -
Get Ad Server Targeting
-
Returns all ad server targeting for all ad units. Note that some bidder’s response may not have been received if you call this function too quickly after the requests are sent.
-
-
pbjs.getAdserverTargeting();
-
- -
The targeting keys can be configured in ad server targeting. When deals are enabled, the object returned by this method may include a field hb_deal_BIDDERCODE, where BIDDERCODE is replaced by the name of the bidder, e.g., AppNexus, Rubicon, etc.
- - -
-
Arguments:
-
-
    -
  • - debug: boolean -

    Boolean to indicate if debugging is turned on or off.

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    ParmDescription
    Fixed
    RandomThere is no order to the bidders. This is the default setting.
    -
  • -
-
-
- - - -
- -
Response
- -
-
    -
  • - Object: object -

    Returns an object containing a map of adUnitCodes and targeting values.

    -
  • -
-
- -
Response Example
- -
-

-{
-  "/9968336/header-bid-tag-0": {
-    "hb_bidder": "rubicon",
-    "hb_adid": "13f44b0d3c",
-    "hb_pb": "1.50"
-  },
-  "/9968336/header-bid-tag-1": {
-    "hb_bidder": "openx",
-    "hb_adid": "147ac541a",
-    "hb_pb": "1.00"
-  },
-  "/9968336/header-bid-tag-2": {
-    "hb_bidder": "appnexus",
-    "hb_adid": "147ac541a",
-    "hb_pb": "2.50",
-    "hb_deal_appnexus": "ABC_123"
-  }
-}
-				
-
-
- - -
- diff --git a/sandbox/apiDocs/html/getAdserverTargetingForAdUnitCode.html b/sandbox/apiDocs/html/getAdserverTargetingForAdUnitCode.html deleted file mode 100644 index 1e1e4607e6..0000000000 --- a/sandbox/apiDocs/html/getAdserverTargetingForAdUnitCode.html +++ /dev/null @@ -1,77 +0,0 @@ - -
- -
Get Ad Server Targeting for Ad Unit URL
-
This function returns the query string targeting parameters available at this moment for a given ad unit. For full documentation see function pbjs.getAdserverTargeting().
-
-
pbjs.getAdserverTargetingForAdUnitCode([adunitCode]);
-
- - -
-
Arguments:
-
-
    -
  • - debug: boolean -

    Boolean to indicate if debugging is turned on or off.

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    ParmDescription
    Fixed
    RandomThere is no order to the bidders. This is the default setting.
    -
  • -
-
-
- - - -
- -
Response
- -
-
    -
  • - Object: object -

    Object containing return bids for the adUnit url.

    -
  • -
-
- -
Response Example
- -
-

-{
-  "hb_bidder": "rubicon",
-  "hb_adid": "13f44b0d3c",
-  "hb_pb": "0.50"
-}				
-		
-
-
- diff --git a/sandbox/apiDocs/html/getAllPrebidWinningBids.html b/sandbox/apiDocs/html/getAllPrebidWinningBids.html deleted file mode 100644 index c3e73bd170..0000000000 --- a/sandbox/apiDocs/html/getAllPrebidWinningBids.html +++ /dev/null @@ -1,92 +0,0 @@ - -
- -
Get All Prebid Winning Bids
-
Returns an array of bid objects that have won their respective auctions but not rendered on the page. Useful for troubleshooting your integration.
-
-
var allPrebidBids = pbjs.getAllPrebidWinningBids();
-
- - -
-
Arguments:
-
-
    -
  • - debug: boolean -

    Boolean to indicate if debugging is turned on or off.

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    ParmDescription
    Fixed
    RandomThere is no order to the bidders. This is the default setting.
    -
  • -
-
-
- - - -
- -
Response
-
An array of bid objects.
-
- -
{ bids: [object] }
-
- -
-
    -
  • - bids: array -

    An array of bid objects.

    -
  • -
-
-
- -
Sample Response
- -
-
-
-						
-bids : [{...}, {...}]
-						
-					
-
-
- -
Tip: Type pbjs.getAllPrebidWinningBids() in the console.log to quickly review which winning bids were not rendered.
- - -
- -
- - - - - diff --git a/sandbox/apiDocs/html/getAllWinningBids.html b/sandbox/apiDocs/html/getAllWinningBids.html deleted file mode 100644 index 3c30e16178..0000000000 --- a/sandbox/apiDocs/html/getAllWinningBids.html +++ /dev/null @@ -1,88 +0,0 @@ - -
- -
Get All Winning Bids
-
This method returns all bids that have won their respective auctions and have also been rendered on the page. Useful for troubleshooting your integration
-
-
var allBids = pbjs.getAllWinningBids();
-
- - -
-
Arguments:
-
-
    -
  • - debug: boolean -

    Boolean to indicate if debugging is turned on or off.

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    ParmDescription
    Fixed
    RandomThere is no order to the bidders. This is the default setting.
    -
  • -
-
-
- - - -
- -
Response
-
An array of bid objects.
-
- -
{ bids: [object] }
-
- -
-
    -
  • - bids: array -

    An array of bid objects.

    -
  • -
-
- -
Sample Response
- -
-
-
-						
-bids : [{...}, {...}]
-						
-					
-
-
- -
Tip: Type pbjs.getAllWinningBids() in the console.log to quickly review which winning bids were returned.
- -
-
- - -
- diff --git a/sandbox/apiDocs/html/getBidResponses.html b/sandbox/apiDocs/html/getBidResponses.html deleted file mode 100644 index b450e86997..0000000000 --- a/sandbox/apiDocs/html/getBidResponses.html +++ /dev/null @@ -1,73 +0,0 @@ - -
- -
Get Bid Responses
-
Returns the bid responses at the given moment.
-
-
pbjs.getBidResponses();
-
- - -
-
Arguments:
-
-
    -
  • - debug: boolean -

    Boolean to indicate if debugging is turned on or off.

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    ParmDescription
    Fixed
    RandomThere is no order to the bidders. This is the default setting.
    -
  • -
-
-
- - - -
- -
Response
-
An array of bid objects.
-
- -
{ bids: [{...}, {...}] }
-
- -
-
    -
  • - bids: array -

    An array of bid objects.

    -
  • -
-
-
- -
- -
- diff --git a/sandbox/apiDocs/html/getBidResponsesForAdUnitCode.html b/sandbox/apiDocs/html/getBidResponsesForAdUnitCode.html deleted file mode 100644 index b7b2d5587f..0000000000 --- a/sandbox/apiDocs/html/getBidResponsesForAdUnitCode.html +++ /dev/null @@ -1,40 +0,0 @@ - -
- -
Get Bid Response For Ad Unit Code
-
Returns bidResponses for the specified adUnitCode.
-
-
pbjs.getBidResponsesForAdUnitCode(adUnitCode);
-
- - -
-
Arguments:
-
-
    -
  • - adUnitCode: object -

    The adUnitCode to be returned.

    -
  • -
-
-
- - - -
- -
Response
- -
-
    -
  • - bid: object -

    The bid response for the specified ad unit.

    -
  • -
-
- - -
- diff --git a/sandbox/apiDocs/html/getConfig.html b/sandbox/apiDocs/html/getConfig.html deleted file mode 100644 index fd78cb2afd..0000000000 --- a/sandbox/apiDocs/html/getConfig.html +++ /dev/null @@ -1,106 +0,0 @@ - -
- -
Get Config
-
The getConfig function is for retrieving the current configuration object or subscribing to configuration updates. When called with no parameters, the entire config object is returned. When called with a string parameter, a single configuration property matching that parameter is returned.
-
-
pbjs.getConfig()
-
- -
When called with a string parameter, a single configuration property matching that parameter is returned.
-
-
pbjs.getConfig('debug')
-
- -
The getConfig function also contains a subscribe ability that adds a callback function to a set of listeners that are invoked whenever setConfig is called. The subscribed function will be passed the options object that was used in the setConfig call. Individual topics can be subscribed to by passing a string as the first parameter and a callback function as the second.
-
-
getConfig((config) => console.log('config set:', config));
-
- -
Subscribe to only logging changes
-
-
getConfig('logging', (config) => console.log('logging set:', config));
-
- -
Unsubscribe
-
-
-
-					
-const unsubscribe = getConfig(...);
-unsubscribe(); // no longer listening
-					
-				
-
-
- - - -
-
Arguments:
-
-
    -
  • - debug: boolean -

    Boolean to indicate if debugging is turned on or off.

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    ParmDescription
    Fixed
    RandomThere is no order to the bidders. This is the default setting.
    -
  • -
-
-
- - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
- - diff --git a/sandbox/apiDocs/html/getHighestCpmBids.html b/sandbox/apiDocs/html/getHighestCpmBids.html deleted file mode 100644 index 214dcfb6ce..0000000000 --- a/sandbox/apiDocs/html/getHighestCpmBids.html +++ /dev/null @@ -1,64 +0,0 @@ - -
- -
Get Highest CPM Bids
-
Returns an array of winning bids.
-
-
pbjs.getHighestCpmBids([adUnitCode]);
-
- - -
-
Arguments:
-
-
    -
  • - [adUnitCode]: array -

    An array containing adUnitCodes. When passed, returns an array with the winning bid object for that ad unit.

    -
    If no argument is passed, returns an array of winning bid objects for each ad unit on the page.

    -
  • -
-
- - -
- - - -
- -
Response
-
An array of bid objects.
-
- -
{ bids: [object] }
-
- -
-
    -
  • - bids: array -

    An array of bid objects.

    -
  • -
-
-
- -
Sample Response
- -
-
-
-					
-bids : [{...}, {...}]
-					
-				
-
-
- -
- - - - - diff --git a/sandbox/apiDocs/html/getNoBids.html b/sandbox/apiDocs/html/getNoBids.html deleted file mode 100644 index 97f0fede7a..0000000000 --- a/sandbox/apiDocs/html/getNoBids.html +++ /dev/null @@ -1,85 +0,0 @@ - -
- -
Get No Bids
-
Returns all of the bid requests that resulted in a NO_BID. These are bid requests that were sent to a bidder but the bidder decided not to bid on.
-
-
pbjs.getNoBids();
-
- - -
-
Arguments:
-
-
    -
  • - debug: boolean -

    Boolean to indicate if debugging is turned on or off.

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    ParmDescription
    Fixed
    RandomThere is no order to the bidders. This is the default setting.
    -
  • -
-
-
- - - -
- -
Response
-
An array of bid objects.
-
- -
{ bids: [object] }
-
- -
-
    -
  • - bids: array -

    An array of bid objects.

    -
  • -
-
-
- -
Sample Response
- -
-
-
-				
-bids : [{...}, {...}]
-				
-			
-
-
- - - -
- diff --git a/sandbox/apiDocs/html/markWinningBidAsUsed.html b/sandbox/apiDocs/html/markWinningBidAsUsed.html deleted file mode 100644 index d59c1a5f84..0000000000 --- a/sandbox/apiDocs/html/markWinningBidAsUsed.html +++ /dev/null @@ -1,56 +0,0 @@ - -
- -
Mark Winning Bid As Used
-
This function can be used to mark the winning bid as used. This is useful when running multiple video advertisements on the page, since these are not automatically marked as “rendered”. If you know the adId, then be specific, otherwise Prebid will retrieve the winning bid for the adUnitCode and mark it accordingly.
-
-
pbjs.markWinningBidAsUsed(markBidRequest);
-
- - -
-
Arguments:
-
-
    -
  • - adUnitCode: string (optional) -

    String representing the ad unit code for the bid to be marked.

    -
  • - -
  • - adId: string (optional) -

    The id representing the ad to be marked.

    -
  • -
-
-
- - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
- diff --git a/sandbox/apiDocs/html/maxRequestsPerOrigin.html b/sandbox/apiDocs/html/maxRequestsPerOrigin.html deleted file mode 100644 index 95b09275e1..0000000000 --- a/sandbox/apiDocs/html/maxRequestsPerOrigin.html +++ /dev/null @@ -1,55 +0,0 @@ - -
- -
Max Request Per Origin
-
Sets the number of requests made to a specific domain. Each browser sets a limit of how many requests will be allowed to a specific domain before that domain is blocked. Prebid.js queues auctions that would cause the number of requests to a specific domain to exceed that limit. The default Prebid.js setting is a max of 4 requests per domain. maxRequestsPerOrigin enables the user to configure the Prebid.js value.

- -
Most browsers allow at least six requests, but results may vary for your user base. Using all six requests may impact performance for users with poor internet connections.

To emulate pre version 1.x behavior and have all auctions queue (no concurrent auctions), you can set maxRequestsPerOrigin to one.
-
- -
-
pbjs.setConfig({ maxRequestsPerOrigin: 6 });
-
- - -
-
Arguments:
-
-
    -
  • - maxRequestsPerOrigin: number -

    Number indicating how many requests the browser can make to a specific domain.

    -
  • -
-
-
- - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
- - diff --git a/sandbox/apiDocs/html/mediaTypePriceGranularity.html b/sandbox/apiDocs/html/mediaTypePriceGranularity.html deleted file mode 100644 index d311a611b4..0000000000 --- a/sandbox/apiDocs/html/mediaTypePriceGranularity.html +++ /dev/null @@ -1,120 +0,0 @@ - -
- -
Media Type Price Granularity
-
Set the price granularity for each of the three media types: banner, video and native.

The default Prebid price granularities cap out at $20. This may be insufficient for video ads, which can command a CPM higher than $20. Publishers have two options:

-
    -
  • Set up a custom price granularity, as described in the price granualrity API documentation. This would enable a publisher to increase the CPM limit for all media types.
  • -
  • Define a price granularity for a specific media type (banner, video, and native) using mediaTypePriceGranularity.
  • -
- -
Note: mediaTypePriceGranularity is available in Prebid.js version 1.12 and greater.
- -
- -
Setting up a price granularity for a media type
-
-
    -
  1. Set up price buckets for the media type.
  2. -
  3. In the Prebid.js configuration, set the value of mediaTypePriceGranularity to the price granularity for each media type. -
- -
Important: Any mediaTypePriceGranularity setting takes precedence over priceGranularity.
-
-
-
-
-					
-const customPriceGranularity = {
-	'buckets': [
-		{ 'precision': 2, 'min': 0, 'max': 5, 'increment': 0.25 },
-		{ 'precision': 2, 'min': 6, 'max': 20, 'increment': 0.5 },
-		{ 'precision': 2, 'min': 21, 'max': 100, 'increment': 1 }
-	]
-			            
-};
-				
-pbjs.setConfig({'mediaTypePriceGranularity': {
-		'video': customPriceGranularity,
-		'banner': 'medium',
-		'native': 'medium'
-	}
-});
-					
-				
-
-
- - -
-
Arguments:
-
-
    -
  • - mediaTypePriceGranularity: dictionary -

    Dictionary containing an array of media type price granularities.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    ValueDescription
    videoThe const describing the video price granularity.
    bannerThe banner price granularity.
    nativeThe native price granularity.
    -
  • -
-
-
- - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
- diff --git a/sandbox/apiDocs/html/pb-api-template.html b/sandbox/apiDocs/html/pb-api-template.html deleted file mode 100644 index 28f91113ff..0000000000 --- a/sandbox/apiDocs/html/pb-api-template.html +++ /dev/null @@ -1,81 +0,0 @@ - -
- -
Debugging
-
Pass true to the debug parameter to turn on debugging.
-
-
pbjs.setConfig({ debug: true });
-
- - -
-
Arguments:
-
-
    -
  • - debug: boolean -

    Boolean to indicate if debugging is turned on or off.

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    ParmDescription
    Fixed
    RandomThere is no order to the bidders. This is the default setting.
    -
  • -
-
- -
- - - -
- -
Response
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
- -
Response Description
-
- -
{ response: example }
-
- -
- - -
- diff --git a/sandbox/apiDocs/html/priceGranularity.html b/sandbox/apiDocs/html/priceGranularity.html deleted file mode 100644 index 3ea53fe610..0000000000 --- a/sandbox/apiDocs/html/priceGranularity.html +++ /dev/null @@ -1,231 +0,0 @@ - -
- -
Price Granularity
-
This configuration defines the price bucket granularity setting that will be used for the hb_pb keyword value.
-
-
pbjs.setConfig({ priceGranularity: "medium" });
-
- - -
-
Arguments:
-
-
    -
  • - priceGranularity: string -

    String indicating the price granularity.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    ValueDescription
    low$0.50 increments, capped at $5 CPM
    medium$0.10 increments, capped at $20 CPM (the default)
    high $0.01 increments, capped at $20 CPM
    autoApplies a sliding scale to determine granularity.
    denseLike "auto", but the bid price granularity uses smaller increments, especially at lower CPMs.
    customConfigObjectIf you pass in a custom config object (as shown in the Custom CPM Bucket Sizing example below), you can have much finer control over CPM bucket sizes, precision, and caps.
    -
  • -
- - - -
Auto Granularity:
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Price Buckets
CPMGranularityExample
CPM <= $5$0.05 increments$1.87 floored to $1.85
CPM <= $10 and > $5 $0.10 increments$5.09 floored to $5.00
CPM <= $20 and > $10$0.50 increments$14.26 floored to $14.00
CPM > $20Caps the price bucket at $20$24.82 floored to $20.00
- -
- - -
Dense Granularity:
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Price Buckets
CPMGranularityExample
CPM <= $3$0.01 increments$1.87 floored to $1.87
CPM <= $8 and >$3$0.05 increments$5.09 floored to $5.05
CPM <= $20 and >$8$0.50 increments$14.26 floored to $14.00
CPM > $20Caps the price bucket at $20$24.82 floored to $20.00
-
- -
Custom CPM Bucket Sizing:
- -
To set up your own custom CPM buckets, create an object like the following, and pass it into setConfig:
-
-
-				
-const customConfigObject = {
-  "buckets" : [{
-      "precision": 2,  //default is 2 if omitted - means 2.1234 rounded to 2 decimal places = 2.12
-      "min" : 0,
-      "max" : 5,
-      "increment" : 0.01  // from $0 to $5, 1-cent increments
-    },
-    {
-      "precision": 2,
-      "min" : 5,
-      "max" : 8,
-      "increment" : 0.05  // from $5 to $8, round down to the previous 5-cent increment
-    },
-    {
-      "precision": 2,
-      "min" : 8,
-      "max" : 40,
-      "increment" : 0.5   // from $8 to $40, round down to the previous 50-cent increment
-    }]
-};
-
-//set custom config object
-pbjs.setConfig({
-    priceGranularity: customConfigObject
-})
-				
-			
-
- - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
- - - - - - - diff --git a/sandbox/apiDocs/html/publisherDomain.html b/sandbox/apiDocs/html/publisherDomain.html deleted file mode 100644 index c0c66a2f40..0000000000 --- a/sandbox/apiDocs/html/publisherDomain.html +++ /dev/null @@ -1,50 +0,0 @@ - -
- -
Publisher Domain
-
Set the publisher’s domain where Prebid is running, for cross-domain iframe communication:
-
-
pbjs.setConfig({ publisherDomain: "https://www.theverge.com" });
-
- - -
-
Arguments:
-
-
    -
  • - publisherDomain: string -

    String representing the publisher's url.

    -
  • -
-
-
- - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
diff --git a/sandbox/apiDocs/html/removeAdUnit.html b/sandbox/apiDocs/html/removeAdUnit.html deleted file mode 100644 index 287d3b19c9..0000000000 --- a/sandbox/apiDocs/html/removeAdUnit.html +++ /dev/null @@ -1,78 +0,0 @@ - -
- -
Remove Ad Unit
-
Remove adUnit(s) from the pbjs configuration. If adUnit is not given then it will remove all adUnits.
-
-
pbjs.removeAdUnit(adUnitCode);
-
- - -
-
Arguments:
-
-
    -
  • - adUnitCode: string or array of string -

    adUnits to be removed.

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    FieldScopeTypeDescription
    adUnitCodeOptionalString or Array of stringsThe adUnitCode(s) to remove, if empty it removes all.
    -
  • -
-
-
- - - -
- -
Response
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
- -
Response Description
-
- -
{ response: example }
-
-
- - -
- diff --git a/sandbox/apiDocs/html/requestBids.html b/sandbox/apiDocs/html/requestBids.html deleted file mode 100644 index bc650f4d13..0000000000 --- a/sandbox/apiDocs/html/requestBids.html +++ /dev/null @@ -1,119 +0,0 @@ - -
- -
Request Bids
-
Request bids. When adUnits or adUnitCodes are not specified, request bids for all ad units added.
-
-
pbjs.requestBids(requestObj);
-
- - -
-
Arguments:
-
-
    -
  • - requestObj: object -

    Object with parameters indicating which bid to request.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Request Object Parameters
    ParameterScopeTypeDescription
    requestObjOptionalObject
    requestObj.adUnitCodesOptionalObjectadUnit codes to request. Use this or requestObj.adUnits. Default to all adUnitCodes if empty.
    requestObj.adUnitsOptionalArray of objectsAdUnitObjects to request. Use this or requestObj.adUnitCodes. Default to all adUnits if empty.
    requestObj.timeoutOptionalIntegerTimeout, in milliseconds for requesting the bids specified.
    requestObj.bidsBackHandlerOptionalFunctionCallback to execute when all the bid responses are back or the timeout hits. Callback will be passed two parameters, the bids themselves and timedOut, which will be true if any bidders timed out.
    requestObj.labelsOptionalArray of stringsDefines labels that may be matched on ad unit targeting conditions.
    requestObj.auctionIdOptionalStringDefines an auction ID to be used rather than having the system generate one. This can be useful if there are multiple wrappers on a page and a single auction ID is desired to tie them together in analytics.
    -
  • -
-
-
- - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
- diff --git a/sandbox/apiDocs/html/s2sConfig.html b/sandbox/apiDocs/html/s2sConfig.html deleted file mode 100644 index d78239c607..0000000000 --- a/sandbox/apiDocs/html/s2sConfig.html +++ /dev/null @@ -1,215 +0,0 @@ - -
- -
Server to Server Configuration
-
Prebid provides a server-side solution to header bidding. This solution can be hosted or custom and help reduce latency between bid request and ad selection and improve performance of the publishers ad presentation.
-
-
-
-					
-pbjs.setConfig({
-    s2sConfig: {
-        accountId: '1',
-        bidders: ['appnexus', 'pubmatic'],
-        defaultVendor: 'appnexus',
-        timeout: 1000,
-        adapterOptions: {
-            pubmatic: { key: 'value' },
-            appnexus: { key: 'value' }
-        },
-        syncUrlModifier: {
-            'openx': function(type, url, bidder) {
-            const publisherId = '00000123231231'
-            url += `andri=${publisherId}`;
-
-            return url
-            }
-        }
-    }
-})
-					
-				
-
-
- - -
-
Arguments:
-
-
    -
  • - s2sconfig: object -

    The configuration object for server to server header bidding.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    AttributeScopeTypeDescription
    accountIdRequiredStringString representing the publisher's Prebid Server Account Id.
    biddersRequiredArray of StringsAn array of strings representing the selected server side bidders.
    defaultVendorOptionalStringAutomatically includes all following options in the config with vendor’s default values. Individual properties can be overridden by including them in the config along with this setting. See the Additional Notes below for more information.
    enabledOptionalBooleanEnables S2S - defaults to false.
    timeoutRequiredIntegerNumber of milliseconds allowed for the server-side auctions. This should be approximately 200ms-300ms less than your Prebid.js timeout to allow for all bids to be returned in a timely manner. See the Additional Notes below for more information.
    adapterRequiredStringAdapter code for S2S. Defaults to ‘prebidServer’.
    endpointRequiredURLDefines the auction endpoint for the Prebid Server cluster.
    syncEndpointRequiredURLDefines the cookie_sync endpoint for the Prebid Server cluster.
    userSyncLimitOptionalIntegerMax number of userSync URLs that can be executed by Prebid Server cookie_sync per request. If not defined, PBS will execute all userSync URLs included in the request.
    adapterOptionsOptionalObjectArguments will be added to resulting OpenRTB payload to Prebid Server in request.ext.BIDDER. See the example above.
    extPrebidOptionalObjectArguments will be added to resulting OpenRTB payload to Prebid Server in request.ext.prebid. See video-related example below.
    syncUrlModifierOptionalObjectFunction to modify a bidder’s sync url before the actual call to the sync endpoint. Bidder must be enabled for s2sConfig.
    -
  • -
-
- -
Default Vendors
-
Currently supported vendors are Appnexus and Rubicon.
-
- When using defaultVendor option, accountId and bidders properties still need to be defined. -
- -
Timeout
-
If the s2sConfig timeout is greater than the Prebid.js timeout, the s2sConfig timeout will be automatically adjusted to 75% of the Prebid.js timeout in order to fit within the auction process.
- -
Video via s2sConfig
-
- Supporting video through the Server-to-Server route can be done by providing a couple of extra arguments on the extPrebid object. - -
-
-						
-pbjs.setConfig({
-    s2sConfig: {
-        accountId: '1001',
-        bidders: ['rubicon', 'pubmatic'],
-        defaultVendor: 'rubicon',
-        timeout: 250,
-        extPrebid: {
-            cache: {
-                vastxml: { returnCreative: false }
-            },
-            targeting: {
-                pricegranularity: {"ranges": [{"max":40.00,"increment":1.00}]}
-            }
-        }
-    }
-})						
-					
-
- Additional options for s2sConfig may be enabled by including the Server-to-Server testing module. -
-
- - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
diff --git a/sandbox/apiDocs/html/setTargetingForAst.html b/sandbox/apiDocs/html/setTargetingForAst.html deleted file mode 100644 index bda53e6e0f..0000000000 --- a/sandbox/apiDocs/html/setTargetingForAst.html +++ /dev/null @@ -1,79 +0,0 @@ - -
- -
Set Targeting For AST
-
Set query string targeting on all AST (AppNexus Seller Tag) ad units. Note that this function has to be called after all ad units on page are defined. For working example code, see Using Prebid.js with AppNexus Publisher Ad Server.
-
-
pbjs.setTargetingForAst();
-
- - -
-
Arguments:
-
-
    -
  • - debug: boolean -

    Boolean to indicate if debugging is turned on or off.

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    ParmDescription
    Fixed
    RandomThere is no order to the bidders. This is the default setting.
    -
  • -
-
-
- - - -
- -
Response
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
- -
Response Description
-
- -
{ response: example }
-
-
- - -
- diff --git a/sandbox/apiDocs/html/setTargetingForGPTAsync.html b/sandbox/apiDocs/html/setTargetingForGPTAsync.html deleted file mode 100644 index e321d318c6..0000000000 --- a/sandbox/apiDocs/html/setTargetingForGPTAsync.html +++ /dev/null @@ -1,78 +0,0 @@ - -
- -
Set Targeting for GPT Async
-
Set query string targeting on all GPT ad units. The logic for deciding query strings is described in the section Configure AdServer Targeting. Note that this function has to be called after all ad units on page are defined.
-
-
pbjs.setTargetingForGPTAsync([codeArr]);
-
- - -
-
Arguments:
-
-
    -
  • - debug: boolean -

    Boolean to indicate if debugging is turned on or off.

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    FieldScopeTypwDescription
    [codeArr]OptionalArrayAn array of adUnitCodes to set targeting for.
    -
  • -
-
-
- - - -
- -
Response
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
- -
Response Description
-
- -
{ response: example }
-
-
- - -
- diff --git a/sandbox/apiDocs/html/sizeConfigAndLabels.html b/sandbox/apiDocs/html/sizeConfigAndLabels.html deleted file mode 100644 index 4cd64baf4b..0000000000 --- a/sandbox/apiDocs/html/sizeConfigAndLabels.html +++ /dev/null @@ -1,265 +0,0 @@ -
- -
Configure Responsive Ads
-
The sizeConfig object passed to pbjs.setConfig provides a powerful way to describe types of devices and screens using CSS media queries.
- -
How it works
-
- Before requestBids sends bid requests to adapters, it will evaluate and pick the appropriate label(s) based on the sizeConfig.mediaQuery and device properties and then filter the adUnit.bids array based on the labels defined. Ad units that don’t match the label definition are dropped. - -
    -
  • The required sizeConfig.mediaQuery property allows CSS media queries. The queries are tested using the window.matchMedia API.
  • -
  • If a label conditional (e.g. labelAny) doesn’t exist on an ad unit, it is automatically included in all requests for bids.
  • -
  • If multiple rules match, the sizes will be filtered to the intersection of all matching rules’ sizeConfig.sizesSupported arrays.
  • -
  • The adUnit.mediaTypes.banner.sizes selected will be filtered based on the sizesSupported of the matched sizeConfig. So the adUnit.mediaTypes.banner.sizes is a subset of the sizes defined from the resulting intersection of sizesSupported sizes and adUnit.mediaTypes.banner.sizes.
  • -
-
Size config will also operate on adUnit.sizes, however adUnit.sizes is deprecated in favor of adUnit.mediaTypes
-
- -
-
-
-					
-pbjs.setConfig({
-    sizeConfig: [{
-        'mediaQuery': '(min-width: 1600px)',
-        'sizesSupported': [
-            [1000, 300],
-            [970, 90],
-            [728, 90],
-            [300, 250]
-        ],
-        'labels': ['desktop-hd']
-    }, {
-        'mediaQuery': '(min-width: 1200px)',
-        'sizesSupported': [
-            [970, 90],
-            [728, 90],
-            [300, 250]
-        ],
-        'labels': ['desktop']
-    }, {
-        'mediaQuery': '(min-width: 768px) and (max-width: 1199px)',
-        'sizesSupported': [
-            [728, 90],
-            [300, 250]
-        ],
-        'labels': ['tablet']
-    }, {
-        'mediaQuery': '(min-width: 0px)',
-        'sizesSupported': [
-            [300, 250],
-            [300, 100]
-        ],
-        'labels': ['phone']
-    }]
-});
-					
-				
-
-
- - -
-
Arguments:
-
-
    -
  • - sizeConfig: array -

    An array of objects containing mediaQuery, sizeSupported and label values.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    ParameterTypeDescriptionExample
    mediaQueryArrayAn array of objects containing mediaQuery values.'mediaQuery': '(min-width: 1600px)'
    sizesSupportedArrayAn array of arrays, the contained arrays are comprised of integers for the supported sizes.'sizesSupported': [ - [1000, 300], - [970, 90], - [728, 90], - [300, 250] - ],
    labelsArrayAn array of strings defining the display type the publisher's page will appear on.'labels': ['phone']
    -
  • -
-
- -
Labels
-
- There are two parts to defining responsive and conditional ad units with labels: -
    -
  1. Defining the labels.
  2. -
  3. Defining the conditional ad unit targeting for the labels
  4. -
- -
Defining the labels
- Labels may be defined in two ways: -
    -
  • Through sizeConfig
  • -
  • As an argument to pbjs.requestBids -
    -
    -
    -									
    -pbjs.requestBids({labels: []});
    -									
    -								
    -
    -
    -
  • -
- -
Targeting labels
-
- Labels may be targeted in the AdUnit structure by two conditional operators: labelAny and labelAll.

- With the labelAny operator, just one label has to match for the condition to be true. In the example below, either A or B can be defined in the label array to activate the bid or ad unit: - -
-
-
-									
-labelAny: ["A", "B"]
-									
-								
-
-
- With the labelAll conditional, every element of the target array must match an element of the label array in order for the condition to be true. In the example below, both A and B must be defined in the label array to activate the bid or ad unit: - -
-
-
-								
-labelAll: ["A", "B"]
-								
-							
-
-
-
- -
Only one conditional may be specified on a given AdUnit or bid – if both labelAny and labelAll are specified, only the first one will be utilized and an error will be logged to the console. It is allowable for an AdUnit to have one condition and a bid to have another.

If either labeAny or labelAll values is an empty array, it evaluates to true.

It is important to note that labels do not act as filters for sizeConfig. In the example above, using a screen of 1600px wide and labelAll:["desktop"] will not filter out sizes defined in the desktop-hd sizeConfig. Labels in sizeConfig are only used for selecting or de-selecting AdUnits and AdUnit.bids.
- -
Label targeting on the ad unit
-
-
-
-								
-pbjs.addAdUnits([{
-    code: "ad-slot-1",
-    mediaTypes: {
-        banner: {
-            sizes: [
-                [970, 90],
-                [728, 90],
-                [300, 250],
-                [300, 100]
-            ]
-        }
-    },
-    labelAny: ["visitor-uk"]
-    /* The full set of bids, not all of which are relevant on all devices */
-    bids: [{
-            bidder: "pulsepoint",
-            /* Labels flag this bid as relevant only on these screen sizes. */
-            labelAny: ["desktop", "tablet"],
-            params: {
-                "cf": "728X90",
-                "cp": 123456,
-                "ct": 123456
-            }
-        },
-        {
-            bidder: "pulsepoint",
-            labelAny: ["desktop", "phone"],
-            params: {
-                "cf": "300x250",
-                "cp": 123456,
-                "ct": 123456
-            }
-        },
-        {
-            bidder: "sovrn",
-            labelAny: ["desktop", "tablet"],
-            params: {
-                "tagid": "123456"
-            }
-        },
-        {
-            bidder: "sovrn",
-            labelAny: ["phone"],
-            params: {
-                "tagid": "111111"
-            }
-        }
-    ]
-}]);
-								
-							
-
-
- -
See Conditional Ad Units for additional use cases around labels.
-
- - - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
diff --git a/sandbox/apiDocs/html/timeoutBuffer.html b/sandbox/apiDocs/html/timeoutBuffer.html deleted file mode 100644 index 9e49a599b4..0000000000 --- a/sandbox/apiDocs/html/timeoutBuffer.html +++ /dev/null @@ -1,51 +0,0 @@ - -
- -
Timeout Buffer
-
Prebid core adds a timeout buffer to extend the time that bidders have to return a bid after the auction closes. This buffer is used to offset the “time slippage” of the setTimeout behavior in browsers. Prebid.js sets the default value to 400ms. You can change this value by setting timeoutBuffer to the amount of time you want to use. The following example sets the buffer to 300ms.
-
-
pbjs.setConfig({ timeoutBuffer: 300 });
-
- - -
-
Arguments:
-
-
    -
  • - timeoutBuffer: integer -

    Integer to indicate the length, in milliseconds, of the timeout buffer.

    - -
  • -
-
-
- - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
diff --git a/sandbox/apiDocs/html/troubleshootingConfig.html b/sandbox/apiDocs/html/troubleshootingConfig.html deleted file mode 100644 index 97b7c78802..0000000000 --- a/sandbox/apiDocs/html/troubleshootingConfig.html +++ /dev/null @@ -1,43 +0,0 @@ - -
- -
Troubleshooting your configuration
-
- If you call pbjs.setConfig without an object: -
-
pbjs.setConfig('debug', 'true'))
-
- Prebid.js will print an error to the console: -
-
ERROR: setConfig options must be an object
-
-
- - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
diff --git a/sandbox/apiDocs/html/useBidCache.html b/sandbox/apiDocs/html/useBidCache.html deleted file mode 100644 index fbfeb85dee..0000000000 --- a/sandbox/apiDocs/html/useBidCache.html +++ /dev/null @@ -1,56 +0,0 @@ - -
- -
Use Bid Cache
-
Prebid.js currently allows for caching and reusing bids in a very narrowly defined scope. However, if you’d like, you can disable this feature and prevent Prebid.js from using anything but the latest bids for a given auction.
-
-
pbjs.setConfig({ useBidCache: true });
-
- - -
-
Arguments:
-
-
    -
  • - useBidCache: boolean -

    Boolean to indicate if bid caching is allowed.

    -
  • -
-
- -
This option is available in version 1.39 as true-by-default and became false-by-default as of Prebid.js 2.0. If you want to use this feature in 2.0 and later, you’ll need to set the value to true.
-
- - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
- - - - diff --git a/sandbox/apiDocs/html/userSync.html b/sandbox/apiDocs/html/userSync.html deleted file mode 100644 index f501e5df53..0000000000 --- a/sandbox/apiDocs/html/userSync.html +++ /dev/null @@ -1,222 +0,0 @@ - -
- -
Configure User Syncing
-
The user sync configuration options described in this section give publishers control over how adapters behave with respect to dropping pixels or scripts to cookie users with IDs. This practice is called “user syncing” because the aim is to let the bidders match IDs between their cookie space and the DSP’s cookie space. There’s a good reason for bidders to be doing this – DSPs are more likely to bid on impressions where they know something about the history of the user. However, there are also good reasons why publishers may want to control the use of these practices: -
-
    -
  • Page performance: Publishers may wish to move ad-related cookie work to much later in the page load after ads and content have loaded.
  • -
  • User privacy: Some publishers may want to opt out of these practices even though it limits their users’ values on the open market.
  • -
  • Security: Publishers may want to control which bidders are trusted to inject images and JavaScript into their pages.
  • -
-
- -
Note: User syncing default behavior If you don’t tweak any of the settings described in this section, the default behavior of Prebid.js is to wait 3 seconds after the auction ends, and then allow every adapter to drop up to 5 image-based user syncs.
-
- -
-
pbjs.setConfig({
-    userSync: {
-        syncDelay: 5000 // write image pixels 5 seconds after the auction
-    }
-});
-
- - -
-
Arguments:
-
-
    -
  • - userSync: object -

    Object containing values for user sync configurations.

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Accepted Values
    AttributeTypeDescription
    syncEnabledBooleanEnable/disable the user syncing feature. Default setting is true.
    filterSettingsObjectConfigure lists of adapters to include or exclude their user syncing based on the pixel type (image/iframe).
    syncsPerBidderIntegerNumber of registered syncs allowed per adapter. Default setting is 5. To allow all, set to 0.
    syncDelayIntegerDelay in milliseconds for syncing after the auction ends. Default setting is 3000.
    enableOverrideBooleanEnable/disable publisher to trigger user syncs by calling pbjs.triggerUserSyncs(). Default setting is false.
    -
  • -
-
- -
User Sync Examples
-
Examples of configurations that will change the default behavior:

Push the user syncs to later in the page load.

- -
-
pbjs.setConfig({
-	    userSync: {
-	        syncDelay: 5000 // write image pixels 5 seconds after the auction
-	    }
-	});
-

Turn off user syncing entirely.

- -
-
pbjs.setConfig({
-    userSync: {
-        syncEnabled: false
-    }
-});
- -

Allow iframe-based syncs (the presence of a valid filterSettings.iframe object automatically enables iframe type user-syncing).

- -
-
pbjs.setConfig({
-    userSync: {
-        filterSettings: {
-            iframe: {
-                bidders: '*',   // '*' means all bidders
-                filter: 'include'
-            }
-        }
-    }
-});
- -
Note - iframe-based syncing is disabled by default. Image-based syncing is enabled by default; it can be disabled by excluding all/certain bidders via the filterSettings object.
- -

Only certain bidders are allowed to sync and only certain types of sync pixels.

- -
-
pbjs.setConfig({
-    userSync: {
-        filterSettings: {
-            iframe: {
-                bidders: ['def'],  // only this bidder is excluded from syncing iframe pixels, all other bidders are allowed
-                filter: 'exclude'
-            },
-            image: {
-                bidders: ['abc', 'def', 'xyz'],  //only these 3 bidders are allowed to sync image pixels
-                filter: 'include'
-            }
-        },
-        syncsPerBidder: 3, // and no more than 3 syncs at a time
-        syncDelay: 6000, // 6 seconds after the auction
-    }
-});
- -

If you want to apply the same bidder inclusion/exlusion rules for both types of sync pixels, you can use the all object instead specifying both image and iframe objects like so:

- -
-
pbjs.setConfig({
-    userSync: {
-        /* only these bidders are allowed to sync.  Both iframe and image pixels are permitted. */
-        filterSettings: {
-            all: {
-                bidders: ['abc', 'def', 'xyz'],
-                filter: 'include'
-            }
-        },
-        syncsPerBidder: 3, // and no more than 3 syncs at a time
-        syncDelay: 6000, // 6 seconds after the auction
-    }
-});
- -
Note - the all field is mutually exclusive and cannot be combined with the iframe/image fields in the userSync config. This restriction is to promote clear logic as to how bidders will operate in regards to their userSync pixels. If the fields are used together, this will be considered an invalid config and Prebid will instead use the default userSync logic (all image pixels permitted and all iframe pixels are blocked).
- -

The same bidders can drop sync pixels, but the timing will be controlled by the page.

- -
-
pbjs.setConfig({
-    userSync: {
-        /* only these bidders are allowed to sync, and only image pixels */
-        filterSettings: {
-            image: {
-                bidders: ['abc', 'def', 'xyz'],
-                filter: 'include'
-            }
-        },
-        enableOverride: true // publisher will call `pbjs.triggerUserSyncs()`
-    }
-});
- -

As noted, there’s a function available to give the page control of when registered user syncs are added.

- -
-
pbjs.triggerUserSyncs();
-
- -
- -
How user syncing works
-
The userSync.registerSync() function called by the adapter keeps a queue of valid userSync requests. It prevents unwanted sync entries from being placed on the queue:

-

    -
  • Removes undesired sync types. (i.e. blocks iframe pixels if filterSettings.iframe wasn’t declared).
  • -
  • Removes undesired adapter registrations. (i.e. enforces the configured filtering logic from the filterSettings object).
  • -
  • Makes sure there’s not too many queue entries from a given adapter. (i.e. enforces syncsPerBidder).
  • -
- - When user syncs are run, regardless of whether they are invoked by the platform or by the page calling pbjs.triggerUserSyncs(), the queue entries are randomized and appended to the bottom of the HTML tag. -
- - - -
- -
Response
-
Response Description
-
- -
{ response: example }
-
- -
-
    -
  • - param1: string -

    String indicating some value that has to be passed as a string type.

    -
  • -
  • - param2: number -

    Number indicating some value that has to be passed as a number type.

    -
    Note: This number should be between 0 and infinity.
    -
  • -
-
-
- - -
diff --git a/sandbox/apiDocs/md/api-template.md b/sandbox/apiDocs/md/api-template.md deleted file mode 100644 index 8a29cbd2d7..0000000000 --- a/sandbox/apiDocs/md/api-template.md +++ /dev/null @@ -1,60 +0,0 @@ -
API Endpoint Template
- -Use this template for various elements you would want to display in your API endpoint documentation. Please follow the steps within the **Publishing Your API Document** (/guide/api-publishing,html). - -#### Code - -Code samples should be written within code fencing. In Markdown these are distinguished by three opening and closing backticks. Syntax highlighting can be added by including the name of the code language. - -```javascript - -//code exampel for Javascript -for (i=0; i<1000; i++) { - console.log("Hello World!"); -} -``` -#### Tables - -{: .table .table-bordered .table-striped } -| CPM | Granularity | Example | -|---------------------+----------------------------------+--------| -| CPM <= $5 | $0.05 increments | $1.87 floored to $1.85 | -| CPM <= $10 and > $5 | $0.10 increments | $5.09 floored to $5.00 | -| CPM <= $20 and > $10 | $0.50 increments | $14.26 floored to $14.00 | -| CPM > $20 | Caps the price bucket at $20 | $24.82 floored to $20.00 | - -#### Links - -*Absolute* -[Absolute Link](http://www.linkurl.com) - -*Relative* -[Relative Link](/guide/api-template.html) - -#### Alerts - -See the [Prebid Alert guide](guide/pb-guide-alerts.html) for the various alerts allowed on Prebid.org. - -#### List - -*Ordered List - Use an ordered list when the user is required a sequential series of steps to complete a task: - -1. Create an API endpoint. -2. Follow the documentation style guide to create documentation for it. -3. Follow the API publishing instructions to display documentation on Prebid.org. -4. Bask in glory. - -Use an unordered list when discussing any non-sequential process or topic, such as benefits of using the endpoint you are documenting. - -*Benefits of this endpoint* - -- Faster than the other endpoint. -- Easier to implement. -- Compatible with everything ever made. - - - - - - - \ No newline at end of file diff --git a/sandbox/apiDocs/md/bidderOrder.md b/sandbox/apiDocs/md/bidderOrder.md deleted file mode 100644 index 142fb09187..0000000000 --- a/sandbox/apiDocs/md/bidderOrder.md +++ /dev/null @@ -1,9 +0,0 @@ -
Bidder Order
- -Set the order in which bidders are called: - -
-    
-        pbjs.setConfig({ bidderSequence: "fixed" })   /* default is "random" */
-    
-
\ No newline at end of file diff --git a/sandbox/apiDocs/md/bidderTimeout.md b/sandbox/apiDocs/md/bidderTimeout.md deleted file mode 100644 index bc36933c12..0000000000 --- a/sandbox/apiDocs/md/bidderTimeout.md +++ /dev/null @@ -1,12 +0,0 @@ -
Bidder Timeouts
- -Set a global bidder timeout: - -```javascript -pbjs.setConfig({ bidderTimeout: 3000 }); -``` - -
**Bid Timeouts and JavaScript Timers**

-Note that it's possible for the timeout to be triggered later than expected, leading to a bid participating in the auction later than expected. This is due to how setTimeout works in JS: it queues the callback in the event loop in an approximate location that should execute after this time but it is not guaranteed.

-With a busy page load, bids can be included in the auction even if the time to respond is greater than the timeout set by Prebid.js. However, we do close the auction immediately if the threshold is greater than 200ms, so you should see a drop off after that period. -For more information about the asynchronous event loop and setTimeout, see How JavaScript Timers Work].

diff --git a/sandbox/apiDocs/md/debugging.md b/sandbox/apiDocs/md/debugging.md deleted file mode 100644 index f83e66ce16..0000000000 --- a/sandbox/apiDocs/md/debugging.md +++ /dev/null @@ -1,9 +0,0 @@ - -
Debugging
- - -Turn on debugging: - -```javascript -pbjs.setConfig({ debug: true }); -``` \ No newline at end of file diff --git a/sandbox/apiDocs/md/disableAjaxTimeout.md b/sandbox/apiDocs/md/disableAjaxTimeout.md deleted file mode 100644 index e2db31f8a2..0000000000 --- a/sandbox/apiDocs/md/disableAjaxTimeout.md +++ /dev/null @@ -1,7 +0,0 @@ -
Disable Ajax Timeout
- -Prebid core adds a timeout on XMLHttpRequest request to terminate the request once auction is timedout. Since Prebid is ignoring all the bids after timeout it does not make sense to continue the request after timeout. However, you have the option to disable this by using `disableAjaxTimeout`. - -```javascript -pbjs.setConfig({ disableAjaxTimeout: true }); -``` \ No newline at end of file diff --git a/sandbox/apiDocs/md/enableSendAllBids.md b/sandbox/apiDocs/md/enableSendAllBids.md deleted file mode 100644 index 7f7d4a5955..0000000000 --- a/sandbox/apiDocs/md/enableSendAllBids.md +++ /dev/null @@ -1,68 +0,0 @@ -
Send All Bids
- -Sending all bids is the default, but should you wish to turn it off: - -```javascript -pbjs.setConfig({ enableSendAllBids: false }) -``` - -When `sendAllBids` mode is on, your page will send keywords for all bidders to your ad server. The ad server will then make the decision on which will win. Some ad servers, such as DFP, can then generate reporting on historical bid prices from all bidders. - -
Note that this config must be set before pbjs.setTargetingForGPTAsync() or pbjs.getAdserverTargeting().
- -After this method is called, pbjs.getAdserverTargeting() will give you the below JSON (example). pbjs.setTargetingForGPTAsync() will apply the below keywords in the JSON to GPT (see example below)
- -
 
-{
-  "hb_adid_audienceNetw": "1663076dadb443d",
-  "hb_pb_audienceNetwor": "9.00",
-  "hb_size_audienceNetw": "300x250",
-  "hb_adid_appnexus": "191f4aca0c0be8",
-  "hb_pb_appnexus": "10.00",
-  "hb_size_appnexus": "300x250",
-  // also sends the highest bid in the these variables:
-  "hb_bidder": "appnexus",
-  "hb_adid": "191f4aca0c0be8",
-  "hb_pb": "10.00",
-  "hb_size": "300x250",
-}
-
- -
Important: DFP has a key-value key character limit of up to 20 characters. Some of the keys without truncation will exceed 20 chars. Prebid.js automatically truncates the key length to 20 characters. For example, hb_adid_longBidderName is truncated to hb_adid_longBidderNa (me is truncated). Note that the key is case-sensitive. To get the exact key-value keys for each bidder, find them at Bidder Params.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Default Key ScopeDescriptionExample
`hb_pb_BIDDERCODERequiredThe price bucket. Used by the line item to target. Case sensitive and truncated to 20 chars. The BIDDERCODE is documented at Bidder Params.hb_pb_rubicon = 2.10
hb_adid_BIDDERCODERequiredThe ad Id. Used by the ad server creative to render ad. Case sensitive and truncated to 20 chars. The BIDDERCODE is documented at Bidder Params.hb_adid_longBidderNa = 234234
hb_size_BIDDERCODEOptionalThis is not required for adops. Case sensitive and truncated to 20 chars.hb_size_appnexus = 300x250
- - - - - diff --git a/sandbox/apiDocs/md/maxRequestsPerOrigin.md b/sandbox/apiDocs/md/maxRequestsPerOrigin.md deleted file mode 100644 index ae6039fcca..0000000000 --- a/sandbox/apiDocs/md/maxRequestsPerOrigin.md +++ /dev/null @@ -1,17 +0,0 @@ -
Max Requests Per Origin
- -Since browsers have a limit of how many requests they will allow to a specific domain before they block, Prebid.js -will queue auctions that would cause requests to a specific origin to exceed that limit. The limit is different -for each browser. Prebid.js defaults to a max of `4` requests per origin. That value can be configured with -`maxRequestsPerOrigin`. - -```javascript -pbjs.setConfig({ maxRequestsPerOrigin: 6 }); -``` -
Most browsers allow at least six requests, but your results may vary for your user base. Sometimes using all six requests can impact performance negatively for users with poor internet connections.
- -```javascript -pbjs.setConfig({ maxRequestsPerOrigin: 1 }); -``` -
To emulate pre 1-x behavior and have all auctions queue (no concurrent auctions), you can set maxRequestToOrigin to one.
- diff --git a/sandbox/apiDocs/md/timeoutBuffer.md b/sandbox/apiDocs/md/timeoutBuffer.md deleted file mode 100644 index 0abcf7c64c..0000000000 --- a/sandbox/apiDocs/md/timeoutBuffer.md +++ /dev/null @@ -1,7 +0,0 @@ -
Set Timeout Buffer
- -Prebid core adds a timeout buffer to extend the time that bidders have to return a bid after the auction closes. This buffer is used to offset the "time slippage" of the setTimeout behavior in browsers. Prebid.js sets the default value to 400ms. You can change this value by setting `timeoutBuffer` to the amount of time you want to use. The following example sets the buffer to 300ms. - -```javascript -pbjs.setConfig({ timeoutBuffer: 300 }); -``` \ No newline at end of file diff --git a/sandbox/apiDocs/md/useBidCache.md b/sandbox/apiDocs/md/useBidCache.md deleted file mode 100644 index 5abf7cff63..0000000000 --- a/sandbox/apiDocs/md/useBidCache.md +++ /dev/null @@ -1,12 +0,0 @@ -
Use Bid Cache
- -Prebid.js currently allows for caching and reusing bids in a very narrowly defined scope. -However, if you'd like, you can disable this feature and prevent Prebid.js from using anything but the latest bids for -a given auction. - -
This option is available in version 1.39 as true-by-default and became false-by-default as of Prebid.js 2.0. If you want to use this feature in 2.0 and later, you'll need to set the value to true.
- - -

-pbjs.setConfig({ useBidCache: true })
-
\ No newline at end of file diff --git a/sandbox/apiDocs/text/pb-api-filenames.txt b/sandbox/apiDocs/text/pb-api-filenames.txt deleted file mode 100644 index b03d283f97..0000000000 --- a/sandbox/apiDocs/text/pb-api-filenames.txt +++ /dev/null @@ -1,37 +0,0 @@ -addAdUnits.html -adServersDFPBuildVideoUrl.html -adServersFreewheelGetTargeting.html -aliasBidder.html -app.html -bidderOrder.html -bidderSettings.html -bidderTimeout.html -debugging.html -disableAjaxTimeout.html -enableSendAllBids.html -genericConfig.html -getAdserverTargeting.html -getAdserverTargetingForAdUnitCode.html -getAllPrebidWinningBids.html -getAllWinningBids.html -getBidResponses.html -getBidResponsesForAdUnitCode.html -getConfig.html -getHighestCpmBids.html -getNoBids.html -markWinningBidAsUsed.html -maxRequestsPerOrigin.html -mediaTypePriceGranularity.html -pb-api-template.html -priceGranularity.html -publisherDomain.html -removeAdUnit.html -requestBids.html -s2sConfig.html -setTargetingForAst.html -setTargetingForGPTAsync.html -sizeConfigAndLabels.html -timeoutBuffer.html -troubleshootingConfig.html -useBidCache.html -userSync.html \ No newline at end of file diff --git a/sandbox/codefencetest.html b/sandbox/codefencetest.html deleted file mode 100644 index 3c7944f6df..0000000000 --- a/sandbox/codefencetest.html +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - Prebid Video Example : JW Player (Platform) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-			<script>
-				alert("this is a test of js code fencing");
-				var letthisbeone = 1;
-				var objectthing { 
-					keything: "keyname",
-					keyvalue: 0,
-					arraything: [
-						object1:{keything:"otherkeyname", keyvalue:1}
-					]
-				}
-			</script>
-		
- - - - \ No newline at end of file diff --git a/sandbox/demo/assets/images/prebid_logo.png b/sandbox/demo/assets/images/prebid_logo.png deleted file mode 100644 index 4c0c275eeffceff7d778e8d144345642a21bfc86..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123917 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - -
-
-

Click an author to read an excerpt from their book.

-
- -
-

Dodge testifies that this was the first time he had tried to communicate with his men since rejoining them at the head of the gulch, and he is reported as saying—for the second time—something about "getting out of this death trap." When asked by the Board of Review if he had explained to the men the danger they were in, he looked at the Board in amazement, as if the Board had never been outside the city limits and wouldn't know sawdust if they saw it in a pile. It was getting late for talk anyway. What could anybody hear? It roared from behind, below, and across, and the crew, inside it, was shut out from all but a small piece of the outside world.

-

They had come to the station of the cross where something you want to see and can't shuts out the sight of everything that otherwise could be seen. Rumsey says again and again what the something was he couldn't see. "The top of the ridge, the top of the ridge.

-

"I had noticed that a fire will wear out when it reaches the top of a ridge. I started putting on steam thinking if I could get to the top of the ridge I would be safe.

-

"I kept thinking the ridge—if I can make it. On the ridge I will be safe . . . I forgot to mention I could not definitely see the ridge from where we were. We kept running up since it had to be there somewhere. Might be a mile and a half or a hundred feet—I had no idea."

-

The survivors say they weren't panicked, and something like that is probably true. Smokejumpers are selected for being tough, but Dodge's men were very young and, as he testified, none of them had been on a blowup before and they were getting exhausted and confused. The world roared at them—there was no safe place inside and there was almost no outside. By now they were short of breath from the exertion of their climbing and their lungs were being seared by the heat. A world was coming where no organ of the body had consciousness but the lungs.

-

Dodge's order was to throw away just their packs and heavy tools, but to his surprise some of them had already thrown away all their equipment. On the other hand, some of them wouldn't abandon their heavy tools, even after Dodge's order. Diettert, one of the most intelligent of the crew, continued carrying both his tools until Rumsey caught up with him, took his shovel, and leaned it against a pine tree. Just a little farther on, Rumsey and Sallee passed the recreation guard, Jim Harrison, who, having been on the fire all afternoon, was now exhausted. He was sitting with his heavy pack on and was making no effort to take it off, and Rumsey and Sallee wondered numbly why he didn't but no one stopped to suggest he get on his feet or gave him a hand to help him up. It was even too late to pray for him. Afterwards, his ranger wrote his mother and, struggling for something to say that would comfort her, told her that her son always attended mass when he could.

-

It was way over one hundred degrees. Except for some scattered timber, the slope was mostly hot rock slides and grass dried to hay.

-

It was becoming a world where thought that could be described as such was done largely by fixations. Thought consisted in repeating over and over something that had been said in a training course or at least by somebody older than you.

-

Critical distances shortened. It had been a quarter of a mile from where Dodge had rejoined his crew to where he had the crew reverse direction. From there they had gone only five hundred yards at the most before he realized the fire was gaining on them so rapidly that the men should discard whatever was heavy.

-

The next station of the cross was only seventy-five yards ahead. There they came to the edge of scattered timber with a grassy slope ahead. There they could see what is really not possible to see: the center of a blowup. It is really not possible to see the center of a blowup because the smoke only occasionally lifts, and when it does all that can be seen are pieces, pieces of death flying around looking for you—burning cones, branches circling on wings, a log in flight without a propeller. Below in the bottom of the gulch was a great roar without visible flames but blown with winds on fire. Now, for the first time, they could have seen to the head of the gulch if they had been looking that way. And now, for the first time, to their left the top of the ridge was visible, looking when the smoke parted to be not more than two hundred yards away.

-
- -
-

We had no means of angular orientation, were already deafened, and were bit by bit growing blind. The moon like a pallid ember began to go out in the banks of fog. Overhead the sky was filling with clouds, and we flew thenceforth between cloud and fog in a world voided of all substance and all light. The ports that signaled us had given up trying to tell us where we were. “No bearings, no bearings,” was all their message, for our voice reached them from everywhere and nowhere. With sinking hearts Neri and I leaned out, he on his side and I on mine, to see if anything, anything at all, was distinguishable in this void. Already our tired eyes were seeing things— errant signs, delusive flashes, phantoms.

-

And suddenly, when already we were in despair, low on the horizon a brilliant point was unveiled on our port bow. A wave of joy went through me. Neri leaned forward, and I could hear him singing. It could not but be the beacon of an airport, for after dark the whole Sahara goes black and forms a great dead expanse. That light twinkled for a space— and then went out! We had been steering for a star which was visible for a few minutes only, just before setting on the horizon between the layer of fog and the clouds.

-

Then other stars took up the game, and with a sort of dogged hope we set our course for each of them in turn. Each time that a light lingered a while, we performed the same crucial experiment. Neri would send his message to the airport at Cisneros: “Beacon in view. Put out your light and flash three times.” And Cisneros would put out its beacon and flash three times while the hard light at which we gazed would not, incorruptible star, so much as wink. And despite our dwindling fuel we continued to nibble at the golden bait which each time seemed more surely the true light of a beacon, was each time a promise of a landing and of life— and we had each time to change our star.

-

And with that we knew ourselves to be lost in interplanetary space among a thousand inaccessible planets, we who sought^only the one veritable planet, our own, that planet on which alone we should find our familiar countryside, the houses of our friends, our treasures. On which alone we should find . . . Let me draw the picture that took shape before my eyes. It will seem to you childish; but even in the midst of danger a man retains his human concerns. I was thirsty and I was hungry. If we did find Cisneros we should re-fuel and carry on to Casablanca, and there we should come down in the cool of daybreak, free to idle the hours away. Neri and I would go into town. We would go to a little pub already open despite the early hour. Safe and sound, Neri and I would sit down at table and laugh at the night of danger as we ate our warm rolls and drank our bowls of coffee and hot milk. We would receive this matutinal gift at the hands of life. Even as an old peasant woman recognizes her God in a painted image, in a childish medal, in a chaplet, so life would speak to us in its hum- blest language in order that we understand. The joy of living, I say, was summed up for me in the remembered sensation of that first burning and aromatic swallow, that mixture of milk and coffee and bread by which men hold communion with tranquil pastures, exotic plantations, and golden harvests, communion with the earth. Amidst all these stars there was but one that could make itself significant for us by composing this aromatic bowl that was its daily gift at dawn. And from that earth of men, that earth docile to the reaping of grain and the harvesting of the grape, bearing its rivers asleep in their fields, its villages clinging to their hillsides, our ship was separated by astronomical distances. AJl the treasures of the world were summed up in a grain of dust now blown far out of our path by the very destiny itself of dust and of the orbs of night.

-

And Neri still prayed to the stars.

-
-
-

The boy's name was Santiago. Dusk was falling as the boy arrived with his herd at an abandoned church. The roof had fallen in long ago, and an enormous sycamore had grown on the spot where the sacristy had once stood.

-

He decided to spend the night there. He saw to it that all the sheep entered through the ruined gate, and then laid some planks across it to prevent the flock from wandering away during the night. There were no wolves in the region, but once an animal had strayed during the night, and the boy had had to spend the entire next day searching for it.

-

He swept the floor with his jacket and lay down, using the book he had just finished reading as a pillow. He told himself that he would have to start reading thicker books: they lasted longer, and made more comfortable pillows.

-

It was still dark when he awoke, and, looking up, he could see the stars through the half-destroyed roof.

-

I wanted to sleep a little longer, he thought. He had had the same dream that night as a week ago, and once again he had awakened before it ended.

-

He arose and, taking up his crook, began to awaken the sheep that still slept. He had noticed that, as soon as he awoke, most of his animals also began to stir. It was as if some mysterious energy bound his life to that of the sheep, with whom he had spent the past two years, leading them through the countryside in search of food and water. "They are so used to me that they know my schedule," he muttered. Thinking about that for a moment, he realized that it could be the other way around: that it was he who had become accustomed to their schedule.

-

But there were certain of them who took a bit longer to awaken. The boy prodded them, one by one, with his crook, calling each by name. He had always believed that the sheep were able to understand what he said. So there were times when he read them parts of his books that had made an impression on him, or when he would tell them of the loneliness or the happiness of a shepherd in the fields. Sometimes he would comment to them on the things he had seen in the villages they passed.

-

But for the past few days he had spoken to them about only one thing: the girl, the daughter of a merchant who lived in the village they would reach in about four days. He had been to the village only once, the year before. The merchant was the proprietor of a dry goods shop, and he always demanded that the sheep be sheared in his presence, so that he would not be cheated. A friend had told the boy about the shop, and he had taken his sheep there.

-
- -
-

Instream is a system that’s familiar to most. It involves standard pre-roll, mid-roll, or post-roll ad placements within your favorite videos. While vulnerable to ad blockers, instream is still the most reliable system for placing video ads within a relevant video context, and of course the most frequently utilized.

-

- - -
- - - -
-
- -
-
-
- -
-
-
- - -
-
- -
-
-
-
-
-
-
- - - - - - - - - - - diff --git a/sandbox/demo/index.html b/sandbox/demo/index.html deleted file mode 100644 index 483e2b3db6..0000000000 --- a/sandbox/demo/index.html +++ /dev/null @@ -1,345 +0,0 @@ - - - - - Prebid JS Demo - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - -
-
-

Some of Steve's favorite authors

-

Click an author to read an excerpt from their book.

-
- -
-

Dodge testifies that this was the first time he had tried to communicate with his men since rejoining them at the head of the gulch, and he is reported as saying—for the second time—something about "getting out of this death trap." When asked by the Board of Review if he had explained to the men the danger they were in, he looked at the Board in amazement, as if the Board had never been outside the city limits and wouldn't know sawdust if they saw it in a pile. It was getting late for talk anyway. What could anybody hear? It roared from behind, below, and across, and the crew, inside it, was shut out from all but a small piece of the outside world.

-

They had come to the station of the cross where something you want to see and can't shuts out the sight of everything that otherwise could be seen. Rumsey says again and again what the something was he couldn't see. "The top of the ridge, the top of the ridge.

-

"I had noticed that a fire will wear out when it reaches the top of a ridge. I started putting on steam thinking if I could get to the top of the ridge I would be safe.

-

"I kept thinking the ridge—if I can make it. On the ridge I will be safe . . . I forgot to mention I could not definitely see the ridge from where we were. We kept running up since it had to be there somewhere. Might be a mile and a half or a hundred feet—I had no idea."

-

The survivors say they weren't panicked, and something like that is probably true. Smokejumpers are selected for being tough, but Dodge's men were very young and, as he testified, none of them had been on a blowup before and they were getting exhausted and confused. The world roared at them—there was no safe place inside and there was almost no outside. By now they were short of breath from the exertion of their climbing and their lungs were being seared by the heat. A world was coming where no organ of the body had consciousness but the lungs.

-

Dodge's order was to throw away just their packs and heavy tools, but to his surprise some of them had already thrown away all their equipment. On the other hand, some of them wouldn't abandon their heavy tools, even after Dodge's order. Diettert, one of the most intelligent of the crew, continued carrying both his tools until Rumsey caught up with him, took his shovel, and leaned it against a pine tree. Just a little farther on, Rumsey and Sallee passed the recreation guard, Jim Harrison, who, having been on the fire all afternoon, was now exhausted. He was sitting with his heavy pack on and was making no effort to take it off, and Rumsey and Sallee wondered numbly why he didn't but no one stopped to suggest he get on his feet or gave him a hand to help him up. It was even too late to pray for him. Afterwards, his ranger wrote his mother and, struggling for something to say that would comfort her, told her that her son always attended mass when he could.

-

It was way over one hundred degrees. Except for some scattered timber, the slope was mostly hot rock slides and grass dried to hay.

-

It was becoming a world where thought that could be described as such was done largely by fixations. Thought consisted in repeating over and over something that had been said in a training course or at least by somebody older than you.

-

Critical distances shortened. It had been a quarter of a mile from where Dodge had rejoined his crew to where he had the crew reverse direction. From there they had gone only five hundred yards at the most before he realized the fire was gaining on them so rapidly that the men should discard whatever was heavy.

-

The next station of the cross was only seventy-five yards ahead. There they came to the edge of scattered timber with a grassy slope ahead. There they could see what is really not possible to see: the center of a blowup. It is really not possible to see the center of a blowup because the smoke only occasionally lifts, and when it does all that can be seen are pieces, pieces of death flying around looking for you—burning cones, branches circling on wings, a log in flight without a propeller. Below in the bottom of the gulch was a great roar without visible flames but blown with winds on fire. Now, for the first time, they could have seen to the head of the gulch if they had been looking that way. And now, for the first time, to their left the top of the ridge was visible, looking when the smoke parted to be not more than two hundred yards away.

-
- -
-

We had no means of angular orientation, were already deafened, and were bit by bit growing blind. The moon like a pallid ember began to go out in the banks of fog. Overhead the sky was filling with clouds, and we flew thenceforth between cloud and fog in a world voided of all substance and all light. The ports that signaled us had given up trying to tell us where we were. “No bearings, no bearings,” was all their message, for our voice reached them from everywhere and nowhere. With sinking hearts Neri and I leaned out, he on his side and I on mine, to see if anything, anything at all, was distinguishable in this void. Already our tired eyes were seeing things— errant signs, delusive flashes, phantoms.

-

And suddenly, when already we were in despair, low on the horizon a brilliant point was unveiled on our port bow. A wave of joy went through me. Neri leaned forward, and I could hear him singing. It could not but be the beacon of an airport, for after dark the whole Sahara goes black and forms a great dead expanse. That light twinkled for a space— and then went out! We had been steering for a star which was visible for a few minutes only, just before setting on the horizon between the layer of fog and the clouds.

-

Then other stars took up the game, and with a sort of dogged hope we set our course for each of them in turn. Each time that a light lingered a while, we performed the same crucial experiment. Neri would send his message to the airport at Cisneros: “Beacon in view. Put out your light and flash three times.” And Cisneros would put out its beacon and flash three times while the hard light at which we gazed would not, incorruptible star, so much as wink. And despite our dwindling fuel we continued to nibble at the golden bait which each time seemed more surely the true light of a beacon, was each time a promise of a landing and of life— and we had each time to change our star.

-

And with that we knew ourselves to be lost in interplanetary space among a thousand inaccessible planets, we who sought^only the one veritable planet, our own, that planet on which alone we should find our familiar countryside, the houses of our friends, our treasures. On which alone we should find . . . Let me draw the picture that took shape before my eyes. It will seem to you childish; but even in the midst of danger a man retains his human concerns. I was thirsty and I was hungry. If we did find Cisneros we should re-fuel and carry on to Casablanca, and there we should come down in the cool of daybreak, free to idle the hours away. Neri and I would go into town. We would go to a little pub already open despite the early hour. Safe and sound, Neri and I would sit down at table and laugh at the night of danger as we ate our warm rolls and drank our bowls of coffee and hot milk. We would receive this matutinal gift at the hands of life. Even as an old peasant woman recognizes her God in a painted image, in a childish medal, in a chaplet, so life would speak to us in its hum- blest language in order that we understand. The joy of living, I say, was summed up for me in the remembered sensation of that first burning and aromatic swallow, that mixture of milk and coffee and bread by which men hold communion with tranquil pastures, exotic plantations, and golden harvests, communion with the earth. Amidst all these stars there was but one that could make itself significant for us by composing this aromatic bowl that was its daily gift at dawn. And from that earth of men, that earth docile to the reaping of grain and the harvesting of the grape, bearing its rivers asleep in their fields, its villages clinging to their hillsides, our ship was separated by astronomical distances. AJl the treasures of the world were summed up in a grain of dust now blown far out of our path by the very destiny itself of dust and of the orbs of night.

-

And Neri still prayed to the stars.

-
-
-

Fifty miles east of Uliastai, the cruel joke of a road ended in what was an attempt at a hot springs resort, a series of whacked together wooden buildings originally built for Communist party bigwigs. The place looked embarrassed, like a man in a tux at a beer party. All the other inhabitations in the countryside, without exception, were round felt tents, basically unchanged since the time Ghengis declared himself 'ruler of all those who live in felt tents.' They looked like round puffball mushrooms and were called gers. Don't say yurt. Russians say yurt.

-

At the end of the road, wranglers hired for the trip, watched as we set up our American tents. The men thought our gers were flimsy but they liked the portability. It took, they said, several hours to take down a Mongolian ger. The wranglers seemed shy, and they smiled constantly, nervously.

-

In the saddle, though, these same men laughed and sang unselfconsciously, utterly at home on horseback. In Montant, we'd call them can-do cowboys.

-

Our head wrangle, Lharga, a lean, unflappable man in his fifties, took it upon himself to coach me in matters Mongolian. The wraparound jackets all the men wore were called dels. The sleeves could be rolled down to warm the hands in cold weather, and the sash that held the garment together was a handy place to stash a knife. The oversize boots with turned up toes were called gutuls. For the past seventy years children had been taught in school that gutuls were a symbol of Mongolian subservience to religion. You can drop to your knees so much easier in boots with turned up toes. Actually, Lharga explained, the boots are designed to slip easily into the stirrup, and to show respect for the earth. Turned up toes don't tear into the ground.

-
- - -
-
- -
-
-
- - -
-
-
- - -
-
- -
-
-
-
-
- -
-
- - - - - \ No newline at end of file diff --git a/sandbox/demo/instream-demo.html b/sandbox/demo/instream-demo.html deleted file mode 100644 index d5a81dffe2..0000000000 --- a/sandbox/demo/instream-demo.html +++ /dev/null @@ -1,241 +0,0 @@ - - - - - Prebid JS Demo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - -
-
-

Which is why this concert is more than entertainment, why the star syndrome doesn't exactly apply here, why the Grateful Dead isn't really a rock band and is only tangentially part of the American music industry. Garcia is indeed charismatic, but not the least remarkable of his contributions to the group is his general refusal to run it. "You can call me boss," he once said, chuckling, "just don't ask me to make any decisions." That is why the fans, the colorful, exuberant Dead Heads gathered outside, are members of a cult that at its best serves Dionysus rather than individual performers, and why the police, veterans of these parking lot festivals, understand the benign nature of their guests and are smiling at them.

-

A few days earlier the gig had been at a music theater out in the country. The endless sleepy commute, a forty-five-minute spin on an unfamiliar road from a generic RamadaMarriottSheraton, through endless geometrically identical cornfields, to a resort nowhere in particular, induced a feeling of absolute random disassociation. Conversation was desperately required, and centered on Lesh's newly purchased book about the anthropic principle, which posited the universe as a mind.

-

Obeying an unspoken protocol, Scrib had left the front seats to the band and retreated to the back of the van--limousines are thought too conspicuous--to consider the band's personalities in archetypal terms. Garcia is a powerful bohemian visionary, a shaman of a sort, and his personal style has largely defined the band's social and musical structure. Yet his role is nothing like that suggested by the automatic attention paid to a virtuoso rock guitarist or the guru figure the media have fabricated in his name. The band's candidate for Handsome Rock Star is Weir, the eternal Younger Brother. But on a day-to-day basis, the psychic pivot to the Dead is Phil Lesh, the most aggressive purist, the anti-philistine Artist. It is he who most often and most loudly demands that they dance as closely as possible to the edge of the nearest available precipice. Intellectual, kinetic, intense, he was once nicknamed Reddy Kilowatt in recognition of his high mental and physical velocity. Twenty years later his mind is still exceedingly agile, although on this day he was content to let Garcia dominate the rap.

-

"Why would the universe go through the trouble of evolving consciousness?" inquired Garcia. "If it wanted life that would succeed, just to create the most effective living thing, it could have stopped at bacteria. Or it could have stopped at vertebrates or sharks. But consciousness goes a quantum step further than just life. It might be that consciousness is the whole reason there is a universe. There might not be a universe apart from consciousness." Garcia lit another Pall Mall. "And who knows what it's like elsewhere in the universe? Local realities change enough, locally, that those Hindu guys can walk through huge, blazing fires and not get burned. It's got to be that consciousness modulates reality. Besides, the truth can't only be here, or you could stare at your toes and figure it all out."

- -
-
-
- -
-
-
- - - - - - \ No newline at end of file diff --git a/sandbox/prebid-api-guide.md b/sandbox/prebid-api-guide.md deleted file mode 100644 index 4743d3f5aa..0000000000 --- a/sandbox/prebid-api-guide.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -layout: page_v2 -sidebarType: 1 -title: Prebid API ---- -# API Reference - -{% include /api/pb-api-test.html %} \ No newline at end of file diff --git a/sandbox/prebid-api-search.md b/sandbox/prebid-api-search.md deleted file mode 100644 index 76e0225474..0000000000 --- a/sandbox/prebid-api-search.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -layout: page_v2 -sidebarType: 1 -title: Prebid API ---- -# API Search Results - -{% include /api/pb-api-search-results.html %} \ No newline at end of file diff --git a/sandbox/prebid-api-template.md b/sandbox/prebid-api-template.md deleted file mode 100644 index dd91c8363a..0000000000 --- a/sandbox/prebid-api-template.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Prebid API Template -description: Markdown file to include the Prebid API HTML Template -layout: page_v2 -sidebarType: 1 ---- - -{% include /api/pb-api-template.html %} \ No newline at end of file From 926a069d7b7315bef4b540cef94a3af5cc4ae0cf Mon Sep 17 00:00:00 2001 From: Mirko Feddern <3244291+mirkorean@users.noreply.github.com> Date: Mon, 15 Jun 2020 17:24:15 +0200 Subject: [PATCH 031/150] Add TCF2 Support for Yieldlab (#2060) --- dev-docs/bidders/yieldlab.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/yieldlab.md b/dev-docs/bidders/yieldlab.md index 28e56868f5..a3d277121b 100644 --- a/dev-docs/bidders/yieldlab.md +++ b/dev-docs/bidders/yieldlab.md @@ -6,6 +6,7 @@ hide: true biddercode: yieldlab media_types: video gdpr_supported: true +tcf2_supported: true userIds: britepoolId, criteo, digitrust, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId --- From a24d4bf3461c9de90cb42f3ab569acf86c230ce6 Mon Sep 17 00:00:00 2001 From: SKOCHERI <37454420+SKOCHERI@users.noreply.github.com> Date: Tue, 16 Jun 2020 08:54:08 -0700 Subject: [PATCH 032/150] SharedId UserId submodule documentation (#2031) * SharedId submodule documentation * SharedId submodule documentation * Adding sharedID to later section * Adding sharedID to later section * Updating Bidder Adapter Implementation section & Prebid Server Adapters section * alphabetical ordering submodules Co-authored-by: skocheri --- dev-docs/modules/userId.md | 100 ++++++++++++++++++++++++++++--------- 1 file changed, 76 insertions(+), 24 deletions(-) diff --git a/dev-docs/modules/userId.md b/dev-docs/modules/userId.md index c01e5cbb67..bb46d234de 100644 --- a/dev-docs/modules/userId.md +++ b/dev-docs/modules/userId.md @@ -494,6 +494,29 @@ pbjs.setConfig({ }) ``` +### netID + +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. + +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. + +#### netID Examples + +1) Publisher stores netID via his own logic + +{% highlight javascript %} +pbjs.setConfig({ + userSync: { + userIds: [{ + 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. @@ -602,6 +625,50 @@ pbjs.setConfig({ }); {% 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. + +#### Building Prebid with Shared Id Support +Your Prebid build must include the modules for both **userId** and **sharedId** submodule. +Add it to your Prebid.js package with: + +ex: $ gulp build --modules=userId,sharedIdSystem + +#### Prebid Params + +Individual params may be set for the Shared ID User ID Submodule. +``` +pbjs.setConfig({ + usersync: { + userIds: [{ + name: 'sharedId', + params: { + syncTime: 60 // in seconds, default is 24 hours + }, + storage: { + name: 'sharedid', + type: 'cookie', + expires: 28 + }, + }] + } +}); +``` + +#### SharedId Configuration + +{: .table .table-bordered .table-striped } +| Params under usersync.userIds[]| Scope | Type | Description | Example | +| --- | --- | --- | --- | --- | +| name | Required | String | ID value for the Shared ID module - `"sharedId"` | `"sharedId"` | +| params | Optional | Object | Details for sharedId syncing. | | +| params.syncTime | Optional | Object | Configuration to define the frequency(in seconds) of id synchronization. By default id is synchronized every 24 hours | 60 | +| storage | Required | Object | The publisher must specify the local storage in which to store the results of the call to get the user ID. This can be either cookie or HTML5 storage. | | +| storage.type | Required | String | This is where the results of the user ID will be stored. The recommended method is `localStorage` by specifying `html5`. | `"html5"` | +| storage.name | Required | String | The name of the cookie or html5 local storage where the user ID will be stored. | `"sharedid"` | +| storage.expires | Optional | Integer | How long (in days) the user ID information will be stored. | `28` | + ### Unified ID The Unified ID solution is provided by adsrvr.org and the Trade Desk. @@ -692,30 +759,6 @@ pbjs.setConfig({ }); {% endhighlight %} -### netID - -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. - -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. - -#### netID Examples - -1) Publisher stores netID via his own logic - -{% highlight javascript %} -pbjs.setConfig({ - userSync: { - userIds: [{ - name: "netId", - value: { - "netId":"fH5A3n2O8_CZZyPoJVD-eabc6ECb7jhxCicsds7qSg" - } - }] - } -}); -{% endhighlight %} - - ## Adapters Supporting the User ID Sub-Modules {% assign bidder_pages = site.pages | where: "layout", "bidder" %} @@ -748,6 +791,7 @@ Bidders that want to support the User ID module in Prebid.js, need to update the | PubCommon ID | n/a | bidRequest.userId.pubcid | `"1111"` | | Unified ID | Trade Desk | bidRequest.userId.tdid | `"1111"` | | netID | netID | bidRequest.userId.netId | `"fH5A3n2O8_CZZyPoJVD-eabc6ECb7jhxCicsds7qSg"` | +| Shared ID | SharedId | bidRequest.userId.sharedid | `{"id":"01EAJWWNEPN3CYMM5N8M5VXY22","third":"01EAJWWNEPN3CYMM5N8M5VXY22"}` | For example, the adapter code might do something like: @@ -815,6 +859,14 @@ Bidders that want to support the User ID module in Prebid Server, need to update "uids": [{ "id": "11111111" }] + },{ + "source": "sharedid.org", // Shared ID + "uids": [{ + "id": "01EAJWWNEPN3CYMM5N8M5VXY22", + "ext": { + "third": "01EAJWWNEPN3CYMM5N8M5VXY22" + } + }] }], "digitrust": { // DigiTrust is not in the eids section "id": "11111111111", From b4360fbb2b4d216e3e621fd08f72b5931f7e827e Mon Sep 17 00:00:00 2001 From: bretg Date: Tue, 16 Jun 2020 17:56:52 -0400 Subject: [PATCH 033/150] adtelligent community membership (#2066) --- _data/partners.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/_data/partners.yml b/_data/partners.yml index 12f52dd618..5049b37343 100644 --- a/_data/partners.yml +++ b/_data/partners.yml @@ -163,6 +163,10 @@ imgURL: /assets/images/partners/community/Adomik-logo.png type: community +- company: Adtelligent + link: https://adtelligent.com/ + type: community + - company: Audigent link: https://audigent.com/ imgURL: /assets/images/partners/community/audigent_logo.png From 4819b8c155a9d800c08b1f3bcd76d99d1612f000 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 19 Jun 2020 10:25:37 -0400 Subject: [PATCH 034/150] Added Ad Player Pro video example --- _data/sidebar.yml | 8 + _includes/video/pb-is-app.html | 131 ++++++++++++++ _layouts/video_sample.html | 2 + .../adplayerpro/pb-ve-adplayerpro.html | 161 ++++++++++++++++++ 4 files changed, 302 insertions(+) create mode 100644 _includes/video/pb-is-app.html create mode 100644 examples/video/instream/adplayerpro/pb-ve-adplayerpro.html diff --git a/_data/sidebar.yml b/_data/sidebar.yml index c174d16a9a..b33a09f0db 100644 --- a/_data/sidebar.yml +++ b/_data/sidebar.yml @@ -1340,6 +1340,14 @@ sectionTitle: subgroup: 1 +- sbSecId: 4 + title: '  Ad Player Pro' + link: /examples/video/instream/adplayerpro/pb-ve-adplayerpro.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 1 + - sbSecId: 4 title: '  Brid' link: /examples/video/instream/brid/pb-ve-brid.html diff --git a/_includes/video/pb-is-app.html b/_includes/video/pb-is-app.html new file mode 100644 index 0000000000..82498b5a45 --- /dev/null +++ b/_includes/video/pb-is-app.html @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + {% if page.head_title %} + {{page.head_title}} + {% else %} + {{page.title}} for Header Bidding + {% endif %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_layouts/video_sample.html b/_layouts/video_sample.html index 19674c35bd..160c8b5b95 100644 --- a/_layouts/video_sample.html +++ b/_layouts/video_sample.html @@ -1,5 +1,7 @@ {% if page.videoType == "pb-is-br" %} {% include /video/pb-is-br.html %} +{% elsif page.videoType == "pb-is-app" %} + {% include /video/pb-is-app.html %} {% elsif page.videoType == "pb-is-bc" %} {% include /video/pb-is-bc.html %} {% elsif page.videoType == "pb-is-fp" %} diff --git a/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html b/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html new file mode 100644 index 0000000000..8132f22471 --- /dev/null +++ b/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html @@ -0,0 +1,161 @@ +--- +layout: video_sample +title: Prebid Video | Instream Example with Ad Player Pro Player +description: An example of an instream pre-roll ad using Prebid.js and Ad Player Pro player. +videoType: pb-is-app +isVideo: true +sidebarType: 4 +--- + + + +
+
+
+

{{ page.title }}

+

{{page.description }}

+
+ + +
+

Important: + This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

+
+ + +
+ + + + +
+

Warning: + Do not forget to exchange the placementId in the code examples with your own placementId!

+
+ +
+

Place this code in the page header.

+
+
+
+<script async src="//acdn.adnxs.com/prebid/not-for-prod/prebid.js"></script>
+<script type="text/javascript" src="https://static.adplayer.pro/player/demo.js"></script> +<script> + var pbjs = pbjs || {}; + pbjs.que = pbjs.que || []; + + // define invokeVideoPlayer in advance in case we get the bids back from prebid before the entire page loads
+ var tempTag = false; + var invokeVideoPlayer = function(url) { + tempTag = url; + } + + var videoAdUnit = { + code: 'video1', + mediaTypes: { + video: { + playerSize: [640, 480], + context: 'instream' + } + }, + bids: [{ + bidder: 'appnexus', + params: { + placementId: 13232361, // Add your own placement id here
+ video: { + skipppable: true, + playback_method: ['auto_play_sound_off'] + } + } + }] + }; + + pbjs.que.push(function() { + pbjs.addAdUnits(videoAdUnit); // add your ad units to the bid request
+ pbjs.setConfig({ + debug: true, + cache: { + url: 'https://prebid.adnxs.com/pbc/v1/cache' + } + }); + + pbjs.requestBids({ + bidsBackHandler: function(bids) { + var videoUrl = pbjs.adServers.dfp.buildVideoUrl({ + adUnit: videoAdUnit, + params: { + iu: '/19968336/prebid_cache_video_adunit', + cust_params: { + section: 'blog', + anotherKey: 'anotherValue' + }, + output: 'vast' + } + }); + invokeVideoPlayer(videoUrl); + } + }); + }); + +</script> +
+ +
+ + +
+

Place this code in the page body.

+
+
+
+<!--player div-->
+<div id="playerContainerADP" style="width:640px; height:480px;"></div>
+<script type="text/javascript">
+  invokeVideoPlayer = function(url) {
+        AdPlayerPro('playerContainerADP').setup({
+	        "file": "https://static.adplayer.pro/video/640.mp4",
+          "width": 640,
+          "height": 480,
+	        "autoStart": true,
+          "muted": true,
+          "advertising": {
+            "tag": url
+          }
+        });
+  };
+
+  if (tempTag) {
+    invokeVideoPlayer(tempTag);
+    tempTag = false;
+  }
+  </script>
+
+
+ +
+
+ + + +
+ + + From d1f1625633519d325b814a7515c7e1d7889abf50 Mon Sep 17 00:00:00 2001 From: trchandraprakash <47793448+trchandraprakash@users.noreply.github.com> Date: Sat, 20 Jun 2020 15:09:33 -0700 Subject: [PATCH 035/150] Update contact info for Lunamedia (#2044) * Updated Bidder Code * Updated doc * Luna media docs * Updating contact person Updating contact person * Updated email address to group email Changes as suggested. Co-authored-by: Chandra Prakash --- dev-docs/bidders/lunamedia.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/lunamedia.md b/dev-docs/bidders/lunamedia.md index b4ba9af257..501f5d83cd 100644 --- a/dev-docs/bidders/lunamedia.md +++ b/dev-docs/bidders/lunamedia.md @@ -7,7 +7,7 @@ biddercode: lunamedia --- ### Note: -For more information about Luna Media, please contact lokesh@advangelists.com +For more information about Luna Media, please contact info@lunamedia.io ### Bid Params From f69fd8ad796f8d59f52f6a3abe76db6348c39ad7 Mon Sep 17 00:00:00 2001 From: bretg Date: Mon, 22 Jun 2020 11:42:31 -0400 Subject: [PATCH 036/150] serverbid adapter removed in 3.0 (#2080) --- dev-docs/bidders/answermedia.md | 18 ------------------ dev-docs/bidders/automatad.md | 17 ----------------- dev-docs/bidders/buysellads.md | 18 ------------------ dev-docs/bidders/insticator.md | 17 ----------------- dev-docs/bidders/serverbid.md | 16 ---------------- 5 files changed, 86 deletions(-) delete mode 100644 dev-docs/bidders/answermedia.md delete mode 100644 dev-docs/bidders/automatad.md delete mode 100644 dev-docs/bidders/buysellads.md delete mode 100644 dev-docs/bidders/insticator.md delete mode 100644 dev-docs/bidders/serverbid.md diff --git a/dev-docs/bidders/answermedia.md b/dev-docs/bidders/answermedia.md deleted file mode 100644 index 5342d2b2a5..0000000000 --- a/dev-docs/bidders/answermedia.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: bidder -title: Answer Media -description: Prebid Serverbid Bidder Adaptor -hide: true -biddercode: answermedia -aliasCode: serverbid ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -| :--- | :---- | :---------- | :------ | :---- | -| `siteId` | required | The site ID from Answer Media. | `12345` | Integer | -| `zoneIds` | optional | An array of integer zone IDs from Answer Media. | `[12345, 4567]` | Array of integers | -| `networkId` | required | The network ID from Answer Media. | `9969` | Integer | diff --git a/dev-docs/bidders/automatad.md b/dev-docs/bidders/automatad.md deleted file mode 100644 index 95ebda4a61..0000000000 --- a/dev-docs/bidders/automatad.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: bidder -title: Automatad -description: Prebid Serverbid Bidder Adaptor -hide: true -biddercode: automatad -aliasCode: serverbid ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------------|----------|--------------------------------|---------|-----------| -| `siteId` | required | The site ID from Automatad. | `12345` | `integer` | -| `networkId` | required | The network ID from Automatad. | `9969` | `integer` | diff --git a/dev-docs/bidders/buysellads.md b/dev-docs/bidders/buysellads.md deleted file mode 100644 index 51484d2228..0000000000 --- a/dev-docs/bidders/buysellads.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -layout: bidder -title: BuySellAds -description: Prebid Serverbid Bidder Adaptor -hide: true -biddercode: buysellads -aliasCode: serverbid ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | -| :--- | :---- | :---------- | :------ | -| `siteId` | required | The site ID from BuySellAds. | `12345` | -| `zoneIds` | optional | An array of integer zone IDs from BuySellAds. | `[12345, 4567]` | -| `networkId` | required | The network ID from BuySellAds. | `9969` | diff --git a/dev-docs/bidders/insticator.md b/dev-docs/bidders/insticator.md deleted file mode 100644 index decebd8943..0000000000 --- a/dev-docs/bidders/insticator.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -layout: bidder -title: Insticator -description: Prebid Serverbid Bidder Adaptor -hide: true -biddercode: insticator -aliasCode: serverbid ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------------|----------|---------------------------------|---------|-----------| -| `siteId` | required | The site ID from Insticator. | `12345` | `integer` | -| `networkId` | required | The network ID from Insticator. | `9969` | `integer` | diff --git a/dev-docs/bidders/serverbid.md b/dev-docs/bidders/serverbid.md deleted file mode 100644 index 8249cc88dc..0000000000 --- a/dev-docs/bidders/serverbid.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: bidder -title: Serverbid -description: Prebid Serverbid Bidder Adaptor -hide: true -biddercode: serverbid ---- - - -### Bid Params - -{: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------------|----------|--------------------------------|---------|-----------| -| `siteId` | required | The site ID from Serverbid. | `12345` | `integer` | -| `networkId` | required | The network ID from Serverbid. | `9969` | `integer` | From a5b2377e3c8459dcc42031317be864082f4953d5 Mon Sep 17 00:00:00 2001 From: bretg Date: Mon, 22 Jun 2020 15:37:10 -0400 Subject: [PATCH 037/150] lotame added as community members (#2081) --- _data/partners.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/_data/partners.yml b/_data/partners.yml index 5049b37343..a69b6a86dc 100644 --- a/_data/partners.yml +++ b/_data/partners.yml @@ -215,6 +215,10 @@ imgURL: /assets/images/partners/community/liveintent_logo.png type: community +- company: Lotame + link: https://www.lotame.com/ + type: community + - company: Media.net link: https://media.net type: community From 04092738fe29f205b792c393e6734b9ed7a747af Mon Sep 17 00:00:00 2001 From: bretg Date: Mon, 22 Jun 2020 16:50:22 -0400 Subject: [PATCH 038/150] refined creative process (#2082) --- adops/send-all-bids-adops.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/adops/send-all-bids-adops.md b/adops/send-all-bids-adops.md index bec66e246e..c1fdd1f484 100644 --- a/adops/send-all-bids-adops.md +++ b/adops/send-all-bids-adops.md @@ -82,11 +82,11 @@ This line item will target the bids in the range from $0.50 to $1.00 from the bi Next, add a creative to this $0.50 line item; we will duplicate the creative later. -Choose the same advertiser we've assigned the line item to. - -Note that this has to be a **Third party** creative. The **"Serve into a Safeframe"** box can be **UNCHECKED** or **CHECKED** (Prebid universal creative is SafeFrame compatible). - -Copy this creative code snippet and paste it into the **Code snippet** box. +- Choose the same advertiser we've assigned the line item to. +- Set it to be a **Third party** creative. +- Make sure the creative size is set to 1x1. This allows the creative to serve on all inventory sizes. When associating with the line item, just change the creative filter setting to show all creatives instead of 'Inventory filtered based on size'. +- The **"Serve into a Safeframe"** box can be **UNCHECKED** or **CHECKED** (Prebid universal creative is SafeFrame compatible). +- Copy this creative code snippet and paste it into the **Code snippet** box. {% capture noteAlert %} -Replace the *BIDDERCODE* placeholders in the above template with the appropriate bidder your line item is targeting. For example, if you're targeting the bidder *appnexus*, the macro variable for `adId` would look like `ucTagData.adId = "%%PATTERN:hb_adid_appnexus%%";` +Replace the *BIDDERCODE* placeholders in the above template with the appropriate bidder your line item is targeting. For example, if you're targeting the bidder *appnexus*, the macro variable for `adId` would look like `ucTagData.adId = "%%PATTERN:hb_adid_appnexus%%";`. IMPORTANT: Make sure that none of the values are +longer than 20 characters. e.g. you'll need to truncate hb_cache_host_triplelift to hb_cache_host_triple. GAM doesn't support attributes longer than 20 chars, so all Prebid software truncates attributes to that length. {% endcapture %} {% include alerts/alert_note.html content=noteAlert %} ![New creative]({{ site.github.url }}/assets/images/demo-setup/new-creative.png){: .pb-lg-img :} -Make sure the creative size is set to 1x1. This allows Prebid to set up size override, which enables this creative to serve on all inventory sizes. - **Prebid universal creative code for other ad servers** If you're using an ad server other than Google Ad Manager, your code snippet will look similar to one of the following: From fc5a95e4c9e9239ab73a726991cff5ff95b61f0a Mon Sep 17 00:00:00 2001 From: Steve Date: Mon, 22 Jun 2020 17:27:32 -0400 Subject: [PATCH 039/150] Fixed player name --- examples/video/instream/adplayerpro/pb-ve-adplayerpro.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html b/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html index 8132f22471..626529bcfb 100644 --- a/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html +++ b/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html @@ -1,7 +1,7 @@ --- layout: video_sample -title: Prebid Video | Instream Example with Ad Player Pro Player -description: An example of an instream pre-roll ad using Prebid.js and Ad Player Pro player. +title: Prebid Video | Instream Example with AdPlayerPro Player +description: An example of an instream pre-roll ad using Prebid.js and AdPlayerPro player. videoType: pb-is-app isVideo: true sidebarType: 4 From 05cc6b5e30e1b80de31745352cd617c3fb869f31 Mon Sep 17 00:00:00 2001 From: Steve Date: Tue, 23 Jun 2020 09:25:47 -0400 Subject: [PATCH 040/150] fixed title --- examples/video/instream/adplayerpro/pb-ve-adplayerpro.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html b/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html index 626529bcfb..44af13a673 100644 --- a/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html +++ b/examples/video/instream/adplayerpro/pb-ve-adplayerpro.html @@ -1,7 +1,7 @@ --- layout: video_sample -title: Prebid Video | Instream Example with AdPlayerPro Player -description: An example of an instream pre-roll ad using Prebid.js and AdPlayerPro player. +title: Prebid Video | Instream Example with AdPlayer.Pro Player +description: An example of an instream pre-roll ad using Prebid.js and AdPlayer.Pro player. videoType: pb-is-app isVideo: true sidebarType: 4 From c7c1135a140f40f4e054d3dd186c9c9944ee0ec7 Mon Sep 17 00:00:00 2001 From: adp-developer <66946272+adp-developer@users.noreply.github.com> Date: Tue, 23 Jun 2020 16:28:44 +0300 Subject: [PATCH 041/150] Added AdPlayer.Pro video example (Patch 2) (#2084) * Added Ad Player Pro video example * Fixed player name * Update sidebar.yml Co-authored-by: Steve --- _data/sidebar.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_data/sidebar.yml b/_data/sidebar.yml index b33a09f0db..d18dd293d3 100644 --- a/_data/sidebar.yml +++ b/_data/sidebar.yml @@ -1341,7 +1341,7 @@ subgroup: 1 - sbSecId: 4 - title: '  Ad Player Pro' + title: '  AdPlayer.Pro' link: /examples/video/instream/adplayerpro/pb-ve-adplayerpro.html isHeader: 0 isSectionHeader: 0 From 1288ceea74920979c22b660ff8f5832bcd13696e Mon Sep 17 00:00:00 2001 From: bretg Date: Tue, 23 Jun 2020 09:38:21 -0400 Subject: [PATCH 042/150] Browsi managed service (#2085) * browsi managed service * pubwise managed service --- prebid/managed.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/prebid/managed.md b/prebid/managed.md index f6bda3b50b..041d4031ca 100644 --- a/prebid/managed.md +++ b/prebid/managed.md @@ -14,8 +14,14 @@ Several Prebid.org members will configure and host your Prebid implementations, AppNexus, a Xandr company, offers a full managed Prebid solution including implementation and maintenance, as well as consulting support for publishers with their own tech resources. AppNexus works with users to enable client and/or server-side header bidding across web, AMP, and mobile app channels, and support display, video, and native ad formats. Contact AppNexus for more information, and to get a quote! + +Browsi, a tech provider solely focused on creating premium ad inventory for publishers, offers a fully managed Prebid solution service focused on personalization and speed, along with other AI-based solutions for inventory such as user viewability predictions, predictive lazy loading and more. Browsi makes it easy to integrate and to make any changes, and offers an intuitive unified analytics and monitoring solution. For more information contact us at contact@gobrowsi.com. + + OpenWrap provides a transparent enterprise wrapper solution for Prebid.js and Prebid Server. Manage demand partners and push updates via a cloud-based UI without development resources or code changes. Access powerful reporting and analytics tools for data driven business decisions and dedicated account optimization and technical support teams. https://pubmatic.com/products/header-bidding/ +PubWise is the only Prebid.js management service offering Smart Path Optimization Technology (SPOT™) which uses AI to deliver an optimized ad configuration matched to user segments, with tailored demand inclusion that increases net revenue while improving latency. PubWise provides a turnkey platform to deploy, manage, monitor and optimize Prebid.js. PubWise is committed to protecting publisher value and data with clear auction dynamics, no arbitrage and transparent fees. Contact us for a live demonstration or try PubWise Analytics at no cost. + Rubicon Project's Prebid-as-a-service solution makes it easy for large publishers to deploy and control custom header bidding implementations without writing code. The combination of an intuitive UI and on-demand support from our Prebid and yield management experts enables publishers to make faster decisions and potentially capture more revenue. This solution supports display and video ads across desktop and mobile app environments via Prebid.js, Prebid SDK and Prebid Server. Contact sales@rubiconproject.com for more information. From f72eb90a26c4caea9cd16741bfe63c9e1742c22d Mon Sep 17 00:00:00 2001 From: Michael Date: Wed, 24 Jun 2020 07:07:01 -0700 Subject: [PATCH 043/150] Fix rendering bug; Declare support for TCFv2 for Sharethrough bidder (#2083) * Add tcfv2 support for Sharethrough - Sharethrough bid adapter supports TCFv2, this change updates Sharethrough documentation - See related merged PR https://github.com/prebid/Prebid.js/pull/4723 Story: [#173455779](https://www.pivotaltracker.com/story/show/173455779) * BUG FIX: Syntax error in bidder file breaks pages - `dev-docs/bidders/selectmediavideo.md` does not close a markdown code block correctly - closing triple backticks are missing from the code block `\`\`\`` - syntax error is causing the section for Sharethrough at `http://localhost:8080/dev-docs/bidders/#sharethrough` not to appear - adding the closing backticks resolves the issue Story: [#173455779](https://www.pivotaltracker.com/story/show/173455779) --- dev-docs/bidders/selectmediavideo.md | 3 ++- dev-docs/bidders/sharethrough.md | 31 ++++++++++++++-------------- 2 files changed, 18 insertions(+), 16 deletions(-) diff --git a/dev-docs/bidders/selectmediavideo.md b/dev-docs/bidders/selectmediavideo.md index 9efbbac8be..031e5b8f54 100644 --- a/dev-docs/bidders/selectmediavideo.md +++ b/dev-docs/bidders/selectmediavideo.md @@ -39,4 +39,5 @@ videoAdUnit = [ AV_CHANNELID: '5d19dfca4b6236688c0a2fc4' } }] -}]; \ No newline at end of file +}]; +``` diff --git a/dev-docs/bidders/sharethrough.md b/dev-docs/bidders/sharethrough.md index 4bab3d9c00..000a19cc28 100644 --- a/dev-docs/bidders/sharethrough.md +++ b/dev-docs/bidders/sharethrough.md @@ -1,14 +1,15 @@ --- -layout: bidder -title: Sharethrough -description: Prebid Sharethrough Adaptor -hide: true -biddercode: sharethrough -media_types: native -gdpr_supported: true -usp_supported: true -userIds: unifiedId +biddercode : sharethrough +description : Prebid Sharethrough Adaptor +gdpr_supported : true +hide : true +layout : bidder +media_types : native schain_supported: true +tcf2_supported : true +title : Sharethrough +userIds : unifiedId +usp_supported : true --- ### Note: @@ -17,9 +18,9 @@ The Sharethrough bidder adapter requires additional setup and approval from the ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type -| ---- | ----- | ----------- | ------- | ---- -| `pkey` | required | The placement key | `'DfFKxpkRGPMS7A9f71CquBgZ'` | `string` -| `iframe` | optional | If `true`, the ad will render in an iframe. Defaults to `false`. | `true` | `boolean` -| `iframeSize` | optional | `[width, height]` If provided, use this size for the iframe size. Only applicable if `iframe` is `true`. If omitted, the largest size from the ad unit sizes array will be used. | `[300, 250]` | `[integer]` -| `bidfloor` | optional | The floor price, or minimum amount, a publisher will accept for an impression, given in CPM in USD. | `1.00` | `float` +| Name | Scope | Description | Example | Type | +|-------------|----------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------------|-------------| +| `bidfloor` | optional | The floor price, or minimum amount, a publisher will accept for an impression, given in CPM in USD. | `1.00` | `float` | +| `iframe` | optional | If `true`, the ad will render in an iframe. Defaults to `false`. | `true` | `boolean` | +| `iframeSize`| optional | `[width, height]` If provided, use this size for the iframe size. Only applicable if `iframe` is `true`. If omitted, the largest size from the ad unit sizes array will be used. | `[300, 250]` | `[integer]` | +| `pkey` | required | The placement key | `'DfFKxpkRGPMS7A9f71CquBgZ'` | `string` | From bdee2f8e4bdc4cd0415d3c55f992e7723c86c308 Mon Sep 17 00:00:00 2001 From: bretg Date: Wed, 24 Jun 2020 12:47:27 -0400 Subject: [PATCH 044/150] PBJS releases up to 3.24 (#2088) --- prebid/prebidjsReleases.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/prebid/prebidjsReleases.md b/prebid/prebidjsReleases.md index 736d429c4a..9ec879476c 100644 --- a/prebid/prebidjsReleases.md +++ b/prebid/prebidjsReleases.md @@ -16,6 +16,11 @@ The table below is a summary of feature changes and important bug fixes in core {: .table .table-bordered .table-striped } | Release | Feature | | --- | --- | +| 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 | +| 3.21 | Price Floors Module: New Analytics signals | +| 3.17 | UserID module also exports IDs as eids | | 3.16 | isSafariBrowser fixed for Chrome and Firefox on iOS | | 3.15 | Advanced Size Mapping module support adunits of the same name | | 3.14 | New [GDPR enforcement module](/dev-docs/modules/gdprEnforcement.html) supports enforcing Purpose 1 - DeviceAccess | From 3c5cc43b8d77dcabe27c414def9c6c582ee3761e Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 25 Jun 2020 13:10:51 -0400 Subject: [PATCH 045/150] adding media.net to managed services page (#2093) --- .../partners/community/MediaNet_Logo.png | Bin 0 -> 9685 bytes prebid/managed.md | 18 ++++++++++++++---- 2 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 assets/images/partners/community/MediaNet_Logo.png diff --git a/assets/images/partners/community/MediaNet_Logo.png b/assets/images/partners/community/MediaNet_Logo.png new file mode 100644 index 0000000000000000000000000000000000000000..68ae9a6fd9bd3608e4c26b8c8091b164b35fdf16 GIT binary patch literal 9685 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 a4g`>WmuJ2k`6BS2bl6LE`3hN!_x}SCIzF=i literal 0 HcmV?d00001 diff --git a/prebid/managed.md b/prebid/managed.md index 041d4031ca..7a35f0ea04 100644 --- a/prebid/managed.md +++ b/prebid/managed.md @@ -10,14 +10,12 @@ sidebarType: 0 Several Prebid.org members will configure and host your Prebid implementations, helping publishers install Prebid.js, Prebid SDK, and/or Prebid Server. +

Leader, Tech, and Publisher Prebid Members

+ - - -
AppNexus, a Xandr company, offers a full managed Prebid solution including implementation and maintenance, as well as consulting support for publishers with their own tech resources. AppNexus works with users to enable client and/or server-side header bidding across web, AMP, and mobile app channels, and support display, video, and native ad formats. Contact AppNexus for more information, and to get a quote!
Browsi, a tech provider solely focused on creating premium ad inventory for publishers, offers a fully managed Prebid solution service focused on personalization and speed, along with other AI-based solutions for inventory such as user viewability predictions, predictive lazy loading and more. Browsi makes it easy to integrate and to make any changes, and offers an intuitive unified analytics and monitoring solution. For more information contact us at contact@gobrowsi.com. -
OpenWrap provides a transparent enterprise wrapper solution for Prebid.js and Prebid Server. Manage demand partners and push updates via a cloud-based UI without development resources or code changes. Access powerful reporting and analytics tools for data driven business decisions and dedicated account optimization and technical support teams. https://pubmatic.com/products/header-bidding/
PubWise is the only Prebid.js management service offering Smart Path Optimization Technology (SPOT™) which uses AI to deliver an optimized ad configuration matched to user segments, with tailored demand inclusion that increases net revenue while improving latency. PubWise provides a turnkey platform to deploy, manage, monitor and optimize Prebid.js. PubWise is committed to protecting publisher value and data with clear auction dynamics, no arbitrage and transparent fees. Contact us for a live demonstration or try PubWise Analytics at no cost. @@ -26,4 +24,16 @@ Several Prebid.org members will configure and host your Prebid implementations, Rubicon Project's Prebid-as-a-service solution makes it easy for large publishers to deploy and control custom header bidding implementations without writing code. The combination of an intuitive UI and on-demand support from our Prebid and yield management experts enables publishers to make faster decisions and potentially capture more revenue. This solution supports display and video ads across desktop and mobile app environments via Prebid.js, Prebid SDK and Prebid Server. Contact sales@rubiconproject.com for more information.
+

Community Prebid Members

+ + + + + + +
Browsi, a tech provider solely focused on creating premium ad inventory for publishers, offers a fully managed Prebid solution service focused on personalization and speed, along with other AI-based solutions for inventory such as user viewability predictions, predictive lazy loading and more. Browsi makes it easy to integrate and to make any changes, and offers an intuitive unified analytics and monitoring solution. For more information contact us at contact@gobrowsi.com. +
Media.net Managed Prebid solution gives flexibility to the publishers to manage complex header bidding integrations without compromising on revenue. Media.net's easy to use Configuration management system makes real-time changes to the publisher's page configurations without the need of any code changes. Our robust reporting and dashboard tools help publishers gain insights into their demand stack and make further optimizations. Additionally Media.net Marketplace brings together all formats of demand, including unique access to billions in search budgets, along with robust contextual data to induce more competition, overcome challenges with cookie-deficient environments and maximize revenues. This solution supports display and native ads across desktop and mobile web environments via Prebid.js and Media.net Server to Server. Contact pubsales@media.net for more information. +
+ + If you're a company providing Managed Prebid Solutions, [join Prebid.org](/overview/what-is-prebid-org.html) to get on this list. From 7f59f956d5818cf16762d31c90cef247c162f031 Mon Sep 17 00:00:00 2001 From: Tim Sturtewagen Date: Thu, 25 Jun 2020 23:13:17 +0200 Subject: [PATCH 046/150] Adhese: Support for ID5 (#2039) * Add Adhese adapter docs * Add banner media type * Use the bid parameters pointing to the existing demo position * support for id5 Co-authored-by: Mateusz Michalowski Co-authored-by: Tim Sturtewagen --- dev-docs/bidders/adhese.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/adhese.md b/dev-docs/bidders/adhese.md index 70ff7cf413..4643e2b327 100644 --- a/dev-docs/bidders/adhese.md +++ b/dev-docs/bidders/adhese.md @@ -6,6 +6,7 @@ hide: true biddercode: adhese media_types: banner, video gdpr_supported: true +userIds: id5Id --- ### Note From af2296767ca0f5519700d1a55e51075684371178 Mon Sep 17 00:00:00 2001 From: TheMediaGrid <44166371+TheMediaGrid@users.noreply.github.com> Date: Fri, 26 Jun 2020 00:14:19 +0300 Subject: [PATCH 047/150] Update doc file for TheMediaGrid Bid Adapter (#2040) * Added doc file for Grid Bid Adapter * update doc for TheMediaGrid Bid Adapter * Added video support in Grid doc file * removing unnecessary front matter * Update doc file for TheMediaGrid Bid Adapter * Added doc file for TheMediaGridNM Bid Adapter * Update doc file for TheMediaGrid Bid Adapter Co-authored-by: bretg --- dev-docs/bidders/grid.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/dev-docs/bidders/grid.md b/dev-docs/bidders/grid.md index e60d96bd0c..e7feb8725d 100755 --- a/dev-docs/bidders/grid.md +++ b/dev-docs/bidders/grid.md @@ -13,6 +13,7 @@ usp_supported: true ### Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------------|----------|----------------------------------------------------------------------------------------------------------------|-----------|-----------| -| `uid` | required | Represents the MediaGrid bidder system Ad Slot ID associated with the respective div id from the site page. | `1` | `integer` | +| Name | Scope | Description | Example | Type | +|-------------|----------|----------------------------------------------------------------------------------------------------------------|-------------------------------------------|-----------| +| `uid` | required | Represents the MediaGrid bidder system Ad Slot ID associated with the respective div id from the site page. | `1` | `integer` | +| `keywords` | optional | A set of key-value pairs applied to all ad slots on the page. Values can be empty. | `keywords: { topic: ['stress', 'fear'] }` | `object` | From 1646b118afcb9dc7e2f56e76fca02ed4f7c7023e Mon Sep 17 00:00:00 2001 From: lowendavid <66423906+lowendavid@users.noreply.github.com> Date: Thu, 25 Jun 2020 23:14:58 +0200 Subject: [PATCH 048/150] Update smartadserver.md (#2047) Removing the currency parameter from our available params. Removing the startDelay 0 value (it does not exist). Adding the startDelay 1 as default in documentation. --- dev-docs/bidders/smartadserver.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/dev-docs/bidders/smartadserver.md b/dev-docs/bidders/smartadserver.md index bd95585686..7a70986255 100644 --- a/dev-docs/bidders/smartadserver.md +++ b/dev-docs/bidders/smartadserver.md @@ -24,7 +24,6 @@ The Smart AdServer bidder adaptor requires setup and approval from the Smart AdS | `formatId` | required | The placement format ID | `1234` | `integer` | | `domain` | optional | The network domain (default see example) | `'http://prg.smartadserver.com', 'https://prg.smartadserver.com'` | `string` | | `target` | optional | The keyword targeting | `'sport=tennis'` | `string` | -| `currency` | optional | Override the default currency code (ISO 4217) of the ad request. (Default: `'USD'`) | `'EUR'` | `string` | | `bidfloor` | optional | Bid floor for this placement in USD or in the currency specified by the `currency` parameter. (Default: `0.0`) | `0.42` | `float` | | `appName` | optional | Mobile application name | `'Smart AdServer Preview'` | `string` | | `buId` | optional | Mobile application bundle ID | `'com.smartadserver.android.dashboard'` | `string` | @@ -41,4 +40,4 @@ The Smart AdServer bidder adaptor requires setup and approval from the Smart AdS | Name | Scope | Description | Example | Type | |--------------|----------|-------------------------------------------------------------------------------------------------------------------------|------------------------|-----------| | `protocol` | optional | Maximum open RTB video protocol supported | `8` (VAST 4.0 wrapper) | `integer` | -| `startDelay` | optional | Allowed values: 1 (generic pre-roll), 2 (generic mid-roll), 3 (generic post-roll), 0 (all positions, default) | `1` | `integer` | +| `startDelay` | optional | Allowed values: 1 (generic pre-roll, default), 2 (generic mid-roll), 3 (generic post-roll) | `1` | `integer` | From ba97e9933089e9026e51171f18a64b42652a9287 Mon Sep 17 00:00:00 2001 From: Nick Peceniak Date: Thu, 25 Jun 2020 15:15:55 -0600 Subject: [PATCH 049/150] Add placement_type and position documentation to spotx adapter. (#2053) * Add min_duration and max_duration paramters to spotx.md * Fix table styling for Spotx bid params * Add placement_type and position documentation to spotx adapter. Co-authored-by: Nick Peceniak --- dev-docs/bidders/spotx.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dev-docs/bidders/spotx.md b/dev-docs/bidders/spotx.md index be9d34b850..1c7aa11b0f 100644 --- a/dev-docs/bidders/spotx.md +++ b/dev-docs/bidders/spotx.md @@ -29,6 +29,8 @@ usp_supported: true | `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` | | `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` | From 091593222dcb867ed09d0cbb5f0bc3664bf5121a Mon Sep 17 00:00:00 2001 From: Aparna Rao Date: Thu, 25 Jun 2020 17:16:35 -0400 Subject: [PATCH 050/150] 33Across: CCPA + Schain support (#2054) * Add publisher usage docs for 33Across * Added 33Across to partners list * Clarified example pubID * Reinstated changes that got lost during rebase * 33across adapter is GDPR compliant * update docs * added usp support * We support Schain! Co-authored-by: Gleb Glushtsov Co-authored-by: Gleb Glushtsov Co-authored-by: Aparna Hegde Co-authored-by: Aparna Hegde --- dev-docs/bidders/33across.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dev-docs/bidders/33across.md b/dev-docs/bidders/33across.md index e28523fb28..6d80a41759 100644 --- a/dev-docs/bidders/33across.md +++ b/dev-docs/bidders/33across.md @@ -5,6 +5,8 @@ description: Prebid 33Across Bidder Adapter hide: true biddercode: 33across gdpr_supported: true +schain_supported: true +usp_supported: true --- From ab014c7de7609a52965ccbaf61f313e6e63d1c13 Mon Sep 17 00:00:00 2001 From: arasaki-yuki <35788388+arasaki-yuki@users.noreply.github.com> Date: Fri, 26 Jun 2020 06:17:45 +0900 Subject: [PATCH 051/150] Add Documentation for GMOSSP Adapter (#2063) --- dev-docs/bidders/gmossp.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 dev-docs/bidders/gmossp.md diff --git a/dev-docs/bidders/gmossp.md b/dev-docs/bidders/gmossp.md new file mode 100644 index 0000000000..7b7de61fd2 --- /dev/null +++ b/dev-docs/bidders/gmossp.md @@ -0,0 +1,16 @@ +--- +layout: bidder +title: GMOSSP +description: Prebid GMOSSP Bidder Adaptor +hide: true +biddercode: gmossp +media_types: banner +--- + + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-------|----------|---------------------------|----------|----------| +| `sid` | required | The AdUnit ID from GMOSSP | `'1234'` | `string` | From 4080122940e6242ccccb1c70bff3e64de526ce48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Udi=20Talias=20=E2=9A=9B=EF=B8=8F?= Date: Fri, 26 Jun 2020 00:18:12 +0300 Subject: [PATCH 052/150] Vidazoo Adapter: Feature/user-id (#2068) As part of: https://github.com/prebid/Prebid.js/pull/5386 --- dev-docs/bidders/vidazoo.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/vidazoo.md b/dev-docs/bidders/vidazoo.md index 4346c392b5..f0a98c1c39 100644 --- a/dev-docs/bidders/vidazoo.md +++ b/dev-docs/bidders/vidazoo.md @@ -4,6 +4,7 @@ title: Vidazoo description: Prebid Vidazoo Bidder Adaptor biddercode: vidazoo hide: true +userIds: britepoolId, criteo, digitrust, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId gdpr_supported: true usp_supported: true --- From 714ce3fc2d72eb6e49e7e6035fb0c06de91388d6 Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 25 Jun 2020 17:18:52 -0400 Subject: [PATCH 053/150] added sharedId module to download page (#2069) --- download.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/download.md b/download.md index a578b3e864..756621a67f 100644 --- a/download.md +++ b/download.md @@ -521,6 +521,9 @@ Prebid only supports the most recent major version. Within a month or so after a
+ +
+
From e204268c57b27e631daa4a6245ff6c348bedd981 Mon Sep 17 00:00:00 2001 From: justinkuo-appier <66933026+justinkuo-appier@users.noreply.github.com> Date: Fri, 26 Jun 2020 05:19:30 +0800 Subject: [PATCH 054/150] Appier: Add appier bid adapter aliases (#2072) * feat: add appier adapter aliases * fix: typo * fix: remove unused hyperlink --- dev-docs/bidders/appier.md | 2 +- dev-docs/bidders/appierBR.md | 45 +++++++++++++++++++++++++++++++++++ dev-docs/bidders/appierExt.md | 45 +++++++++++++++++++++++++++++++++++ dev-docs/bidders/appierGM.md | 45 +++++++++++++++++++++++++++++++++++ 4 files changed, 136 insertions(+), 1 deletion(-) create mode 100644 dev-docs/bidders/appierBR.md create mode 100644 dev-docs/bidders/appierExt.md create mode 100644 dev-docs/bidders/appierGM.md diff --git a/dev-docs/bidders/appier.md b/dev-docs/bidders/appier.md index 5e044ebb6f..98bc2bb4fa 100644 --- a/dev-docs/bidders/appier.md +++ b/dev-docs/bidders/appier.md @@ -1,7 +1,7 @@ --- layout: bidder title: Appier -description: Prebid Appier Bidder Adaptor +description: Prebid Appier Bidder Adapter biddercode: appier hide: true media_types: banner diff --git a/dev-docs/bidders/appierBR.md b/dev-docs/bidders/appierBR.md new file mode 100644 index 0000000000..ba0f7d7aca --- /dev/null +++ b/dev-docs/bidders/appierBR.md @@ -0,0 +1,45 @@ +--- +layout: bidder +title: AppierBR +description: Prebid Appier Bidder Adapter +biddercode: appierBR +aliasCode: appier +hide: true +media_types: banner +gdpr_supported: true +--- + +#### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-----------|----------|---------------------------|------------|----------| +| `hzid` | required | The zone ID from Appier. | `"WhM5WIOp"` | `string` | + +#### Custom Settings (Optional) + +Set the "farm" to use region-specific server + +``` +pbjs.que.push(function() { + // use the bid server in Taiwan (country code: tw) + pbjs.setConfig({ + appier: { + 'farm': 'tw' + } + }); +}); +``` + +Explicitly override the bid server used for bidding + +``` +pbjs.que.push(function() { + pbjs.setConfig({ + appier: { + 'server': '${HOST_NAME_OF_THE_SERVER}' + } + }); +}); +``` +AppierBR is an aliased bidder for Appier diff --git a/dev-docs/bidders/appierExt.md b/dev-docs/bidders/appierExt.md new file mode 100644 index 0000000000..3f031036c0 --- /dev/null +++ b/dev-docs/bidders/appierExt.md @@ -0,0 +1,45 @@ +--- +layout: bidder +title: AppierExt +description: Prebid Appier Bidder Adapter +biddercode: appierExt +aliasCode: appier +hide: true +media_types: banner +gdpr_supported: true +--- + +#### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-----------|----------|---------------------------|------------|----------| +| `hzid` | required | The zone ID from Appier. | `"WhM5WIOp"` | `string` | + +#### Custom Settings (Optional) + +Set the "farm" to use region-specific server + +``` +pbjs.que.push(function() { + // use the bid server in Taiwan (country code: tw) + pbjs.setConfig({ + appier: { + 'farm': 'tw' + } + }); +}); +``` + +Explicitly override the bid server used for bidding + +``` +pbjs.que.push(function() { + pbjs.setConfig({ + appier: { + 'server': '${HOST_NAME_OF_THE_SERVER}' + } + }); +}); +``` +AppierExt is an aliased bidder for Appier diff --git a/dev-docs/bidders/appierGM.md b/dev-docs/bidders/appierGM.md new file mode 100644 index 0000000000..a757befc29 --- /dev/null +++ b/dev-docs/bidders/appierGM.md @@ -0,0 +1,45 @@ +--- +layout: bidder +title: AppierGM +description: Prebid Appier Bidder Adapter +biddercode: appierGM +aliasCode: appier +hide: true +media_types: banner +gdpr_supported: true +--- + +#### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|-----------|----------|---------------------------|------------|----------| +| `hzid` | required | The zone ID from Appier. | `"WhM5WIOp"` | `string` | + +#### Custom Settings (Optional) + +Set the "farm" to use region-specific server + +``` +pbjs.que.push(function() { + // use the bid server in Taiwan (country code: tw) + pbjs.setConfig({ + appier: { + 'farm': 'tw' + } + }); +}); +``` + +Explicitly override the bid server used for bidding + +``` +pbjs.que.push(function() { + pbjs.setConfig({ + appier: { + 'server': '${HOST_NAME_OF_THE_SERVER}' + } + }); +}); +``` +AppierGM is an aliased bidder for Appier From d84d7ba1461f8d3ab94167a6855efb8463aa91f2 Mon Sep 17 00:00:00 2001 From: jsnellbaker <31102355+jsnellbaker@users.noreply.github.com> Date: Thu, 25 Jun 2020 17:20:13 -0400 Subject: [PATCH 055/150] update appnexus video params (#2073) * update appnexus video params * remove mimes field --- dev-docs/bidders/appnexus.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/dev-docs/bidders/appnexus.md b/dev-docs/bidders/appnexus.md index 4839a083fb..7bf3ab2c0d 100644 --- a/dev-docs/bidders/appnexus.md +++ b/dev-docs/bidders/appnexus.md @@ -61,13 +61,14 @@ All AppNexus placements included in a single call to `requestBids` must belong t {: .table .table-bordered .table-striped } | Name | Description | Type | |-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------| -| `mimes` | Array of strings listing the content MIME types supported, e.g., `["video/x-flv", "video/x-ms-wmv"]`. | `Array` | -| `minduration` | Integer that defines the minimum video ad duration in seconds. | `integer` | -| `maxduration` | Integer that defines the maximum video ad duration in seconds. | `integer` | -| `startdelay` | Integer that determines whether to show the ad before, during, or after video content. If > 0, position is mid-roll and value indicates start delay, in seconds. Allowed values: Pre-roll: `0` (default); Mid-roll: `-1` ; Post-roll: `-2`. | `integer` | -| `skippable` | Boolean which, if `true`, means the user can click a button to skip the video ad. Defaults to `false`. | `boolean` | -| `playback_method` | Array of strings listing playback methods supported by the publisher. Allowed values: `"auto_play_sound_on"`; `"auto_play_sound_off"`; `"click_to_play"`; `"mouseover"`; `"auto_play_sound_unknown"`. | `Array` | -| `frameworks` | Array of integers listing API frameworks supported by the publisher. Allowed values: None: `0`; VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID 1.0: `3`; ORMMA: `4`; MRAID 2.0: `5`. | `Array` | +| `minduration` | Integer that defines the minimum video ad duration in seconds. | `integer` | +| `maxduration` | Integer that defines the maximum video ad duration in seconds. | `integer` | +|`context` | A string that indicates the type of video ad requested. Allowed values: `"pre_roll"`; `"mid_roll"`; `"post_roll"`; `"outstream"`. | `string` | +| `skippable` | Boolean which, if `true`, means the user can click a button to skip the video ad. Defaults to `false`. | `boolean` | +|`skipoffset`| Integer that defines the number of seconds until an ad can be skipped. Assumes `skippable` setting was set to `true`. | `integer` | +| `playback_method` | A string that sets the playback method supported by the publisher. Allowed values: `"auto_play_sound_on"`; `"auto_play_sound_off"`; `"click_to_play"`; `"mouseover"`; `"auto_play_sound_unknown"`. | `string` | +| `frameworks` | Array of integers listing API frameworks supported by the publisher. Allowed values: None: `0`; VPAID 1.0: `1`; VPAID 2.0: `2`; MRAID 1.0: `3`; MRAID 2.0: `4`; ORMMA: `5`. | `Array` | + From 266140453c55f76e365d7d71177432f8d1a1fca5 Mon Sep 17 00:00:00 2001 From: amoltchan <56824198+amoltchan@users.noreply.github.com> Date: Thu, 25 Jun 2020 23:21:15 +0200 Subject: [PATCH 056/150] Update LiveIntent ID docs (#2079) * Add LiveIntent ID module to the overview * Update LiveIntent ID docs - remove 'providedIdentifierName' parameter, as it's removed from code (https://github.com/prebid/Prebid.js/pull/5407) - adjust links in the docs - new privacy policy - code examples updated to include the storage part * typo fix --- dev-docs/modules/userId.md | 50 ++++++++++++++++++++++++++------------ 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/dev-docs/modules/userId.md b/dev-docs/modules/userId.md index bb46d234de..4d6aab8841 100644 --- a/dev-docs/modules/userId.md +++ b/dev-docs/modules/userId.md @@ -395,29 +395,30 @@ The `request.userId.lipb` object would look like: The adapters can be implemented to use the lipibid as the identifier and segments to which that identifier is associated with. To enable identity resolution for a specific publisher, LiveIntent builds a model on the backend with data collected via an additional call issued on each page load. +#### LiveIntent ID Registration + +You are not required to register with LiveIntent to start using the LiveIntent ID sub-module. However, we do recommend reaching out to us at [peoplebased@liveintent.com](mailto:peoplebased@liveintent.com) so that we can guide you through the optimal setup and the ways you can benefit from LiveIntent identity solutions: +1. Providing buyers a stable identifier, which can solve cross-browser and cross-channel frequency capping challenges. +2. Leveraging your first-party audiences to increase the value of your inventory. + +When adding LiveIntent’s ID to your Prebid.js package, you disclose or make available Personal Information to LiveIntent. This information made available to LiveIntent is used to (i) connect with and reference data that already exists in LiveIntent’s graph (the “LiveIntent Graph”), and (ii) authenticate and validate data in aggregate to improve the performance of the services LiveIntent provides. By activating LiveIntent’s module, you hereby confirm that with regard to all individuals to whom Personal Information relates, you have, at or before the point of collecting Personal Information or making Personal Information available to LiveIntent, provided any legally required notices, obtained any legally required consents, and provided individuals with an opportunity to opt-out of the sharing of Personal Information, if such an opt-out is required under applicable laws, such that LiveIntent can provide service to you as described here and in LiveIntent’s privacy policies for the services which can be found at [https://www.liveintent.com/services-privacy-policy/](https://www.liveintent.com/services-privacy-policy/) + #### How does LiveIntent ID work -The LiveIntent ID sub-module resolves the identity of audiences by connecting impression opportunities to a stable identifier (LIID). In order to provide resolution one or more first-party cookies are used to create a stable identifier. +The LiveIntent ID sub-module resolves the identity of audiences by connecting impression opportunities to a stable identifier (nonID). In order to provide resolution one or more first-party cookies are used to create a stable identifier. How does LiveIntent ID sub-module decide, which first-party cookies to use: 1. By default LiveIntent ID sub-module generates its own first-party identifier on the publisher’s domain. Publishers have the option to disable the cookie generation when configuring the LiveIntent ID sub-module. 2. A publisher can also define in the configuration which additional first-party cookies should be used. These can be used in a combination with the LiveIntent first-party cookie. -The LiveIntent ID sub-module sends the defined identifiers to the identity graph, which processes them and creates a stable identifier (LIID). The detailed description of the parameters being sent is described here: https://github.com/liveintent-berlin/live-connect/blob/HEAD/COLLECTOR_PARAMS.md +The LiveIntent ID sub-module sends the defined identifiers to the identity graph, which processes them and creates a stable identifier (nonID). The detailed description of the parameters being sent is described here: [Collector parameters](https://github.com/liveintent-berlin/live-connect/blob/HEAD/COLLECTOR_PARAMS.md) For the identity resolution the LiveIntent ID sub-module makes a request to the LiveIntent’s identity resolution API, which returns a stable identifier and the audience segment(s) a user belongs to. The identifier and the segment are then exposed by the Prebid User ID Module to Prebid adapters to be sent out in a bid request. An SSP can then make the impression opportunity available to any buyers targeting the segment via a deal. -The first-party cookie generation and identity resolution functionality is provided by the LiveConnect JS library, included within the LiveIntent ID sub-module. LiveIntent has created a shared library that is open source, available at https://www.npmjs.com/package/live-connect-js. +The first-party cookie generation and identity resolution functionality is provided by the LiveConnect JS library, included within the LiveIntent ID sub-module. LiveIntent has created a shared library that is open source, available at [https://www.npmjs.com/package/live-connect-js](https://www.npmjs.com/package/live-connect-js) The LiveIntent ID sub-module follows the standard Prebid.js initialization based on the GDPR consumer opt-out choices. With regard to CCPA, the LiveConnect JS receives a us_privacy string from the Prebid US Privacy Consent Management Module and respects opt-outs. -#### LiveIntent ID Registration - -You are not required to register with LiveIntent to start using the LiveIntent ID sub-module. However, we do recommend reaching out to us at peoplebased@liveintent.com so that we can guide you through the optimal setup and the ways you can benefit from LiveIntent identity solutions: -1. Providing buyers a stable identifier, which can solve cross-browser and cross-channel frequency capping challenges. -2. Leveraging your first-party audiences to increase the value of your inventory. - -The LiveIntent privacy policy is at [https://www.liveintent.com/services-privacy-policy/](https://www.liveintent.com/services-privacy-policy/) #### LiveIntent ID configuration @@ -426,17 +427,20 @@ The LiveIntent privacy policy is at [https://www.liveintent.com/services-privacy | --- | --- | --- | --- | --- | | name | Required | String | The name of this module. | `'liveIntentId'` | | params | Required | Object | Container of all module params. || -| params.publisherId |Required| String | The unique identifier for each publisher.|`'12432415'`| +| params.publisherId |Optional| String | The unique identifier for each publisher (for existing LiveIntent customers)|`'12432415'`| | params.ajaxTimeout |Optional| Number |This configuration parameter defines the maximum duration of a call to the IdentityResolution endpoint. By default, 1000 milliseconds.|`1000`| | params.partner | Optional| String |The name of the partner whose data will be returned in the response.|`'prebid'`| | params.identifiersToResolve |Optional| Array[String] |Used to send additional identifiers in the request for LiveIntent to resolve against the LiveIntent ID.|`['my-id']`| | params.url | Optional| String |Use this to change the default endpoint URL if you can call the LiveIntent Identity Exchange within your own domain.|`'https://idx.my-domain.com'`| -| params.providedIdentifierName | Optional| String |This parameter should be used whenever a customer is able to provide the most stable identifier possible, e.g. a cookie which is set via HttpHeaders on the first party domain.|`'my-best-id'`| | params.liCollectConfig |Optional| Object |Container of all collector params.|| | params.liCollectConfig.fpiStorageStrategy |Optional| String |This parameter defines whether the first party identifiers that LiveConnect creates and updates are stored in a cookie jar, or in local storage. If nothing is set, default behaviour would be `cookie`. Allowed values: [`cookie`, `ls`, `none`]|`'cookie'`| | params.liCollectConfig.fpiExpirationDays |Optional| Number |The expiration time of an identifier created and updated by LiveConnect.By default, 730 days.|`729`| | params.liCollectConfig.collectorUrl |Optional| String |The parameter defines where the signal pixels are pointing to. The params and paths will be defined subsequently. If the parameter is not set, LiveConnect will by default emit the signal towards `https://rp.liadm.com`.|`'https://rp.liadm.com'`| | params.liCollectConfig.appId |Optional| String |LiveIntent's media business entity application id.|`'a-0012'`| +| storage | Required | Object | This object defines where and for how long the results of the call to get a user ID will be stored. | | +| storage.type | Required | String | This parameter defines where the resolved user ID will be stored (either `'cookie'` or `'html5'` localstorage).| `'cookie'` | +| storage.name | Required | String | The name of the cookie or html5 localstorage where the resolved user ID will be stored. | `'pbjs_li_nonid'` | +| storage.expires | Recommended | Integer | How long (in days) the user ID information will be stored. The recommended value is `1` | `1` | #### LiveIntent ID examples @@ -448,7 +452,12 @@ pbjs.setConfig({ name: "liveIntentId", params: { publisherId: "9896876" - } + }, + storage: { + type: “cookie”, + name: “pbjs_li_nonid”, //create a cookie with this name + expires: 1 // cookie is stored for 1 day + } }] } }) @@ -463,7 +472,12 @@ pbjs.setConfig({ params: { publisherId: "9896876", identifiersToResolve: ["my-own-cookie"] - } + }, + storage: { + type: “cookie”, + name: “pbjs_li_nonid”, //create a cookie with this name + expires: 1 // cookie is stored for 1 day + } }] } }) @@ -478,7 +492,6 @@ pbjs.setConfig({ params: { publisherId: "9896876", identifiersToResolve: ["my-own-cookie"], - providedIdentifierName: "my-best-cookie", url: "https://publisher.liveintent.com/idex", partner: "prebid", ajaxTimeout: 1000, @@ -488,7 +501,12 @@ pbjs.setConfig({ collectorUrl: "https://rp.liadm.com", appId: "a-0012" } - } + }, + storage: { + type: “cookie”, + name: “pbjs_li_nonid”, //create a cookie with this name + expires: 1 // cookie is stored for 1 day + } }] } }) From f20207c96286030febe82336ae925c5563c06df8 Mon Sep 17 00:00:00 2001 From: John Rosendahl Date: Thu, 25 Jun 2020 16:24:36 -0500 Subject: [PATCH 057/150] updated supported id modules (#2076) --- dev-docs/bidders/sovrn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/sovrn.md b/dev-docs/bidders/sovrn.md index 7b4b894678..f718d29bf6 100644 --- a/dev-docs/bidders/sovrn.md +++ b/dev-docs/bidders/sovrn.md @@ -6,7 +6,7 @@ hide: true biddercode: sovrn gdpr_supported: true usp_supported: true -userIds: digitrust +userIds: unifiedId prebid_member: true --- From bdd5fe2e569b2edac1309a3138b3f5ca7a1fa5bc Mon Sep 17 00:00:00 2001 From: Bryan Szekely <49168870+bszekely1@users.noreply.github.com> Date: Thu, 25 Jun 2020 17:25:35 -0400 Subject: [PATCH 058/150] Floors multiple models (#2087) * Floors Module: new analytics fields * Floors Module: added skipRate * Floors: multi-model mode * Floors: multi-model mode * Update floors.md made some minor grammatical edits * Update floors.md Co-authored-by: Jean Stemp <38964447+jeanstemp@users.noreply.github.com> --- dev-docs/modules/floors.md | 255 ++++++++++++++++++++++++++++++++++--- 1 file changed, 239 insertions(+), 16 deletions(-) diff --git a/dev-docs/modules/floors.md b/dev-docs/modules/floors.md index 99b803371e..a26c18130d 100644 --- a/dev-docs/modules/floors.md +++ b/dev-docs/modules/floors.md @@ -265,31 +265,204 @@ pbjs.setConfig({ {% endhighlight %} -### Floors Syntax +## Floors Syntax -The examples above covered several different scenarios. Here are all the options supported by the Floors module. +The examples above covered several different scenarios where floors can be applied. Below we will cover the syntax and definition of the floors data schema. As of Prebid.js version 3.24, the Floors module supports a second data schema with the ability to add new schemas to future-proof the needs of additional design changes while keeping backwards compatibility. + + +### Schema 1 + +Schema 1 restricts floors providers or publishers to applying only one data group. To test more than one floor group, floor providers or publishers are required to reset the data set with new rules after each request bids. {: .table .table-bordered .table-striped } | Param | Type | Description | Default | |---+---+---+---+---| | enforcement | object | Controls the enforcement behavior within the Floors Module.| - | -| enforcement.enforceJS | boolean | If set to true, the floor module will provide floors to bid adapters for bid request matched rules and suppress any bids not exceeding a matching floor. If set to false, the prebid floors module will still provide floors for bid adapters, there will be no floor enforcement.| true | -| enforcement.enforcePBS | boolean | If set to true, the prebid js floors module will signal to PBS to pass floors to it’s bid adapters and enforce floors. If set to false, the pbjs should still pass matched bid request floor data to PBS, however no enforcement will take place. | false | -| enforcement.floorDeals | boolean | Enforce floors for deal bid requests | false | -| enforcement.bidAdjustment | boolean | Adjust floors passed to Bid Aapters. If bid adjustment is passed to PBS and flag set is not set to false | true | -| endpoint | object | Controls behavior for dynamically retrieving floors | - | -| endpoint.url | string | URL of endpoint to retrieve dynamic floor data | - | -| data | object (required) | Floor data used by the Floors Module to pass floor data to bidders and floor enforcement | - | -| data.currency | string |Currency of floor data. Floor Module will convert currency where necessary. See Currency section for more details. | 'USD' | +| enforcement.enforceJS | boolean | If set to true, the floors module will provide floors to bid adapters for bid request matched rules and suppress any bids not exceeding a matching floor. If set to false, the prebid floors module will still provide floors for bid adapters, there will be no floor enforcement.| true | +| enforcement.enforcePBS | boolean | If set to true, the Prebid.js floors module will signal to Prebid Server to pass floors to it’s bid adapters and enforce floors. If set to false, the pbjs should still pass matched bid request floor data to PBS, however no enforcement will take place. | false | +| enforcement.floorDeals | boolean | Enforce floors for deal bid requests. | false | +| enforcement.bidAdjustment | boolean | If true, the Floors Module will use the bidAdjustment function to adjust the floor per bidder. If false (or no bidAdjustment function is provided), floors will not be adjusted. Note: Setting this parameter to false may have unexpected results, such as signaling a gross floor when expecting net or vice versa. | true | +| endpoint | object | Controls behavior for dynamically retrieving floors. | - | +| endpoint.url | string | URL of endpoint to retrieve dynamic floor data. | - | +| data | object (required) | Floor data used by the Floors Module to pass floor data to bidders and floor enforcement. | - | +| data.currency | string | Currency of floor data. Floor Module will convert currency where necessary. See Currency section for more details. | 'USD' | | data.skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will have access to model version (if defined) when skipped is true to signal the Floors Module is in floors mode. | 0 | +| data.floorsSchemaVersion | string | The Floors Module supports two versions of the data schema. Version 1 allows for only one model to be applied in a given data set, whereas Version 2 allows you to sample multiple models selected by supplied weights. If no schema version is provided, the Floors Module will assume version 1 for the sake of backwards compatiblity. For schema version 2 see the next section. | 1 | | data.modelVersion | string | Used by floor providers to train on model version performance. The expectation is a floor provider’s analytics adapter will pass the model verson back for algorithm training. | - | | data.schema | object |allows for flexible definition of how floor data is formatted. | - | -| data.schema.delimiter | string | Character separating the floor keys | '\|' | -| data.schema.fields | array of strings | supported values are: gptSlot, adUnitCode, mediaType, size | - | -| data.values | key / values | a series of attributes representing a hash of floor data in a format defined by the schema object. | - | -| data.values."rule key" | string | delimited field of attribute values that define a floor | - | -| data.values."floor" | float | the floor value for this key | - | -| data.default | float | Floor used if no matching rules are found | - | +| data.schema.delimiter | string | Character separating the floor keys. | '\|' | +| data.schema.fields | array of strings | Supported values are: gptSlot, adUnitCode, mediaType, size | - | +| data.values | key / values | A series of attributes representing a hash of floor data in a format defined by the schema object. | - | +| data.values."rule key" | string | Delimited field of attribute values that define a floor. | - | +| data.values."rule floor value" | float | The floor value for this key. | - | +| data.default | float | Floor used if no matching rules are found. | - | + + + +### Schema 2 + +Schema 2 allows floors providers to A / B one or more floor groups, determined at auction time. + +The following principles apply to schema 2: +- The below attributes are required: + - data.floorsSchemaVersion to be set to 2 + - A valid modelGroups object must be set + - The field modelGroups.modelWeight is required for each model group + - If one of the model weights is missing, no schema 2 floor will be set and the Floors Module will look in other locations for floor definitions +- If common attributes are set in both the modelGroups and root level of the data object, modelGroups attributes prevail +- The Schema 2 data model can only be applied in Package level (i.e. directly in setConfig) or Dynamic level +- Sampling weights are applied at the auction level. Each new auction the dice will be rolled +- If the data.modelGroups object and the data.values (schema 1 field) are set, the data.floorsSchemaVersion will dictate what schema version is applied + + +While some attributes are common in both schema versions, for completeness, all valid schema 2 attributes are provided: + +{: .table .table-bordered .table-striped } +| Param | Type | Description | Default | +|---+---+---+---+---| +| enforcement | object | Controls the enforcement behavior within the Floors Module.| - | +| enforcement.enforceJS | boolean | If set to true, the floors module will provide floors to bid adapters for bid request matched rules and suppress any bids not exceeding a matching floor. If set to false, the prebid floors module will still provide floors for bid adapters, but there will be no floor enforcement.| true | +| enforcement.enforcePBS | boolean | If set to true, the Prebid.js floors module will signal to Prebid Server to pass floors to it’s bid adapters and enforce floors. If set to false, Prebid.js should still pass matched bid request floor data to Prebid Server, however no enforcement will take place. | false | +| enforcement.floorDeals | boolean | Enforce floors for deal bid requests. | false | +| enforcement.bidAdjustment | boolean | If true, the Floors Module will use the bidAdjustment function to adjust the floor per bidder. If false (or no bidAdjustment function is provided), floors will not be adjusted. Note: Setting this parameter to false may have unexpected results, such as signaling a gross floor when expecting net or vice versa. | true | +| endpoint | object | Controls behavior for dynamically retrieving floors. | - | +| endpoint.url | string | URL of endpoint to retrieve dynamic floor data. | - | +| data | object (required) | Floor data used by the Floors Module to pass floor data to bidders and floor enforcement. | - | +| data.currency | string | Currency of floor data. Floors Module will convert currency where necessary. See Currency section for more details. | 'USD' | +| data.skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will have access to model version (if defined) when skipped is true to signal the Floors Module is in floors mode. | 0 | +| data.floorsSchemaVersion | string | The Floors Module supports two version of the data schema. Version 1 allows for only one model to be applied in a given data set, whereas Version 2 allows you to sample multiple models selected by supplied weights. If no schema version is provided, the Floors Module will assume version 1 for the sake of backwards compatiblity.| 1 | +| data.modelGroups | array of objects | Array of model objects to be used for A/B sampling multiple models. This field is only used when data.floorsSchemaVersion = 2 | - | +| data.modelGroups[].currency | string | Currency of floor data. Floor Module will convert currency where necessary. See Currency section for more details. | 'USD' | +| data.modelGroups[].skipRate | integer | skipRate is a random function whose input value is any integer 0 through 100 to determine when to skip all floor logic, where 0 is always use floor data and 100 is always skip floor data. The use case is for publishers or floor providers to learn bid behavior when floors are applied or skipped. Analytics adapters will have access to model version (if defined) when skipped is true to signal the Floors Module is in floors mode. | 0 | +| data.modelGroups[].modelVersion | string | Used by floor providers to train on model version performance. The expectation is a floor provider’s analytics adapter will pass the model verson back for algorithm training. | - | +| data.modelGroups[].modelWeight | integer | Used by the Floors Module to determine when to apply the specific model. All weights will be normalized and appllied at runtime. Futher clarification will be provided in examples below. | - | +| data.schema | object | Allows for flexible definition of how floor data is formatted. | - | +| data.modelGroups[].schema.delimiter | string | Character separating the floor keys. | '\|' | +| data.modelGroups[].schema.fields | array of strings | Supported pre-defined values are: gptSlot, adUnitCode, mediaType, size | - | +| data.modelGroups[].values | key / values | A series of attributes representing a hash of floor data in a format defined by the schema object. | - | +| data.modelGroups[].values."rule key" | string | Delimited field of attribute values that define a floor. | - | +| data.modelGroups[].values."rule floor value" | float | The floor value for this key. | - | +| data.modelGroups[].default | float | Floor used if no matching rules are found. | - | + + +*Example 1* +Model weights add up to 100 and are sampled at a 25%, 25%, 50% distribution. Additionally, each model group has diffirent schema fields: + +{% highlight js %} +{ + "currency": "EU", + "skipRate": 20, + "floorsSchemaVersion":2, + "modelGroups": [ + { + "modelWeight":25, + "modelVersion": "Model1", + "schema": { + "fields": [ "domain", "gptSlot", "mediaType", "size" ] + }, + "values": { + "www.publisher.com|/1111/homepage/top-banner|banner|728x90": 1.00, + "www.publisher.com|/1111/homepage/top-rect|banner|300x250": 1.20, + "www.publisher.com|/1111/homepage/top-rect|banner|300x600": 1.80, + ... + "www.domain.com|/1111/homepage/top-banner|banner|728x90": 2.11 + ... + "www.publisher.com|*|*|*": 0.80, + }, + "default": 0.75 + }, + { + "modelWeight": 25, + "modelVersion": "Model2", + "schema": { + "fields": [ "domain", "mediaType", "size" ] + }, + "values": { + "www.publisher.com|banner|728x90": 1.00, + "www.publisher.com|banner|300x250": 1.20, + "www.publisher.com|banner|300x600": 1.80, + ... + "www.domain.com|banner|728x90": 2.11 + ... + "www.publisher.com|*|*|*": 0.80, + }, + "default": 0.75 + }, + { + "modelWeight": 50, + "modelVersion": "Model3", + "schema": { + "fields": [ "gptSlot", "mediaType", "size" ] + }, + "values": { + "/1111/homepage/top-banner|banner|728x90": 1.00, + "/1111/homepage/top-rect|banner|300x250": 1.20, + "/1111/homepage/top-rect|banner|300x600": 1.80, + ... + "/1111/homepage/top-banner|banner|728x90": 2.11 + ... + "*|banner|*": 0.80, + }, + "default": 0.75 + } + ] + +} +{% highlight %} + +*Example 2* +Model weights do not equal 100 and are normalized. Weights will be applied in the following method: Model weight / (sum of all weights) +model1 = 20 -> 20 / (20 + 50) = 29% of auctions model 1 will be applied +model2 = 50 -> 50 / (20 + 50) = 71% of auctions model 2 will be applied + +Additionally skipRate is supplied at model group level where model1 will skip floors 20% of times when model1 is selected, whereas model2 will skip 50% of auctions when model2 is selected. + +{% highlight js %} +{ + "currency": "EU", + "floorsSchemaVersion":2, + "modelGroups": [ + { + "modelWeight":25, + "skipRate": 20, + "modelVersion": "Model1", + "schema": { + "fields": [ "domain", "gptSlot", "mediaType", "size" ] + }, + "values": { + "www.publisher.com|/1111/homepage/top-banner|banner|728x90": 1.00, + "www.publisher.com|/1111/homepage/top-rect|banner|300x250": 1.20, + "www.publisher.com|/1111/homepage/top-rect|banner|300x600": 1.80, + ... + "www.domain.com|/1111/homepage/top-banner|banner|728x90": 2.11 + ... + "www.publisher.com|*|*|*": 0.80, + }, + "default": 0.75 + }, + { + "modelWeight": 50, + "skipRate": 50, + "modelVersion": "Model2", + "schema": { + "fields": [ "gptSlot", "mediaType", "size" ] + }, + "values": { + "/1111/homepage/top-banner|banner|728x90": 1.00, + "/1111/homepage/top-rect|banner|300x250": 1.20, + "/1111/homepage/top-rect|banner|300x600": 1.80, + ... + "/1111/homepage/top-banner|banner|728x90": 2.11 + ... + "*|banner|*": 0.80, + }, + "default": 0.75 + } + ] + +} +{% highlight %} + ## Rule Handling @@ -651,6 +824,56 @@ floor determined by Domain, GPT Slot, Media Type and Size: {% endhighlight %} +#### Example Response 3 + +Floors Schema version 2 + +{% highlight js %} +{ + "currency": "USD", + "floorsSchemaVersion":2, + "skipRate": 5, + "modelGroups": [ + { + "modelWeight":50, + "modelVersion": "Model1", + "schema": { + "fields": [ "domain", "gptSlot", "mediaType", "size" ] + }, + "values": { + "www.publisher.com|/1111/homepage/top-banner|banner|728x90": 1.00, + "www.publisher.com|/1111/homepage/top-rect|banner|300x250": 1.20, + "www.publisher.com|/1111/homepage/top-rect|banner|300x600": 1.80, + ... + "www.domain.com|/1111/homepage/top-banner|banner|728x90": 2.11 + ... + "www.publisher.com|*|*|*": 0.80, + }, + "default": 0.15 + }, + { + "modelWeight": 50, + "modelVersion": "Model3", + "schema": { + "fields": [ "gptSlot", "mediaType", "size" ] + }, + "values": { + "/1111/homepage/top-banner|banner|728x90": 1.00, + "/1111/homepage/top-rect|banner|300x250": 1.20, + "/1111/homepage/top-rect|banner|300x600": 1.80, + ... + "/1111/homepage/top-banner|banner|728x90": 2.11 + ... + "*|banner|*": 0.80, + }, + "default": 0.05 + } + ] + +} +{% highlight %} + + ### Bid Adapter Interface The Prebid Floors Module is capable of handling an arbitrarily large set of floor rules of any combination of supported dimensions. To reduce the need for each bid adapter to process each and every rule in the selected rule data set, an encapsulated function (getFloor) was created to allow bid adapters to query the Floors Module for a floor for each mediaType, size and currency the bid adapter needs. From bb9ee2ee8b6477dcd091820413143b2a8b3ed243 Mon Sep 17 00:00:00 2001 From: johnwier <49074029+johnwier@users.noreply.github.com> Date: Fri, 26 Jun 2020 06:50:44 -0700 Subject: [PATCH 059/150] declare conversant TCF 2 support (#2094) --- dev-docs/bidders/conversant.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/conversant.md b/dev-docs/bidders/conversant.md index 2fba4aa5ee..c78f5450df 100644 --- a/dev-docs/bidders/conversant.md +++ b/dev-docs/bidders/conversant.md @@ -8,6 +8,7 @@ media_types: video gdpr_supported: true userIds: criteo, digitrust, id5Id, identityLink, liveIntentId, parrableId, pubCommonId, unifiedId prebid_member: true +tcf2_supported: true --- From 592274bf3ee32a3c12d11ef37cf35474dc8e82a6 Mon Sep 17 00:00:00 2001 From: MartianTribe Date: Fri, 26 Jun 2020 10:01:26 -0400 Subject: [PATCH 060/150] Fixed an error on the code fencing (#2096) Co-authored-by: Steve --- dev-docs/modules/floors.md | 52 +++++++++++++++++++------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/dev-docs/modules/floors.md b/dev-docs/modules/floors.md index a26c18130d..0706ff0c1d 100644 --- a/dev-docs/modules/floors.md +++ b/dev-docs/modules/floors.md @@ -53,7 +53,7 @@ There are several places where the Floor module changes the behavior of the Preb - a. If an endpoint URL (a Dynamic Floor) is defined, the Floors Module will attempt to fetch floor data from the Floor Provider's endpoint. When requestBids is called, the Floors Module will delay the auction up to the supplied amount of time in floors.auctionDelay or as soon as the dynamic endpoint returns data, whichever is first. 3. Bid Adapters are responsible for utilizing the getFloors() from the bidRequest object for each ad slot media type, size combination. The Floors Module will perform currency conversion if the bid adapter requests floors in a different currency from the defined floor data currency. 4. Bid Adapters will pass the floor values to their bidding endpoints, to request bids, responding with any bids that meet or exceed the provided floor -5. Bid adapters will submit bids to back to Prebid core, where the Floors Module will perform enforcement on each bid +5. Bid adapters will submit bids to back to Prebid core, where the Floors Module will perform enforcement on each bid 6. The Floors Module will mark all bids below the floor as bids rejected. Prebid core will submit all eligible bids to the publisher ad server - a. The Floors module emits floor event / bid data to Analytics adapters to allow Floor Providers a feedback loop on floor performance for model training @@ -349,7 +349,7 @@ While some attributes are common in both schema versions, for completeness, all Model weights add up to 100 and are sampled at a 25%, 25%, 50% distribution. Additionally, each model group has diffirent schema fields: {% highlight js %} -{ +{ "currency": "EU", "skipRate": 20, "floorsSchemaVersion":2, @@ -406,19 +406,19 @@ Model weights add up to 100 and are sampled at a 25%, 25%, 50% distribution. Add "default": 0.75 } ] - + } -{% highlight %} +{% endhighlight %} *Example 2* Model weights do not equal 100 and are normalized. Weights will be applied in the following method: Model weight / (sum of all weights) model1 = 20 -> 20 / (20 + 50) = 29% of auctions model 1 will be applied model2 = 50 -> 50 / (20 + 50) = 71% of auctions model 2 will be applied -Additionally skipRate is supplied at model group level where model1 will skip floors 20% of times when model1 is selected, whereas model2 will skip 50% of auctions when model2 is selected. +Additionally skipRate is supplied at model group level where model1 will skip floors 20% of times when model1 is selected, whereas model2 will skip 50% of auctions when model2 is selected. {% highlight js %} -{ +{ "currency": "EU", "floorsSchemaVersion":2, "modelGroups": [ @@ -459,9 +459,9 @@ Additionally skipRate is supplied at model group level where model1 will skip fl "default": 0.75 } ] - + } -{% highlight %} +{% endhighlight %} ## Rule Handling @@ -479,9 +479,9 @@ The Floors Module will use the below prioritization scheme on determining which ### Rule Selection Process -The job of the Prebid floors module is to select a matching Prebid floor rule for enforcement \(when a bid adapter bids in the auction\) given the context of each Ad Unit. With the usage of “\*” values in rules definitions \(where “\*” applies when no specific value matches\) multiple Prebid floor rules can match for a given ad unit auction. +The job of the Prebid floors module is to select a matching Prebid floor rule for enforcement \(when a bid adapter bids in the auction\) given the context of each Ad Unit. With the usage of “\*” values in rules definitions \(where “\*” applies when no specific value matches\) multiple Prebid floor rules can match for a given ad unit auction. -The Prebid Floors module algorithm will produce a list of every possible permutation for each ad unit auction based on the defined schema types. The best matching rule for each enforced bid request and getFloor is based on specificity of values \(meaning match an exact value\) weighted from left to right, where the specificity of a value in the left most column would match over a rule with it’s “\*” equivalent if “\*” is supplied. +The Prebid Floors module algorithm will produce a list of every possible permutation for each ad unit auction based on the defined schema types. The best matching rule for each enforced bid request and getFloor is based on specificity of values \(meaning match an exact value\) weighted from left to right, where the specificity of a value in the left most column would match over a rule with it’s “\*” equivalent if “\*” is supplied. Priority order behavior where “\_” is a specific value, and the “\*” is a catch all @@ -490,14 +490,14 @@ Priority order for one column rule sets: \_ \* -Priority order for two column rule set: +Priority order for two column rule set: \_ \| \_ \_ \| \* \* \|\_ \* \| \* -Priority order for three column rule sets: +Priority order for three column rule sets: \_ \| \_ \| \_ \_ \| \_ \| \* @@ -553,8 +553,8 @@ Floor provider rule definition mediaType = banner Size = 300x600 Domain context = www.website.com - -The Price Floor Module produces an internal hash table of all possible permutations of “banner”, “300x600”, “www.website.com” and “\*” with the most specific hash values up top, weighting rules priority from left column specific values to right. Each left value will weigh more than the subsequent column’s specific values. The Floors Module attempt to find the matching rule by cycling through each below possible rule (from top to bottom) against the above rule provider data set. + +The Price Floor Module produces an internal hash table of all possible permutations of “banner”, “300x600”, “www.website.com” and “\*” with the most specific hash values up top, weighting rules priority from left column specific values to right. Each left value will weigh more than the subsequent column’s specific values. The Floors Module attempt to find the matching rule by cycling through each below possible rule (from top to bottom) against the above rule provider data set. {% highlight js %} { @@ -686,7 +686,7 @@ Floor enforced: 4.01 mediaType = video Size = 640x480 -Domain context = www.website.com. +Domain context = www.website.com. Price Floor internal possible permutations sorted by priority: @@ -744,7 +744,7 @@ Data providers can optionally build Analytics Adapters to ingest bid data within {% capture warning_note %} As a floor provider, your goal is to provide effective floors, with minimal page impact. If you are performing a Dynamic fetch to retrieve data prior to auctions, the following recommendations are advised to reduce page performance issues: - + - Return results to the page quickly. This implies data should be stored on a CDN or be provided by a distributed tier of high performance services - Work with publishers on setting appropriate auction delays to retrieve dynamic data - Implement client-side caching (such as max-age headers) whenever possible @@ -829,7 +829,7 @@ floor determined by Domain, GPT Slot, Media Type and Size: Floors Schema version 2 {% highlight js %} -{ +{ "currency": "USD", "floorsSchemaVersion":2, "skipRate": 5, @@ -869,9 +869,9 @@ Floors Schema version 2 "default": 0.05 } ] - + } -{% highlight %} +{% endhighlight %} ### Bid Adapter Interface @@ -1071,10 +1071,10 @@ currency = ‘USD’, ‘banner|300x250’: 1.00 {% highlight js %} -getFloor({ - currency: ‘EUR’, - mediaType: ‘banner’, - size: [300, 250] +getFloor({ + currency: ‘EUR’, + mediaType: ‘banner’, + size: [300, 250] }); {% endhighlight %} @@ -1082,7 +1082,7 @@ If successfully returned the requested currency: {% highlight js %} { - floor: 0.85, + floor: 0.85, currency: ‘EUR’ } {% endhighlight %} @@ -1091,7 +1091,7 @@ If unsuccessfully returned the requested currency: {% highlight js %} { - floor:1.0, + floor:1.0, currency: ‘USD’ } {% endhighlight %} @@ -1108,7 +1108,7 @@ Currency conversion can fail for the following reasons: **Enforcement** -Enforcement in the Floors module occurs when bidders respond (i.e. bid) with a bidResponse object into the Prebid auction. The Floors Module will read the bid submitted within each valid bidResponse and its associated currency, performing currency conversion where necessary. +Enforcement in the Floors module occurs when bidders respond (i.e. bid) with a bidResponse object into the Prebid auction. The Floors Module will read the bid submitted within each valid bidResponse and its associated currency, performing currency conversion where necessary. There exist three locations where currencies can differ within enforcement: From 6e724cc4ece847b23d064b813f1c8a3dbfebf262 Mon Sep 17 00:00:00 2001 From: lowendavid <66423906+lowendavid@users.noreply.github.com> Date: Fri, 26 Jun 2020 16:05:43 +0200 Subject: [PATCH 061/150] Adding userId to smartadserver.md (#2062) * Adding userId to smartadserver.md Added the userId to the documentation. * Update dev-docs/bidders/smartadserver.md this should be userIds rather than eids_supported Co-authored-by: Scott * Update dev-docs/bidders/smartadserver.md This should not be with the bidder paramters and therefore should be moved out. Co-authored-by: Scott Co-authored-by: Scott --- dev-docs/bidders/smartadserver.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-docs/bidders/smartadserver.md b/dev-docs/bidders/smartadserver.md index 7a70986255..1547ae5530 100644 --- a/dev-docs/bidders/smartadserver.md +++ b/dev-docs/bidders/smartadserver.md @@ -9,6 +9,7 @@ gdpr_supported: true schain_supported: true tcf2_supported: true usp_supported: true +userIds: britepoolId, criteo, digitrust, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId --- ### Note: @@ -17,7 +18,7 @@ The Smart AdServer bidder adaptor requires setup and approval from the Smart AdS ### Bid params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | +| Name | Scope | Description | Example | Type | |------------|----------|----------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------|-----------| | `siteId` | required | The placement site ID | `1234` | `integer` | | `pageId` | required | The placement page ID | `1234` | `integer` | @@ -31,7 +32,6 @@ The Smart AdServer bidder adaptor requires setup and approval from the Smart AdS | `video` | optional | Parameter object for instream video. See [video Object](#smartadserver-video-object) | `{}` | `object` | | `schain` | optional | Supply Chain | `'1.0,1!exchange1.com,1234,1,bid-request-1,publisher,publisher.com'` | `string` | - #### Video Object From b525b7ab5fd71fdf918113f72ff93de722170a4b Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 26 Jun 2020 10:36:28 -0400 Subject: [PATCH 062/150] add ap.p video outstream example --- .../video/outstream/pb-ve-outstream-app.html | 200 ++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 examples/video/outstream/pb-ve-outstream-app.html diff --git a/examples/video/outstream/pb-ve-outstream-app.html b/examples/video/outstream/pb-ve-outstream-app.html new file mode 100644 index 0000000000..488c1f714c --- /dev/null +++ b/examples/video/outstream/pb-ve-outstream-app.html @@ -0,0 +1,200 @@ +--- +layout: video_sample +title: Prebid Video | Outstream Example with AdPlayer.Pro Player +description: An example of an outstream video using Prebid.js and AdPlayer.Pro player. +videoType: pb-os-app +isVideo: true +sidebarType: 4 +--- + +
+
+
+

{{ page.title }}

+

{{page.description }}

+
+ + +
+

Important: + This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

+
+ +
+ +
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+
+ + +
+ +
+

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?

+
+
+ + + + + +
+

Warning: + Do not forget to exchange the placementId in the code examples with your own placementId!

+
+ +
+

Place this code in the page header.

+
+<script src="//acdn.adnxs.com/prebid/not-for-prod/prebid.js"></script>
+<!--AdPlayer.Pro code-->
+<script src="https://static.adplayer.pro/player/demo.js"></script>
+
+ +
+ + +
+

Place this code in the page body.

+
+
+<div id='playerContainerADP'></div>
+<script>
+	/* our app where we run player
+   our app variables */
+		var pbjs;
+		pbjs = pbjs || {};
+		pbjs.que = pbjs.que || [];
+		var debug = false;
+		if (typeof window.console === 'undefined' || typeof window.console.log === 'undefined' || typeof window.console.dir === 'undefined') {
+		  debug = false;
+		}
+		var videoId = 'video1';
+
+		/* Prebid video ad unit
+		   This is a working example but you must use your own settings/bidders for production
+		   More docs at https://prebid.org/prebid-video/video-overview.html */
+		var adUnits = [{
+		  code: videoId,
+		  mediaTypes: {
+		    video: {
+		      playerSize: [640, 480],
+		      context: 'outstream'
+		    }
+		  },
+		  bids: [{
+		    bidder: 'appnexus',
+		    params: {
+		      placementId: 13232385,
+		      video: {
+		        skippable: true,
+		        playback_method: ['auto_play_sound_off']
+		      }
+		    }
+		  }]
+		}];
+
+		pbjs.que.push(function () {
+		  pbjs.addAdUnits(adUnits);
+		  pbjs.requestBids({
+		    timeout: 1000,
+		    bidsBackHandler: function (bids) {
+		      if (debug) {
+		        window.console.dir(bids);
+		      }
+		      // we get the VAST XML from bids adResponse and pass it to our outstream player
+ if (bids && bids[videoId] && bids[videoId].bids && bids[videoId].bids[0] && bids[videoId].bids[0].adResponse) { + var adResponse = bids[videoId].bids[0].adResponse; + if (adResponse.ad && adResponse.ad.video && typeof adResponse.ad.video.content === 'string') { + var vastXml = bids[videoId].bids[0].adResponse.ad.video.content; + if (vastXml !== '') { + if (debug) { + window.console.log(vastXml); + } + AdPlayerPro('playerContainerADP').setup({ + "file": "https://static.adplayer.pro/video/640.mp4", + "width": 640, + "height": 360, + "autoStart": true, + "muted": true, + "advertising": { + "tag": vastXml + } + }); + } + } + } + } + }); + }); +</script> +
+
+ +
+
+ + + + + From 8cefe140f20c610378a54244ceb926f65793437b Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 26 Jun 2020 13:03:13 -0400 Subject: [PATCH 063/150] fixed side nav for adplayer pro outstream --- _data/sidebar.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/_data/sidebar.yml b/_data/sidebar.yml index d18dd293d3..69bc7a1ff9 100644 --- a/_data/sidebar.yml +++ b/_data/sidebar.yml @@ -1576,6 +1576,14 @@ sectionTitle: subgroup: 1 +- sbSecId: 4 + title: '  AdPlayer.Pro' + link: /examples/video/outstream/pb-ve-outstream-app.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 1 + - sbSecId: 4 title: '  No Server' link: /examples/video/outstream/pb-ve-outstream-no-server.html From 569aa59a70d2a3d156c967681d2be6e4e957e638 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 26 Jun 2020 13:08:58 -0400 Subject: [PATCH 064/150] fixed sidebar and layouts for app outstream vid --- _data/sidebar.yml | 8 ++++++++ _layouts/video_sample.html | 2 ++ 2 files changed, 10 insertions(+) diff --git a/_data/sidebar.yml b/_data/sidebar.yml index 69bc7a1ff9..a16a83c8f8 100644 --- a/_data/sidebar.yml +++ b/_data/sidebar.yml @@ -1576,6 +1576,14 @@ sectionTitle: subgroup: 1 +- sbSecId: 4 + title: '  Radiant' + link: /examples/video/outstream/pb-ve-outstream-app.html + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 1 + - sbSecId: 4 title: '  AdPlayer.Pro' link: /examples/video/outstream/pb-ve-outstream-app.html diff --git a/_layouts/video_sample.html b/_layouts/video_sample.html index 160c8b5b95..9abe8b91d7 100644 --- a/_layouts/video_sample.html +++ b/_layouts/video_sample.html @@ -44,6 +44,8 @@ {% include /video/pb-os-dfp.html %} {% elsif page.videoType == "pb-os-rd" %} {% include /video/pb-os-rd.html %} +{% elsif page.videoType == "pb-os-app" %} + {% include /video/pb-os-app.html %} {% elsif page.videoType == "pb-os-nas" %} {% include /video/pb-os-nas.html %} {% elsif page.videoType == "pb-lf-fw" %} From 951e96074ee64bcb14f6f00143b122520914ffc9 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 26 Jun 2020 13:16:21 -0400 Subject: [PATCH 065/150] added header file for app --- _includes/video/pb-os-app.html | 73 ++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 _includes/video/pb-os-app.html diff --git a/_includes/video/pb-os-app.html b/_includes/video/pb-os-app.html new file mode 100644 index 0000000000..8a2af8afba --- /dev/null +++ b/_includes/video/pb-os-app.html @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + {% if page.head_title %} + {{page.head_title}} + {% else %} + {{page.title}} for Header Bidding + {% endif %} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 64e4afbac78ada51d16517764867a15464c6c7f6 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 26 Jun 2020 13:50:43 -0400 Subject: [PATCH 066/150] app video --- _data/sidebar.yml | 8 -------- examples/video/outstream/pb-ve-outstream-app.html | 5 +++++ 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/_data/sidebar.yml b/_data/sidebar.yml index a16a83c8f8..69bc7a1ff9 100644 --- a/_data/sidebar.yml +++ b/_data/sidebar.yml @@ -1576,14 +1576,6 @@ sectionTitle: subgroup: 1 -- sbSecId: 4 - title: '  Radiant' - link: /examples/video/outstream/pb-ve-outstream-app.html - isHeader: 0 - isSectionHeader: 0 - sectionTitle: - subgroup: 1 - - sbSecId: 4 title: '  AdPlayer.Pro' link: /examples/video/outstream/pb-ve-outstream-app.html diff --git a/examples/video/outstream/pb-ve-outstream-app.html b/examples/video/outstream/pb-ve-outstream-app.html index 488c1f714c..321bd7bcad 100644 --- a/examples/video/outstream/pb-ve-outstream-app.html +++ b/examples/video/outstream/pb-ve-outstream-app.html @@ -141,6 +141,11 @@

Place this code in the page body.

var pbjs; pbjs = pbjs || {}; pbjs.que = pbjs.que || []; + var debug = false; + if (typeof window.console === 'undefined' || typeof window.console.log === 'undefined' || typeof window.console.dir === 'undefined') { + debug = false; + } + var videoId = 'video1'; /* Prebid video ad unit This is a working example but you must use your own settings/bidders for production From 2748cf9f301180c1e9aa2429341481ddc9f44694 Mon Sep 17 00:00:00 2001 From: Steve Date: Mon, 29 Jun 2020 09:54:20 -0400 Subject: [PATCH 067/150] Added changes per SME --- .../video/outstream/pb-ve-outstream-app.html | 205 ++++++++++++++++++ prebid-video/video-long-form.md | 4 +- 2 files changed, 207 insertions(+), 2 deletions(-) create mode 100644 examples/video/outstream/pb-ve-outstream-app.html diff --git a/examples/video/outstream/pb-ve-outstream-app.html b/examples/video/outstream/pb-ve-outstream-app.html new file mode 100644 index 0000000000..321bd7bcad --- /dev/null +++ b/examples/video/outstream/pb-ve-outstream-app.html @@ -0,0 +1,205 @@ +--- +layout: video_sample +title: Prebid Video | Outstream Example with AdPlayer.Pro Player +description: An example of an outstream video using Prebid.js and AdPlayer.Pro player. +videoType: pb-os-app +isVideo: true +sidebarType: 4 +--- + +
+
+
+

{{ page.title }}

+

{{page.description }}

+
+ + +
+

Important: + This example uses a test version of Prebid.js hosted on our CDN that is not recommended for production use. It includes all available adapters. Production implementations should build from source or customize the build using the Download page to make sure only the necessary bidder adapters are included.

+
+ +
+ +
+

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

+
+ + +
+ +
+

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?

+
+
+ + + + + +
+

Warning: + Do not forget to exchange the placementId in the code examples with your own placementId!

+
+ +
+

Place this code in the page header.

+
+<script src="//acdn.adnxs.com/prebid/not-for-prod/prebid.js"></script>
+<!--AdPlayer.Pro code-->
+<script src="https://static.adplayer.pro/player/demo.js"></script>
+
+ +
+ + +
+

Place this code in the page body.

+
+
+<div id='playerContainerADP'></div>
+<script>
+	/* our app where we run player
+   our app variables */
+		var pbjs;
+		pbjs = pbjs || {};
+		pbjs.que = pbjs.que || [];
+		var debug = false;
+		if (typeof window.console === 'undefined' || typeof window.console.log === 'undefined' || typeof window.console.dir === 'undefined') {
+		  debug = false;
+		}
+		var videoId = 'video1';
+
+		/* Prebid video ad unit
+		   This is a working example but you must use your own settings/bidders for production
+		   More docs at https://prebid.org/prebid-video/video-overview.html */
+		var adUnits = [{
+		  code: videoId,
+		  mediaTypes: {
+		    video: {
+		      playerSize: [640, 480],
+		      context: 'outstream'
+		    }
+		  },
+		  bids: [{
+		    bidder: 'appnexus',
+		    params: {
+		      placementId: 13232385,
+		      video: {
+		        skippable: true,
+		        playback_method: ['auto_play_sound_off']
+		      }
+		    }
+		  }]
+		}];
+
+		pbjs.que.push(function () {
+		  pbjs.addAdUnits(adUnits);
+		  pbjs.requestBids({
+		    timeout: 1000,
+		    bidsBackHandler: function (bids) {
+		      if (debug) {
+		        window.console.dir(bids);
+		      }
+		      // we get the VAST XML from bids adResponse and pass it to our outstream player
+ if (bids && bids[videoId] && bids[videoId].bids && bids[videoId].bids[0] && bids[videoId].bids[0].adResponse) { + var adResponse = bids[videoId].bids[0].adResponse; + if (adResponse.ad && adResponse.ad.video && typeof adResponse.ad.video.content === 'string') { + var vastXml = bids[videoId].bids[0].adResponse.ad.video.content; + if (vastXml !== '') { + if (debug) { + window.console.log(vastXml); + } + AdPlayerPro('playerContainerADP').setup({ + "file": "https://static.adplayer.pro/video/640.mp4", + "width": 640, + "height": 360, + "autoStart": true, + "muted": true, + "advertising": { + "tag": vastXml + } + }); + } + } + } + } + }); + }); +</script> +
+
+ +
+
+ + + + + diff --git a/prebid-video/video-long-form.md b/prebid-video/video-long-form.md index dbf436ed1b..a67ce223f8 100644 --- a/prebid-video/video-long-form.md +++ b/prebid-video/video-long-form.md @@ -156,10 +156,10 @@ A boolean that indicates if deals should be given a higher preference. If true, An object that enables publishers to set a prefix and minimum deal tier for each bidder. The `dealTier` object enables publishers to have different line item setups with varying priorities. `dealTier.prefix` -A string that enables bidders to target deal line items. +An optional string that enables bidders to target deal line items. `dealTier.minDealTier` -An integer that will give higher preference to deal bids when the `minDealTier` value is greater than five (5). Bids with `minDealTier` values less than five will not be ignored, however their cache key will contain `dealId` in place of `cpm`. These bids will be auctioned as non-deal bids. +An integer that will give higher preference to deal bids which return tier greater than minDealTier. Bids with `minDealTier` values less than five will not be ignored, however their cache key will contain `dealId` in place of `cpm`. These bids will be auctioned as non-deal bids.
     // This will replace the cpm with dealId in cache key as well as targeting kv pair when prioritizeDeals flag is set to true.

From a612fe1865b35aa63709458f164161edc91e27ed Mon Sep 17 00:00:00 2001
From: Dmitriy Labuzov 
Date: Mon, 29 Jun 2020 17:24:00 +0300
Subject: [PATCH 068/150] Adding tcf2_support for Yieldmo, media_types fix
 (#2089)

Co-authored-by: Dmitriy Labuzov 
---
 dev-docs/bidders/yieldmo.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/dev-docs/bidders/yieldmo.md b/dev-docs/bidders/yieldmo.md
index 0ee8e14056..096840b588 100644
--- a/dev-docs/bidders/yieldmo.md
+++ b/dev-docs/bidders/yieldmo.md
@@ -4,11 +4,12 @@ title: Yieldmo
 description: Prebid Yieldmo Bidder Adaptor
 hide: true
 biddercode: yieldmo
-media_types: native
+media_types: banner
 userIds: pubCommonId, unifiedId, criteo
 gdpr_supported: true
 usp_supported: true
 schain_supported: true
+tcf2_supported: true
 ---
 
 

From 0176d72da2b0ea84b7d9cbbc2a2d480f219abd49 Mon Sep 17 00:00:00 2001
From: bretg 
Date: Mon, 29 Jun 2020 10:31:33 -0400
Subject: [PATCH 069/150] first party data fix: yob is an int (#2100)

---
 dev-docs/publisher-api-reference.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dev-docs/publisher-api-reference.md b/dev-docs/publisher-api-reference.md
index 4b49ed174b..15fcb1f365 100644
--- a/dev-docs/publisher-api-reference.md
+++ b/dev-docs/publisher-api-reference.md
@@ -2258,7 +2258,7 @@ pbjs.setConfig({
         user: {
            keywords: ["a","b"],
            gender: "M",
-           yob: "1984",
+           yob: 1984,
            geo: { country: "ca" },
            data: {
               registered: true,

From 7908fd19bd1c735fd61084e318ce04943fe5ee14 Mon Sep 17 00:00:00 2001
From: bretg 
Date: Mon, 29 Jun 2020 13:18:13 -0400
Subject: [PATCH 070/150] adOps: fixed missing creative (#2102)

---
 adops/send-all-bids-adops.md | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/adops/send-all-bids-adops.md b/adops/send-all-bids-adops.md
index c1fdd1f484..e6b06e1322 100644
--- a/adops/send-all-bids-adops.md
+++ b/adops/send-all-bids-adops.md
@@ -86,8 +86,9 @@ Next, add a creative to this $0.50 line item; we will duplicate the creative lat
 - Set it to be a **Third party** creative.
 - Make sure the creative size is set to 1x1.  This allows the creative to serve on all inventory sizes. When associating with the line item, just change the creative filter setting to show all creatives instead of 'Inventory filtered based on size'.
 - The **"Serve into a Safeframe"** box can be **UNCHECKED** or **CHECKED** (Prebid universal creative is SafeFrame compatible).
-- Copy this creative code snippet and paste it into the **Code snippet** box.
+- Copy this creative code snippet for each bidder and paste it into the **Code snippet** box, replacing BIDDERCODE with the current bidder name.
 
+```
     
     
+```
 
 {% capture noteAlert %}
 Replace the *BIDDERCODE* placeholders in the above template with the appropriate bidder your line item is targeting.  For example, if you're targeting the bidder *appnexus*, the macro variable for `adId` would look like `ucTagData.adId = "%%PATTERN:hb_adid_appnexus%%";`. IMPORTANT: Make sure that none of the values are

From 29bdc98b310c6c0f2b0293bff864d7b9d882dff6 Mon Sep 17 00:00:00 2001
From: bretg 
Date: Mon, 29 Jun 2020 13:43:17 -0400
Subject: [PATCH 071/150] added mobileResize to ad server creative (#2103)

---
 adops/send-all-bids-adops.md | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/adops/send-all-bids-adops.md b/adops/send-all-bids-adops.md
index e6b06e1322..f2572dedef 100644
--- a/adops/send-all-bids-adops.md
+++ b/adops/send-all-bids-adops.md
@@ -102,7 +102,8 @@ Next, add a creative to this $0.50 line item; we will duplicate the creative lat
       ucTagData.env = "%%PATTERN:hb_env%%";
       ucTagData.size = "%%PATTERN:hb_size_BIDDERCODE%%";
       ucTagData.hbPb = "%%PATTERN:hb_pb_BIDDERCODE%%";
-
+      // mobileResize needed for mobile only
+      ucTagData.mobileResize = "hb_size:%%PATTERN:hb_size_BIDDERCODE%%";
       try {
         ucTag.renderAd(document, ucTagData);
       } catch (e) {
@@ -139,6 +140,8 @@ For Mopub:
       ucTagData.env = "%%KEYWORD:hb_env%%";
       ucTagData.size = "%%KEYWORD:hb_size_BIDDERCODE%%";
       ucTagData.hbPb = "%%KEYWORD:hb_pb_BIDDERCODE%%";
+      // mobileResize needed for mobile only
+      ucTagData.mobileResize = "hb_size:%%KEYWORD:hb_size_BIDDERCODE%%";
        try {
         ucTag.renderAd(document, ucTagData);
       } catch (e) {
@@ -167,6 +170,8 @@ For other ad servers:
       ucTagData.env = "%%MACRO:hb_env%%";
       ucTagData.size = "%%MACRO:hb_size_BIDDERCODE%%";
       ucTagData.hbPb = "%%MACRO:hb_pb_BIDDERCODE%%";
+      // mobileResize needed for mobile only
+      ucTagData.mobileResize = "hb_size:%%MACRO:hb_size_BIDDERCODE%%";
       try {
         ucTag.renderAd(document, ucTagData);
       } catch (e) {

From 4a8f250aef8acb55d6fda60f34b66913dea483a3 Mon Sep 17 00:00:00 2001
From: bretg 
Date: Tue, 30 Jun 2020 10:08:25 -0400
Subject: [PATCH 072/150] mobileResize needed in GAM only (#2104)

---
 adops/send-all-bids-adops.md | 6 +-----
 1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/adops/send-all-bids-adops.md b/adops/send-all-bids-adops.md
index f2572dedef..535d18ce02 100644
--- a/adops/send-all-bids-adops.md
+++ b/adops/send-all-bids-adops.md
@@ -102,7 +102,7 @@ Next, add a creative to this $0.50 line item; we will duplicate the creative lat
       ucTagData.env = "%%PATTERN:hb_env%%";
       ucTagData.size = "%%PATTERN:hb_size_BIDDERCODE%%";
       ucTagData.hbPb = "%%PATTERN:hb_pb_BIDDERCODE%%";
-      // mobileResize needed for mobile only
+      // mobileResize needed for mobile GAM only
       ucTagData.mobileResize = "hb_size:%%PATTERN:hb_size_BIDDERCODE%%";
       try {
         ucTag.renderAd(document, ucTagData);
@@ -140,8 +140,6 @@ For Mopub:
       ucTagData.env = "%%KEYWORD:hb_env%%";
       ucTagData.size = "%%KEYWORD:hb_size_BIDDERCODE%%";
       ucTagData.hbPb = "%%KEYWORD:hb_pb_BIDDERCODE%%";
-      // mobileResize needed for mobile only
-      ucTagData.mobileResize = "hb_size:%%KEYWORD:hb_size_BIDDERCODE%%";
        try {
         ucTag.renderAd(document, ucTagData);
       } catch (e) {
@@ -170,8 +168,6 @@ For other ad servers:
       ucTagData.env = "%%MACRO:hb_env%%";
       ucTagData.size = "%%MACRO:hb_size_BIDDERCODE%%";
       ucTagData.hbPb = "%%MACRO:hb_pb_BIDDERCODE%%";
-      // mobileResize needed for mobile only
-      ucTagData.mobileResize = "hb_size:%%MACRO:hb_size_BIDDERCODE%%";
       try {
         ucTag.renderAd(document, ucTagData);
       } catch (e) {

From 8f7e6da1a6b87c784465335576f2ffe3c931edd3 Mon Sep 17 00:00:00 2001
From: bretg 
Date: Tue, 30 Jun 2020 11:46:35 -0400
Subject: [PATCH 073/150] rubicon is now magnite (#2106)

---
 _data/partners.yml                             |  10 +++++-----
 assets/images/partners/leader/Magnite_logo.png | Bin 0 -> 112603 bytes
 2 files changed, 5 insertions(+), 5 deletions(-)
 create mode 100644 assets/images/partners/leader/Magnite_logo.png

diff --git a/_data/partners.yml b/_data/partners.yml
index a69b6a86dc..6c9fb459b6 100644
--- a/_data/partners.yml
+++ b/_data/partners.yml
@@ -1,3 +1,8 @@
+- company: Magnite
+  link: https://www.magnite.com/
+  imgURL: /assets/images/partners/leader/Magnite_logo.png
+  type: leader
+  
 - company: MediaMath 
   link: https://www.mediamath.com/
   imgURL: /assets/images/partners/leader/MediaMath-wordmark.png
@@ -13,11 +18,6 @@
   imgURL: /assets/images/partners/leader/pubmatic.png
   type: leader
 
-- company: Rubicon Project
-  link: https://rubiconproject.com/header-bidding-for-publishers/
-  imgURL: /assets/images/partners/founders/rubicon.png
-  type: leader
-  
 - company: SpotX 
   link: https://spotx.tv
   imgURL: /assets/images/partners/leader/spotx_logo.png
diff --git a/assets/images/partners/leader/Magnite_logo.png b/assets/images/partners/leader/Magnite_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..f004808a57c0e680fa7ae4aa762897570c9dd411
GIT binary patch
literal 112603
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
diff --git a/guide.md b/guide.md index c464046cdb..35e8d5a788 100644 --- a/guide.md +++ b/guide.md @@ -3,7 +3,7 @@ layout: page_v2 title: prebid.org website guide description: details about how the site works isNew: false -hide: true + sidebarType: 0 --- diff --git a/overview/prebid-troubleshooting-guide.md b/overview/prebid-troubleshooting-guide.md index 0a9c6bbb91..5ad659f146 100644 --- a/overview/prebid-troubleshooting-guide.md +++ b/overview/prebid-troubleshooting-guide.md @@ -4,7 +4,7 @@ title: Prebid.js Troubleshooting Guide head_title: Prebid.js Troubleshooting Guide description: How to troubleshoot Prebid.js from the perspective of an ad call from start to finish. pid: 0 -hide: true + sidebarType: 0 --- diff --git a/questions.md b/questions.md index ddeafa69fe..8c20f13b22 100644 --- a/questions.md +++ b/questions.md @@ -2,7 +2,7 @@ layout: page_v2 title: Questions & FAQ description: -hide: true + ---
diff --git a/support/support.md b/support/support.md index ff07757e98..ef1be7beb9 100644 --- a/support/support.md +++ b/support/support.md @@ -6,7 +6,7 @@ pid: 0 is_top_nav: yeah top_nav_section: support nav_section: intro -hide: true + --- From 1cbe547bcf6e13aa46928582bbe5fcbad345ae1f Mon Sep 17 00:00:00 2001 From: OneTagDevOps <38786435+OneTagDevOps@users.noreply.github.com> Date: Tue, 7 Jul 2020 16:35:19 +0200 Subject: [PATCH 077/150] Update onetag.md (#2101) --- dev-docs/bidders/onetag.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/onetag.md b/dev-docs/bidders/onetag.md index 56e5dbc02f..ccfa2d4126 100644 --- a/dev-docs/bidders/onetag.md +++ b/dev-docs/bidders/onetag.md @@ -21,4 +21,4 @@ userIds: britepoolId, criteo, digitrust, id5Id, identityLink, liveIntentId, netI ### Video Additional Information -Note that right now video support is only provided when the context is "instream" or "outstream". Also a renderer should be included when defining an outstream adUnit. +Note that right now video support is only provided when the context is "instream" or "outstream". From f39910537b44c70f94a2d217fc4fd0d01a17a377 Mon Sep 17 00:00:00 2001 From: Konduit <55142865+konduit-dev@users.noreply.github.com> Date: Tue, 7 Jul 2020 17:44:26 +0300 Subject: [PATCH 078/150] Add Konduit Analytics Adapter option to the Prebid download page (#2114) * Konduit Module initial documentation version. * re-ordering modules in left-nav * minor edits added the gulp build command, general wordsmithing * Updated konduit documentation * Updated konduit.md file * Reverted chacges in sidebar.yml * "Send all bids" details added * fixed typo in konduit.md * Update konduit.md minor editorial updates * Added Konduit Analytics Adapter to downloads page Co-authored-by: Alexander Kislitsyn Co-authored-by: bretg Co-authored-by: Max Shevchenko Co-authored-by: Jean Stemp <38964447+jeanstemp@users.noreply.github.com> --- download.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/download.md b/download.md index 756621a67f..0126836eb9 100644 --- a/download.md +++ b/download.md @@ -306,6 +306,14 @@ Prebid only supports the most recent major version. Within a month or so after a
+
+
+ +
+
+
+
+
+ +
+
+
- [PBS]: {{site.baseurl}}/dev-docs/get-started-with-prebid-server.html From 8f508828816f0874f5f796b5b2669d6e346c2da3 Mon Sep 17 00:00:00 2001 From: Klaas-Jan Boon Date: Tue, 14 Apr 2020 13:18:41 +0200 Subject: [PATCH 148/150] add Blue Billywig bidder adaptor dev docs --- dev-docs/bidders/bluebillywig.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/bluebillywig.md b/dev-docs/bidders/bluebillywig.md index 23e7ebcca4..b0b52b9e1d 100644 --- a/dev-docs/bidders/bluebillywig.md +++ b/dev-docs/bidders/bluebillywig.md @@ -3,7 +3,6 @@ layout: bidder title: Blue Billywig description: Prebid Blue Billywig Bidder Adaptor biddercode: bluebillywig - media_types: video gdpr_supported: true schain_supported: true @@ -22,3 +21,4 @@ userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrable | `accountId` | required | Your publication ID at Blue Billywig | `642` | `integer` | | `rendererCode` | required | The name of the renderer to use in your Blue Billywig publication | `"renderer"` | `string` | | `connections` | required | Back-ends to connect with. For every value in this a param matching the back-end should exist too. | `["bluebillywig"]` | `array` | +| `video` | optional | Any OpenRTB 2.5 video params to additionally send along to the SSPs. | `{"maxduration": 30}` | `object` | From adc43d02c322508e225b8251b1b72313cfdccc9b Mon Sep 17 00:00:00 2001 From: Klaas-Jan Boon Date: Mon, 10 Aug 2020 10:02:37 +0200 Subject: [PATCH 149/150] Add missing empty line --- dev-docs/bidders/bluebillywig.md | 1 + 1 file changed, 1 insertion(+) diff --git a/dev-docs/bidders/bluebillywig.md b/dev-docs/bidders/bluebillywig.md index b0b52b9e1d..feabe779ea 100644 --- a/dev-docs/bidders/bluebillywig.md +++ b/dev-docs/bidders/bluebillywig.md @@ -2,6 +2,7 @@ layout: bidder title: Blue Billywig description: Prebid Blue Billywig Bidder Adaptor + biddercode: bluebillywig media_types: video gdpr_supported: true From 8ec111179ff371e2a2bbdacdf16697508769675b Mon Sep 17 00:00:00 2001 From: Klaas-Jan Boon Date: Mon, 10 Aug 2020 10:03:28 +0200 Subject: [PATCH 150/150] move empty line to right place... --- dev-docs/bidders/bluebillywig.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/bluebillywig.md b/dev-docs/bidders/bluebillywig.md index feabe779ea..a356e49868 100644 --- a/dev-docs/bidders/bluebillywig.md +++ b/dev-docs/bidders/bluebillywig.md @@ -2,8 +2,8 @@ layout: bidder title: Blue Billywig description: Prebid Blue Billywig Bidder Adaptor - biddercode: bluebillywig + media_types: video gdpr_supported: true schain_supported: true

|c>rM$;(w6K%`wMB27OobM6 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 literal 0 HcmV?d00001 From 44d8d7e7e96932f8e3fb70a2e7109e52ca12f671 Mon Sep 17 00:00:00 2001 From: Jean Stemp <38964447+jeanstemp@users.noreply.github.com> Date: Tue, 30 Jun 2020 09:47:07 -0700 Subject: [PATCH 074/150] update links to xandr docs (#2107) --- .../examples/use-prebid-with-appnexus-ad-server.md | 10 +++++----- dev-docs/publisher-api-reference-old.md | 2 +- dev-docs/publisher-api-reference.md | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/dev-docs/examples/use-prebid-with-appnexus-ad-server.md b/dev-docs/examples/use-prebid-with-appnexus-ad-server.md index b452f3c011..fdc532dae5 100644 --- a/dev-docs/examples/use-prebid-with-appnexus-ad-server.md +++ b/dev-docs/examples/use-prebid-with-appnexus-ad-server.md @@ -1,14 +1,14 @@ --- layout: example -title: Using Prebid.js with AppNexus Publisher Ad Server -description: Using Prebid.js with AppNexus Publisher Ad Server +title: Using Prebid.js with Xandr Publisher Ad Server +description: Using Prebid.js with Xandr Publisher Ad Server hide: true sidebarType: 1 about: -- An example showing how to use Prebid.js with AppNexus Publisher Ad Server -- See the AppNexus Seller Tag documentation for more information -- To configure the AppNexus Seller Tag to use SafeFrames, refer to the SafeFrame API Reference. +- An example showing how to use Prebid.js with Xandr Publisher Ad Server +- See the Seller Tag (AST) documentation for more information +- To configure the Seller Tag to use SafeFrames, refer to the SafeFrame API Reference. jsfiddle_link: jsfiddle.net/Prebid_Examples/tr1djf9e/3/embedded/html,result code_height: 2404 diff --git a/dev-docs/publisher-api-reference-old.md b/dev-docs/publisher-api-reference-old.md index e424b707c5..b8fb9acb37 100644 --- a/dev-docs/publisher-api-reference-old.md +++ b/dev-docs/publisher-api-reference-old.md @@ -353,7 +353,7 @@ Set query string targeting on all GPT ad units. The logic for deciding query str ### pbjs.setTargetingForAst() -Set query string targeting on all AST ([AppNexus Seller Tag](https://wiki.appnexus.com/x/PgOXBQ)) ad units. Note that this function has to be called after all ad units on page are defined. For working example code, see [Using Prebid.js with AppNexus Publisher Ad Server]({{site.github.url}}/dev-docs/examples/use-prebid-with-appnexus-ad-server.html). +Set query string targeting on all AST ([Seller Tag](https://docs.xandr.com/bundle/seller-tag/page/seller-tag.html)) ad units. Note that this function has to be called after all ad units on page are defined. For working example code, see [Using Prebid.js with AppNexus Publisher Ad Server]({{site.github.url}}/dev-docs/examples/use-prebid-with-appnexus-ad-server.html). **Kind**: static method of [pbjs](#module_pbjs) diff --git a/dev-docs/publisher-api-reference.md b/dev-docs/publisher-api-reference.md index 15fcb1f365..039e0ceec1 100644 --- a/dev-docs/publisher-api-reference.md +++ b/dev-docs/publisher-api-reference.md @@ -517,7 +517,7 @@ To use this function, include the [UserId module](/dev-docs/modules/userId.html) If you need to export the user IDs stored by Prebid User ID module in ORTB Eids frormat, then the `getUserIdsAsEids()` function will return an array formatted as per [ORTB Eids](https://github.com/prebid/Prebid.js/blob/master/modules/userId/eids.md). ``` -pbjs.getUserIdsAsEids() // returns userIds in ORTB Eids format. e.g. +pbjs.getUserIdsAsEids() // returns userIds in ORTB Eids format. e.g. [ { source: 'pubcid.org', @@ -608,7 +608,7 @@ setTargetingForGPTAsync(adUnit, pickInViewDiv); ### pbjs.setTargetingForAst(adUnitCode) -Set query string targeting for AST ([AppNexus Seller Tag](https://wiki.appnexus.com/x/PgOXBQ)) ad unit(s). Note that this function has to be called after all ad units on page are defined. For working example code, see [Using Prebid.js with AppNexus Publisher Ad Server]({{site.github.url}}/dev-docs/examples/use-prebid-with-appnexus-ad-server.html). If the function is invoked without arguments it will set targeting for all adUnits defined. +Set query string targeting for AST ([Seller Tag](https://docs.xandr.com/bundle/seller-tag/page/seller-tag.html)) ad unit(s). Note that this function has to be called after all ad units on page are defined. For working example code, see [Using Prebid.js with AppNexus Publisher Ad Server]({{site.github.url}}/dev-docs/examples/use-prebid-with-appnexus-ad-server.html). If the function is invoked without arguments it will set targeting for all adUnits defined. **Kind**: static method of [pbjs](#module_pbjs) @@ -1776,7 +1776,7 @@ Additional options for `s2sConfig` may be enabled by including the [Server-to-Se **Server-Side Aliases** -You may want to run a particular bidder on the client for banner, but that same bidder on the +You may want to run a particular bidder on the client for banner, but that same bidder on the server for video. You would do this by setting a **server-side** alias. The [example](#setConfig-Server-to-Server) at the start of this section provides an example. Here's how it works: From 9e8eee59b83e04e13b491a9974226af80ae1f40b Mon Sep 17 00:00:00 2001 From: bretg Date: Tue, 30 Jun 2020 15:20:56 -0400 Subject: [PATCH 075/150] fpd doc fix (#2108) --- dev-docs/publisher-api-reference.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-docs/publisher-api-reference.md b/dev-docs/publisher-api-reference.md index 039e0ceec1..a453aea691 100644 --- a/dev-docs/publisher-api-reference.md +++ b/dev-docs/publisher-api-reference.md @@ -2247,7 +2247,7 @@ Not all bid adapters currently support reading first party data in this way, but pbjs.setConfig({ fpd: { context: { - keywords: ["power tools"], + keywords: "power tools", search: "drill", content: { userrating: 4 }, data: { @@ -2256,7 +2256,7 @@ pbjs.setConfig({ } }, user: { - keywords: ["a","b"], + keywords: "a,b", gender: "M", yob: 1984, geo: { country: "ca" }, From 7b1a89b94d26624ea25f53842b453b5f2129ac7b Mon Sep 17 00:00:00 2001 From: MartianTribe Date: Wed, 1 Jul 2020 09:07:05 -0400 Subject: [PATCH 076/150] removed hide: boolean from front matter (#2110) Co-authored-by: Steve --- 404.md | 2 +- about.md | 2 +- addme.md | 2 +- adops/deals.md | 2 +- adops/setting-up-prebid-for-amp-in-dfp.md | 2 +- adops/setting-up-prebid-multi-format-in-dfp.md | 2 +- adops/setting-up-prebid-native-in-dfp.md | 2 +- adops/setting-up-prebid-video-in-freewheel.md | 2 +- adops/setting-up-prebid-with-the-appnexus-ad-server.md | 2 +- adops/setting-up-prebidjs-with-Smart-Ad-Server.md | 2 +- blog.md | 2 +- deprecated-bidders/152media.md | 2 +- dev-docs/add-video-support-to-an-existing-bidder-adaptor.md | 2 +- dev-docs/analytics-ga.md | 2 +- dev-docs/bidder-adapter-1.md | 2 +- dev-docs/bidder-adapter.md | 2 +- dev-docs/bidders/1ad4good.md | 2 +- dev-docs/bidders/33across.md | 2 +- dev-docs/bidders/7xbid.md | 2 +- dev-docs/bidders/9MediaOnline.md | 2 +- dev-docs/bidders/Advertly | 2 +- dev-docs/bidders/SafeReach.md | 2 +- dev-docs/bidders/a4g.md | 2 +- dev-docs/bidders/aardvark.md | 2 +- dev-docs/bidders/ablida.md | 2 +- dev-docs/bidders/adagio.md | 2 +- dev-docs/bidders/adastaMedia.md | 2 +- dev-docs/bidders/adbutler.md | 2 +- dev-docs/bidders/adfinity.md | 2 +- dev-docs/bidders/adform.md | 2 +- dev-docs/bidders/adformOpenRTB.md | 2 +- dev-docs/bidders/adgeneration.md | 2 +- dev-docs/bidders/adglare.md | 2 +- dev-docs/bidders/adhese.md | 2 +- dev-docs/bidders/adkernel.md | 2 +- dev-docs/bidders/adkernelAdn.md | 2 +- dev-docs/bidders/adlive.md | 2 +- dev-docs/bidders/adman.md | 2 +- dev-docs/bidders/admedia.md | 2 +- dev-docs/bidders/admixer.md | 2 +- dev-docs/bidders/adnuntius.md | 2 +- dev-docs/bidders/adocean.md | 2 +- dev-docs/bidders/adot.md | 2 +- dev-docs/bidders/adpartner.md | 2 +- dev-docs/bidders/adpone.md | 2 +- dev-docs/bidders/adprime.md | 2 +- dev-docs/bidders/adsolut.md | 2 +- dev-docs/bidders/adsparc.md | 2 +- dev-docs/bidders/adspend.md | 2 +- dev-docs/bidders/adspirit.md | 2 +- dev-docs/bidders/adtarget.md | 2 +- dev-docs/bidders/adtelligent.md | 2 +- dev-docs/bidders/aduptech.md | 2 +- dev-docs/bidders/advangelists.md | 2 +- dev-docs/bidders/advenue.md | 2 +- dev-docs/bidders/adxcg.md | 2 +- dev-docs/bidders/adyoulike.md | 2 +- dev-docs/bidders/aja.md | 2 +- dev-docs/bidders/andbeyond.md | 2 +- dev-docs/bidders/aniview.md | 2 +- dev-docs/bidders/aol.md | 2 +- dev-docs/bidders/appier.md | 2 +- dev-docs/bidders/appierBR.md | 2 +- dev-docs/bidders/appierExt.md | 2 +- dev-docs/bidders/appierGM.md | 2 +- dev-docs/bidders/appnexus.md | 2 +- dev-docs/bidders/arteebee.md | 2 +- dev-docs/bidders/astraone.md | 2 +- dev-docs/bidders/atomx.md | 2 +- dev-docs/bidders/audienceNetwork.md | 2 +- dev-docs/bidders/audiencemedia.md | 2 +- dev-docs/bidders/audiencerun.md | 2 +- dev-docs/bidders/automatadBidAdapter.md | 2 +- dev-docs/bidders/avocet.md | 2 +- dev-docs/bidders/beachfront.md | 2 +- dev-docs/bidders/beintoo.md | 2 +- dev-docs/bidders/between.md | 2 +- dev-docs/bidders/bidfluence.md | 2 +- dev-docs/bidders/bidglass.md | 2 +- dev-docs/bidders/bidlab.md | 2 +- dev-docs/bidders/bidphysics.md | 2 +- dev-docs/bidders/bizzclick.md | 2 +- dev-docs/bidders/bluebillywig.md | 2 +- dev-docs/bidders/brainy.md | 2 +- dev-docs/bidders/bridgewell.md | 2 +- dev-docs/bidders/brightcom.md | 2 +- dev-docs/bidders/bucksense.md | 2 +- dev-docs/bidders/buzzoola.md | 2 +- dev-docs/bidders/byplay.md | 2 +- dev-docs/bidders/c1x.md | 2 +- dev-docs/bidders/ccx.md | 2 +- dev-docs/bidders/cedato.md | 2 +- dev-docs/bidders/cleanmedia.md | 2 +- dev-docs/bidders/cleanmedianet.md | 2 +- dev-docs/bidders/clickforce.md | 2 +- dev-docs/bidders/clicktripz.md | 2 +- dev-docs/bidders/coinzilla.md | 2 +- dev-docs/bidders/collectcent.md | 2 +- dev-docs/bidders/colombia.md | 2 +- dev-docs/bidders/colossusssp.md | 2 +- dev-docs/bidders/connectad.md | 2 +- dev-docs/bidders/consumable.md | 2 +- dev-docs/bidders/contentignite.md | 2 +- dev-docs/bidders/converge.md | 2 +- dev-docs/bidders/conversant.md | 2 +- dev-docs/bidders/cosmos.md | 2 +- dev-docs/bidders/cox.md | 2 +- dev-docs/bidders/cpmstar.md | 2 +- dev-docs/bidders/criteo.md | 2 +- dev-docs/bidders/dailyhunt.md | 2 +- dev-docs/bidders/danmarket.md | 2 +- dev-docs/bidders/decenterads.md | 2 +- dev-docs/bidders/deepintent.md | 2 +- dev-docs/bidders/defymedia.md | 2 +- dev-docs/bidders/dgads.md | 2 +- dev-docs/bidders/districtm.md | 2 +- dev-docs/bidders/districtmdmx.md | 2 +- dev-docs/bidders/divreach.md | 2 +- dev-docs/bidders/djax.md | 2 +- dev-docs/bidders/dspx.md | 2 +- dev-docs/bidders/ebdr.md | 2 +- dev-docs/bidders/edgequeryx.md | 2 +- dev-docs/bidders/emoteev.md | 2 +- dev-docs/bidders/emx_digital.md | 2 +- dev-docs/bidders/envivo.md | 2 +- dev-docs/bidders/eplanning.md | 2 +- dev-docs/bidders/etarget.md | 2 +- dev-docs/bidders/evolution_tech.md | 2 +- dev-docs/bidders/eywamedia.md | 2 +- dev-docs/bidders/fairtrade.md | 2 +- dev-docs/bidders/featureforward.md | 2 +- dev-docs/bidders/feedad.md | 2 +- dev-docs/bidders/fidelity.md | 2 +- dev-docs/bidders/freewheel.md | 2 +- dev-docs/bidders/fyber.md | 2 +- dev-docs/bidders/gambid.md | 2 +- dev-docs/bidders/gamma.md | 2 +- dev-docs/bidders/gamoshi.md | 2 +- dev-docs/bidders/getintent.md | 2 +- dev-docs/bidders/giants.md | 2 +- dev-docs/bidders/gjirafa.md | 2 +- dev-docs/bidders/glimpseProtocol.md | 2 +- dev-docs/bidders/gmossp.md | 2 +- dev-docs/bidders/go2net.md | 2 +- dev-docs/bidders/gourmetads.md | 2 +- dev-docs/bidders/grid.md | 2 +- dev-docs/bidders/gridNM.md | 2 +- dev-docs/bidders/gumgum.md | 2 +- dev-docs/bidders/gxone.md | 2 +- dev-docs/bidders/h12media.md | 2 +- dev-docs/bidders/headbidding.md | 2 +- dev-docs/bidders/hpmdnetwork.md | 2 +- dev-docs/bidders/huddledmasses.md | 2 +- dev-docs/bidders/hybrid.md | 2 +- dev-docs/bidders/ias.md | 2 +- dev-docs/bidders/imonomy.md | 2 +- dev-docs/bidders/improvedigital.md | 2 +- dev-docs/bidders/indexExchange.md | 2 +- dev-docs/bidders/innity.md | 2 +- dev-docs/bidders/inskin.md | 2 +- dev-docs/bidders/interactiveOffers.md | 2 +- dev-docs/bidders/invibes.md | 2 +- dev-docs/bidders/iqm.md | 2 +- dev-docs/bidders/jcartermarketing.md | 2 +- dev-docs/bidders/justpremium.md | 2 +- dev-docs/bidders/kargo.md | 2 +- dev-docs/bidders/komoona.md | 2 +- dev-docs/bidders/kubient.md | 2 +- dev-docs/bidders/kumma.md | 2 +- dev-docs/bidders/lemma.md | 2 +- dev-docs/bidders/lifestreet.md | 2 +- dev-docs/bidders/livewrapped.md | 2 +- dev-docs/bidders/lkqd.md | 2 +- dev-docs/bidders/lockerdome.md | 2 +- dev-docs/bidders/logicad.md | 2 +- dev-docs/bidders/loopme.md | 2 +- dev-docs/bidders/lunamedia.md | 2 +- dev-docs/bidders/luponmedia.md | 2 +- dev-docs/bidders/madvertise.md | 2 +- dev-docs/bidders/mantis.md | 2 +- dev-docs/bidders/marsmedia.md | 2 +- dev-docs/bidders/matomy.md | 2 +- dev-docs/bidders/meazy.md | 2 +- dev-docs/bidders/mediaforce.md | 2 +- dev-docs/bidders/mediafuseLift.md | 2 +- dev-docs/bidders/medianet.md | 2 +- dev-docs/bidders/mediasquare.md | 2 +- dev-docs/bidders/mgid.md | 2 +- dev-docs/bidders/microad.md | 2 +- dev-docs/bidders/mobfox.md | 2 +- dev-docs/bidders/mobsmart.md | 2 +- dev-docs/bidders/my6sense.md | 2 +- dev-docs/bidders/mytarget.md | 2 +- dev-docs/bidders/nafdigital.md | 2 +- dev-docs/bidders/nanointeractive.md | 2 +- dev-docs/bidders/nasmediaAdmixer.md | 2 +- dev-docs/bidders/newborntownWeb.md | 2 +- dev-docs/bidders/nextMillennium.md | 2 +- dev-docs/bidders/nextroll.md | 2 +- dev-docs/bidders/nobidBidAdapter.md | 2 +- dev-docs/bidders/oftmedia.md | 2 +- dev-docs/bidders/oftmediahb.md | 2 +- dev-docs/bidders/oneVideo.md | 2 +- dev-docs/bidders/onedisplay.md | 2 +- dev-docs/bidders/onefiftytwomedia.md | 2 +- dev-docs/bidders/onemobile.md | 2 +- dev-docs/bidders/oneplanetonly.md | 2 +- dev-docs/bidders/onetag.md | 2 +- dev-docs/bidders/onomagic.md | 2 +- dev-docs/bidders/open8.md | 2 +- dev-docs/bidders/openx.md | 2 +- dev-docs/bidders/openxoutstream.md | 2 +- dev-docs/bidders/optimatic.md | 2 +- dev-docs/bidders/optimera.md | 2 +- dev-docs/bidders/orbidder.md | 2 +- dev-docs/bidders/orbitsoft.md | 2 +- dev-docs/bidders/otm.md | 2 +- dev-docs/bidders/outcon.md | 2 +- dev-docs/bidders/ozone.md | 2 +- dev-docs/bidders/padsquad.md | 2 +- dev-docs/bidders/pagescience.md | 2 +- dev-docs/bidders/peak226.md | 2 +- dev-docs/bidders/piximedia.md | 2 +- dev-docs/bidders/platformio.md | 2 +- dev-docs/bidders/pollux.md | 2 +- dev-docs/bidders/polymorph.md | 2 +- dev-docs/bidders/prebidServer.md | 2 +- dev-docs/bidders/project-limelight.md | 2 +- dev-docs/bidders/proxistoreBidAdapter.md | 2 +- dev-docs/bidders/pubgenius.md | 2 +- dev-docs/bidders/pubmatic.md | 2 +- dev-docs/bidders/pubnx.md | 2 +- dev-docs/bidders/pulsepoint.md | 2 +- dev-docs/bidders/pxyz.md | 2 +- dev-docs/bidders/quantcast.md | 2 +- dev-docs/bidders/quantum.md | 2 +- dev-docs/bidders/quantumdex.md | 2 +- dev-docs/bidders/rads.md | 2 +- dev-docs/bidders/rakuten.md | 2 +- dev-docs/bidders/readpeak.md | 2 +- dev-docs/bidders/reklamstore.md | 2 +- dev-docs/bidders/relaido.md | 2 +- dev-docs/bidders/reload.md | 2 +- dev-docs/bidders/resultsmedia.md | 2 +- dev-docs/bidders/rexrtb.md | 2 +- dev-docs/bidders/rhythmone.md | 2 +- dev-docs/bidders/richaudience.md | 2 +- dev-docs/bidders/rockyou.md | 2 +- dev-docs/bidders/rtbdemand.md | 2 +- dev-docs/bidders/rtbdemandadk.md | 2 +- dev-docs/bidders/rtbhouse.md | 2 +- dev-docs/bidders/rtbsolutions.md | 2 +- dev-docs/bidders/rubicon.md | 2 +- dev-docs/bidders/rxrtb.md | 2 +- dev-docs/bidders/sara.md | 2 +- dev-docs/bidders/seedingAlliance.md | 2 +- dev-docs/bidders/seedtag.md | 2 +- dev-docs/bidders/segmento.md | 2 +- dev-docs/bidders/sekindo.md | 2 +- dev-docs/bidders/selectmedia.md | 2 +- dev-docs/bidders/selectmediavideo.md | 2 +- dev-docs/bidders/showheroes.md | 2 +- dev-docs/bidders/slimcut.md | 2 +- dev-docs/bidders/smartadserver.md | 2 +- dev-docs/bidders/smartrtb.md | 2 +- dev-docs/bidders/smartyads.md | 2 +- dev-docs/bidders/smilewanted.md | 2 +- dev-docs/bidders/smms.md | 2 +- dev-docs/bidders/somo.md | 2 +- dev-docs/bidders/somoaudience.md | 2 +- dev-docs/bidders/sonobi.md | 2 +- dev-docs/bidders/sortable.md | 2 +- dev-docs/bidders/sovrn.md | 2 +- dev-docs/bidders/spotx.md | 2 +- dev-docs/bidders/stickyadstv.md | 2 +- dev-docs/bidders/stv.md | 2 +- dev-docs/bidders/sublime.md | 2 +- dev-docs/bidders/supply2.md | 2 +- dev-docs/bidders/synacormedia.md | 2 +- dev-docs/bidders/taphype.md | 2 +- dev-docs/bidders/teads.md | 2 +- dev-docs/bidders/telaria.md | 2 +- dev-docs/bidders/theadx.md | 2 +- dev-docs/bidders/tim.md | 2 +- dev-docs/bidders/topRTB.md | 2 +- dev-docs/bidders/tpmn.md | 2 +- dev-docs/bidders/trafficroots.md | 2 +- dev-docs/bidders/tremor.md | 2 +- dev-docs/bidders/trendqube.md | 2 +- dev-docs/bidders/tribeOS.md | 2 +- dev-docs/bidders/trion.md | 2 +- dev-docs/bidders/triplelift.md | 2 +- dev-docs/bidders/trustx.md | 2 +- dev-docs/bidders/turktelekom.md | 2 +- dev-docs/bidders/ucfunnel.md | 2 +- dev-docs/bidders/underdogmedia.md | 2 +- dev-docs/bidders/undertone.md | 2 +- dev-docs/bidders/unicorn.md | 2 +- dev-docs/bidders/unruly.md | 2 +- dev-docs/bidders/uol.md | 2 +- dev-docs/bidders/valueimpression.md | 2 +- dev-docs/bidders/vdoai.md | 2 +- dev-docs/bidders/vertamedia.md | 2 +- dev-docs/bidders/vertoz.md | 2 +- dev-docs/bidders/vi.md | 2 +- dev-docs/bidders/vidazoo.md | 2 +- dev-docs/bidders/videofy.md | 2 +- dev-docs/bidders/videonow.md | 2 +- dev-docs/bidders/videoreach.md | 2 +- dev-docs/bidders/viewdeos.md | 2 +- dev-docs/bidders/viewdeosDX.md | 2 +- dev-docs/bidders/visx.md | 2 +- dev-docs/bidders/vmg.md | 2 +- dev-docs/bidders/vrtcal.md | 2 +- dev-docs/bidders/vuble.md | 2 +- dev-docs/bidders/waardex | 2 +- dev-docs/bidders/weborama.md | 2 +- dev-docs/bidders/widespace.md | 2 +- dev-docs/bidders/windtalker.md | 2 +- dev-docs/bidders/wipes.md | 2 +- dev-docs/bidders/xaxis.md | 2 +- dev-docs/bidders/xendiz.md | 2 +- dev-docs/bidders/yieldbot.md | 2 +- dev-docs/bidders/yieldlab.md | 2 +- dev-docs/bidders/yieldlift.md | 2 +- dev-docs/bidders/yieldmo.md | 2 +- dev-docs/bidders/yieldnexus.md | 2 +- dev-docs/bidders/yieldone.md | 2 +- dev-docs/bidders/zedo.md | 2 +- dev-docs/conditional-ad-units.md | 2 +- dev-docs/datablocks.md | 2 +- dev-docs/examples/adunit-refresh.md | 2 +- dev-docs/examples/custom-price-buckets.md | 2 +- dev-docs/examples/instream-banner-mix.md | 2 +- dev-docs/examples/multi-format-example.md | 2 +- dev-docs/examples/native-ad-example.md | 2 +- dev-docs/examples/postbid.md | 2 +- dev-docs/examples/size-mapping.md | 2 +- dev-docs/examples/use-prebid-with-appnexus-ad-server.md | 6 +++--- dev-docs/how-to-add-a-new-video-bidder-adaptor.md | 2 +- dev-docs/integrate-with-the-prebid-analytics-api.md | 2 +- dev-docs/prebid-1.0-API.md | 2 +- dev-docs/testing-prebid.md | 2 +- guide.md | 2 +- overview/prebid-troubleshooting-guide.md | 2 +- questions.md | 2 +- support/support.md | 2 +- 347 files changed, 349 insertions(+), 349 deletions(-) diff --git a/404.md b/404.md index cd0bcb203a..c8ba3fe41a 100644 --- a/404.md +++ b/404.md @@ -2,7 +2,7 @@ layout: fourofour title: Page Not Found description: -hide: true + --- diff --git a/about.md b/about.md index 11ade8a4a2..41ffdebd5f 100644 --- a/about.md +++ b/about.md @@ -4,7 +4,7 @@ title: About Prebid.js description: How prebid.js was started and what is it about pid: 60 isNew: false -hide: true + isNavParent: true sidebarType: 0 --- diff --git a/addme.md b/addme.md index 57d6857748..658cb73366 100644 --- a/addme.md +++ b/addme.md @@ -5,7 +5,7 @@ title: Add me! description: pid: 60 isNew: true -hide: false + isNavParent: true --- diff --git a/adops/deals.md b/adops/deals.md index f850bdf526..7ecd45b5d4 100644 --- a/adops/deals.md +++ b/adops/deals.md @@ -4,7 +4,7 @@ title: Enable Deals head_title: Enable Deals in Prebid for Header Bidding description: Enable Deals in Prebid for Header Bidding Analysis. pid: 4 -hide: false + sidebarType: 3 --- diff --git a/adops/setting-up-prebid-for-amp-in-dfp.md b/adops/setting-up-prebid-for-amp-in-dfp.md index ee555dff81..7b653bf540 100644 --- a/adops/setting-up-prebid-for-amp-in-dfp.md +++ b/adops/setting-up-prebid-for-amp-in-dfp.md @@ -4,7 +4,7 @@ title: Setting up Prebid for AMP in Google Ad Manager head_title: Setting up Prebid for AMP in Google Ad Manager description: Setting up Prebid for AMP in Google Ad Manager pid: 3 -hide: false + top_nav_section: adops nav_section: tutorials sidebarType: 3 diff --git a/adops/setting-up-prebid-multi-format-in-dfp.md b/adops/setting-up-prebid-multi-format-in-dfp.md index bbc15b89ae..ecaf4731ca 100644 --- a/adops/setting-up-prebid-multi-format-in-dfp.md +++ b/adops/setting-up-prebid-multi-format-in-dfp.md @@ -4,7 +4,7 @@ title: Setting up Prebid Multi-Format in Google Ad Manager head_title: Setting up Prebid Multi-Format in Google Ad Manager description: Setting up Prebid Multi-Format in Google Ad Manager pid: 3 -hide: false + top_nav_section: adops nav_section: tutorials sidebarType: 3 diff --git a/adops/setting-up-prebid-native-in-dfp.md b/adops/setting-up-prebid-native-in-dfp.md index da75a87bb7..9e5301cefd 100644 --- a/adops/setting-up-prebid-native-in-dfp.md +++ b/adops/setting-up-prebid-native-in-dfp.md @@ -4,7 +4,7 @@ title: Setting up Prebid Native in Google Ad Manager (Alpha) head_title: Setting up Prebid Native in Google Ad Manager description: Setting up Prebid Native in Google Ad Manager pid: 3 -hide: false + top_nav_section: adops nav_section: tutorials sidebarType: 3 diff --git a/adops/setting-up-prebid-video-in-freewheel.md b/adops/setting-up-prebid-video-in-freewheel.md index 0bb9cb7eb1..15d64e6c25 100644 --- a/adops/setting-up-prebid-video-in-freewheel.md +++ b/adops/setting-up-prebid-video-in-freewheel.md @@ -4,7 +4,7 @@ title: Setting up Prebid Video in FreeWheel head_title: Setting up Prebid Video in FreeWheel description: Setting up Prebid Video in FreeWheel pid: 3 -hide: false + top_nav_section: adops nav_section: tutorials sidebarType: 3 diff --git a/adops/setting-up-prebid-with-the-appnexus-ad-server.md b/adops/setting-up-prebid-with-the-appnexus-ad-server.md index f085ca91f0..687621e16c 100644 --- a/adops/setting-up-prebid-with-the-appnexus-ad-server.md +++ b/adops/setting-up-prebid-with-the-appnexus-ad-server.md @@ -4,7 +4,7 @@ title: Setting up Prebid with the AppNexus Publisher Ad Server head_title: Setting up Prebid with the AppNexus Publisher Ad Server description: Setting up Prebid with the AppNexus Publisher Ad Server pid: 3 -hide: false + top_nav_section: adops nav_section: tutorials sidebarType: 3 diff --git a/adops/setting-up-prebidjs-with-Smart-Ad-Server.md b/adops/setting-up-prebidjs-with-Smart-Ad-Server.md index c01c07296f..969d3af0f3 100644 --- a/adops/setting-up-prebidjs-with-Smart-Ad-Server.md +++ b/adops/setting-up-prebidjs-with-Smart-Ad-Server.md @@ -3,7 +3,7 @@ layout: page_v2 title: Setting up Prebid.js with Smart Ad Server head_title: Setting up Prebid.js with Smart Ad Server description: Setting up Prebid.js with Smart Ad Server -hide: false + sidebarType: 3 --- diff --git a/blog.md b/blog.md index 5e8c4393b1..079ec6b9a2 100644 --- a/blog.md +++ b/blog.md @@ -3,7 +3,7 @@ layout: blog title: Blog head_title: Prebid.org - Blog for Header Bidding description: All about Prebid and header bidding -hide: true + sidebarType: 7 --- diff --git a/deprecated-bidders/152media.md b/deprecated-bidders/152media.md index 55d2e65a0c..baadfaa803 100644 --- a/deprecated-bidders/152media.md +++ b/deprecated-bidders/152media.md @@ -6,7 +6,7 @@ description: Prebid 152Media Bidder Adaptor top_nav_section: dev_docs nav_section: reference -hide: true + biddercode: oftmedia diff --git a/dev-docs/add-video-support-to-an-existing-bidder-adaptor.md b/dev-docs/add-video-support-to-an-existing-bidder-adaptor.md index ac4b61e7bc..5fa617eec4 100644 --- a/dev-docs/add-video-support-to-an-existing-bidder-adaptor.md +++ b/dev-docs/add-video-support-to-an-existing-bidder-adaptor.md @@ -6,5 +6,5 @@ description: Documentation on how to add video support to an existing bidder ada pid: 27 top_nav_section: dev_docs nav_section: adapters -hide: true + --- diff --git a/dev-docs/analytics-ga.md b/dev-docs/analytics-ga.md index 3fae051cad..70e7071b2d 100644 --- a/dev-docs/analytics-ga.md +++ b/dev-docs/analytics-ga.md @@ -6,7 +6,7 @@ description: Prebid.js Analytics with GA pid: 30 top_nav_section: dev_docs nav_section: reference -hide: true + --- diff --git a/dev-docs/bidder-adapter-1.md b/dev-docs/bidder-adapter-1.md index 1ecb437b2c..c068947168 100644 --- a/dev-docs/bidder-adapter-1.md +++ b/dev-docs/bidder-adapter-1.md @@ -5,5 +5,5 @@ title: How to add a Prebid 1.0 Bidder Adapter description: Documentation on how to add a new bidder adapter top_nav_section: dev_docs nav_section: adapters -hide: true + --- diff --git a/dev-docs/bidder-adapter.md b/dev-docs/bidder-adapter.md index 5957ec05c0..1c04202589 100644 --- a/dev-docs/bidder-adapter.md +++ b/dev-docs/bidder-adapter.md @@ -3,5 +3,5 @@ redirect_to: "/dev-docs/bidder-adaptor.html" layout: page_v2 top_nav_section: dev_docs nav_section: adapters -hide: true + --- diff --git a/dev-docs/bidders/1ad4good.md b/dev-docs/bidders/1ad4good.md index 82aabbfb3a..22a1e2e530 100644 --- a/dev-docs/bidders/1ad4good.md +++ b/dev-docs/bidders/1ad4good.md @@ -2,7 +2,7 @@ layout: bidder title: 1ad4good description: Prebid One Ad for Good(1ad4good.org) Bidder Adaptor -hide: true + biddercode: 1ad4good --- diff --git a/dev-docs/bidders/33across.md b/dev-docs/bidders/33across.md index 6d80a41759..2aa65494de 100644 --- a/dev-docs/bidders/33across.md +++ b/dev-docs/bidders/33across.md @@ -2,7 +2,7 @@ layout: bidder title: 33Across description: Prebid 33Across Bidder Adapter -hide: true + biddercode: 33across gdpr_supported: true schain_supported: true diff --git a/dev-docs/bidders/7xbid.md b/dev-docs/bidders/7xbid.md index 0039d42cc6..fec2616b50 100644 --- a/dev-docs/bidders/7xbid.md +++ b/dev-docs/bidders/7xbid.md @@ -2,7 +2,7 @@ layout: bidder title: 7xbid description: Prebid 7xbid Bidder Adaptor -hide: true + biddercode: 7xbid media_types: banner, native --- diff --git a/dev-docs/bidders/9MediaOnline.md b/dev-docs/bidders/9MediaOnline.md index e29dedbfd1..89e92fd167 100644 --- a/dev-docs/bidders/9MediaOnline.md +++ b/dev-docs/bidders/9MediaOnline.md @@ -3,7 +3,7 @@ layout: bidder title: 9 Media Online description: Prebid 9 Media Online Bidder Adaptor biddercode: 9MediaOnline -hide: true + media_types: banner, video gdpr_supported: true schain_supported: true diff --git a/dev-docs/bidders/Advertly b/dev-docs/bidders/Advertly index 3316288df5..6d638e74e5 100644 --- a/dev-docs/bidders/Advertly +++ b/dev-docs/bidders/Advertly @@ -2,7 +2,7 @@ layout: bidder title: advertly description: Prebid ADVERTLY Bidder Adapter -hide: true + biddercode: advertly --- diff --git a/dev-docs/bidders/SafeReach.md b/dev-docs/bidders/SafeReach.md index 937b72cc54..09a4fde4bc 100644 --- a/dev-docs/bidders/SafeReach.md +++ b/dev-docs/bidders/SafeReach.md @@ -2,7 +2,7 @@ layout: bidder title: SafeReach description: Prebid Safe Reach Bidder Adaptor -hide: true + biddercode: safereach aliasCode : aardvark --- diff --git a/dev-docs/bidders/a4g.md b/dev-docs/bidders/a4g.md index f9fb924ff5..9f6f9324e3 100644 --- a/dev-docs/bidders/a4g.md +++ b/dev-docs/bidders/a4g.md @@ -2,7 +2,7 @@ layout: bidder title: A4G description: Prebid A4G Bidder Adaptor -hide: true + biddercode: a4g gdpr_supported: true --- diff --git a/dev-docs/bidders/aardvark.md b/dev-docs/bidders/aardvark.md index bdc41c6f33..c2fbbde224 100644 --- a/dev-docs/bidders/aardvark.md +++ b/dev-docs/bidders/aardvark.md @@ -2,7 +2,7 @@ layout: bidder title: Aardvark description: Prebid Aardvark Bidder Adaptor -hide: true + biddercode: aardvark gdpr_supported: true tcf2_supported: true diff --git a/dev-docs/bidders/ablida.md b/dev-docs/bidders/ablida.md index f44e137315..1e92de8192 100644 --- a/dev-docs/bidders/ablida.md +++ b/dev-docs/bidders/ablida.md @@ -2,7 +2,7 @@ layout: bidder title: ablida description: Prebid ablida Bidder Adaptor -hide: true + media_types: banner biddercode: ablida --- diff --git a/dev-docs/bidders/adagio.md b/dev-docs/bidders/adagio.md index a57c4b8be4..d628a0b9eb 100644 --- a/dev-docs/bidders/adagio.md +++ b/dev-docs/bidders/adagio.md @@ -2,7 +2,7 @@ layout: bidder title: Adagio description: Prebid Adagio Bidder Adaptor -hide: true + biddercode: adagio media_types: banner gdpr_supported: true diff --git a/dev-docs/bidders/adastaMedia.md b/dev-docs/bidders/adastaMedia.md index f000d918f9..4e4d6c3167 100644 --- a/dev-docs/bidders/adastaMedia.md +++ b/dev-docs/bidders/adastaMedia.md @@ -2,7 +2,7 @@ layout: bidder title: Adasta Media description: Prebid Adasta Media Bidder Adaptor -hide: true + biddercode: adasta aliasCode : appnexus --- diff --git a/dev-docs/bidders/adbutler.md b/dev-docs/bidders/adbutler.md index 8f3dd32c0c..6cfe2d661b 100644 --- a/dev-docs/bidders/adbutler.md +++ b/dev-docs/bidders/adbutler.md @@ -2,7 +2,7 @@ layout: bidder title: AdButler description: Prebid AdButler Bidder Adaptor -hide: true + biddercode: adbutler --- diff --git a/dev-docs/bidders/adfinity.md b/dev-docs/bidders/adfinity.md index 162f005d20..98b4bd34a5 100644 --- a/dev-docs/bidders/adfinity.md +++ b/dev-docs/bidders/adfinity.md @@ -2,7 +2,7 @@ layout: bidder title: Adfinity description: Prebid Adfinity Bidder Adaptor -hide: true + biddercode: adfinity media_types: banner, video, native gdpr_supported: true diff --git a/dev-docs/bidders/adform.md b/dev-docs/bidders/adform.md index acafc7e7b7..dc137e2ddd 100644 --- a/dev-docs/bidders/adform.md +++ b/dev-docs/bidders/adform.md @@ -2,7 +2,7 @@ layout: bidder title: Adform description: Prebid Adform Bidder Adaptor -hide: true + biddercode: adform media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/adformOpenRTB.md b/dev-docs/bidders/adformOpenRTB.md index 532a6b713e..8609274890 100644 --- a/dev-docs/bidders/adformOpenRTB.md +++ b/dev-docs/bidders/adformOpenRTB.md @@ -2,7 +2,7 @@ layout: bidder title: AdformOpenRTB description: Prebid AdformOpenRTB Bidder Adaptor -hide: true + biddercode: adformOpenRTB media_types: no-display, native gdpr_supported: true diff --git a/dev-docs/bidders/adgeneration.md b/dev-docs/bidders/adgeneration.md index 92d3a981e8..6f1dc6c292 100644 --- a/dev-docs/bidders/adgeneration.md +++ b/dev-docs/bidders/adgeneration.md @@ -2,7 +2,7 @@ layout: bidder title: Ad Generation description: Prebid Ad Generation Bidder Adaptor -hide: true + biddercode: adgeneration media_types: native --- diff --git a/dev-docs/bidders/adglare.md b/dev-docs/bidders/adglare.md index 08588656bf..8447f413d5 100644 --- a/dev-docs/bidders/adglare.md +++ b/dev-docs/bidders/adglare.md @@ -2,7 +2,7 @@ layout: bidder title: AdGlare Ad Server description: Prebid Adapter for AdGlare Ad Server -hide: true + biddercode: adglare media_types: banner --- diff --git a/dev-docs/bidders/adhese.md b/dev-docs/bidders/adhese.md index 4643e2b327..c4ba88c18e 100644 --- a/dev-docs/bidders/adhese.md +++ b/dev-docs/bidders/adhese.md @@ -2,7 +2,7 @@ layout: bidder title: Adhese description: Prebid Adhese Bidder Adaptor -hide: true + biddercode: adhese media_types: banner, video gdpr_supported: true diff --git a/dev-docs/bidders/adkernel.md b/dev-docs/bidders/adkernel.md index da75aa8ec2..190eaa95f1 100644 --- a/dev-docs/bidders/adkernel.md +++ b/dev-docs/bidders/adkernel.md @@ -2,7 +2,7 @@ layout: bidder title: AdKernel description: Prebid AdKernel Bidder Adaptor -hide: true + biddercode: adkernel media_types: banner, native, video gdpr_supported: true diff --git a/dev-docs/bidders/adkernelAdn.md b/dev-docs/bidders/adkernelAdn.md index 106ab8e1f5..e35c2ff565 100644 --- a/dev-docs/bidders/adkernelAdn.md +++ b/dev-docs/bidders/adkernelAdn.md @@ -2,7 +2,7 @@ layout: bidder title: AdKernelAdn description: Prebid AdKernel Ad Delivery Network Bidder Adaptor -hide: true + biddercode: adkernelAdn media_types: banner, video gdpr_supported: true diff --git a/dev-docs/bidders/adlive.md b/dev-docs/bidders/adlive.md index 9c0cf1772c..e1cd803b03 100644 --- a/dev-docs/bidders/adlive.md +++ b/dev-docs/bidders/adlive.md @@ -2,7 +2,7 @@ layout: bidder title: Adlive description: adlive bid adapter -hide: true + biddercode: adlive --- diff --git a/dev-docs/bidders/adman.md b/dev-docs/bidders/adman.md index 0db7948de3..74a95f6624 100644 --- a/dev-docs/bidders/adman.md +++ b/dev-docs/bidders/adman.md @@ -2,7 +2,7 @@ layout: bidder title: ADman Media description: Prebid Adman Bidder Adapter -hide: true + biddercode: adman gdpr_supported: true media_types: banner, video diff --git a/dev-docs/bidders/admedia.md b/dev-docs/bidders/admedia.md index 713f743846..849619152d 100644 --- a/dev-docs/bidders/admedia.md +++ b/dev-docs/bidders/admedia.md @@ -2,7 +2,7 @@ layout: bidder title: AdMedia description: Prebid AdMedia Bidder Adaptor -hide: true + biddercode: admedia media_types: banner gdpr_supported: false diff --git a/dev-docs/bidders/admixer.md b/dev-docs/bidders/admixer.md index 2399696391..8f2670d32e 100644 --- a/dev-docs/bidders/admixer.md +++ b/dev-docs/bidders/admixer.md @@ -2,7 +2,7 @@ layout: bidder title: AdMixer description: Prebid AdMixer Bidder Adaptor -hide: true + biddercode: admixer media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/adnuntius.md b/dev-docs/bidders/adnuntius.md index fc68317fa1..fb22d3af22 100644 --- a/dev-docs/bidders/adnuntius.md +++ b/dev-docs/bidders/adnuntius.md @@ -2,7 +2,7 @@ layout: bidder title: Adnuntius description: Prebid Adnuntius Bidder Adaptor -hide: true + biddercode: adnuntius media_types: banner gdpr_supported: false diff --git a/dev-docs/bidders/adocean.md b/dev-docs/bidders/adocean.md index b27819db93..5c679bc4be 100644 --- a/dev-docs/bidders/adocean.md +++ b/dev-docs/bidders/adocean.md @@ -2,7 +2,7 @@ layout: bidder title: AdOcean description: Prebid AdOcean Bidder Adaptor -hide: true + biddercode: adocean gdpr_supported: true --- diff --git a/dev-docs/bidders/adot.md b/dev-docs/bidders/adot.md index d995d14f0e..e71b82677d 100644 --- a/dev-docs/bidders/adot.md +++ b/dev-docs/bidders/adot.md @@ -3,7 +3,7 @@ layout: bidder title: Adot description: Prebid Adot Bidder Adapter biddercode: adot -hide: true + media_types: banner, video, native gdpr_supported: true --- diff --git a/dev-docs/bidders/adpartner.md b/dev-docs/bidders/adpartner.md index 51e3705785..5700284efb 100644 --- a/dev-docs/bidders/adpartner.md +++ b/dev-docs/bidders/adpartner.md @@ -2,7 +2,7 @@ layout: bidder title: AdPartner description: Prebid AdPartner Bidder Adaptor -hide: true + biddercode: adpartner media_types: banner diff --git a/dev-docs/bidders/adpone.md b/dev-docs/bidders/adpone.md index cf593edc3c..eb1e534eff 100644 --- a/dev-docs/bidders/adpone.md +++ b/dev-docs/bidders/adpone.md @@ -2,7 +2,7 @@ layout: bidder title: Adpone description: Prebid Adpone Bidder Adaptor -hide: true + biddercode: adpone bidder_supports_deals: false media_types: banner diff --git a/dev-docs/bidders/adprime.md b/dev-docs/bidders/adprime.md index a62c9164ae..1aa46224ec 100644 --- a/dev-docs/bidders/adprime.md +++ b/dev-docs/bidders/adprime.md @@ -2,7 +2,7 @@ layout: bidder title: Adprime description: Prebid Adprime Bidder Adapter -hide: true + biddercode: adprime gdpr_supported: true media_types: banner, video diff --git a/dev-docs/bidders/adsolut.md b/dev-docs/bidders/adsolut.md index b8de1c2704..83b2602428 100644 --- a/dev-docs/bidders/adsolut.md +++ b/dev-docs/bidders/adsolut.md @@ -2,7 +2,7 @@ layout: bidder title: adsolut description: Prebid adsolut Bidder Adaptor -hide: true + biddercode: adsolut aliasCode: adkernel --- diff --git a/dev-docs/bidders/adsparc.md b/dev-docs/bidders/adsparc.md index 7b9e2716a4..94b868e897 100644 --- a/dev-docs/bidders/adsparc.md +++ b/dev-docs/bidders/adsparc.md @@ -2,7 +2,7 @@ layout: bidder title: AdSparc description: Prebid Adsparc Bidder Adaptor -hide: true + biddercode: adsparc aliasCode: aardvark --- diff --git a/dev-docs/bidders/adspend.md b/dev-docs/bidders/adspend.md index 68dc87b719..318e7baa2f 100644 --- a/dev-docs/bidders/adspend.md +++ b/dev-docs/bidders/adspend.md @@ -2,7 +2,7 @@ layout: bidder title: AdSpend description: Prebid AdSpend Bidder Adaptor -hide: true + biddercode: adspend media_types: banner gdpr_supported: false diff --git a/dev-docs/bidders/adspirit.md b/dev-docs/bidders/adspirit.md index b85ea6e674..9de2fed1e5 100644 --- a/dev-docs/bidders/adspirit.md +++ b/dev-docs/bidders/adspirit.md @@ -2,7 +2,7 @@ layout: bidder title: AdSpirit description: Prebid AdSpirit Bidder Adapter -hide: true + biddercode: adspirit --- diff --git a/dev-docs/bidders/adtarget.md b/dev-docs/bidders/adtarget.md index 8860b8fdb4..ee43db96ef 100644 --- a/dev-docs/bidders/adtarget.md +++ b/dev-docs/bidders/adtarget.md @@ -2,7 +2,7 @@ layout: bidder title: Adtarget description: Adtarget Bidder Adapter -hide: true + biddercode: adtarget media_types: banner, video gdpr_supported: true diff --git a/dev-docs/bidders/adtelligent.md b/dev-docs/bidders/adtelligent.md index 0305d6a2ee..19f99dc98a 100644 --- a/dev-docs/bidders/adtelligent.md +++ b/dev-docs/bidders/adtelligent.md @@ -2,7 +2,7 @@ layout: bidder title: Adtelligent description: Prebid Adtelligent Bidder Adapter -hide: true + biddercode: adtelligent media_types: video,banner gdpr_supported: true diff --git a/dev-docs/bidders/aduptech.md b/dev-docs/bidders/aduptech.md index 4b9ae3ea03..e3ce49708a 100644 --- a/dev-docs/bidders/aduptech.md +++ b/dev-docs/bidders/aduptech.md @@ -2,7 +2,7 @@ layout: bidder title: AdUp Technology description: Prebid Bidder Adapter for AdUp Technology -hide: true + biddercode: aduptech media_types: banner gdpr_supported: true diff --git a/dev-docs/bidders/advangelists.md b/dev-docs/bidders/advangelists.md index 71a39bd092..a78f5d11f3 100644 --- a/dev-docs/bidders/advangelists.md +++ b/dev-docs/bidders/advangelists.md @@ -2,7 +2,7 @@ layout: bidder title: Advangelists description: Prebid Advangelists Bidder Adapter -hide: true + biddercode: advangelists --- diff --git a/dev-docs/bidders/advenue.md b/dev-docs/bidders/advenue.md index e2cdb49548..6a8b373cf0 100644 --- a/dev-docs/bidders/advenue.md +++ b/dev-docs/bidders/advenue.md @@ -2,7 +2,7 @@ layout: bidder title: Advenue description: Prebid Advenue Bidder Adaptor -hide: true + biddercode: advenue --- diff --git a/dev-docs/bidders/adxcg.md b/dev-docs/bidders/adxcg.md index 3879d9cb42..aa2d795076 100644 --- a/dev-docs/bidders/adxcg.md +++ b/dev-docs/bidders/adxcg.md @@ -2,7 +2,7 @@ layout: bidder title: adxcg description: Prebid adxcg bidder adaptor -hide: true + biddercode: adxcg media_types: native, video gdpr_supported: true diff --git a/dev-docs/bidders/adyoulike.md b/dev-docs/bidders/adyoulike.md index eb9a0b1ef3..2585b18fc4 100644 --- a/dev-docs/bidders/adyoulike.md +++ b/dev-docs/bidders/adyoulike.md @@ -2,7 +2,7 @@ layout: bidder title: Adyoulike description: Prebid Adyoulike Bidder Adaptor -hide: true + biddercode: adyoulike gdpr_supported: true usp_supported: true diff --git a/dev-docs/bidders/aja.md b/dev-docs/bidders/aja.md index f8313a8d92..de3d950214 100644 --- a/dev-docs/bidders/aja.md +++ b/dev-docs/bidders/aja.md @@ -2,7 +2,7 @@ layout: bidder title: AJA description: Prebid AJA Bidder Adaptor -hide: true + biddercode: aja media_types: video, native --- diff --git a/dev-docs/bidders/andbeyond.md b/dev-docs/bidders/andbeyond.md index e5dca1fd59..46d1ba6e95 100644 --- a/dev-docs/bidders/andbeyond.md +++ b/dev-docs/bidders/andbeyond.md @@ -2,7 +2,7 @@ layout: bidder title: andbeyond description: Prebid andbeyond Bidder Adaptor -hide: true + biddercode: andbeyond --- diff --git a/dev-docs/bidders/aniview.md b/dev-docs/bidders/aniview.md index 78d02bc7f4..82f8d65c6c 100644 --- a/dev-docs/bidders/aniview.md +++ b/dev-docs/bidders/aniview.md @@ -2,7 +2,7 @@ layout: bidder title: ANIVIEW description: Prebid ANIVIEW Bidder Adaptor -hide: true + biddercode: aniview media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/aol.md b/dev-docs/bidders/aol.md index c506179288..75c22f60e8 100644 --- a/dev-docs/bidders/aol.md +++ b/dev-docs/bidders/aol.md @@ -2,7 +2,7 @@ layout: bidder title: AOL description: Prebid AOL Bidder Adaptor -hide: true + biddercode: aol gdpr_supported: true usp_supported: true diff --git a/dev-docs/bidders/appier.md b/dev-docs/bidders/appier.md index 98bc2bb4fa..4f14a12b25 100644 --- a/dev-docs/bidders/appier.md +++ b/dev-docs/bidders/appier.md @@ -3,7 +3,7 @@ layout: bidder title: Appier description: Prebid Appier Bidder Adapter biddercode: appier -hide: true + media_types: banner gdpr_supported: true --- diff --git a/dev-docs/bidders/appierBR.md b/dev-docs/bidders/appierBR.md index ba0f7d7aca..18b4f77b2e 100644 --- a/dev-docs/bidders/appierBR.md +++ b/dev-docs/bidders/appierBR.md @@ -4,7 +4,7 @@ title: AppierBR description: Prebid Appier Bidder Adapter biddercode: appierBR aliasCode: appier -hide: true + media_types: banner gdpr_supported: true --- diff --git a/dev-docs/bidders/appierExt.md b/dev-docs/bidders/appierExt.md index 3f031036c0..22e547b780 100644 --- a/dev-docs/bidders/appierExt.md +++ b/dev-docs/bidders/appierExt.md @@ -4,7 +4,7 @@ title: AppierExt description: Prebid Appier Bidder Adapter biddercode: appierExt aliasCode: appier -hide: true + media_types: banner gdpr_supported: true --- diff --git a/dev-docs/bidders/appierGM.md b/dev-docs/bidders/appierGM.md index a757befc29..7dc090afdd 100644 --- a/dev-docs/bidders/appierGM.md +++ b/dev-docs/bidders/appierGM.md @@ -4,7 +4,7 @@ title: AppierGM description: Prebid Appier Bidder Adapter biddercode: appierGM aliasCode: appier -hide: true + media_types: banner gdpr_supported: true --- diff --git a/dev-docs/bidders/appnexus.md b/dev-docs/bidders/appnexus.md index 7bf3ab2c0d..4408e663bf 100644 --- a/dev-docs/bidders/appnexus.md +++ b/dev-docs/bidders/appnexus.md @@ -3,7 +3,7 @@ layout: bidder title: AppNexus description: Prebid AppNexus Bidder Adaptor biddercode: appnexus -hide: true + media_types: banner, video, native gdpr_supported: true prebid_member: true diff --git a/dev-docs/bidders/arteebee.md b/dev-docs/bidders/arteebee.md index 375338944e..db4d4c774e 100644 --- a/dev-docs/bidders/arteebee.md +++ b/dev-docs/bidders/arteebee.md @@ -2,7 +2,7 @@ layout: bidder title: Arteebee description: Prebid Arteebee Bidder Adaptor -hide: true + biddercode: arteebee gdpr_supported: true coppa_supported: true diff --git a/dev-docs/bidders/astraone.md b/dev-docs/bidders/astraone.md index 15221b350f..8f734a2ac2 100644 --- a/dev-docs/bidders/astraone.md +++ b/dev-docs/bidders/astraone.md @@ -2,7 +2,7 @@ layout: bidder title: AstraOne description: Prebid AstraOne Bidder Adapter -hide: true + media_types: banner biddercode: astraone gdpr_supported: true diff --git a/dev-docs/bidders/atomx.md b/dev-docs/bidders/atomx.md index 25665b628d..f8fa466f7f 100644 --- a/dev-docs/bidders/atomx.md +++ b/dev-docs/bidders/atomx.md @@ -2,7 +2,7 @@ layout: bidder title: Atomx description: Prebid Atomx Bidder Adaptor -hide: true + biddercode: atomx --- diff --git a/dev-docs/bidders/audienceNetwork.md b/dev-docs/bidders/audienceNetwork.md index a8ae5592be..9e1fe2c3ed 100644 --- a/dev-docs/bidders/audienceNetwork.md +++ b/dev-docs/bidders/audienceNetwork.md @@ -2,7 +2,7 @@ layout: bidder title: Audience Network description: Prebid Audience Network Bidder Adaptor -hide: true + biddercode: audienceNetwork media_types: native, video --- diff --git a/dev-docs/bidders/audiencemedia.md b/dev-docs/bidders/audiencemedia.md index 7670c9d6f0..145fbbcdf0 100644 --- a/dev-docs/bidders/audiencemedia.md +++ b/dev-docs/bidders/audiencemedia.md @@ -2,7 +2,7 @@ layout: bidder title: Audience Media description: Prebid Audience Media Bidder Adaptor -hide: true + media_types: banner, video gdpr_supported: true biddercode: audiencemedia diff --git a/dev-docs/bidders/audiencerun.md b/dev-docs/bidders/audiencerun.md index e388065a17..e5eb71a99c 100644 --- a/dev-docs/bidders/audiencerun.md +++ b/dev-docs/bidders/audiencerun.md @@ -2,7 +2,7 @@ layout: bidder title: AudienceRun description: Prebid AudienceRun Bidder Adaptor -hide: true + biddercode: audiencerun media_types: banner gdpr_supported: true diff --git a/dev-docs/bidders/automatadBidAdapter.md b/dev-docs/bidders/automatadBidAdapter.md index dc2d5a631b..6dffab2a92 100644 --- a/dev-docs/bidders/automatadBidAdapter.md +++ b/dev-docs/bidders/automatadBidAdapter.md @@ -3,7 +3,7 @@ layout: bidder title: Automatad OpenRTB Bid Adapter description: Automatad OpenRTB Bid Adapter biddercode: automatad -hide: true + media_types: banner --- diff --git a/dev-docs/bidders/avocet.md b/dev-docs/bidders/avocet.md index 3c6a9bd89d..9e04d237d9 100644 --- a/dev-docs/bidders/avocet.md +++ b/dev-docs/bidders/avocet.md @@ -2,7 +2,7 @@ layout: bidder title: Avocet description: Prebid Avocet Bidder Adapter -hide: true + biddercode: avct gdpr_supported: true media_types: banner, video diff --git a/dev-docs/bidders/beachfront.md b/dev-docs/bidders/beachfront.md index ce100cfe89..a0be3ad81a 100644 --- a/dev-docs/bidders/beachfront.md +++ b/dev-docs/bidders/beachfront.md @@ -2,7 +2,7 @@ layout: bidder title: Beachfront description: Prebid Beachfront Bidder Adaptor -hide: true + biddercode: beachfront media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/beintoo.md b/dev-docs/bidders/beintoo.md index 27435546b9..119f483aef 100644 --- a/dev-docs/bidders/beintoo.md +++ b/dev-docs/bidders/beintoo.md @@ -2,7 +2,7 @@ layout: bidder title: Beintoo description: Prebid Beintoo Bidder Adaptor -hide: true + biddercode: beintoo aliasCode : appnexus --- diff --git a/dev-docs/bidders/between.md b/dev-docs/bidders/between.md index e56654faff..dcd5f99c1d 100644 --- a/dev-docs/bidders/between.md +++ b/dev-docs/bidders/between.md @@ -2,7 +2,7 @@ layout: bidder title: BetweenDigital description: between bid adapter -hide: true + biddercode: between --- diff --git a/dev-docs/bidders/bidfluence.md b/dev-docs/bidders/bidfluence.md index db26bb7299..ab83cf4e33 100644 --- a/dev-docs/bidders/bidfluence.md +++ b/dev-docs/bidders/bidfluence.md @@ -2,7 +2,7 @@ layout: bidder title: Bidfluence description: Bidfluence Adaptor for Prebidjs -hide: true + biddercode: bidfluence gdpr_supported: true --- diff --git a/dev-docs/bidders/bidglass.md b/dev-docs/bidders/bidglass.md index 3f6037aec2..11fcaa2028 100644 --- a/dev-docs/bidders/bidglass.md +++ b/dev-docs/bidders/bidglass.md @@ -2,7 +2,7 @@ layout: bidder title: Bid Glass description: Bid Glass Bidder Adaptor -hide: true + biddercode: bidglass --- diff --git a/dev-docs/bidders/bidlab.md b/dev-docs/bidders/bidlab.md index 33b544f5d9..1c39e6928c 100644 --- a/dev-docs/bidders/bidlab.md +++ b/dev-docs/bidders/bidlab.md @@ -2,7 +2,7 @@ layout: bidder title: Bidlab description: Prebid Bidlab Bidder Adapter -hide: true + biddercode: bidlab gdpr_supported: true media_types: banner, video diff --git a/dev-docs/bidders/bidphysics.md b/dev-docs/bidders/bidphysics.md index 0aafc725d0..dd2f735fec 100644 --- a/dev-docs/bidders/bidphysics.md +++ b/dev-docs/bidders/bidphysics.md @@ -2,7 +2,7 @@ layout: bidder title: BidPhysics description: Prebid BidPhysics Bidder Adaptor -hide: true + biddercode: bidphysics gdpr_supported: true --- diff --git a/dev-docs/bidders/bizzclick.md b/dev-docs/bidders/bizzclick.md index ba574c90ea..77fa955777 100644 --- a/dev-docs/bidders/bizzclick.md +++ b/dev-docs/bidders/bizzclick.md @@ -2,7 +2,7 @@ layout: bidder title: BizzClick description: Prebid BizzClick Bidder Adaptor -hide: true + biddercode: bizzclick --- diff --git a/dev-docs/bidders/bluebillywig.md b/dev-docs/bidders/bluebillywig.md index e63b6d986f..1e46f0203d 100644 --- a/dev-docs/bidders/bluebillywig.md +++ b/dev-docs/bidders/bluebillywig.md @@ -3,7 +3,7 @@ layout: bidder title: Blue Billywig description: Prebid Blue Billywig Bidder Adaptor biddercode: bluebillywig -hide: true + media_types: video gdpr_supported: true schain_supported: true diff --git a/dev-docs/bidders/brainy.md b/dev-docs/bidders/brainy.md index ce82e3e974..b869c3c618 100644 --- a/dev-docs/bidders/brainy.md +++ b/dev-docs/bidders/brainy.md @@ -2,7 +2,7 @@ layout: bidder title: brainy description: Prebid brainy Bidder Adaptor -hide: true + biddercode: brainy --- diff --git a/dev-docs/bidders/bridgewell.md b/dev-docs/bidders/bridgewell.md index 5a4454d749..f685a03be6 100644 --- a/dev-docs/bidders/bridgewell.md +++ b/dev-docs/bidders/bridgewell.md @@ -2,7 +2,7 @@ layout: bidder title: Bridgewell description: Prebid Bridgewell Bidder Adaptor -hide: true + biddercode: bridgewell media_types: native --- diff --git a/dev-docs/bidders/brightcom.md b/dev-docs/bidders/brightcom.md index 933c70193a..63d3ba1124 100644 --- a/dev-docs/bidders/brightcom.md +++ b/dev-docs/bidders/brightcom.md @@ -4,7 +4,7 @@ title: Brightcom description: Prebid Brightcom Bidder Adaptor top_nav_section: dev_docs nav_section: reference -hide: true + biddercode: brightcom --- diff --git a/dev-docs/bidders/bucksense.md b/dev-docs/bidders/bucksense.md index e74a69efe1..7f54047e40 100644 --- a/dev-docs/bidders/bucksense.md +++ b/dev-docs/bidders/bucksense.md @@ -2,7 +2,7 @@ layout: bidder title: Bucksense description: Prebid Bucksense Bidder Adapter -hide: true + biddercode: bucksense --- diff --git a/dev-docs/bidders/buzzoola.md b/dev-docs/bidders/buzzoola.md index 00781bd16d..4cf594f1f3 100644 --- a/dev-docs/bidders/buzzoola.md +++ b/dev-docs/bidders/buzzoola.md @@ -2,7 +2,7 @@ layout: bidder title: Buzzoola description: Prebid Buzzoola Bidder Adaptor -hide: true + biddercode: buzzoola media_types: banner, video gdpr_supported: false diff --git a/dev-docs/bidders/byplay.md b/dev-docs/bidders/byplay.md index 101e89852c..bfd2d4c614 100644 --- a/dev-docs/bidders/byplay.md +++ b/dev-docs/bidders/byplay.md @@ -2,7 +2,7 @@ layout: bidder title: ByPlay description: Prebid ByPlay Bidder Adaptor -hide: true + biddercode: byplay media_types: video --- diff --git a/dev-docs/bidders/c1x.md b/dev-docs/bidders/c1x.md index 1de8d1ae48..16928a06e9 100644 --- a/dev-docs/bidders/c1x.md +++ b/dev-docs/bidders/c1x.md @@ -2,7 +2,7 @@ layout: bidder title: C1X description: Prebid C1X Bidder Adaptor -hide: true + biddercode: c1x gdpr_supported: true --- diff --git a/dev-docs/bidders/ccx.md b/dev-docs/bidders/ccx.md index 2cd470390d..8bc2090760 100644 --- a/dev-docs/bidders/ccx.md +++ b/dev-docs/bidders/ccx.md @@ -2,7 +2,7 @@ layout: bidder title: Clickonometrics description: Prebid Clickonometrics Bidder Adaptor -hide: true + biddercode: ccx media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/cedato.md b/dev-docs/bidders/cedato.md index acb5f7d905..6235f4e4e9 100644 --- a/dev-docs/bidders/cedato.md +++ b/dev-docs/bidders/cedato.md @@ -7,7 +7,7 @@ media_types: banner, video gdpr_supported: true usp_supported: true nav_section: reference -hide: true + biddercode: cedato --- diff --git a/dev-docs/bidders/cleanmedia.md b/dev-docs/bidders/cleanmedia.md index 6dce7f3995..92d0581b7d 100644 --- a/dev-docs/bidders/cleanmedia.md +++ b/dev-docs/bidders/cleanmedia.md @@ -3,7 +3,7 @@ layout: bidder title: Clean Media description: Prebid CleanMedia Bidder Adaptor biddercode: cleanmedia -hide: true + media_types: banner, video gdpr_supported: true schain_supported: true diff --git a/dev-docs/bidders/cleanmedianet.md b/dev-docs/bidders/cleanmedianet.md index de53c1e635..67b2077f37 100644 --- a/dev-docs/bidders/cleanmedianet.md +++ b/dev-docs/bidders/cleanmedianet.md @@ -5,7 +5,7 @@ description: Clean Media Bidder Adapter top_nav_section: dev_docs nav_section: reference biddercode: cleanmedianet -hide: true + prebid_1_0_supported: true media_types: banner, video gdpr_supported: true diff --git a/dev-docs/bidders/clickforce.md b/dev-docs/bidders/clickforce.md index 141ad629fd..c5cbe254b0 100644 --- a/dev-docs/bidders/clickforce.md +++ b/dev-docs/bidders/clickforce.md @@ -2,7 +2,7 @@ layout: bidder title: Clickforce description: Prebid Clickforce Bidder Adaptor -hide: true + biddercode: clickforce media_types: native --- diff --git a/dev-docs/bidders/clicktripz.md b/dev-docs/bidders/clicktripz.md index 819a9772e4..aea19aea46 100644 --- a/dev-docs/bidders/clicktripz.md +++ b/dev-docs/bidders/clicktripz.md @@ -2,7 +2,7 @@ layout: bidder title: Clicktripz description: Prebid Clicktripz Bidder Adaptor -hide: true + biddercode: clicktripz media_types: banner --- diff --git a/dev-docs/bidders/coinzilla.md b/dev-docs/bidders/coinzilla.md index 944d181530..2a3904d3a8 100644 --- a/dev-docs/bidders/coinzilla.md +++ b/dev-docs/bidders/coinzilla.md @@ -2,7 +2,7 @@ layout: bidder title: Coinzilla description: Prebid Coinzilla Bidder Adaptor -hide: true + biddercode: coinzilla --- diff --git a/dev-docs/bidders/collectcent.md b/dev-docs/bidders/collectcent.md index f041586601..bf2554c67d 100644 --- a/dev-docs/bidders/collectcent.md +++ b/dev-docs/bidders/collectcent.md @@ -2,7 +2,7 @@ layout: bidder title: Collectcent description: Prebid Collectcent Bidder Adaptor -hide: true + biddercode: collectcent --- diff --git a/dev-docs/bidders/colombia.md b/dev-docs/bidders/colombia.md index 9995ef166d..322156753e 100644 --- a/dev-docs/bidders/colombia.md +++ b/dev-docs/bidders/colombia.md @@ -2,7 +2,7 @@ layout: bidder title: COLOMBIA description: Prebid COLOMBIA Bidder Adaptor -hide: true + biddercode: colombia --- diff --git a/dev-docs/bidders/colossusssp.md b/dev-docs/bidders/colossusssp.md index 62ffd30fd6..65ae11d63b 100644 --- a/dev-docs/bidders/colossusssp.md +++ b/dev-docs/bidders/colossusssp.md @@ -2,7 +2,7 @@ layout: bidder title: Colossus description: Prebid Colossus Bidder Adaptor -hide: true + biddercode: colossusssp usp_supported: true schain_supported: true diff --git a/dev-docs/bidders/connectad.md b/dev-docs/bidders/connectad.md index 5eae5da426..900392e4f7 100644 --- a/dev-docs/bidders/connectad.md +++ b/dev-docs/bidders/connectad.md @@ -2,7 +2,7 @@ layout: bidder title: ConnectAd description: ConnectAd Prebid Adaptor -hide: true + biddercode: connectad media_types: banner gdpr_supported: true diff --git a/dev-docs/bidders/consumable.md b/dev-docs/bidders/consumable.md index 42f0df01a1..4a28b7935c 100644 --- a/dev-docs/bidders/consumable.md +++ b/dev-docs/bidders/consumable.md @@ -2,7 +2,7 @@ layout: bidder title: Consumable description: Prebid Consumable Bidder Adaptor -hide: true + biddercode: consumable --- diff --git a/dev-docs/bidders/contentignite.md b/dev-docs/bidders/contentignite.md index b1f0a13a36..74ed41ba64 100644 --- a/dev-docs/bidders/contentignite.md +++ b/dev-docs/bidders/contentignite.md @@ -2,7 +2,7 @@ layout: bidder title: Content Ignite description: Prebid Contnent Ignite Adaptor -hide: true + biddercode: contentignite --- diff --git a/dev-docs/bidders/converge.md b/dev-docs/bidders/converge.md index cf6a3e9b2a..8ed9dfe205 100755 --- a/dev-docs/bidders/converge.md +++ b/dev-docs/bidders/converge.md @@ -2,7 +2,7 @@ layout: bidder title: Converge description: Prebid Converge Bidder Adaptor -hide: true + biddercode: converge media_types: banner, video gdpr_supported: true diff --git a/dev-docs/bidders/conversant.md b/dev-docs/bidders/conversant.md index c78f5450df..e83452fda6 100644 --- a/dev-docs/bidders/conversant.md +++ b/dev-docs/bidders/conversant.md @@ -2,7 +2,7 @@ layout: bidder title: Conversant description: Prebid Conversant Bidder Adaptor -hide: true + biddercode: conversant media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/cosmos.md b/dev-docs/bidders/cosmos.md index 7e294297ae..17cf26b6a9 100644 --- a/dev-docs/bidders/cosmos.md +++ b/dev-docs/bidders/cosmos.md @@ -2,7 +2,7 @@ layout: bidder title: COSMOS description: Prebid COSMOS Bidder Adapter -hide: true + biddercode: cosmos --- diff --git a/dev-docs/bidders/cox.md b/dev-docs/bidders/cox.md index 4aca588076..676690264c 100644 --- a/dev-docs/bidders/cox.md +++ b/dev-docs/bidders/cox.md @@ -2,7 +2,7 @@ layout: bidder title: Cox description: Prebid Cox Bidder Adaptor -hide: true + biddercode: cox --- diff --git a/dev-docs/bidders/cpmstar.md b/dev-docs/bidders/cpmstar.md index acc165b472..bf1e24c576 100755 --- a/dev-docs/bidders/cpmstar.md +++ b/dev-docs/bidders/cpmstar.md @@ -2,7 +2,7 @@ layout: bidder title: CPMStar description: Prebid CPMStar Bidder Adaptor -hide: true + biddercode: cpmstar media_types: banner, video gdpr_supported: true diff --git a/dev-docs/bidders/criteo.md b/dev-docs/bidders/criteo.md index 5f579bd660..b94da3c684 100755 --- a/dev-docs/bidders/criteo.md +++ b/dev-docs/bidders/criteo.md @@ -2,7 +2,7 @@ layout: bidder title: Criteo description: Prebid Criteo Bidder Adaptor -hide: true + biddercode: criteo media_types: display, native, video gdpr_supported: true diff --git a/dev-docs/bidders/dailyhunt.md b/dev-docs/bidders/dailyhunt.md index ad6b6faee8..0b47ab04ce 100644 --- a/dev-docs/bidders/dailyhunt.md +++ b/dev-docs/bidders/dailyhunt.md @@ -2,7 +2,7 @@ layout: bidder title: Dailyhunt description: Prebid Dailyhunt Bidder Adaptor -hide: true + biddercode: dailyhunt media_types: display, native, video gdpr_supported: true diff --git a/dev-docs/bidders/danmarket.md b/dev-docs/bidders/danmarket.md index d4b941484c..ea3b18639a 100755 --- a/dev-docs/bidders/danmarket.md +++ b/dev-docs/bidders/danmarket.md @@ -2,7 +2,7 @@ layout: bidder title: DAN Marketplace description: Dentsu Aegis Network Marketplace Bidder Adapter -hide: true + biddercode: danmarket gdpr_supported: true --- diff --git a/dev-docs/bidders/decenterads.md b/dev-docs/bidders/decenterads.md index fb449303b4..fba6f507a7 100644 --- a/dev-docs/bidders/decenterads.md +++ b/dev-docs/bidders/decenterads.md @@ -2,7 +2,7 @@ layout: bidder title: DecenterAds description: Prebid DecenterAds Bidder Adaptor -hide: true + biddercode: decenterads media_types: banner, native, video diff --git a/dev-docs/bidders/deepintent.md b/dev-docs/bidders/deepintent.md index ad99caf1db..ee33ccd1b6 100644 --- a/dev-docs/bidders/deepintent.md +++ b/dev-docs/bidders/deepintent.md @@ -2,7 +2,7 @@ layout: bidder title: Deepintent description: Prebid Deepintent Bidder Adaptor -hide: true + biddercode: deepintent media_types: banner gdpr_supported: true diff --git a/dev-docs/bidders/defymedia.md b/dev-docs/bidders/defymedia.md index 58ad6db433..252d68e9b6 100644 --- a/dev-docs/bidders/defymedia.md +++ b/dev-docs/bidders/defymedia.md @@ -2,7 +2,7 @@ layout: bidder title: Defy Media description: Prebid Defy Media Bidder Adaptor -hide: true + biddercode: defymedia aliasCode : appnexus --- diff --git a/dev-docs/bidders/dgads.md b/dev-docs/bidders/dgads.md index 0cb8e3e16d..c7b530558c 100644 --- a/dev-docs/bidders/dgads.md +++ b/dev-docs/bidders/dgads.md @@ -2,7 +2,7 @@ layout: bidder title: dgads description: Prebid dgads Bidder Adapter -hide: true + biddercode: dgads media_types: native --- diff --git a/dev-docs/bidders/districtm.md b/dev-docs/bidders/districtm.md index e076f897d2..41bbd06840 100644 --- a/dev-docs/bidders/districtm.md +++ b/dev-docs/bidders/districtm.md @@ -4,7 +4,7 @@ title: DistrictM description: Prebid DistrictM Bidder Adaptor top_nav_section: dev_docs nav_section: reference -hide: true + biddercode: districtm aliasCode : appnexus sidebarType: 1 diff --git a/dev-docs/bidders/districtmdmx.md b/dev-docs/bidders/districtmdmx.md index 7702bba05a..b2f0741213 100644 --- a/dev-docs/bidders/districtmdmx.md +++ b/dev-docs/bidders/districtmdmx.md @@ -2,7 +2,7 @@ layout: bidder title: DistrictmDMX description: Prebid DistrictmDMX Bidder Adaptor -hide: true + biddercode: districtmDMX gdpr_supported: true schain_supported: true diff --git a/dev-docs/bidders/divreach.md b/dev-docs/bidders/divreach.md index db8bc64eb5..2918fe879f 100644 --- a/dev-docs/bidders/divreach.md +++ b/dev-docs/bidders/divreach.md @@ -2,7 +2,7 @@ layout: bidder title: DivReach description: Prebid DivReach Bidder Adaptor -hide: true + biddercode: divreach aliasCode: adbutler media_types: banner diff --git a/dev-docs/bidders/djax.md b/dev-docs/bidders/djax.md index 192fe51042..8aed7878ea 100644 --- a/dev-docs/bidders/djax.md +++ b/dev-docs/bidders/djax.md @@ -2,7 +2,7 @@ layout: bidder title: DJAX description: Prebid djax Bidder Adapter -hide: true + biddercode: djax --- diff --git a/dev-docs/bidders/dspx.md b/dev-docs/bidders/dspx.md index a90094486b..3948f5c7ad 100644 --- a/dev-docs/bidders/dspx.md +++ b/dev-docs/bidders/dspx.md @@ -2,7 +2,7 @@ layout: bidder title: DSPx description: Prebid DSPx Bidder Adapter -hide: true + biddercode: dspx media_types: banner, video gdpr_supported: true diff --git a/dev-docs/bidders/ebdr.md b/dev-docs/bidders/ebdr.md index 689c5b6bc2..dd16aba9b4 100644 --- a/dev-docs/bidders/ebdr.md +++ b/dev-docs/bidders/ebdr.md @@ -3,7 +3,7 @@ layout: bidder title: EngageBDR description: Prebid EngageBDR Bidder Adaptor biddercode: ebdr -hide: true + media_types: video --- diff --git a/dev-docs/bidders/edgequeryx.md b/dev-docs/bidders/edgequeryx.md index 483f04dfae..ede67e4f35 100644 --- a/dev-docs/bidders/edgequeryx.md +++ b/dev-docs/bidders/edgequeryx.md @@ -2,7 +2,7 @@ layout: bidder title: Edge Query X description: Prebid for Edge Query X Adaptor -hide: true + biddercode: edgequeryx media_types: display gdpr_supported: true diff --git a/dev-docs/bidders/emoteev.md b/dev-docs/bidders/emoteev.md index 42e68fabd3..e14fb4754d 100644 --- a/dev-docs/bidders/emoteev.md +++ b/dev-docs/bidders/emoteev.md @@ -2,7 +2,7 @@ layout: bidder title: Emoteev description: Prebid Emoteev Bidder Adaptor -hide: true + biddercode: emoteev gdpr_supported: true userIds: pubCommonId diff --git a/dev-docs/bidders/emx_digital.md b/dev-docs/bidders/emx_digital.md index 95250eb0e5..6c31d9a647 100644 --- a/dev-docs/bidders/emx_digital.md +++ b/dev-docs/bidders/emx_digital.md @@ -2,7 +2,7 @@ layout: bidder title: EMX Digital description: Prebid EMX Digital Bidder Adaptor -hide: true + biddercode: emx_digital bidder_supports_deals: false media_types: banner, video diff --git a/dev-docs/bidders/envivo.md b/dev-docs/bidders/envivo.md index 8f194b15cf..33785e7fa9 100644 --- a/dev-docs/bidders/envivo.md +++ b/dev-docs/bidders/envivo.md @@ -2,7 +2,7 @@ layout: bidder title: envivo description: Prebid envivo Bidder Adapter -hide: true + biddercode: envivo --- diff --git a/dev-docs/bidders/eplanning.md b/dev-docs/bidders/eplanning.md index cfceba5bb9..4616fbb990 100644 --- a/dev-docs/bidders/eplanning.md +++ b/dev-docs/bidders/eplanning.md @@ -2,7 +2,7 @@ layout: bidder title: E-Planning description: Prebid E-Planning Bidder Adapter -hide: true + biddercode: eplanning usp_supported: true gdpr_supported: true diff --git a/dev-docs/bidders/etarget.md b/dev-docs/bidders/etarget.md index 927e68f4f4..e555ec2e2a 100644 --- a/dev-docs/bidders/etarget.md +++ b/dev-docs/bidders/etarget.md @@ -2,7 +2,7 @@ layout: bidder title: Etarget description: Prebid Etarget Bidder Adaptor -hide: true + biddercode: etarget media_types: banner, video gdpr_supported: true diff --git a/dev-docs/bidders/evolution_tech.md b/dev-docs/bidders/evolution_tech.md index 3d1c2fab2d..1b9eaa7270 100644 --- a/dev-docs/bidders/evolution_tech.md +++ b/dev-docs/bidders/evolution_tech.md @@ -2,7 +2,7 @@ layout: bidder title: E-volution tech description: Prebid E-volution tech Bidder Adapter -hide: true + biddercode: e_volution gdpr_supported: true media_types: banner, video diff --git a/dev-docs/bidders/eywamedia.md b/dev-docs/bidders/eywamedia.md index 0efa48cfc2..f8085fd8e4 100644 --- a/dev-docs/bidders/eywamedia.md +++ b/dev-docs/bidders/eywamedia.md @@ -2,7 +2,7 @@ layout: bidder title: Eywamedia description: Prebid Eywamedia Bidder Adaptor -hide: true + biddercode: eywamedia media_types: display gdpr_supported: false diff --git a/dev-docs/bidders/fairtrade.md b/dev-docs/bidders/fairtrade.md index 179167a0a2..dc52b938f0 100755 --- a/dev-docs/bidders/fairtrade.md +++ b/dev-docs/bidders/fairtrade.md @@ -2,7 +2,7 @@ layout: bidder title: FairTrade description: FairTrade Bidder Adapter -hide: true + biddercode: fairtrade --- diff --git a/dev-docs/bidders/featureforward.md b/dev-docs/bidders/featureforward.md index 65603fc006..6e840996aa 100644 --- a/dev-docs/bidders/featureforward.md +++ b/dev-docs/bidders/featureforward.md @@ -4,7 +4,7 @@ title: Feature Forward description: Prebid Feature Forward Bidder Adapter top_nav_section: dev_docs nav_section: reference -hide: true + biddercode: featureforward --- diff --git a/dev-docs/bidders/feedad.md b/dev-docs/bidders/feedad.md index 9d252eedc1..2bc18bd8e9 100644 --- a/dev-docs/bidders/feedad.md +++ b/dev-docs/bidders/feedad.md @@ -2,7 +2,7 @@ layout: bidder title: FeedAd description: Prebid FeedAd Bidder Adaptor -hide: true + biddercode: feedad media_types: banner, video --- diff --git a/dev-docs/bidders/fidelity.md b/dev-docs/bidders/fidelity.md index acf4cd7840..beaf335bda 100644 --- a/dev-docs/bidders/fidelity.md +++ b/dev-docs/bidders/fidelity.md @@ -2,7 +2,7 @@ layout: bidder title: Fidelity Media description: Prebid Fidelity Media Bidder Adapter -hide: true + schain_supported: true biddercode: fidelity media_types: banner diff --git a/dev-docs/bidders/freewheel.md b/dev-docs/bidders/freewheel.md index 9d78011ce6..f1d38e1907 100644 --- a/dev-docs/bidders/freewheel.md +++ b/dev-docs/bidders/freewheel.md @@ -2,7 +2,7 @@ layout: bidder title: FreeWheel-ssp description: Freewheel Bidder Adaptor -hide: true + biddercode: freewheel-ssp gdpr_supported: true usp_supported: true diff --git a/dev-docs/bidders/fyber.md b/dev-docs/bidders/fyber.md index acb7d9f991..4fbf240804 100644 --- a/dev-docs/bidders/fyber.md +++ b/dev-docs/bidders/fyber.md @@ -2,7 +2,7 @@ layout: bidder title: Fyber description: Prebid Fyber Bidder Adaptor -hide: true + biddercode: fyber media_types: banner --- diff --git a/dev-docs/bidders/gambid.md b/dev-docs/bidders/gambid.md index 3b41b81ffd..a391265dd3 100644 --- a/dev-docs/bidders/gambid.md +++ b/dev-docs/bidders/gambid.md @@ -6,7 +6,7 @@ description: Prebid Gambid Bidder Adaptor top_nav_section: dev_docs nav_section: reference -hide: true + media_types: banner, video biddercode: gambid aliasCode: gamoshi diff --git a/dev-docs/bidders/gamma.md b/dev-docs/bidders/gamma.md index 63f324e5fb..f63d42c446 100644 --- a/dev-docs/bidders/gamma.md +++ b/dev-docs/bidders/gamma.md @@ -2,7 +2,7 @@ layout: bidder title: Gamma description: Prebid Gamma Bidder Adaptor -hide: true + biddercode: gamma media_types: video --- diff --git a/dev-docs/bidders/gamoshi.md b/dev-docs/bidders/gamoshi.md index d1e8736181..b95a73566d 100644 --- a/dev-docs/bidders/gamoshi.md +++ b/dev-docs/bidders/gamoshi.md @@ -3,7 +3,7 @@ layout: bidder title: Gamoshi description: Prebid Gamoshi Bidder Adaptor biddercode: gamoshi -hide: true + media_types: banner, video gdpr_supported: true schain_supported: true diff --git a/dev-docs/bidders/getintent.md b/dev-docs/bidders/getintent.md index f534af5df3..9a344e2152 100644 --- a/dev-docs/bidders/getintent.md +++ b/dev-docs/bidders/getintent.md @@ -2,7 +2,7 @@ layout: bidder title: GetIntent description: Prebid GetIntent Bidder Adaptor -hide: true + biddercode: getintent media_types: video --- diff --git a/dev-docs/bidders/giants.md b/dev-docs/bidders/giants.md index f6b0c5e4f8..e72f7fcf44 100644 --- a/dev-docs/bidders/giants.md +++ b/dev-docs/bidders/giants.md @@ -2,7 +2,7 @@ layout: bidder title: IPAX description: Prebid IPAX Bidder Adaptor -hide: true + biddercode: giants media_types: video --- diff --git a/dev-docs/bidders/gjirafa.md b/dev-docs/bidders/gjirafa.md index fc133034dc..85dba98f25 100644 --- a/dev-docs/bidders/gjirafa.md +++ b/dev-docs/bidders/gjirafa.md @@ -3,7 +3,7 @@ layout: bidder title: Gjirafa description: Prebid Gjirafa Bidder Adaptor -hide: true + biddercode: gjirafa gdpr_supported: true --- diff --git a/dev-docs/bidders/glimpseProtocol.md b/dev-docs/bidders/glimpseProtocol.md index 5b22e1098b..2c2e36aad0 100644 --- a/dev-docs/bidders/glimpseProtocol.md +++ b/dev-docs/bidders/glimpseProtocol.md @@ -3,7 +3,7 @@ layout: bidder title: Glimpse Protocol description: Glimpse Protocol Bidder Adapter biddercode: glimpse -hide: true + gdpr_supported: true tcf2_supported: true media_types: banner diff --git a/dev-docs/bidders/gmossp.md b/dev-docs/bidders/gmossp.md index 7b7de61fd2..bc840f569b 100644 --- a/dev-docs/bidders/gmossp.md +++ b/dev-docs/bidders/gmossp.md @@ -2,7 +2,7 @@ layout: bidder title: GMOSSP description: Prebid GMOSSP Bidder Adaptor -hide: true + biddercode: gmossp media_types: banner --- diff --git a/dev-docs/bidders/go2net.md b/dev-docs/bidders/go2net.md index 11e9d76453..6c01e5c78e 100644 --- a/dev-docs/bidders/go2net.md +++ b/dev-docs/bidders/go2net.md @@ -2,7 +2,7 @@ layout: bidder title: Go2Net description: Prebid Go2Net Bidder Adaptor -hide: true + biddercode: go2net aliasCode: admixer media_types: video diff --git a/dev-docs/bidders/gourmetads.md b/dev-docs/bidders/gourmetads.md index a7ab3f7e11..7684a39524 100644 --- a/dev-docs/bidders/gourmetads.md +++ b/dev-docs/bidders/gourmetads.md @@ -2,7 +2,7 @@ layout: bidder title: Gourmet Ads description: Prebid Gourmet Ads Bidder Adaptor -hide: true + biddercode: gourmetads aliasCode : appnexus --- diff --git a/dev-docs/bidders/grid.md b/dev-docs/bidders/grid.md index e7feb8725d..5be686598b 100755 --- a/dev-docs/bidders/grid.md +++ b/dev-docs/bidders/grid.md @@ -2,7 +2,7 @@ layout: bidder title: TheMediaGrid description: Prebid TheMediaGrid Bidder Adaptor -hide: true + biddercode: grid media_types: banner, video gdpr_supported: true diff --git a/dev-docs/bidders/gridNM.md b/dev-docs/bidders/gridNM.md index 8d0d63c955..0ed89bf541 100755 --- a/dev-docs/bidders/gridNM.md +++ b/dev-docs/bidders/gridNM.md @@ -2,7 +2,7 @@ layout: bidder title: TheMediaGridNM description: Prebid TheMediaGridNM Bidder Adapter -hide: true + biddercode: gridNM media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/gumgum.md b/dev-docs/bidders/gumgum.md index c129461d0c..53850d2ea5 100644 --- a/dev-docs/bidders/gumgum.md +++ b/dev-docs/bidders/gumgum.md @@ -2,7 +2,7 @@ layout: bidder title: GumGum description: Prebid GumGum Bidder Adaptor -hide: true + biddercode: gumgum media_types: banner, video schain_supported: true diff --git a/dev-docs/bidders/gxone.md b/dev-docs/bidders/gxone.md index c455bb9cce..ebf51445c4 100755 --- a/dev-docs/bidders/gxone.md +++ b/dev-docs/bidders/gxone.md @@ -2,7 +2,7 @@ layout: bidder title: GXOne description: GXOne Bidder Adapter -hide: true + biddercode: gxone --- diff --git a/dev-docs/bidders/h12media.md b/dev-docs/bidders/h12media.md index 63c3649467..54a8c23fc9 100644 --- a/dev-docs/bidders/h12media.md +++ b/dev-docs/bidders/h12media.md @@ -2,7 +2,7 @@ layout: bidder title: H12 Media description: Prebid H12 Media Bidder Adaptor -hide: true + biddercode: h12media media_types: banner gdpr_supported: true diff --git a/dev-docs/bidders/headbidding.md b/dev-docs/bidders/headbidding.md index 4b80e532cd..c6070d7be9 100644 --- a/dev-docs/bidders/headbidding.md +++ b/dev-docs/bidders/headbidding.md @@ -6,7 +6,7 @@ description: Prebid Head Bidding Bidder Adaptor top_nav_section: dev_docs nav_section: reference -hide: true + biddercode: headbidding diff --git a/dev-docs/bidders/hpmdnetwork.md b/dev-docs/bidders/hpmdnetwork.md index 6be6789f83..df6c521f9c 100644 --- a/dev-docs/bidders/hpmdnetwork.md +++ b/dev-docs/bidders/hpmdnetwork.md @@ -2,7 +2,7 @@ layout: bidder title: HPMD Network description: Prebid HPMD Network Bidder Adaptor -hide: true + biddercode: hpmdnetwork media_types: banner --- diff --git a/dev-docs/bidders/huddledmasses.md b/dev-docs/bidders/huddledmasses.md index 50d9b3b137..d9172bd35a 100644 --- a/dev-docs/bidders/huddledmasses.md +++ b/dev-docs/bidders/huddledmasses.md @@ -2,7 +2,7 @@ layout: bidder title: Huddled Masses description: Prebid Huddled Masses Bidder Adaptor -hide: true + biddercode: huddledmasses --- diff --git a/dev-docs/bidders/hybrid.md b/dev-docs/bidders/hybrid.md index bed1b8892a..100be084d4 100644 --- a/dev-docs/bidders/hybrid.md +++ b/dev-docs/bidders/hybrid.md @@ -2,7 +2,7 @@ layout: bidder title: Hybrid.ai description: Prebid Hybrid.ai Bidder Adapter -hide: true + media_types: banner, video biddercode: hybrid gdpr_supported: true diff --git a/dev-docs/bidders/ias.md b/dev-docs/bidders/ias.md index 6babbc3f38..4d6573dde0 100644 --- a/dev-docs/bidders/ias.md +++ b/dev-docs/bidders/ias.md @@ -2,7 +2,7 @@ layout: bidder title: Integral Ad Science (IAS) description: Prebid Integral Ad Science Bidder Adaptor -hide: true + biddercode: ias --- diff --git a/dev-docs/bidders/imonomy.md b/dev-docs/bidders/imonomy.md index 44af214ab6..4cbf58159d 100644 --- a/dev-docs/bidders/imonomy.md +++ b/dev-docs/bidders/imonomy.md @@ -2,7 +2,7 @@ layout: bidder title: Imonomy description: Prebid Imonomy Bidder Adaptor -hide: true + biddercode: imonomy --- diff --git a/dev-docs/bidders/improvedigital.md b/dev-docs/bidders/improvedigital.md index bfc6cf9331..e4bccd2a5d 100644 --- a/dev-docs/bidders/improvedigital.md +++ b/dev-docs/bidders/improvedigital.md @@ -3,7 +3,7 @@ layout: bidder title: Improve Digital description: Prebid Improve Digital Bidder Adaptor biddercode: improvedigital -hide: true + gdpr_supported: true usp_supported: true media_types: banner, native, video diff --git a/dev-docs/bidders/indexExchange.md b/dev-docs/bidders/indexExchange.md index 64aad5e038..b1aab9d551 100644 --- a/dev-docs/bidders/indexExchange.md +++ b/dev-docs/bidders/indexExchange.md @@ -3,7 +3,7 @@ layout: bidder title: Index Exchange description: Prebid Index Exchange Bidder Adapter biddercode: ix -hide: true + schain_supported: true gdpr_supported: true usp_supported: true diff --git a/dev-docs/bidders/innity.md b/dev-docs/bidders/innity.md index 1f777e912c..38cfa115ca 100644 --- a/dev-docs/bidders/innity.md +++ b/dev-docs/bidders/innity.md @@ -2,7 +2,7 @@ layout: bidder title: Innity description: Prebid Innity Bidder Adapter -hide: true + biddercode: innity --- diff --git a/dev-docs/bidders/inskin.md b/dev-docs/bidders/inskin.md index 4d1ef21b59..22e3985835 100644 --- a/dev-docs/bidders/inskin.md +++ b/dev-docs/bidders/inskin.md @@ -2,7 +2,7 @@ layout: bidder title: Inskin description: Inskin Media Bidder Adaptor -hide: true + biddercode: inskin gdpr_supported: true --- diff --git a/dev-docs/bidders/interactiveOffers.md b/dev-docs/bidders/interactiveOffers.md index c6a68ba323..831968dd2a 100644 --- a/dev-docs/bidders/interactiveOffers.md +++ b/dev-docs/bidders/interactiveOffers.md @@ -2,7 +2,7 @@ layout: bidder title: InteractiveOffers description: Prebid InteractiveOffers.com Bidder Adaptor -hide: true + biddercode: interactiveOffers gdpr_supported: false media_types: banner diff --git a/dev-docs/bidders/invibes.md b/dev-docs/bidders/invibes.md index 1d147ce431..92df6254a5 100644 --- a/dev-docs/bidders/invibes.md +++ b/dev-docs/bidders/invibes.md @@ -2,7 +2,7 @@ layout: bidder title: Invibes description: Prebid Invibes Bidder Adaptor -hide: true + biddercode: invibes gdpr_supported: true --- diff --git a/dev-docs/bidders/iqm.md b/dev-docs/bidders/iqm.md index deac5a675d..50202eea1c 100644 --- a/dev-docs/bidders/iqm.md +++ b/dev-docs/bidders/iqm.md @@ -2,7 +2,7 @@ layout: bidder title: iQM description: Prebid iQM Bidder Adaptor -hide: true + biddercode: iqm --- diff --git a/dev-docs/bidders/jcartermarketing.md b/dev-docs/bidders/jcartermarketing.md index ed08152977..d547f04412 100644 --- a/dev-docs/bidders/jcartermarketing.md +++ b/dev-docs/bidders/jcartermarketing.md @@ -2,7 +2,7 @@ layout: bidder title: J Carter Marketing description: Prebid J Carter Marketing Bidder Adaptor -hide: true + biddercode: jcm --- diff --git a/dev-docs/bidders/justpremium.md b/dev-docs/bidders/justpremium.md index e97901d5ab..ac4c298028 100644 --- a/dev-docs/bidders/justpremium.md +++ b/dev-docs/bidders/justpremium.md @@ -2,7 +2,7 @@ layout: bidder title: Justpremium description: Prebid Justpremium Bidder Adaptor -hide: true + biddercode: justpremium gdpr_supported: true usp_supported: true diff --git a/dev-docs/bidders/kargo.md b/dev-docs/bidders/kargo.md index b785fc6ed9..d9e22d6bec 100644 --- a/dev-docs/bidders/kargo.md +++ b/dev-docs/bidders/kargo.md @@ -2,7 +2,7 @@ layout: bidder title: Kargo description: Prebid Kargo Bidder Adaptor -hide: true + biddercode: kargo userIds: unifiedId usp_supported: true diff --git a/dev-docs/bidders/komoona.md b/dev-docs/bidders/komoona.md index fb32efab36..0d3f6b98d9 100644 --- a/dev-docs/bidders/komoona.md +++ b/dev-docs/bidders/komoona.md @@ -2,7 +2,7 @@ layout: bidder title: Komoona description: Prebid Komoona Bidder Adaptor -hide: true + biddercode: komoona --- diff --git a/dev-docs/bidders/kubient.md b/dev-docs/bidders/kubient.md index f1baf70462..41ae26c5e9 100644 --- a/dev-docs/bidders/kubient.md +++ b/dev-docs/bidders/kubient.md @@ -2,7 +2,7 @@ layout: bidder title: Kubient description: Prebid Kubient Bidder Adapter -hide: true + schain_supported: true biddercode: kubient aliasCode: fidelity diff --git a/dev-docs/bidders/kumma.md b/dev-docs/bidders/kumma.md index 961c09efe1..ed1b92de94 100644 --- a/dev-docs/bidders/kumma.md +++ b/dev-docs/bidders/kumma.md @@ -2,7 +2,7 @@ layout: bidder title: Kumma description: Prebid Kumma Bidder Adapter -hide: true + biddercode: kumma media_types: banner, native, video gdpr_supported: true diff --git a/dev-docs/bidders/lemma.md b/dev-docs/bidders/lemma.md index e025f5bd94..72eae2181f 100644 --- a/dev-docs/bidders/lemma.md +++ b/dev-docs/bidders/lemma.md @@ -2,7 +2,7 @@ layout: bidder title: LEMMA description: Prebid Lemma Bidder Adapter -hide: true + biddercode: lemma --- diff --git a/dev-docs/bidders/lifestreet.md b/dev-docs/bidders/lifestreet.md index be0b6eb7ee..ea664ba29f 100644 --- a/dev-docs/bidders/lifestreet.md +++ b/dev-docs/bidders/lifestreet.md @@ -2,7 +2,7 @@ layout: bidder title: Lifestreet description: Prebid Lifestreet Bidder Adaptor -hide: true + biddercode: lifestreet media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/livewrapped.md b/dev-docs/bidders/livewrapped.md index 88d18df1d1..25cdcfa9b7 100644 --- a/dev-docs/bidders/livewrapped.md +++ b/dev-docs/bidders/livewrapped.md @@ -3,7 +3,7 @@ layout: bidder title: Livewrapped description: Prebid Livewrapped Bidder Adaptor biddercode: livewrapped -hide: true + media_types: banner gdpr_supported: true userIds: id5Id, pubCommonId diff --git a/dev-docs/bidders/lkqd.md b/dev-docs/bidders/lkqd.md index 24414a1b87..3850a3c0eb 100644 --- a/dev-docs/bidders/lkqd.md +++ b/dev-docs/bidders/lkqd.md @@ -2,7 +2,7 @@ layout: bidder title: LKQD description: Prebid LKQD Bidder Adaptor -hide: true + biddercode: lkqd --- diff --git a/dev-docs/bidders/lockerdome.md b/dev-docs/bidders/lockerdome.md index 6d3b73b40f..cb5b2a4df7 100644 --- a/dev-docs/bidders/lockerdome.md +++ b/dev-docs/bidders/lockerdome.md @@ -3,7 +3,7 @@ layout: bidder title: LockerDome description: Prebid LockerDome Bidder Adapter biddercode: lockerdome -hide: true + gdpr_supported: true usp_supported: true schain_supported: true diff --git a/dev-docs/bidders/logicad.md b/dev-docs/bidders/logicad.md index ed7e55b303..0ebc311f7a 100644 --- a/dev-docs/bidders/logicad.md +++ b/dev-docs/bidders/logicad.md @@ -2,7 +2,7 @@ layout: bidder title: Logicad for Publishers description: Prebid Logicad for Publishers Bidder Adaptor -hide: true + biddercode: logicad bidder_supports_deals: false media_types: banner diff --git a/dev-docs/bidders/loopme.md b/dev-docs/bidders/loopme.md index 025e44da0b..48d655c76f 100644 --- a/dev-docs/bidders/loopme.md +++ b/dev-docs/bidders/loopme.md @@ -2,7 +2,7 @@ layout: bidder title: LoopMe description: Prebid LoopMe Bidder Adaptor -hide: true + biddercode: loopme gdpr_supported: true media_types: banner, video diff --git a/dev-docs/bidders/lunamedia.md b/dev-docs/bidders/lunamedia.md index 501f5d83cd..6b41ee0b92 100644 --- a/dev-docs/bidders/lunamedia.md +++ b/dev-docs/bidders/lunamedia.md @@ -2,7 +2,7 @@ layout: bidder title: Luna Media description: Prebid Luna Media Bidder Adapter -hide: true + biddercode: lunamedia --- diff --git a/dev-docs/bidders/luponmedia.md b/dev-docs/bidders/luponmedia.md index 6ba2003d1e..a3b8f78b97 100644 --- a/dev-docs/bidders/luponmedia.md +++ b/dev-docs/bidders/luponmedia.md @@ -2,7 +2,7 @@ layout: bidder title: LuponMedia description: LuponMedia Bidder Adapter -hide: true + biddercode: luponmedia gdpr_supported: true usp_supported: true diff --git a/dev-docs/bidders/madvertise.md b/dev-docs/bidders/madvertise.md index 6efc36d3b6..79f3a103c6 100644 --- a/dev-docs/bidders/madvertise.md +++ b/dev-docs/bidders/madvertise.md @@ -2,7 +2,7 @@ layout: bidder title: Madvertise description: Prebid Madvertise Bidder Adaptor -hide: true + biddercode: madvertise gdpr_supported: true --- diff --git a/dev-docs/bidders/mantis.md b/dev-docs/bidders/mantis.md index 671e51bf34..64c7c74824 100644 --- a/dev-docs/bidders/mantis.md +++ b/dev-docs/bidders/mantis.md @@ -2,7 +2,7 @@ layout: bidder title: MANTIS Ad Network description: Prebid Mantis Bidder Adaptor -hide: true + biddercode: mantis media_types: native, video diff --git a/dev-docs/bidders/marsmedia.md b/dev-docs/bidders/marsmedia.md index 53b3826492..9ae86bee5e 100644 --- a/dev-docs/bidders/marsmedia.md +++ b/dev-docs/bidders/marsmedia.md @@ -2,7 +2,7 @@ layout: bidder title: Marsmedia description: Prebid Mars Media Group Bidder Adaptor -hide: true + biddercode: marsmedia media_types: video, banner gdpr_supported: true diff --git a/dev-docs/bidders/matomy.md b/dev-docs/bidders/matomy.md index 124ca5ea62..0f2ddf14e4 100644 --- a/dev-docs/bidders/matomy.md +++ b/dev-docs/bidders/matomy.md @@ -2,7 +2,7 @@ layout: bidder title: Matomy description: Prebid Matomy Bidder Adaptor -hide: true + biddercode: matomy aliasCode : appnexus --- diff --git a/dev-docs/bidders/meazy.md b/dev-docs/bidders/meazy.md index dffe327c9f..c833668873 100644 --- a/dev-docs/bidders/meazy.md +++ b/dev-docs/bidders/meazy.md @@ -2,7 +2,7 @@ layout: bidder title: Meazy description: Prebid Meazy Bidder Adaptor -hide: true + biddercode: meazy --- diff --git a/dev-docs/bidders/mediaforce.md b/dev-docs/bidders/mediaforce.md index fa4b21a051..c7c5cd4b38 100644 --- a/dev-docs/bidders/mediaforce.md +++ b/dev-docs/bidders/mediaforce.md @@ -4,7 +4,7 @@ title: MediaForce description: MediaForce Prebid Bidder Adapter media_types: banner biddercode: mediaforce -hide: true + gdpr_supported: false --- diff --git a/dev-docs/bidders/mediafuseLift.md b/dev-docs/bidders/mediafuseLift.md index a999f5e993..e84af2cf23 100644 --- a/dev-docs/bidders/mediafuseLift.md +++ b/dev-docs/bidders/mediafuseLift.md @@ -4,7 +4,7 @@ title: MediaFuse Lift description: Prebid MediaFuse Lift Bidder Adaptor top_nav_section: dev_docs nav_section: reference -hide: true + biddercode: mediafuseLift aliasCode : orbitsoft --- diff --git a/dev-docs/bidders/medianet.md b/dev-docs/bidders/medianet.md index b77838acb7..a18671a48a 100644 --- a/dev-docs/bidders/medianet.md +++ b/dev-docs/bidders/medianet.md @@ -3,7 +3,7 @@ layout: bidder title: Media.net description: Prebid Media.net Bidder Adaptor biddercode: medianet -hide: true + gdpr_supported: true media_types: banner,native usp_supported: true diff --git a/dev-docs/bidders/mediasquare.md b/dev-docs/bidders/mediasquare.md index 55fe005c3c..b8842ab28d 100644 --- a/dev-docs/bidders/mediasquare.md +++ b/dev-docs/bidders/mediasquare.md @@ -2,7 +2,7 @@ layout: bidder title: MediaSquare description: Prebid MediaSquare Bidder Adapter -hide: true + biddercode: mediasquare gdpr_supported: true tcf2_supported: true diff --git a/dev-docs/bidders/mgid.md b/dev-docs/bidders/mgid.md index 7d0438dfca..9afdbd19ff 100644 --- a/dev-docs/bidders/mgid.md +++ b/dev-docs/bidders/mgid.md @@ -2,7 +2,7 @@ layout: bidder title: Mgid description: Prebid Mgid Bidder Adapter. -hide: true + biddercode: mgid media_types: banner,native gdpr_supported: true diff --git a/dev-docs/bidders/microad.md b/dev-docs/bidders/microad.md index 999e3414bd..96791e45e8 100644 --- a/dev-docs/bidders/microad.md +++ b/dev-docs/bidders/microad.md @@ -2,7 +2,7 @@ layout: bidder title: MicroAd description: Prebid MicroAd SSP Bidder Adaptor -hide: true + biddercode: microad media_types: banner --- diff --git a/dev-docs/bidders/mobfox.md b/dev-docs/bidders/mobfox.md index 1c99c3181a..c4e336c7e7 100644 --- a/dev-docs/bidders/mobfox.md +++ b/dev-docs/bidders/mobfox.md @@ -2,7 +2,7 @@ layout: bidder title: MobFox description: Prebid MobFox Bidder Adaptor -hide: true + biddercode: mobfox media_types: video --- diff --git a/dev-docs/bidders/mobsmart.md b/dev-docs/bidders/mobsmart.md index fc12ffd1f9..c6246955aa 100644 --- a/dev-docs/bidders/mobsmart.md +++ b/dev-docs/bidders/mobsmart.md @@ -2,7 +2,7 @@ layout: bidder title: Mobsmart description: Prebid Mobsmart SSP Bidder Adaptor -hide: true + biddercode: mobsmart media_types: banner userIds: pubCommonId diff --git a/dev-docs/bidders/my6sense.md b/dev-docs/bidders/my6sense.md index 58cd002887..dc9cad2ef6 100644 --- a/dev-docs/bidders/my6sense.md +++ b/dev-docs/bidders/my6sense.md @@ -4,7 +4,7 @@ title: My6Sense description: My6Sense Prebid Bidder Adapter media_type: native biddercode: my6sense -hide: true + gdpr_supported: true --- diff --git a/dev-docs/bidders/mytarget.md b/dev-docs/bidders/mytarget.md index cfd8d7dbcf..a4aa86e588 100644 --- a/dev-docs/bidders/mytarget.md +++ b/dev-docs/bidders/mytarget.md @@ -2,7 +2,7 @@ layout: bidder title: myTarget description: Prebid myTarget Bidder Adapter -hide: true + biddercode: mytarget --- diff --git a/dev-docs/bidders/nafdigital.md b/dev-docs/bidders/nafdigital.md index c7a9987c61..87e972b447 100644 --- a/dev-docs/bidders/nafdigital.md +++ b/dev-docs/bidders/nafdigital.md @@ -4,7 +4,7 @@ title: NAF Digital description: Prebid NAF Digital Bidder Adaptor top_nav_section: dev_docs nav_section: reference -hide: true + biddercode: nafdigital --- diff --git a/dev-docs/bidders/nanointeractive.md b/dev-docs/bidders/nanointeractive.md index e3d6320a20..ce8ebdd752 100644 --- a/dev-docs/bidders/nanointeractive.md +++ b/dev-docs/bidders/nanointeractive.md @@ -2,7 +2,7 @@ layout: bidder title: Nano Interactive description: Prebid Nano Interactive Bidder Adapter -hide: true + biddercode: nanointeractive media_types: banner gdpr_supported: true diff --git a/dev-docs/bidders/nasmediaAdmixer.md b/dev-docs/bidders/nasmediaAdmixer.md index 6867c5148e..da980db658 100644 --- a/dev-docs/bidders/nasmediaAdmixer.md +++ b/dev-docs/bidders/nasmediaAdmixer.md @@ -2,7 +2,7 @@ layout: bidder title: Nasmedia Admixer description: Prebid Nasmedia Admixer Bidder Adapter -hide: true + biddercode: nasmediaAdmixer --- diff --git a/dev-docs/bidders/newborntownWeb.md b/dev-docs/bidders/newborntownWeb.md index e8a747c8f0..a361031afa 100644 --- a/dev-docs/bidders/newborntownWeb.md +++ b/dev-docs/bidders/newborntownWeb.md @@ -2,7 +2,7 @@ layout: bidder title: newborntownWeb description: Prebid newborntownWeb Bidder Adaptor -hide: true + biddercode: newborntownWeb --- diff --git a/dev-docs/bidders/nextMillennium.md b/dev-docs/bidders/nextMillennium.md index a694a8f74e..4bb92745bd 100644 --- a/dev-docs/bidders/nextMillennium.md +++ b/dev-docs/bidders/nextMillennium.md @@ -2,7 +2,7 @@ layout: bidder title: NextMillennium description: NextMillennium bid adapter -hide: true + biddercode: nextMillennium --- diff --git a/dev-docs/bidders/nextroll.md b/dev-docs/bidders/nextroll.md index b985ae1d77..623dcbe6cb 100644 --- a/dev-docs/bidders/nextroll.md +++ b/dev-docs/bidders/nextroll.md @@ -2,7 +2,7 @@ layout: bidder title: NextRoll description: Prebid NextRoll Bidder Adapter -hide: true + biddercode: nextroll media_types: display, native gdpr_supported: false diff --git a/dev-docs/bidders/nobidBidAdapter.md b/dev-docs/bidders/nobidBidAdapter.md index 0003c737e7..0bfe3f4fd9 100644 --- a/dev-docs/bidders/nobidBidAdapter.md +++ b/dev-docs/bidders/nobidBidAdapter.md @@ -3,7 +3,7 @@ layout: bidder title: Nobid description: Prebid Nobid Bidder Adaptor biddercode: nobid -hide: true + media_types: banner, video gdpr_supported: true usp_supported: true diff --git a/dev-docs/bidders/oftmedia.md b/dev-docs/bidders/oftmedia.md index 2f25972b9c..9931a2a6b7 100644 --- a/dev-docs/bidders/oftmedia.md +++ b/dev-docs/bidders/oftmedia.md @@ -2,7 +2,7 @@ layout: bidder title: One Fifty Two Media description: Prebid One Fifty Two Media Bidder Adaptor -hide: true + biddercode: oftmedia aliasCode : appnexus gdpr_supported: true diff --git a/dev-docs/bidders/oftmediahb.md b/dev-docs/bidders/oftmediahb.md index 89c3088b74..f60c8f6d4d 100644 --- a/dev-docs/bidders/oftmediahb.md +++ b/dev-docs/bidders/oftmediahb.md @@ -2,7 +2,7 @@ layout: bidder title: 152MediaHB description: Prebid 152MediaHB Bidder Adaptor -hide: true + media_types: video gdpr_supported: true biddercode: oftmediahb diff --git a/dev-docs/bidders/oneVideo.md b/dev-docs/bidders/oneVideo.md index bca090e9c7..a902f69240 100644 --- a/dev-docs/bidders/oneVideo.md +++ b/dev-docs/bidders/oneVideo.md @@ -2,7 +2,7 @@ layout: bidder title: OneVideo description: Prebid One Video Bidder Adaptor -hide: true + biddercode: oneVideo media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/onedisplay.md b/dev-docs/bidders/onedisplay.md index 52478bfded..e700373599 100644 --- a/dev-docs/bidders/onedisplay.md +++ b/dev-docs/bidders/onedisplay.md @@ -2,7 +2,7 @@ layout: bidder title: ONE by AOL Display description: Prebid AOL Bidder Adaptor -hide: true + biddercode: onedisplay aliasCode : aol --- diff --git a/dev-docs/bidders/onefiftytwomedia.md b/dev-docs/bidders/onefiftytwomedia.md index 28fc60f2eb..7f3d86e3f0 100644 --- a/dev-docs/bidders/onefiftytwomedia.md +++ b/dev-docs/bidders/onefiftytwomedia.md @@ -2,7 +2,7 @@ layout: bidder title: 152 Media 3.0 description: Prebid 152 Media RTB Bidder Adapter -hide: true + biddercode: onefiftytwomedia aliasCode: adtelligent media_types: banner, video diff --git a/dev-docs/bidders/onemobile.md b/dev-docs/bidders/onemobile.md index 5cacd50f5d..e51a8944c0 100644 --- a/dev-docs/bidders/onemobile.md +++ b/dev-docs/bidders/onemobile.md @@ -2,7 +2,7 @@ layout: bidder title: ONE by AOL Mobile description: Prebid AOL Bidder Adaptor aliase -hide: true + biddercode: onemobile aliasCode : aol --- diff --git a/dev-docs/bidders/oneplanetonly.md b/dev-docs/bidders/oneplanetonly.md index e0a3abe271..e23ab4325d 100644 --- a/dev-docs/bidders/oneplanetonly.md +++ b/dev-docs/bidders/oneplanetonly.md @@ -2,7 +2,7 @@ layout: bidder title: Oneplanetonly description: Prebid Oneplanetonly Bidder Adaptor -hide: true + biddercode: oneplanetonly --- diff --git a/dev-docs/bidders/onetag.md b/dev-docs/bidders/onetag.md index 23bada9d2d..56e5dbc02f 100644 --- a/dev-docs/bidders/onetag.md +++ b/dev-docs/bidders/onetag.md @@ -2,7 +2,7 @@ layout: bidder title: OneTag description: Prebid OneTag Bidder Adaptor -hide: true + biddercode: onetag media_types: banner, video gdpr_supported: true diff --git a/dev-docs/bidders/onomagic.md b/dev-docs/bidders/onomagic.md index af2f14207d..ad7ca4d33a 100644 --- a/dev-docs/bidders/onomagic.md +++ b/dev-docs/bidders/onomagic.md @@ -4,7 +4,7 @@ title: Onomagic description: Prebid Onomagic Bidder Adaptor top_nav_section: dev_docs nav_section: reference -hide: true + biddercode: onomagic --- diff --git a/dev-docs/bidders/open8.md b/dev-docs/bidders/open8.md index f4a1e62ac7..5666fca6a8 100644 --- a/dev-docs/bidders/open8.md +++ b/dev-docs/bidders/open8.md @@ -2,7 +2,7 @@ layout: bidder title: OPEN8 description: Prebid OPEN8 Bidder Adaptor -hide: true + biddercode: open8 media_types: video, banner --- diff --git a/dev-docs/bidders/openx.md b/dev-docs/bidders/openx.md index 845f6fd74f..c226f95e39 100644 --- a/dev-docs/bidders/openx.md +++ b/dev-docs/bidders/openx.md @@ -2,7 +2,7 @@ layout: bidder title: OpenX description: Prebid OpenX Bidder Adaptor -hide: true + biddercode: openx media_types: banner, video schain_supported: true diff --git a/dev-docs/bidders/openxoutstream.md b/dev-docs/bidders/openxoutstream.md index b320045489..54577df39f 100644 --- a/dev-docs/bidders/openxoutstream.md +++ b/dev-docs/bidders/openxoutstream.md @@ -2,7 +2,7 @@ layout: bidder title: OpenX Outstream description: Prebid OpenX Outstream Bidder Adaptor -hide: true + biddercode: openxoutstream media_types: native prebid_member: true diff --git a/dev-docs/bidders/optimatic.md b/dev-docs/bidders/optimatic.md index 7ea3119ca9..cbd585288c 100644 --- a/dev-docs/bidders/optimatic.md +++ b/dev-docs/bidders/optimatic.md @@ -2,7 +2,7 @@ layout: bidder title: Optimatic description: Prebid Optimatic Bidder Adaptor -hide: true + biddercode: optimatic media_types: video --- diff --git a/dev-docs/bidders/optimera.md b/dev-docs/bidders/optimera.md index 4462810a48..78aa7016f9 100644 --- a/dev-docs/bidders/optimera.md +++ b/dev-docs/bidders/optimera.md @@ -2,7 +2,7 @@ layout: bidder title: Optimera description: Optimera Bidder Adaptor -hide: true + biddercode: optimera --- diff --git a/dev-docs/bidders/orbidder.md b/dev-docs/bidders/orbidder.md index 70452f981e..06291c238a 100644 --- a/dev-docs/bidders/orbidder.md +++ b/dev-docs/bidders/orbidder.md @@ -3,7 +3,7 @@ layout: bidder title: Orbidder description: Prebid Orbidder Bidder Adaptor biddercode: orbidder -hide: true + media_types: banner gdpr_supported: true --- diff --git a/dev-docs/bidders/orbitsoft.md b/dev-docs/bidders/orbitsoft.md index f136bfee1d..e74d51280e 100644 --- a/dev-docs/bidders/orbitsoft.md +++ b/dev-docs/bidders/orbitsoft.md @@ -2,7 +2,7 @@ layout: bidder title: Orbitsoft description: Prebid Orbitsoft Bidder Adaptor -hide: true + biddercode: orbitsoft --- diff --git a/dev-docs/bidders/otm.md b/dev-docs/bidders/otm.md index 78cdaa9694..9275706797 100644 --- a/dev-docs/bidders/otm.md +++ b/dev-docs/bidders/otm.md @@ -2,7 +2,7 @@ layout: bidder title: OTM description: OTM Bidder Adapter -hide: true + biddercode: otm --- diff --git a/dev-docs/bidders/outcon.md b/dev-docs/bidders/outcon.md index 8cdb6f485c..9c27d1e0f8 100644 --- a/dev-docs/bidders/outcon.md +++ b/dev-docs/bidders/outcon.md @@ -2,7 +2,7 @@ layout: bidder title: Outcon description: Prebid Outcon Bidder Adaptor -hide: true + biddercode: outcon --- diff --git a/dev-docs/bidders/ozone.md b/dev-docs/bidders/ozone.md index bf9a458861..57b7001e05 100644 --- a/dev-docs/bidders/ozone.md +++ b/dev-docs/bidders/ozone.md @@ -3,7 +3,7 @@ layout: bidder title: Ozone Project description: Prebid Ozone Project Bidder Adaptor biddercode: ozone -hide: true + media_types: banner gdpr_supported: true userIds: criteo, id5Id, identityLink, liveIntentId, parrableId, pubCommonId diff --git a/dev-docs/bidders/padsquad.md b/dev-docs/bidders/padsquad.md index df51a7d49a..2ca50d3339 100644 --- a/dev-docs/bidders/padsquad.md +++ b/dev-docs/bidders/padsquad.md @@ -2,7 +2,7 @@ layout: bidder title: Padsquad description: Prebid Padsquad Bidder Adapter -hide: true + biddercode: padsquad gdpr_supported: true --- diff --git a/dev-docs/bidders/pagescience.md b/dev-docs/bidders/pagescience.md index 637e3e2a67..2e8cc1256b 100644 --- a/dev-docs/bidders/pagescience.md +++ b/dev-docs/bidders/pagescience.md @@ -2,7 +2,7 @@ layout: bidder title: Page Science description: Prebid Page Science Bidder Adaptor -hide: true + biddercode: pagescience aliasCode : appnexus --- diff --git a/dev-docs/bidders/peak226.md b/dev-docs/bidders/peak226.md index ef3dd7aaf6..a039a1281c 100644 --- a/dev-docs/bidders/peak226.md +++ b/dev-docs/bidders/peak226.md @@ -2,7 +2,7 @@ layout: bidder title: Peak226 description: Prebid Peak Bidder Adaptor -hide: true + biddercode: peak226 --- diff --git a/dev-docs/bidders/piximedia.md b/dev-docs/bidders/piximedia.md index de6105e335..b497e5b11c 100644 --- a/dev-docs/bidders/piximedia.md +++ b/dev-docs/bidders/piximedia.md @@ -2,7 +2,7 @@ layout: bidder title: Piximedia description: Piximedia Bidder Adaptor -hide: true + biddercode: piximedia media_types: banner --- diff --git a/dev-docs/bidders/platformio.md b/dev-docs/bidders/platformio.md index df6f1f7f25..ff750a9150 100644 --- a/dev-docs/bidders/platformio.md +++ b/dev-docs/bidders/platformio.md @@ -2,7 +2,7 @@ layout: bidder title: Platform.io description: Prebid Platform.io Bidder Adapter -hide: true + biddercode: platformio media_types: native, video gdpr_supported: true diff --git a/dev-docs/bidders/pollux.md b/dev-docs/bidders/pollux.md index 19b6e5bab1..3bd358460f 100644 --- a/dev-docs/bidders/pollux.md +++ b/dev-docs/bidders/pollux.md @@ -2,7 +2,7 @@ layout: bidder title: Pollux Network description: Prebid Pollux Network Bidder Adaptor -hide: true + biddercode: pollux --- diff --git a/dev-docs/bidders/polymorph.md b/dev-docs/bidders/polymorph.md index 1ca73f08a8..0a2dea88bf 100644 --- a/dev-docs/bidders/polymorph.md +++ b/dev-docs/bidders/polymorph.md @@ -2,7 +2,7 @@ layout: bidder title: Polymorph description: Polymorph Prebid Adaptor -hide: true + biddercode: polymorph media_types: native, video, banner --- diff --git a/dev-docs/bidders/prebidServer.md b/dev-docs/bidders/prebidServer.md index d9ecae2225..cc9f1f6bce 100644 --- a/dev-docs/bidders/prebidServer.md +++ b/dev-docs/bidders/prebidServer.md @@ -3,7 +3,7 @@ layout: bidder title: Prebid Server description: Prebid Server S2S Adaptor biddercode: prebidServer -hide: true + media_types: banner, video gdpr_supported: true --- diff --git a/dev-docs/bidders/project-limelight.md b/dev-docs/bidders/project-limelight.md index f53b907420..f5ae5d2f30 100644 --- a/dev-docs/bidders/project-limelight.md +++ b/dev-docs/bidders/project-limelight.md @@ -2,7 +2,7 @@ layout: bidder title: Project Limelight description: Prebid Project Limelight Bidder Adaptor -hide: true + biddercode: project-limelight aliasCode: projectLimeLight --- diff --git a/dev-docs/bidders/proxistoreBidAdapter.md b/dev-docs/bidders/proxistoreBidAdapter.md index a61b7f925a..56f4fed291 100644 --- a/dev-docs/bidders/proxistoreBidAdapter.md +++ b/dev-docs/bidders/proxistoreBidAdapter.md @@ -2,7 +2,7 @@ layout: bidder title: Proxistore description: Prebid Proxistore Bidder Adapter -hide: true + biddercode: proxistore gdpr_supported: true --- diff --git a/dev-docs/bidders/pubgenius.md b/dev-docs/bidders/pubgenius.md index d31030eeff..4c9ecd5ccc 100644 --- a/dev-docs/bidders/pubgenius.md +++ b/dev-docs/bidders/pubgenius.md @@ -2,7 +2,7 @@ layout: bidder title: pubGENIUS description: Prebid pubGENIUS Bidder Adaptor -hide: true + biddercode: pubgenius media_types: banner gdpr_supported: true diff --git a/dev-docs/bidders/pubmatic.md b/dev-docs/bidders/pubmatic.md index 748e723b45..8029f29025 100644 --- a/dev-docs/bidders/pubmatic.md +++ b/dev-docs/bidders/pubmatic.md @@ -2,7 +2,7 @@ layout: bidder title: PubMatic description: Prebid PubMatic Bidder Adaptor -hide: true + biddercode: pubmatic media_types: banner, video, native gdpr_supported: true diff --git a/dev-docs/bidders/pubnx.md b/dev-docs/bidders/pubnx.md index 58225b2ddf..234608842a 100644 --- a/dev-docs/bidders/pubnx.md +++ b/dev-docs/bidders/pubnx.md @@ -2,7 +2,7 @@ layout: bidder title: PubNX description: Prebid PubNX Bidder Adaptor -hide: true + biddercode: pubnx --- diff --git a/dev-docs/bidders/pulsepoint.md b/dev-docs/bidders/pulsepoint.md index b9a45d4d59..01db49183d 100644 --- a/dev-docs/bidders/pulsepoint.md +++ b/dev-docs/bidders/pulsepoint.md @@ -2,7 +2,7 @@ layout: bidder title: PulsePoint description: Prebid PulsePoint Bidder Adaptor -hide: true + biddercode: pulsepoint gdpr_supported: true usp_supported: true diff --git a/dev-docs/bidders/pxyz.md b/dev-docs/bidders/pxyz.md index 4262aa31df..4503115a48 100644 --- a/dev-docs/bidders/pxyz.md +++ b/dev-docs/bidders/pxyz.md @@ -4,7 +4,7 @@ title: Playground XYZ description: Prebid Playground XYZ Bidder Adapter gdpr_supported: true usp_supported: true -hide: true + biddercode: pxyz prevBiddercode: playgroundxyz aliasBiddercode: playgroundxyz diff --git a/dev-docs/bidders/quantcast.md b/dev-docs/bidders/quantcast.md index 042c83b62e..bacab98361 100644 --- a/dev-docs/bidders/quantcast.md +++ b/dev-docs/bidders/quantcast.md @@ -2,7 +2,7 @@ layout: bidder title: Quantcast description: Prebid Quantcast Bidder Adaptor -hide: true + biddercode: quantcast media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/quantum.md b/dev-docs/bidders/quantum.md index cf9f62eb50..86d2892b20 100644 --- a/dev-docs/bidders/quantum.md +++ b/dev-docs/bidders/quantum.md @@ -2,7 +2,7 @@ layout: bidder title: Quantum description: Prebid Quantum Bidder Adaptor -hide: true + biddercode: quantum media_types: native --- diff --git a/dev-docs/bidders/quantumdex.md b/dev-docs/bidders/quantumdex.md index 5fcd3f45bf..b584b73c7d 100644 --- a/dev-docs/bidders/quantumdex.md +++ b/dev-docs/bidders/quantumdex.md @@ -2,7 +2,7 @@ layout: bidder title: Quantumdex description: Prebid Quantum Digital Exchange Bidder Adapter -hide: true + biddercode: quantumdex media_types: banner, video gdpr_supported: true diff --git a/dev-docs/bidders/rads.md b/dev-docs/bidders/rads.md index 7c81f0608c..d02b0fd2e2 100644 --- a/dev-docs/bidders/rads.md +++ b/dev-docs/bidders/rads.md @@ -2,7 +2,7 @@ layout: bidder title: Rads description: Prebid Rads Bidder Adaptor -hide: true + biddercode: rads media_types: banner, video gdpr_supported: false diff --git a/dev-docs/bidders/rakuten.md b/dev-docs/bidders/rakuten.md index 9aec967d29..a6d5398b59 100644 --- a/dev-docs/bidders/rakuten.md +++ b/dev-docs/bidders/rakuten.md @@ -2,7 +2,7 @@ layout: bidder title: Rakuten description: Prebid Rakuten Bidder Adaptor -hide: true + biddercode: rakuten prebid_member: true --- diff --git a/dev-docs/bidders/readpeak.md b/dev-docs/bidders/readpeak.md index e114bb3b00..7a5be1a72e 100644 --- a/dev-docs/bidders/readpeak.md +++ b/dev-docs/bidders/readpeak.md @@ -2,7 +2,7 @@ layout: bidder title: Readpeak description: Readpeak Bidder Adaptor -hide: true + biddercode: readpeak media_types: native --- diff --git a/dev-docs/bidders/reklamstore.md b/dev-docs/bidders/reklamstore.md index b550fd0e92..bcdebc64f9 100644 --- a/dev-docs/bidders/reklamstore.md +++ b/dev-docs/bidders/reklamstore.md @@ -3,7 +3,7 @@ layout: bidder title: ReklamStore description: Prebid ReklamStore Bidder Adaptor biddercode: reklamstore -hide: true + gdpr_supported: true media_types: banner --- diff --git a/dev-docs/bidders/relaido.md b/dev-docs/bidders/relaido.md index f66ea77b64..2655c80639 100644 --- a/dev-docs/bidders/relaido.md +++ b/dev-docs/bidders/relaido.md @@ -3,7 +3,7 @@ layout: bidder title: Relaido description: Prebid Relaido Bidder Adapter biddercode: relaido -hide: true + media_types: banner, video --- diff --git a/dev-docs/bidders/reload.md b/dev-docs/bidders/reload.md index 2b1ef67010..7ffe65aab2 100644 --- a/dev-docs/bidders/reload.md +++ b/dev-docs/bidders/reload.md @@ -2,7 +2,7 @@ layout: bidder title: Reload description: Reload Prebid Adaptor -hide: true + biddercode: reload --- diff --git a/dev-docs/bidders/resultsmedia.md b/dev-docs/bidders/resultsmedia.md index cfa8ab8bff..c0491a6884 100644 --- a/dev-docs/bidders/resultsmedia.md +++ b/dev-docs/bidders/resultsmedia.md @@ -2,7 +2,7 @@ layout: bidder title: ResultsMedia description: Prebid ResultsMedia Bidder Adaptor -hide: true + biddercode: resultsmedia media_types: video, banner gdpr_supported: true diff --git a/dev-docs/bidders/rexrtb.md b/dev-docs/bidders/rexrtb.md index 1941e7627d..19bdc02568 100644 --- a/dev-docs/bidders/rexrtb.md +++ b/dev-docs/bidders/rexrtb.md @@ -2,7 +2,7 @@ layout: bidder title: REXRTB description: Prebid REXRTB Bidder Adaptor -hide: true + biddercode: rexrtb --- diff --git a/dev-docs/bidders/rhythmone.md b/dev-docs/bidders/rhythmone.md index 3b979e79f1..114e06373f 100644 --- a/dev-docs/bidders/rhythmone.md +++ b/dev-docs/bidders/rhythmone.md @@ -2,7 +2,7 @@ layout: bidder title: RhythmOne description: Prebid RhythmOne Bidder Adaptor -hide: true + biddercode: rhythmone media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/richaudience.md b/dev-docs/bidders/richaudience.md index a765162bb5..016384431c 100644 --- a/dev-docs/bidders/richaudience.md +++ b/dev-docs/bidders/richaudience.md @@ -2,7 +2,7 @@ layout: bidder title: Rich Audience description: Prebid Rich Audience Bidder Adapter -hide: true + biddercode: richaudience userIds: criteo, id5Id, identityLink, liveIntentId, pubCommonId, unifiedId media_types: banner, video diff --git a/dev-docs/bidders/rockyou.md b/dev-docs/bidders/rockyou.md index 3dea97cbdf..add3b4ee72 100644 --- a/dev-docs/bidders/rockyou.md +++ b/dev-docs/bidders/rockyou.md @@ -3,7 +3,7 @@ layout: bidder title: RockYou description: PreBid RockYou Bidder Adapter biddercode: rockyou -hide: true + media_types: video --- diff --git a/dev-docs/bidders/rtbdemand.md b/dev-docs/bidders/rtbdemand.md index f7a13824b3..799e294ba2 100644 --- a/dev-docs/bidders/rtbdemand.md +++ b/dev-docs/bidders/rtbdemand.md @@ -4,7 +4,7 @@ title: Rtbdemand bidder description: Prebid Rtbdemand Media Bidder Adapter top_nav_section: dev_docs nav_section: reference -hide: true + biddercode: rtbdemand --- diff --git a/dev-docs/bidders/rtbdemandadk.md b/dev-docs/bidders/rtbdemandadk.md index 515a76ec07..c888b2f989 100644 --- a/dev-docs/bidders/rtbdemandadk.md +++ b/dev-docs/bidders/rtbdemandadk.md @@ -2,7 +2,7 @@ layout: bidder title: Rtbdemandadk description: Prebid RtbdemandAdk Bidder Adaptor -hide: true + biddercode: rtbdemandadk --- diff --git a/dev-docs/bidders/rtbhouse.md b/dev-docs/bidders/rtbhouse.md index 512998bc78..d47b901997 100644 --- a/dev-docs/bidders/rtbhouse.md +++ b/dev-docs/bidders/rtbhouse.md @@ -3,7 +3,7 @@ layout: bidder title: RTBHouse description: Prebid RTB House Bidder Adapter gdpr_supported: true -hide: true + biddercode: rtbhouse media_types: banner, native schain_supported: true diff --git a/dev-docs/bidders/rtbsolutions.md b/dev-docs/bidders/rtbsolutions.md index c3446e73d3..454f726ea1 100644 --- a/dev-docs/bidders/rtbsolutions.md +++ b/dev-docs/bidders/rtbsolutions.md @@ -2,7 +2,7 @@ layout: bidder title: RTB Solutions description: Prebid RTB Solutions Bidder Adaptor -hide: true + biddercode: rtbsolutions media_types: banner diff --git a/dev-docs/bidders/rubicon.md b/dev-docs/bidders/rubicon.md index 3d769506d8..542f079f6c 100644 --- a/dev-docs/bidders/rubicon.md +++ b/dev-docs/bidders/rubicon.md @@ -2,7 +2,7 @@ layout: bidder title: Rubicon Project description: Rubicon Project Prebid Bidder Adaptor -hide: true + biddercode: rubicon gdpr_supported: true tcf2_supported: true diff --git a/dev-docs/bidders/rxrtb.md b/dev-docs/bidders/rxrtb.md index 51ed176807..4d0a14390a 100644 --- a/dev-docs/bidders/rxrtb.md +++ b/dev-docs/bidders/rxrtb.md @@ -2,7 +2,7 @@ layout: bidder title: rxrtb description: Prebid rxrtb Bidder Adaptor -hide: true + biddercode: rxrtb --- diff --git a/dev-docs/bidders/sara.md b/dev-docs/bidders/sara.md index bcb3c510ea..8d540488b7 100755 --- a/dev-docs/bidders/sara.md +++ b/dev-docs/bidders/sara.md @@ -2,7 +2,7 @@ layout: bidder title: SARA description: SARA Bidder Adapter -hide: true + biddercode: sara --- diff --git a/dev-docs/bidders/seedingAlliance.md b/dev-docs/bidders/seedingAlliance.md index d92a239993..4095b16c59 100644 --- a/dev-docs/bidders/seedingAlliance.md +++ b/dev-docs/bidders/seedingAlliance.md @@ -2,7 +2,7 @@ layout: bidder title: SeedingAlliance description: Prebid SeedingAlliance Bidder Adaptor -hide: true + biddercode: seedingAlliance media_types: native gdpr_supported: true diff --git a/dev-docs/bidders/seedtag.md b/dev-docs/bidders/seedtag.md index 0440077f80..2baf6525f1 100644 --- a/dev-docs/bidders/seedtag.md +++ b/dev-docs/bidders/seedtag.md @@ -2,7 +2,7 @@ layout: bidder title: seedtag description: Prebid Seedtag Bidder Adapter -hide: true + media_types: banner, video biddercode: seedtag --- diff --git a/dev-docs/bidders/segmento.md b/dev-docs/bidders/segmento.md index 2d7c1c4ae6..138e935124 100644 --- a/dev-docs/bidders/segmento.md +++ b/dev-docs/bidders/segmento.md @@ -2,7 +2,7 @@ layout: bidder title: Segmento description: Prebid Segmento Bidder Adaptor -hide: true + biddercode: segmento media_types: banner --- diff --git a/dev-docs/bidders/sekindo.md b/dev-docs/bidders/sekindo.md index f4b68e7415..1030fe4d30 100644 --- a/dev-docs/bidders/sekindo.md +++ b/dev-docs/bidders/sekindo.md @@ -2,7 +2,7 @@ layout: bidder title: SekindoUM description: Prebid SekindoUM Bidder Adaptor -hide: true + biddercode: sekindoUM media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/selectmedia.md b/dev-docs/bidders/selectmedia.md index 573e11f194..84bf0bbfa4 100644 --- a/dev-docs/bidders/selectmedia.md +++ b/dev-docs/bidders/selectmedia.md @@ -2,7 +2,7 @@ layout: bidder title: Select Media description: Prebid Select Media Bidder Adapter -hide: true + biddercode: selectmedia aliasCode: adtelligent media_types: banner, video diff --git a/dev-docs/bidders/selectmediavideo.md b/dev-docs/bidders/selectmediavideo.md index 031e5b8f54..46f6eca40c 100644 --- a/dev-docs/bidders/selectmediavideo.md +++ b/dev-docs/bidders/selectmediavideo.md @@ -2,7 +2,7 @@ layout: bidder title: SelectMedia Video description: SelectMedia Video Bidder Adapter -hide: true + biddercode: selectmediavideo aliasCode: aniview media_types: video diff --git a/dev-docs/bidders/showheroes.md b/dev-docs/bidders/showheroes.md index ebf17bdc44..36328012ef 100644 --- a/dev-docs/bidders/showheroes.md +++ b/dev-docs/bidders/showheroes.md @@ -2,7 +2,7 @@ layout: bidder title: ShowHeroes description: Prebid ShowHeroes Bidder Adapter -hide: true + biddercode: showheroes-bs media_types: video, banner gdpr_supported: true diff --git a/dev-docs/bidders/slimcut.md b/dev-docs/bidders/slimcut.md index 3cb243d535..5b56169bf0 100644 --- a/dev-docs/bidders/slimcut.md +++ b/dev-docs/bidders/slimcut.md @@ -2,7 +2,7 @@ layout: bidder title: Slimcut description: SlimCut Bidder Adaptor -hide: true + biddercode: slimcut media_types: video, banner gdpr_supported: true diff --git a/dev-docs/bidders/smartadserver.md b/dev-docs/bidders/smartadserver.md index 1547ae5530..99b1dff0ef 100644 --- a/dev-docs/bidders/smartadserver.md +++ b/dev-docs/bidders/smartadserver.md @@ -2,7 +2,7 @@ layout: bidder title: Smart AdServer description: Prebid Smart AdServer Bidder Adaptor -hide: true + biddercode: smartadserver media_types: display, video gdpr_supported: true diff --git a/dev-docs/bidders/smartrtb.md b/dev-docs/bidders/smartrtb.md index d8d5a7c6a5..bdf3d33ad7 100644 --- a/dev-docs/bidders/smartrtb.md +++ b/dev-docs/bidders/smartrtb.md @@ -2,7 +2,7 @@ layout: bidder title: SmartRTB description: SmartRTB / smrtb.com Bidder Module -hide: true + biddercode: smartrtb gdpr_supported: true media_types: banner, video diff --git a/dev-docs/bidders/smartyads.md b/dev-docs/bidders/smartyads.md index 314975f0a0..bbaa3485ce 100644 --- a/dev-docs/bidders/smartyads.md +++ b/dev-docs/bidders/smartyads.md @@ -2,7 +2,7 @@ layout: bidder title: SmartyAds description: Prebid SmartyAds Bidder Adaptor -hide: true + biddercode: smartyads media_types: native --- diff --git a/dev-docs/bidders/smilewanted.md b/dev-docs/bidders/smilewanted.md index 7279229b2e..da12657a58 100644 --- a/dev-docs/bidders/smilewanted.md +++ b/dev-docs/bidders/smilewanted.md @@ -3,7 +3,7 @@ layout: bidder title: SmileWanted description: SmileWanted Bidder Adaptor media_types: banner, video -hide: true + biddercode: smilewanted gdpr_supported: true diff --git a/dev-docs/bidders/smms.md b/dev-docs/bidders/smms.md index af1e4855d1..4627b938ab 100644 --- a/dev-docs/bidders/smms.md +++ b/dev-docs/bidders/smms.md @@ -2,7 +2,7 @@ layout: bidder title: SMMS description: Prebid SMMS Bidder Adaptor -hide: true + biddercode: smms media_types: banner, native --- diff --git a/dev-docs/bidders/somo.md b/dev-docs/bidders/somo.md index d605a7ad3e..11c044c836 100644 --- a/dev-docs/bidders/somo.md +++ b/dev-docs/bidders/somo.md @@ -2,7 +2,7 @@ layout: bidder title: Somo Audience description: Somo Audience Bidder Adapter -hide: true + biddercode: somo prevBiddercode: somoAudience --- diff --git a/dev-docs/bidders/somoaudience.md b/dev-docs/bidders/somoaudience.md index d4adc9f3e0..4edc950634 100644 --- a/dev-docs/bidders/somoaudience.md +++ b/dev-docs/bidders/somoaudience.md @@ -2,7 +2,7 @@ layout: bidder title: Somo Audience description: Somo Audience Bidder Adapter -hide: true + biddercode: somoaudience --- diff --git a/dev-docs/bidders/sonobi.md b/dev-docs/bidders/sonobi.md index 630603eea9..3e84e56525 100644 --- a/dev-docs/bidders/sonobi.md +++ b/dev-docs/bidders/sonobi.md @@ -2,7 +2,7 @@ layout: bidder title: Sonobi description: Prebid Sonobi Bidder Adaptor -hide: true + biddercode: sonobi media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/sortable.md b/dev-docs/bidders/sortable.md index c54d9f0e5d..e03c6fb5d1 100644 --- a/dev-docs/bidders/sortable.md +++ b/dev-docs/bidders/sortable.md @@ -3,7 +3,7 @@ layout: bidder title: Sortable description: Prebid Sortable Bidder Adaptor biddercode: sortable -hide: true + media_types: banner, native, video gdpr_supported: true usp_supported: true diff --git a/dev-docs/bidders/sovrn.md b/dev-docs/bidders/sovrn.md index f718d29bf6..fbce3c10d4 100644 --- a/dev-docs/bidders/sovrn.md +++ b/dev-docs/bidders/sovrn.md @@ -2,7 +2,7 @@ layout: bidder title: Sovrn description: Prebid Sovrn Bidder Adaptor -hide: true + biddercode: sovrn gdpr_supported: true usp_supported: true diff --git a/dev-docs/bidders/spotx.md b/dev-docs/bidders/spotx.md index 1c7aa11b0f..715d331f26 100644 --- a/dev-docs/bidders/spotx.md +++ b/dev-docs/bidders/spotx.md @@ -2,7 +2,7 @@ layout: bidder title: SpotX description: Prebid SpotX Bidder Adaptor -hide: true + biddercode: spotx media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/stickyadstv.md b/dev-docs/bidders/stickyadstv.md index c80f5277d6..e2312e5ae7 100644 --- a/dev-docs/bidders/stickyadstv.md +++ b/dev-docs/bidders/stickyadstv.md @@ -4,7 +4,7 @@ title: StickyAdsTv description: Prebid StickyAdsTv Bidder Adaptor top_nav_section: dev_docs nav_section: reference -hide: true + biddercode: stickyadstv media_types: native diff --git a/dev-docs/bidders/stv.md b/dev-docs/bidders/stv.md index 57c10f4143..f0930cede4 100644 --- a/dev-docs/bidders/stv.md +++ b/dev-docs/bidders/stv.md @@ -2,7 +2,7 @@ layout: bidder title: Stv description: Prebid Stv Bidder Adaptor -hide: true + biddercode: stv media_types: banner,video gdpr_supported: false diff --git a/dev-docs/bidders/sublime.md b/dev-docs/bidders/sublime.md index dfacf785af..607c4f8874 100644 --- a/dev-docs/bidders/sublime.md +++ b/dev-docs/bidders/sublime.md @@ -2,7 +2,7 @@ layout: bidder title: Sublime description: Prebid Sublime Bidder Adapter -hide: true + biddercode: sublime gdpr_supported: true --- diff --git a/dev-docs/bidders/supply2.md b/dev-docs/bidders/supply2.md index 195d5400c8..aea216aaf5 100755 --- a/dev-docs/bidders/supply2.md +++ b/dev-docs/bidders/supply2.md @@ -2,7 +2,7 @@ layout: bidder title: Supply2 description: Prebid Media Donuts Bidder Adaptor -hide: true + biddercode: supply2 gdpr_supported: true --- diff --git a/dev-docs/bidders/synacormedia.md b/dev-docs/bidders/synacormedia.md index 34d1b72ea2..0bd0b2096c 100644 --- a/dev-docs/bidders/synacormedia.md +++ b/dev-docs/bidders/synacormedia.md @@ -2,7 +2,7 @@ layout: bidder title: Synacor Media description: Prebid Synacor Media Bidder Adapter -hide: true + biddercode: synacormedia media_types: banner, video gdpr_supported: false diff --git a/dev-docs/bidders/taphype.md b/dev-docs/bidders/taphype.md index a084e7990d..653b551d05 100644 --- a/dev-docs/bidders/taphype.md +++ b/dev-docs/bidders/taphype.md @@ -2,7 +2,7 @@ layout: bidder title: TapHype description: Prebid TapHype Bidder Adaptor -hide: true + biddercode: taphype --- diff --git a/dev-docs/bidders/teads.md b/dev-docs/bidders/teads.md index 269a147d0e..3642d7d5fd 100644 --- a/dev-docs/bidders/teads.md +++ b/dev-docs/bidders/teads.md @@ -2,7 +2,7 @@ layout: bidder title: Teads description: Prebid Teads Bidder Adapter -hide: true + biddercode: teads gdpr_supported: true tcf2_supported: true diff --git a/dev-docs/bidders/telaria.md b/dev-docs/bidders/telaria.md index cfa3f9a1ce..fe751db93b 100644 --- a/dev-docs/bidders/telaria.md +++ b/dev-docs/bidders/telaria.md @@ -2,7 +2,7 @@ layout: bidder title: Telaria description: Telaria Bidder Adaptor -hide: true + biddercode: telaria media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/theadx.md b/dev-docs/bidders/theadx.md index 03f75feb02..7459d38596 100644 --- a/dev-docs/bidders/theadx.md +++ b/dev-docs/bidders/theadx.md @@ -2,7 +2,7 @@ layout: bidder title: TheAdx description: Prebid TheAdx Bidder Adapter -hide: true + biddercode: theadx gdpr_supported: false --- diff --git a/dev-docs/bidders/tim.md b/dev-docs/bidders/tim.md index 8c181a3a8e..dc8e548231 100644 --- a/dev-docs/bidders/tim.md +++ b/dev-docs/bidders/tim.md @@ -2,7 +2,7 @@ layout: bidder title: Tim Media description: Prebid Tim Bidder Adaptor -hide: true + biddercode: tim --- diff --git a/dev-docs/bidders/topRTB.md b/dev-docs/bidders/topRTB.md index 6f559304b0..b1763f1f77 100644 --- a/dev-docs/bidders/topRTB.md +++ b/dev-docs/bidders/topRTB.md @@ -2,7 +2,7 @@ layout: bidder title: TOPRTB description: Prebid topRTB Bidder Adapter -hide: true + biddercode: topRTB --- diff --git a/dev-docs/bidders/tpmn.md b/dev-docs/bidders/tpmn.md index 574659260f..b17beeb438 100644 --- a/dev-docs/bidders/tpmn.md +++ b/dev-docs/bidders/tpmn.md @@ -2,7 +2,7 @@ layout: bidder title: TPMN description: Prebid TPMN Bidder Adaptor -hide: true + biddercode: tpmn gdpr_supported: false --- diff --git a/dev-docs/bidders/trafficroots.md b/dev-docs/bidders/trafficroots.md index 7ba799d559..16400e8586 100644 --- a/dev-docs/bidders/trafficroots.md +++ b/dev-docs/bidders/trafficroots.md @@ -2,7 +2,7 @@ layout: bidder title: Trafficroots description: Prebid Trafficroots Bidder Adapter -hide: true + biddercode: trafficroots gdpr_supported: true --- diff --git a/dev-docs/bidders/tremor.md b/dev-docs/bidders/tremor.md index 570e451fdf..c67b5ca9df 100644 --- a/dev-docs/bidders/tremor.md +++ b/dev-docs/bidders/tremor.md @@ -4,7 +4,7 @@ title: Tremor description: Tremor Bidder Adaptor top_nav_section: dev_docs nav_section: reference -hide: true + biddercode: tremor --- diff --git a/dev-docs/bidders/trendqube.md b/dev-docs/bidders/trendqube.md index f47817e2bd..e7fbf80da7 100644 --- a/dev-docs/bidders/trendqube.md +++ b/dev-docs/bidders/trendqube.md @@ -2,7 +2,7 @@ layout: bidder title: Trendqube description: Prebid Trendqube Bidder Adapter -hide: true + biddercode: trendqube gdpr_supported: true media_types: banner, video diff --git a/dev-docs/bidders/tribeOS.md b/dev-docs/bidders/tribeOS.md index 64c5b7d11c..754def7006 100644 --- a/dev-docs/bidders/tribeOS.md +++ b/dev-docs/bidders/tribeOS.md @@ -2,7 +2,7 @@ layout: bidder title: tribeOS description: Prebid tribeOS Bidder Adapter -hide: true + biddercode: tribeos --- diff --git a/dev-docs/bidders/trion.md b/dev-docs/bidders/trion.md index acc5888e15..c1b575031f 100644 --- a/dev-docs/bidders/trion.md +++ b/dev-docs/bidders/trion.md @@ -2,7 +2,7 @@ layout: bidder title: Trion Interactive description: Prebid Trion Interactive Bidder Adaptor -hide: true + biddercode: trion usp_supported: true gdpr_supported: true diff --git a/dev-docs/bidders/triplelift.md b/dev-docs/bidders/triplelift.md index fbfff42004..6c64a80c9b 100644 --- a/dev-docs/bidders/triplelift.md +++ b/dev-docs/bidders/triplelift.md @@ -2,7 +2,7 @@ layout: bidder title: TripleLift description: Prebid TripleLift Bidder Adapter -hide: true + gdpr_supported: true usp_supported: true schain_supported: true diff --git a/dev-docs/bidders/trustx.md b/dev-docs/bidders/trustx.md index 92b660d4e7..c8b6acb8fb 100755 --- a/dev-docs/bidders/trustx.md +++ b/dev-docs/bidders/trustx.md @@ -2,7 +2,7 @@ layout: bidder title: TrustX description: Prebid Trustx Bidder Adaptor -hide: true + biddercode: trustx media_types: banner, video gdpr_supported: true diff --git a/dev-docs/bidders/turktelekom.md b/dev-docs/bidders/turktelekom.md index e1ef199292..33709de95c 100755 --- a/dev-docs/bidders/turktelekom.md +++ b/dev-docs/bidders/turktelekom.md @@ -2,7 +2,7 @@ layout: bidder title: Türk Telekom description: Prebid Türk Telekom Bidder Adaptor -hide: true + biddercode: turktelekom media_types: banner, video gdpr_supported: true diff --git a/dev-docs/bidders/ucfunnel.md b/dev-docs/bidders/ucfunnel.md index f8a02e8687..14944c4c05 100644 --- a/dev-docs/bidders/ucfunnel.md +++ b/dev-docs/bidders/ucfunnel.md @@ -2,7 +2,7 @@ layout: bidder title: ucfunnel description: Prebid ucfunnel Bidder Adaptor -hide: true + biddercode: ucfunnel media_types: video, native gdpr_supported: true diff --git a/dev-docs/bidders/underdogmedia.md b/dev-docs/bidders/underdogmedia.md index bb4325a4e8..213a38067e 100644 --- a/dev-docs/bidders/underdogmedia.md +++ b/dev-docs/bidders/underdogmedia.md @@ -2,7 +2,7 @@ layout: bidder title: Underdog Media description: Prebid Underdog Media Bidder Adapter -hide: true + biddercode: underdogmedia gdpr_supported: true usp_supported: true diff --git a/dev-docs/bidders/undertone.md b/dev-docs/bidders/undertone.md index f3b237beb1..32f4293fbb 100644 --- a/dev-docs/bidders/undertone.md +++ b/dev-docs/bidders/undertone.md @@ -2,7 +2,7 @@ layout: bidder title: Undertone description: Prebid undertone Bidder Adaptor -hide: true + biddercode: undertone gdpr_supported: true usp_supported: true diff --git a/dev-docs/bidders/unicorn.md b/dev-docs/bidders/unicorn.md index f3ff642527..3e50337c3f 100644 --- a/dev-docs/bidders/unicorn.md +++ b/dev-docs/bidders/unicorn.md @@ -2,7 +2,7 @@ layout: bidder title: UNICORN description: Prebid UNICORN Bidder Adaptor -hide: true + media_types: banner biddercode: unicorn --- diff --git a/dev-docs/bidders/unruly.md b/dev-docs/bidders/unruly.md index 052bafdcbd..3cf4325385 100644 --- a/dev-docs/bidders/unruly.md +++ b/dev-docs/bidders/unruly.md @@ -2,7 +2,7 @@ layout: bidder title: Unruly description: Prebid Unruly Bidder Adaptor -hide: true + biddercode: unruly media_types: native, video gdpr_supported: true diff --git a/dev-docs/bidders/uol.md b/dev-docs/bidders/uol.md index 175bf79f5a..cd4d7c614a 100644 --- a/dev-docs/bidders/uol.md +++ b/dev-docs/bidders/uol.md @@ -2,7 +2,7 @@ layout: bidder title: UOL description: Prebid UOL Bidder Adaptor -hide: true + biddercode: uol gdpr_supported: false media_types: banner diff --git a/dev-docs/bidders/valueimpression.md b/dev-docs/bidders/valueimpression.md index 019df8aeec..c21e1865c0 100644 --- a/dev-docs/bidders/valueimpression.md +++ b/dev-docs/bidders/valueimpression.md @@ -2,7 +2,7 @@ layout: bidder title: Valueimpression description: Prebid Valueimpression Bidder Adapter -hide: true + biddercode: valueimpression media_types: banner, video gdpr_supported: true diff --git a/dev-docs/bidders/vdoai.md b/dev-docs/bidders/vdoai.md index 39e642bd60..44b2049900 100644 --- a/dev-docs/bidders/vdoai.md +++ b/dev-docs/bidders/vdoai.md @@ -2,7 +2,7 @@ layout: bidder title: VDO.AI description: Prebid vdo.ai Bidder Adaptor -hide: true + biddercode: vdo.ai --- diff --git a/dev-docs/bidders/vertamedia.md b/dev-docs/bidders/vertamedia.md index 2983548e50..0178a1b98c 100644 --- a/dev-docs/bidders/vertamedia.md +++ b/dev-docs/bidders/vertamedia.md @@ -2,7 +2,7 @@ layout: bidder title: Vertamedia description: Prebid Vertamedia Bidder Adaptor -hide: true + biddercode: vertamedia media_types: video --- diff --git a/dev-docs/bidders/vertoz.md b/dev-docs/bidders/vertoz.md index 25be0aef47..2e60c877f0 100644 --- a/dev-docs/bidders/vertoz.md +++ b/dev-docs/bidders/vertoz.md @@ -2,7 +2,7 @@ layout: bidder title: Vertoz description: Prebid Vertoz Bidder Adaptor -hide: true + biddercode: vertoz --- diff --git a/dev-docs/bidders/vi.md b/dev-docs/bidders/vi.md index 23ecede334..c406a8f92d 100644 --- a/dev-docs/bidders/vi.md +++ b/dev-docs/bidders/vi.md @@ -2,7 +2,7 @@ layout: bidder title: vi description: vi bid adapter -hide: true + biddercode: vi --- diff --git a/dev-docs/bidders/vidazoo.md b/dev-docs/bidders/vidazoo.md index f0a98c1c39..700bd10488 100644 --- a/dev-docs/bidders/vidazoo.md +++ b/dev-docs/bidders/vidazoo.md @@ -3,7 +3,7 @@ layout: bidder title: Vidazoo description: Prebid Vidazoo Bidder Adaptor biddercode: vidazoo -hide: true + userIds: britepoolId, criteo, digitrust, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId gdpr_supported: true usp_supported: true diff --git a/dev-docs/bidders/videofy.md b/dev-docs/bidders/videofy.md index 07688fe8d7..5792e3d6db 100644 --- a/dev-docs/bidders/videofy.md +++ b/dev-docs/bidders/videofy.md @@ -2,7 +2,7 @@ layout: bidder title: Videofy description: Prebid Videofy Bidder Adaptor -hide: true + biddercode: videofy media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/videonow.md b/dev-docs/bidders/videonow.md index 0e49cc552b..676594d54b 100644 --- a/dev-docs/bidders/videonow.md +++ b/dev-docs/bidders/videonow.md @@ -2,7 +2,7 @@ layout: bidder title: videonow description: Prebid Videonow Bidder Adaptor -hide: true + media_types: banner --- diff --git a/dev-docs/bidders/videoreach.md b/dev-docs/bidders/videoreach.md index 7e09bdbfc2..0fe9dff7ed 100644 --- a/dev-docs/bidders/videoreach.md +++ b/dev-docs/bidders/videoreach.md @@ -2,7 +2,7 @@ layout: bidder title: Video Reach description: Video Reach Bidder Adapter for Prebid.js -hide: true + biddercode: videoreach media_types: banner, video gdpr_supported: true diff --git a/dev-docs/bidders/viewdeos.md b/dev-docs/bidders/viewdeos.md index 729ff9b9cf..3de083e5a0 100644 --- a/dev-docs/bidders/viewdeos.md +++ b/dev-docs/bidders/viewdeos.md @@ -2,7 +2,7 @@ layout: bidder title: Viewdeos description: Prebid Viewdeos Bidder Adaptor -hide: true + biddercode: viewdeosDX media_types: banner, video --- diff --git a/dev-docs/bidders/viewdeosDX.md b/dev-docs/bidders/viewdeosDX.md index bb25fedd82..90c161a725 100644 --- a/dev-docs/bidders/viewdeosDX.md +++ b/dev-docs/bidders/viewdeosDX.md @@ -2,7 +2,7 @@ layout: bidder title: ViewDeos DX description: Prebid ViewDeos Bidder Adaptor -hide: true + biddercode: viewdeosDX media_types: banner,video gdpr_supported: true diff --git a/dev-docs/bidders/visx.md b/dev-docs/bidders/visx.md index 63823bfafa..f95546ad8b 100644 --- a/dev-docs/bidders/visx.md +++ b/dev-docs/bidders/visx.md @@ -2,7 +2,7 @@ layout: bidder title: VIS.X description: Prebid VIS.X Bidder Adaptor -hide: true + biddercode: visx gdpr_supported: true schain_supported: true diff --git a/dev-docs/bidders/vmg.md b/dev-docs/bidders/vmg.md index 0536db21a2..2e6827d9df 100644 --- a/dev-docs/bidders/vmg.md +++ b/dev-docs/bidders/vmg.md @@ -2,7 +2,7 @@ layout: bidder title: VMG description: Connects Google Ad Manager to the VMG Predict engine. -hide: true + biddercode: vmg --- diff --git a/dev-docs/bidders/vrtcal.md b/dev-docs/bidders/vrtcal.md index 0275b52296..c1bf833aa7 100644 --- a/dev-docs/bidders/vrtcal.md +++ b/dev-docs/bidders/vrtcal.md @@ -2,7 +2,7 @@ layout: bidder title: VRTCAL Markets, Inc. description: VRTCAL Markets, Inc. Bid Adapter -hide: true + media_ytpes: banner gdpr_supported: false biddercode: vrtcal diff --git a/dev-docs/bidders/vuble.md b/dev-docs/bidders/vuble.md index 60428aa4ce..d703e18b02 100644 --- a/dev-docs/bidders/vuble.md +++ b/dev-docs/bidders/vuble.md @@ -2,7 +2,7 @@ layout: bidder title: Vuble description: Prebid Vuble Bidder Adaptor -hide: true + biddercode: vuble media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/waardex b/dev-docs/bidders/waardex index af1605b656..f58274d1c2 100644 --- a/dev-docs/bidders/waardex +++ b/dev-docs/bidders/waardex @@ -2,7 +2,7 @@ layout: bidder title: WaardeX description: Prebid WaardeX Bidder Adaptor -hide: true + biddercode: waardex_ak aliasCode: adkernel media_types: display, video diff --git a/dev-docs/bidders/weborama.md b/dev-docs/bidders/weborama.md index 89355fd7c5..84d5bafa36 100644 --- a/dev-docs/bidders/weborama.md +++ b/dev-docs/bidders/weborama.md @@ -2,7 +2,7 @@ layout: bidder title: Weborama description: Prebid Weborama Bidder Adaptor -hide: true + biddercode: weborama --- diff --git a/dev-docs/bidders/widespace.md b/dev-docs/bidders/widespace.md index 2e5b8dcfd9..d5187d80f0 100644 --- a/dev-docs/bidders/widespace.md +++ b/dev-docs/bidders/widespace.md @@ -2,7 +2,7 @@ layout: bidder title: Widespace description: Prebid Widespace Bidder Adaptor -hide: true + biddercode: widespace gdpr_supported: true --- diff --git a/dev-docs/bidders/windtalker.md b/dev-docs/bidders/windtalker.md index f2dbbe9e23..5c3a9ca4d6 100644 --- a/dev-docs/bidders/windtalker.md +++ b/dev-docs/bidders/windtalker.md @@ -2,7 +2,7 @@ layout: bidder title: Windtalker description: Prebid Windtalker Bidder Adapter -hide: true + biddercode: windtalker media_types: native, video gdpr_supported: true diff --git a/dev-docs/bidders/wipes.md b/dev-docs/bidders/wipes.md index c8b9f59291..26b212267e 100644 --- a/dev-docs/bidders/wipes.md +++ b/dev-docs/bidders/wipes.md @@ -2,7 +2,7 @@ layout: bidder title: WIPES description: Prebid WIPES Bidder Adaptor -hide: true + biddercode: wipes media_types: video --- diff --git a/dev-docs/bidders/xaxis.md b/dev-docs/bidders/xaxis.md index 3a30586fcb..5900dfebe5 100644 --- a/dev-docs/bidders/xaxis.md +++ b/dev-docs/bidders/xaxis.md @@ -3,7 +3,7 @@ layout: bidder title: Xaxis description: Prebid Xaxis Bidder Adaptor biddercode: xhb -hide: true + media_types: video, native gdpr_supported: true --- diff --git a/dev-docs/bidders/xendiz.md b/dev-docs/bidders/xendiz.md index f97a557d9a..e890cf49df 100644 --- a/dev-docs/bidders/xendiz.md +++ b/dev-docs/bidders/xendiz.md @@ -2,7 +2,7 @@ layout: bidder title: Xendiz description: Prebid Xendiz Bidder Adaptor -hide: true + biddercode: xendiz --- diff --git a/dev-docs/bidders/yieldbot.md b/dev-docs/bidders/yieldbot.md index 30aafe9f0f..97c25db316 100644 --- a/dev-docs/bidders/yieldbot.md +++ b/dev-docs/bidders/yieldbot.md @@ -2,7 +2,7 @@ layout: bidder title: Yieldbot description: Prebid Yieldbot Bidder Adaptor -hide: true + biddercode: yieldbot --- diff --git a/dev-docs/bidders/yieldlab.md b/dev-docs/bidders/yieldlab.md index a3d277121b..4e7c01d1fc 100644 --- a/dev-docs/bidders/yieldlab.md +++ b/dev-docs/bidders/yieldlab.md @@ -2,7 +2,7 @@ layout: bidder title: Yieldlab description: Prebid Yieldlab Bidder Adapter -hide: true + biddercode: yieldlab media_types: video gdpr_supported: true diff --git a/dev-docs/bidders/yieldlift.md b/dev-docs/bidders/yieldlift.md index 18ea489e40..58787be43b 100644 --- a/dev-docs/bidders/yieldlift.md +++ b/dev-docs/bidders/yieldlift.md @@ -2,7 +2,7 @@ layout: bidder title: YieldLift description: Prebid YieldLift Bidder Adaptor -hide: true + biddercode: yieldlift media_types: banner gdpr_supported: true diff --git a/dev-docs/bidders/yieldmo.md b/dev-docs/bidders/yieldmo.md index 096840b588..1287292cba 100644 --- a/dev-docs/bidders/yieldmo.md +++ b/dev-docs/bidders/yieldmo.md @@ -2,7 +2,7 @@ layout: bidder title: Yieldmo description: Prebid Yieldmo Bidder Adaptor -hide: true + biddercode: yieldmo media_types: banner userIds: pubCommonId, unifiedId, criteo diff --git a/dev-docs/bidders/yieldnexus.md b/dev-docs/bidders/yieldnexus.md index 533239f445..7adad0f247 100644 --- a/dev-docs/bidders/yieldnexus.md +++ b/dev-docs/bidders/yieldnexus.md @@ -3,7 +3,7 @@ layout: bidder title: Yield Nexus description: Yield Nexus Bidder Adapter biddercode: yieldnexus -hide: true + media_types: banner, video gdpr_supported: true --- diff --git a/dev-docs/bidders/yieldone.md b/dev-docs/bidders/yieldone.md index 81d2810f27..abac620f55 100644 --- a/dev-docs/bidders/yieldone.md +++ b/dev-docs/bidders/yieldone.md @@ -2,7 +2,7 @@ layout: bidder title: YIELDONE description: Prebid YIELDONE Bidder Adaptor -hide: true + biddercode: yieldone media_types: banner, video --- diff --git a/dev-docs/bidders/zedo.md b/dev-docs/bidders/zedo.md index 0bfd77380a..8ebf190e6b 100644 --- a/dev-docs/bidders/zedo.md +++ b/dev-docs/bidders/zedo.md @@ -2,7 +2,7 @@ layout: bidder title: ZEDO description: Prebid ZEDO Bidder Adapter -hide: true + biddercode: zedo --- diff --git a/dev-docs/conditional-ad-units.md b/dev-docs/conditional-ad-units.md index 9ef03faf78..855f1677ac 100644 --- a/dev-docs/conditional-ad-units.md +++ b/dev-docs/conditional-ad-units.md @@ -4,7 +4,7 @@ title: Conditional Ad Units description: Using labels for conditional ad units top_nav_section: dev_docs nav_section: features -hide: false + sidebarType: 1 --- diff --git a/dev-docs/datablocks.md b/dev-docs/datablocks.md index b8f16db537..a510086da7 100644 --- a/dev-docs/datablocks.md +++ b/dev-docs/datablocks.md @@ -2,7 +2,7 @@ layout: bidder title: Datablocks description: Prebid Datablocks Bidder Adaptor -hide: true + biddercode: datablocks media_types: banner,native,video gdpr_supported: true diff --git a/dev-docs/examples/adunit-refresh.md b/dev-docs/examples/adunit-refresh.md index 479755d7f3..e5cc0252a2 100644 --- a/dev-docs/examples/adunit-refresh.md +++ b/dev-docs/examples/adunit-refresh.md @@ -2,7 +2,7 @@ layout: example title: Individual Ad Unit Refresh / Infinite Scroll description: Individual Ad Unit Refresh / Infinite Scroll -hide: true + sidebarType: 1 about: diff --git a/dev-docs/examples/custom-price-buckets.md b/dev-docs/examples/custom-price-buckets.md index f99af149e0..f5d2c02ca6 100644 --- a/dev-docs/examples/custom-price-buckets.md +++ b/dev-docs/examples/custom-price-buckets.md @@ -2,7 +2,7 @@ layout: example title: Custom Price Granularity Buckets description: Custom Price Granularity Buckets -hide: true + sidebarType: 1 about: diff --git a/dev-docs/examples/instream-banner-mix.md b/dev-docs/examples/instream-banner-mix.md index 9d49a23d51..71de271dd1 100644 --- a/dev-docs/examples/instream-banner-mix.md +++ b/dev-docs/examples/instream-banner-mix.md @@ -2,7 +2,7 @@ layout: example title: Instream Video and Banner Ad Mixed Page description: An example of displaying both instream video and banner ads using Prebid.js -hide: true + sidebarType: 1 jsfiddle_link: jsfiddle.net/Prebid_Examples/nowfejh7/2/embedded/html,result/ diff --git a/dev-docs/examples/multi-format-example.md b/dev-docs/examples/multi-format-example.md index 97f308677a..86edf69eb3 100644 --- a/dev-docs/examples/multi-format-example.md +++ b/dev-docs/examples/multi-format-example.md @@ -2,7 +2,7 @@ layout: example title: Multi-Format Ad Units description: Multi-Format Ad Units -hide: true + sidebarType: 1 about: diff --git a/dev-docs/examples/native-ad-example.md b/dev-docs/examples/native-ad-example.md index 05e7350073..290d3247e7 100644 --- a/dev-docs/examples/native-ad-example.md +++ b/dev-docs/examples/native-ad-example.md @@ -2,7 +2,7 @@ layout: example title: Native Ad Unit description: Native Ad Units -hide: true + sidebarType: 1 about: diff --git a/dev-docs/examples/postbid.md b/dev-docs/examples/postbid.md index d9a389d6e4..9ca0a03c16 100644 --- a/dev-docs/examples/postbid.md +++ b/dev-docs/examples/postbid.md @@ -4,7 +4,7 @@ title: Postbid Example description: Postbid Example sidebarType: 1 -hide: true + why_link: /overview/what-is-post-bid.html diff --git a/dev-docs/examples/size-mapping.md b/dev-docs/examples/size-mapping.md index f7b4740c27..162b2326d8 100644 --- a/dev-docs/examples/size-mapping.md +++ b/dev-docs/examples/size-mapping.md @@ -4,7 +4,7 @@ title: Filter Sizes Dynamically with Labels description: Filter Sizes Dynamically with Labels sidebarType: 1 -hide: true + about: - Dynamic filtering on ad unit sizes diff --git a/dev-docs/examples/use-prebid-with-appnexus-ad-server.md b/dev-docs/examples/use-prebid-with-appnexus-ad-server.md index fdc532dae5..d5ae3c273a 100644 --- a/dev-docs/examples/use-prebid-with-appnexus-ad-server.md +++ b/dev-docs/examples/use-prebid-with-appnexus-ad-server.md @@ -1,8 +1,8 @@ --- layout: example -title: Using Prebid.js with Xandr Publisher Ad Server -description: Using Prebid.js with Xandr Publisher Ad Server -hide: true +title: Using Prebid.js with AppNexus Publisher Ad Server +description: Using Prebid.js with AppNexus Publisher Ad Server + sidebarType: 1 about: diff --git a/dev-docs/how-to-add-a-new-video-bidder-adaptor.md b/dev-docs/how-to-add-a-new-video-bidder-adaptor.md index 724c8cc0e7..08a4695744 100644 --- a/dev-docs/how-to-add-a-new-video-bidder-adaptor.md +++ b/dev-docs/how-to-add-a-new-video-bidder-adaptor.md @@ -6,5 +6,5 @@ description: Documentation on how to add a new video bidder adapter pid: 26 top_nav_section: dev_docs nav_section: adapters -hide: true + --- diff --git a/dev-docs/integrate-with-the-prebid-analytics-api.md b/dev-docs/integrate-with-the-prebid-analytics-api.md index 7b4978ac12..9980e21b88 100644 --- a/dev-docs/integrate-with-the-prebid-analytics-api.md +++ b/dev-docs/integrate-with-the-prebid-analytics-api.md @@ -5,7 +5,7 @@ description: How to add an analytics adapter pid: 28 top_nav_section: dev_docs nav_section: adapters -hide: false + sidebarType: 1 --- diff --git a/dev-docs/prebid-1.0-API.md b/dev-docs/prebid-1.0-API.md index 0b40f80057..3fa9625215 100644 --- a/dev-docs/prebid-1.0-API.md +++ b/dev-docs/prebid-1.0-API.md @@ -4,7 +4,7 @@ title: Prebid 1.0 Publisher API Changes description: Description of the changes to the publisher facing API for Prebid 1.0 top_nav_section: dev_docs nav_section: reference -hide: false + sidebarType: 1 --- diff --git a/dev-docs/testing-prebid.md b/dev-docs/testing-prebid.md index 306f233978..9706a054cd 100644 --- a/dev-docs/testing-prebid.md +++ b/dev-docs/testing-prebid.md @@ -6,7 +6,7 @@ description: How to write tests for the Prebid.js library pid: 199 top_nav_section: dev_docs -hide: true + ---