From 34b9761dc93945c810ff874fb7df6e42dc625f09 Mon Sep 17 00:00:00 2001 From: EvgeniiMunin <35193823+EvgeniiMunin@users.noreply.github.com> Date: Mon, 25 Nov 2024 12:21:07 -0800 Subject: [PATCH 01/28] Greenbids RTD Module (#5613) * Greenbids RTD Module * test commit * configs * doc configs + analytics tags * fmt * fmt * fix review --- .../pbs-modules/greenbids-real-time-data.md | 175 ++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 prebid-server/pbs-modules/greenbids-real-time-data.md diff --git a/prebid-server/pbs-modules/greenbids-real-time-data.md b/prebid-server/pbs-modules/greenbids-real-time-data.md new file mode 100644 index 0000000000..5c6a25c4fa --- /dev/null +++ b/prebid-server/pbs-modules/greenbids-real-time-data.md @@ -0,0 +1,175 @@ +--- +layout: page_v2 +page_type: pbs-module +title: Prebid Server Greenbids Real Time Data Module +display_name : Greenbids Real Time Data Module +sidebarType : 5 +--- + +# Greenbids Real Time Data Module + +## Overview + +Greenbids Real Time Data module filters bidders SSPs listed in the `imp[].ext.prebid.bidder` of the bid request. +To perform the filtering the module uses AI to predict the bidding probability of bid per SSP for each `imp` for the given bid request. +This bidding probability is used to choose to send the bid request or not, according to the performance constraints applied by the partner publisher. + +The RTD module uses 2 artefacts that are fetched from the Greenbids Google Cloud Storage bucket + +- ML predictor in `.onnx` format: used to predict the bidding probability +- Probability thresholds in `.json` format: used to convert the bidding probability to a binary choice + +## Configuration + +### Execution Plan + +This module supports running at: + +- processed-auction-request: this is where PBS bid request enrichments +are done before customizing it to a particular bidder in the auction. + +### Account-Level Config + +Here's an example of the account config used in PBS-Java: + +```yaml +hooks: + greenbids-real-time-data: + enabled: true + host-execution-plan: > + { + "endpoints": { + "/openrtb2/auction": { + "stages": { + "processed-auction-request": { + "groups": [ + { + "timeout": 100, + "hook-sequence": [ + { + "module-code": "greenbids-real-time-data", + "hook-impl-code": "greenbids-real-time-data-processed-auction-request-hook" + } + ] + } + ] + } + } + } + } + } +``` + +### List of module configuration options + +- `google-cloud-greenbids-project`: Google Cloud project associated with Greenbids +- `gcs-bucket-name`: Google Cloud Storage (GCS) bucket used to fetch the artefacts ([ONNX](https://onnx.ai/) model and thresholds `.json`) necessary for prediction +- `cache-expiration-minutes`: The duration (in minutes) after which cached model and thresholds should be considered expired and refreshed +- `geo-lite-country-path`: URL to the geo-ip database +- `onnx-model-cache-key-prefix`: prefix necessary for getting cached ONNX model +- `thresholds-cache-key-prefix`: prefix necessary for getting cached throttling thresholds + +```yaml +greenbids-real-time-data: + google-cloud-greenbids-project: "greenbids-357713" + gcs-bucket-name: "greenbids-europe-west1-prebid-server-staging" + cache-expiration-minutes: 15 + geo-lite-country-path: "https://git.io/GeoLite2-Country.mmdb" + onnx-model-cache-key-prefix: "onnxModelRunner_" + thresholds-cache-key-prefix: "throttlingThresholds_" +``` + +### Publisher bid request settings + +The activated partner publishers add their configs direclty into `bid-request.json` +where they indicate the activation of our module +in bid request extenstion `bid-request.ext.prebid.analytics.greenbids` +for [Analytics Reporter](https://docs.prebid.org/prebid-server/pbs-modules/greenbids-analytics-reporter.html) and +`bid-request.ext.prebid.analytics.greenbids-rtd` for Greenbids RTD Module. + +The list of the parameters necessary for RTD module activation is as follows: + +| Parameter | Scope | Description | Example | Type | +|-----------------|-------------------|-----------------------------------------------------------------------------------------------------|-----------------------|--------------| +| pbuid | required | The Greenbids Publisher ID | greenbids-publisher-1 | string | +| targetTpr | required | Expected retained opportunities ratio [0-1] | 0.9 | float | +| explorationRate | required | Ratio of traffic without filtering used for training ML model [0-1] (a value of 0.1 will filter 90% of the traffic) | 0.1 | float | + +Here's an example of how a PBS partner publisher setup using both Greenbids RTD Module and Greenbids AnalyticsReporter should look like: + +```json +"ext": { + "prebid": { + "analytics": { + // extension for Greenbids Analytics Reporter + "greenbids": { + "pbuid": "PBUID_FROM_GREENBIDS", + "greenbidsSampling": 0.01 + }, + // extension for Greenbids Real Time Data Module + "greenbids-rtd": { + "pbuid": "PBUID_FROM_GREENBIDS", + "targetTpr": 0.95, + "explorationRate": 0.001 + } + } + } + } +``` + +### Enable for Spring Boot + +In order to allow the module to be picked up by PBS-Java, a Spring Boot configuration property `hooks.greenbids-real-time-data.enabled` must be set to `true`. + +Here's an example of how your PBS configuration YAML should look like: + +```YAML +hooks: + greenbids-real-time-data: + enabled: true +``` + +## Analytics Tags + +The RTD module also communicates the filtering results with the `GreenbidsAnalyticsReporter` via [AnalyticsTags](https://docs.prebid.org/prebid-server/developers/module-atags.html). +Here we populate analytics result of analytics tags for each `imp` the with: + +- `fingerprint`: greenbidsId +- `isKeptInAuction`: map of booleans for each bidder whether we keep them in auction or not for the given imp +- `isExploration`: flag that is necessary to isolate the training data + +The analytics tag is then parsed by the AnalyticsReporter from `HookExecutionContext` +and its content added to the analytics payload sent to Greenbids server. The exploration part of traffic is split randomly with the ratio defined for each partner publisher +per bid requests and is not filtered by the RTD module. + +Here's an example analytics tag that might be produced for use in an analytics adapter: + +```json +[{ + "pub_banniere_haute": { + "greenbids": { + "fingerprint": "ad63524e-b13f-4359-a975-dba9b5dc08f4", + "keptInAuction": { + "improvedigital": false, + "appnexus": true, + "pubmatic": false, + "rubicon": true, + "teads": false + }, + "isExploration": false + }, + "tid": "2c445309-06b2-47b2-a724-4aeef15faeb8" + } +}] +``` + +## Maintainer contacts + +For any questions and suggestions please reach out to our team for more information [greenbids.ai](https://greenbids.ai). + +Or just open new [issue](https://github.com/prebid/prebid-server-java/issues/new) or [pull request](https://github.com/prebid/prebid-server-java/pulls) in this repository. + +## Further Reading + +- [Prebid Server Module List](/prebid-server/pbs-modules/index.html) +- [Building a Prebid Server Module](/prebid-server/developers/add-a-module.html) From ab5dc732c0cf35066db65791fe70cacc5e44370e Mon Sep 17 00:00:00 2001 From: yuva-inmobi-1 Date: Tue, 26 Nov 2024 13:35:42 +0530 Subject: [PATCH 02/28] New Bidder:InMobi (#5722) * prebidJs changes for inmobi.md file * change the usp support * space correction * lint issues --- dev-docs/bidders/inmobi.md | 94 +++++++++++++++++++++++++++++++++++++- 1 file changed, 93 insertions(+), 1 deletion(-) diff --git a/dev-docs/bidders/inmobi.md b/dev-docs/bidders/inmobi.md index 456433b46b..b8fd3e9323 100644 --- a/dev-docs/bidders/inmobi.md +++ b/dev-docs/bidders/inmobi.md @@ -4,7 +4,7 @@ title: InMobi description: InMobi Bidder Adapter biddercode: inmobi tcfeu_supported: true -usp_supported: false +usp_supported: true gvl_id: 333 coppa_supported: true schain_supported: true @@ -12,6 +12,7 @@ media_types: banner, video, native pbs: true pbs_app_supported: true sidebarType: 1 +pbjs: true --- ### Note @@ -30,6 +31,97 @@ To opt out of InMobi ads on web inventory the user needs to visit the Opt-out pa ### Bid Params {: .table .table-bordered .table-striped } + | Name | Scope | Description | Example | Type | |---------------|----------|-----------------------|-----------|-----------| | `plc` | required | Placement ID | `'1234'` | `string` | + +### First Party Data + +Inmobi supports both `ortb2` and `ortb2Imp` methods to set [First Party Data](https://docs.prebid.org/features/firstPartyData.html). + +The standard Open RTB properties supported from `ortb2` / `ortb2Imp` are described in the following table. + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|-------------------|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|-----------| +| `ortb2Imp.instl` | optional | Details on interstitial/full-screen, 1 indicates that the ad is interstitial or full-screen, while 0 means it is not. | `1` | `integer` | +| `ortb2Imp.rwdd` | optional | Specifies if the user receives a reward for viewing the ad: 0 for no, and 1 for yes. | `1` | `integer` | +| `ortb2.user` | optional | Information about the advertising device's human user, provided through an OpenRTB User object. | N/A | `object` | +| `ortb2.site` | optional | Information about the publisher's website provided through an OpenRTB Site object. | N/A | `object` | +| `ortb2.device` | optional | Information about the user's device provided through an OpenRTB device object. | N/A | `object` | +| `ortb2.bcat` | optional | Blocked advertiser categories using the IAB content categories. | `[ "IAB25" ]` | `string array` | +| `ortb2.badv` | optional | Block list of advertisers by their domains | `[ "ford.com" ]` | `string array` | +| `ortb2.regs` | optional | Regulatory conditions in effect for all impressions in this bid request. | N/A | `object` | + +Besides these standard properties, `ext` field can be used to send any publisher specific data which may have been discussed with a Inmobi partner manager. + +### Example Ad-Units + +## Banner + +```javascript + var adUnits = [{ + code: 'div-gpt-ad-1460505748561-0', + mediaTypes: { + banner: { + sizes: [[300, 250]], + } + }, + bids: [{ + bidder: 'inmobi', + params: { + plc: '1719108420057' // Mandatory + } + }] + }]; +``` + +## Video + +```javaScript + var adUnits = [{ + code: 'div-gpt-ad-1460505748561-0', + mediaTypes: { + video: { + playerSize : [300,250], + mimes : ["video/x-ms-wmv", "video/mp4"], + minduration : 0, + maxduration: 30, + protocols : [1,2], + api: [1, 2, 4, 6], + protocols: [3, 4, 7, 8, 10], + placement: 1, + plcmt: 1 + } + }, + // Replace this object to test a new Adapter! + bids: [{ + bidder: 'inmobi', + params: { + plc: '1443164204446401' //Mandatory + } + }] + }]; +``` + +## Native + +```javascript + var adUnits = [{ + code: 'div-gpt-ad-1460505748561-0', + mediaTypes: { + native: { + type: 'image' + } + }, + bids: [{ + bidder: 'inmobi', + params: { + plc: '10000033152', + bidfloor: 0.9 + } + }] + }]; +``` From 9a4847213e9380bad2f88c7361a0e53e755d85d3 Mon Sep 17 00:00:00 2001 From: Denis Logachov Date: Thu, 28 Nov 2024 16:46:28 +0200 Subject: [PATCH 03/28] Create revbid.md (#5704) --- dev-docs/bidders/revbid.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 dev-docs/bidders/revbid.md diff --git a/dev-docs/bidders/revbid.md b/dev-docs/bidders/revbid.md new file mode 100644 index 0000000000..615709768b --- /dev/null +++ b/dev-docs/bidders/revbid.md @@ -0,0 +1,36 @@ +--- +layout: bidder +title: RevBid +description: RevBid Adaptor +biddercode: revbid +pbjs: true +pbs: false +media_types: banner, native, video +gvl_id: 14 (adkernel) +tcfeu_supported: true +gpp_sids: tcfeu, usp +usp_supported: true +coppa_supported: true +pbs_app_supported: false +schain_supported: true +userIds: all +fpd_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: true +aliasCode: adkernel +sidebarType: 1 +--- + +### Note + +The RevBid bidding adapter requires setup and approval before implementation. Please reach out to for more details. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `host` | required | RTB host | `'cpm.revbid.net'` | `string` | +| `zoneId` | required | Zone Id | 30164 | `integer` | From 25e05e237676f4f532edbc2c44bdb443db0d118a Mon Sep 17 00:00:00 2001 From: "Md. Soman Mia Sarker" Date: Thu, 28 Nov 2024 20:46:49 +0600 Subject: [PATCH 04/28] Video Support (#5715) --- dev-docs/bidders/adgrid.md | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/dev-docs/bidders/adgrid.md b/dev-docs/bidders/adgrid.md index db31ea8a24..014b75d921 100644 --- a/dev-docs/bidders/adgrid.md +++ b/dev-docs/bidders/adgrid.md @@ -1,9 +1,9 @@ --- layout: bidder title: AdGrid -description: Prebid AdGrid Bidder Adaptor +description: Prebid AdGrid Bidder Adapter biddercode: adgrid -media_types: banner +media_types: banner, video pbjs: true tcfeu_supported: false dsa_supported: false @@ -67,6 +67,24 @@ var adUnits = [ domainId: 67890 } }] + }, + // Video adUnit + { + code: 'test-video-div', + mediaTypes: { + video: { + playerSize: [ + [640, 480] + ], + context: 'instream' + } + }, + bids: [{ + bidder: 'adgrid', + params: { + domainId: 12345 + } + }] } ]; ``` From 72f83d3c866d81fd63aa76102c377b8bdeca464e Mon Sep 17 00:00:00 2001 From: andreasgreen Date: Thu, 28 Nov 2024 15:48:39 +0100 Subject: [PATCH 05/28] Bidtheatre Bidder Adapter: initial release, docs (#5723) --- dev-docs/bidders/bidtheatre.md | 52 ++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 dev-docs/bidders/bidtheatre.md diff --git a/dev-docs/bidders/bidtheatre.md b/dev-docs/bidders/bidtheatre.md new file mode 100644 index 0000000000..65266bc0f6 --- /dev/null +++ b/dev-docs/bidders/bidtheatre.md @@ -0,0 +1,52 @@ +--- +layout: bidder +title: Bidtheatre +description: Bidtheatre Prebid Bidder Adapter +biddercode: bidtheatre +gvl_id: 30 +tcfeu_supported: true +media_types: banner, video +safeframes_ok: true +deals_supported: true +floors_supported: true +fpd_supported: true +ortb_blocking_supported: partial +multiformat_supported: will-bid-on-any +privacy_sandbox: topics +pbjs: true +sidebarType: 1 +pbs: false +pbs_app_supported: false +--- + +### Registration + +The Bidtheatre bidding adapter requires manual set up before use. Please contact us at [operations@bidtheatre.com](mailto:operations@bidtheatre.com) if you would like to access Bidtheatre's demand. + +### Bid Params + +{: .table .table-bordered .table-striped } + +| Name | Scope | Description | Example | Type | +|---------------|----------|-----------------------|-----------|-----------| +| `publisherId` | required | Manually set up publisher ID | `'73b20b3a-12a0-4869-b54e-8d42b55786ee'` | `string` | + +In addition to the required bid param above, Bidtheatre will also enforce the following requirements + +- All ad slots on a page must belong to the same publisher ID +- The publisher must provide either a client IP and/or explicit geo data in the request + +### First Party Data + +Publishers should use the `ortb2` method of setting First Party Data. All standard OpenRTB 2.5 properties are supported, including but not limited to + +- ortb2.site.* +- ortb2.user.* + +### ORTB Blocking + +`bcat`, `badv` and `battr` are all supported. + +### Media Types + +All standard OpenRTB 2.5 properties are supported for both banner and video. Bidtheatre Bidding adapter will always return VAST 2.0 or lower for video requests. From 416648719115c255e5f64c5bf44ba64afca39902 Mon Sep 17 00:00:00 2001 From: Copper6SSP Date: Thu, 28 Nov 2024 16:49:19 +0200 Subject: [PATCH 06/28] Copper6ssp Bid Adapter: add gvl_id (#5727) * release adapter Copper6SSP * fix checks * fix doc * add gvl_id --- dev-docs/bidders/copper6ssp.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dev-docs/bidders/copper6ssp.md b/dev-docs/bidders/copper6ssp.md index a11dc64104..ee0131c1ac 100644 --- a/dev-docs/bidders/copper6ssp.md +++ b/dev-docs/bidders/copper6ssp.md @@ -4,7 +4,8 @@ title: Copper6SSP description: Prebid Copper6SSP Bidder Adapter biddercode: copper6ssp gpp_sids: usstate_all -tcfeu_supported: false +gvl_id: 1356 +tcfeu_supported: true usp_supported: true coppa_supported: true schain_supported: true From 02f75617167b2a69fd68d3e328a6b7de1413910d Mon Sep 17 00:00:00 2001 From: Muki Seiler Date: Thu, 28 Nov 2024 15:49:39 +0100 Subject: [PATCH 07/28] Remove unused disqus plugin (#5705) --- _includes/disqus_addon.html | 5 ----- _layouts/api_prebidjs.html | 4 ---- _layouts/bidder.html | 4 ---- _layouts/internal_api_prebidjs.html | 4 ---- _layouts/test.html | 3 --- 5 files changed, 20 deletions(-) delete mode 100644 _includes/disqus_addon.html diff --git a/_includes/disqus_addon.html b/_includes/disqus_addon.html deleted file mode 100644 index 0a6d69eaab..0000000000 --- a/_includes/disqus_addon.html +++ /dev/null @@ -1,5 +0,0 @@ - - - -
- diff --git a/_layouts/api_prebidjs.html b/_layouts/api_prebidjs.html index 1fe9a1afe8..487551fe54 100644 --- a/_layouts/api_prebidjs.html +++ b/_layouts/api_prebidjs.html @@ -39,10 +39,6 @@

{{ page.title }}

Back to Publisher API Reference

- - {% if page.show_disqus %} - {% include disqus_addon.html %} - {% endif %} diff --git a/_layouts/bidder.html b/_layouts/bidder.html index 54c7c37499..62a52c9e95 100644 --- a/_layouts/bidder.html +++ b/_layouts/bidder.html @@ -86,10 +86,6 @@

"Send All Bids" Ad Server Keys

Back to Bidders

- - {% if page.show_disqus %} - {% include disqus_addon.html %} - {% endif %} diff --git a/_layouts/internal_api_prebidjs.html b/_layouts/internal_api_prebidjs.html index 4098fa3c1e..1047377310 100644 --- a/_layouts/internal_api_prebidjs.html +++ b/_layouts/internal_api_prebidjs.html @@ -39,10 +39,6 @@

{{ page.title }}

Back to Internal API Reference

- - {% if page.show_disqus %} - {% include disqus_addon.html %} - {% endif %} diff --git a/_layouts/test.html b/_layouts/test.html index 945088e888..fe14d47a2b 100644 --- a/_layouts/test.html +++ b/_layouts/test.html @@ -49,9 +49,6 @@

Send All Bids Ad Server Keys

- {% if page.show_disqus %} - {% include disqus_addon.html %} - {% endif %} From eb48a25a2b593a8fbb076fef30ee6d651f9fdf85 Mon Sep 17 00:00:00 2001 From: Muki Seiler Date: Thu, 28 Nov 2024 15:53:40 +0100 Subject: [PATCH 08/28] Add userId link to module overview page (#5708) --- _data/sidebar.yml | 8 +++++++ dev-docs/modules/index.md | 26 ++++++++++++++++++++++ dev-docs/modules/userId.md | 3 +++ dev-docs/modules/userid-submodules/utiq.md | 1 + 4 files changed, 38 insertions(+) diff --git a/_data/sidebar.yml b/_data/sidebar.yml index 14813a6bc3..8da383a65c 100644 --- a/_data/sidebar.yml +++ b/_data/sidebar.yml @@ -490,6 +490,14 @@ sectionTitle: subgroup: 5 +- sbSecId: 1 + title: User ID Modules + link: /dev-docs/modules/index.html#user-id-modules + isHeader: 0 + isSectionHeader: 0 + sectionTitle: + subgroup: 5 + - sbSecId: 1 title: External Interfaces link: diff --git a/dev-docs/modules/index.md b/dev-docs/modules/index.md index 7102b79b82..6141433aa6 100644 --- a/dev-docs/modules/index.md +++ b/dev-docs/modules/index.md @@ -89,6 +89,32 @@ These modules may require accounts with a service provider. +## User ID Modules + +UserID modules conform to a consistent set of publisher controls. The publisher can choose to run multiple user id modules, define an overall amount of time they're willing to wait for +results. See [the userSync setConfig](/dev-docs/publisher-api-reference/setConfig.html#setConfig-ConfigureUserSyncing-UserSyncProperties) reference and the [User ID Module](/dev-docs/modules/userId.md) for more details. + +{% assign userid_module_pages = site.pages | where: "layout", "userid" %} + + + + + + + + + + +{% for page in userid_module_pages %} + + + + + +{% endfor %} + +
ModuleDescriptionEID Source
{{page.title}}{{page.description}}{{page.eidsource}}
+ ## Further Reading - [Source code of all modules](https://github.com/prebid/Prebid.js/tree/master/modules) diff --git a/dev-docs/modules/userId.md b/dev-docs/modules/userId.md index 2cc57d1712..09f311c199 100644 --- a/dev-docs/modules/userId.md +++ b/dev-docs/modules/userId.md @@ -71,6 +71,7 @@ Publishers using Google AdManager may want to sync one of the identifiers as the The PPID in GAM (which is unrelated to the PPID UserId Submodule) has strict rules; refer to [Google AdManager documentation](https://support.google.com/admanager/answer/2880055?hl=en) for them. Please note, Prebid uses a [GPT command](https://developers.google.com/publisher-tag/reference#googletag.PubAdsService) to sync identifiers for publisher convenience. It doesn't currently work for instream video requests, as Prebid typically interacts with the player, which in turn may interact with IMA. IMA does has a [similar method](https://developers.google.com/interactive-media-ads/docs/sdks/html5/client-side/reference/js/google.ima.ImaSdkSettings#setPpid) as GPT, but IMA does not gather this ID from GPT. {: .table .table-bordered .table-striped } + | Param under userSync | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | ppid | Optional | String | Must be a source from the [pbjs.getUserIdsAsEids()](#getUserIdsAsEids) array | `"pubcid.org"` | @@ -83,6 +84,7 @@ The table below has the options that are common across ID systems. See the secti {% assign count = 0 %} {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | May be any of the following values: {% for page in userid_pages -%}`"{{ page.useridmodule -}}"`{% if forloop.last == false -%}, {% endif -%}{% endfor -%} | `"unifiedId"` | @@ -364,6 +366,7 @@ Please find more details [Share encrypted signals with bidders (Beta)](https://s Alternatively, GAM can now pull IDs from Prebid for UserId submodules that [register with GAM](https://services.google.com/fb/forms/encryptedsignalsforpublishers-signalcollectorform/) For those registered submodules, publishers can [select Prebid UserID module (Beta) under "Signal collection deployment."](https://support.google.com/admanager/answer/10488752?hl=en). Publishers selecting this option should not also select those identifiers in the `encryptedSignalSources.sources.source` array. {: .table .table-bordered .table-striped } + | Param under userSync | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | encryptedSignalSources | Optional | Object | Publisher can specify the ESP config by adding encryptedSignal Object under userSync Object | | diff --git a/dev-docs/modules/userid-submodules/utiq.md b/dev-docs/modules/userid-submodules/utiq.md index 116f4eaa66..1b3f202ac2 100644 --- a/dev-docs/modules/userid-submodules/utiq.md +++ b/dev-docs/modules/userid-submodules/utiq.md @@ -12,6 +12,7 @@ Utiq is also the brand name of the service, which is provided by Utiq SA/NV. ## Utiq ID configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of the module | `"utiqId"` | From 8b6c2cd8c91d69015dc5b38c1aa03ea54b03d13f Mon Sep 17 00:00:00 2001 From: Denis Logachov Date: Thu, 28 Nov 2024 16:59:37 +0200 Subject: [PATCH 09/28] Adkernel: documenting OppaMedia alias (#5730) --- dev-docs/bidders/oppamedia.md | 36 +++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 dev-docs/bidders/oppamedia.md diff --git a/dev-docs/bidders/oppamedia.md b/dev-docs/bidders/oppamedia.md new file mode 100644 index 0000000000..6314959b81 --- /dev/null +++ b/dev-docs/bidders/oppamedia.md @@ -0,0 +1,36 @@ +--- +layout: bidder +title: OppaMedia +description: OppaMedia Bidder Adaptor +biddercode: oppamedia +pbjs: true +pbs: false +media_types: banner, native, video +gvl_id: 14 (adkernel) +tcfeu_supported: true +usp_supported: true +coppa_supported: true +gpp_supported: true +pbs_app_supported: true +schain_supported: true +userIds: all +fpd_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: true +aliasCode: adkernel +sidebarType: 1 +--- + +### Note + +The OppaMedia bidding adapter requires setup and approval before implementation. Please reach out to for more details. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `host` | required | Host | `'cpm.oppa.media'` | `string` | +| `zoneId` | required | Zone Id | `30164` | `integer` | From 44c1b8e999080f74e6077df22eb0520be82e2ade Mon Sep 17 00:00:00 2001 From: Muki Seiler Date: Thu, 28 Nov 2024 17:17:20 +0100 Subject: [PATCH 10/28] Implement initial proposal for new userId module meta fields - #5060 (#5673) * Implement initial proposal for new userId module meta fields * Fix linting errors in sharedid md * Migrate all meta data to userId files * Fix linting issues in hadron.md * fix table in mediawallah * Fix dmd table * Fix novatiq id table * fix publisherlink table * Fix liveramp table * Fix trustpid table * Fix yahoo table * Fix yahoo table * Remove empty line * Remove empty line #2 --- _layouts/userid.html | 18 +++++ dev-docs/modules/idLibrary.md | 4 +- dev-docs/modules/userId.md | 64 ++++-------------- .../modules/userid-submodules/33across.md | 4 ++ dev-docs/modules/userid-submodules/admixer.md | 7 +- dev-docs/modules/userid-submodules/adquery.md | 3 + dev-docs/modules/userid-submodules/adriver.md | 4 ++ .../modules/userid-submodules/adtelligent.md | 6 +- dev-docs/modules/userid-submodules/amxrtb.md | 3 + .../modules/userid-submodules/audienceone.md | 7 +- .../modules/userid-submodules/britepool.md | 7 +- .../modules/userid-submodules/ceeIdSystem.md | 4 ++ dev-docs/modules/userid-submodules/cpexid.md | 7 +- dev-docs/modules/userid-submodules/criteo.md | 6 +- .../modules/userid-submodules/deepintent.md | 4 ++ dev-docs/modules/userid-submodules/dmd.md | 11 ++- dev-docs/modules/userid-submodules/euid.md | 7 +- dev-docs/modules/userid-submodules/fabrick.md | 7 +- dev-docs/modules/userid-submodules/floc.md | 3 + .../modules/userid-submodules/freepass.md | 4 ++ dev-docs/modules/userid-submodules/ftrack.md | 4 ++ dev-docs/modules/userid-submodules/gravito.md | 7 +- .../modules/userid-submodules/growthcode.md | 7 +- dev-docs/modules/userid-submodules/hadron.md | 8 ++- dev-docs/modules/userid-submodules/id5.md | 7 +- dev-docs/modules/userid-submodules/idplus.md | 6 +- dev-docs/modules/userid-submodules/idx.md | 4 +- dev-docs/modules/userid-submodules/imuid.md | 4 +- .../modules/userid-submodules/intentiq.md | 6 +- dev-docs/modules/userid-submodules/kinesso.md | 8 ++- .../modules/userid-submodules/liveintent.md | 4 ++ dev-docs/modules/userid-submodules/lotame.md | 7 +- .../modules/userid-submodules/mediawallah.md | 11 +-- dev-docs/modules/userid-submodules/merkle.md | 3 + dev-docs/modules/userid-submodules/netid.md | 3 + dev-docs/modules/userid-submodules/novatiq.md | 14 ++-- dev-docs/modules/userid-submodules/onekey.md | 4 +- dev-docs/modules/userid-submodules/pair.md | 4 +- .../modules/userid-submodules/parrable.md | 7 +- .../userid-submodules/publisherlink.md | 6 +- .../modules/userid-submodules/pubprovided.md | 67 ++++++++++--------- .../modules/userid-submodules/quantcast.md | 7 +- dev-docs/modules/userid-submodules/ramp.md | 11 ++- .../modules/userid-submodules/sharedid.md | 15 +++-- dev-docs/modules/userid-submodules/tapad.md | 7 +- dev-docs/modules/userid-submodules/teads.md | 4 ++ .../modules/userid-submodules/tncIdSystem.md | 3 +- .../modules/userid-submodules/trustpid.md | 6 +- dev-docs/modules/userid-submodules/unified.md | 7 +- .../modules/userid-submodules/unified2.md | 4 +- dev-docs/modules/userid-submodules/utiq.md | 3 + dev-docs/modules/userid-submodules/utiqMtp.md | 4 ++ dev-docs/modules/userid-submodules/yahoo.md | 19 +++--- dev-docs/modules/userid-submodules/yandex.md | 6 +- 54 files changed, 326 insertions(+), 141 deletions(-) diff --git a/_layouts/userid.html b/_layouts/userid.html index aff73773ec..deb991406f 100644 --- a/_layouts/userid.html +++ b/_layouts/userid.html @@ -30,6 +30,24 @@

Back to User ID Module

{{ page.title }}

+ + + + + + + + + + + + + + + + + +
Module{{ page.useridmodule }}
EID Source{{ page.eidsource }}
bidRequest.userId{{ page.bidRequestUserId }}
Example{{ page.example }}
{{content}} diff --git a/dev-docs/modules/idLibrary.md b/dev-docs/modules/idLibrary.md index f30dfa34ef..730cfde505 100644 --- a/dev-docs/modules/idLibrary.md +++ b/dev-docs/modules/idLibrary.md @@ -26,8 +26,9 @@ The module attempts to extract a persistant identifier in the following ways: To get started, add the module to your Prebid.js wrapper. From the command line: -{: .alert.alert-info :} +```bash gulp build --modules=idImportLibrary +``` ## Application Flow @@ -45,6 +46,7 @@ In the idLibrary module, the persistant id is fetched from the page and synced w ## Configuration {: .table .table-bordered .table-striped } + | Param | Required | Description | | --- | --- | --- | | url | yes | The url endpoint is used to post the MD5 hasheds| diff --git a/dev-docs/modules/userId.md b/dev-docs/modules/userId.md index 09f311c199..33d2e1b68d 100644 --- a/dev-docs/modules/userId.md +++ b/dev-docs/modules/userId.md @@ -204,9 +204,22 @@ The corresponding user id object and the eids array will look like this: {% assign userid_pages = site.pages | where: "layout", "userid" | sort_natural: "title" %} + + + + + + + {% for page in userid_pages %} -
  • {{page.title}}
  • + + + + + + {% endfor %} +
    ID System NamePrebid.js Attr: bidRequest.userIdEID SourceExample
    {{page.title}}{{page.bidRequestUserId}}{{page.eidsource}}{{page.example}}
    ## Bidder Adapter Implementation @@ -218,53 +231,6 @@ To add a custom data type for the response of `pbjs.getUserIdsAsEids()`, see oth Bidders that want to support the User ID module in Prebid.js need to update their bidder adapter to read the indicated bidRequest attributes and pass them to their endpoint. -{: .table .table-bordered .table-striped } -| ID System Name | ID System Host | Prebid.js Attr: bidRequest.userId. | EID Source | Example Value | -| --- | --- | --- | --- | --- | --- | -| 33Across ID | 33Across | 33acrossId | 33across.com | "1111" | -| Admixer ID | Admixer | admixerId | admixer.net | "1111" | -| adQuery QiD | adQuery | qid | adquery.io | "p9v2dpnuckkzhuc..." | -| Adriver ID | Adriver | adriverId | adriver.ru | "1111" | -| Adtelligent ID | Adtelligent | adtelligentId | adtelligent.com | `"1111"` | -| AMX ID | AMX | amxId | amxdt.net | "3ca11058-..." | -| BritePool ID | BritePool | britepoolid | britepool.com | "1111" | -| AudienceOne ID | DAC | dacId | dac.co.jp | {"id": "1111"} | -| DeepIntent ID | Deep Intent | deepintentId | deepintent.com | "1111" | -| DMD ID | DMD | dmdId | hcn.health | "1111" | -| ceeId | ceeId | ceeId | ceeid.eu | "111111" | -| Czech Ad ID | czechAdId | czechAdId | czechadid.cz | "1111" | -| CriteoID | Criteo | criteoId | criteo.com | "1111" | -| Fabrick ID | Neustar | fabrickId | neustar.biz | "1111" | -| FLoC ID | n/a | flocId | | | -| GrowthCode ID | GrowthCode | growthCodeId | growthcode.io | "1111" | -| Hadron ID | Audigent | hadronId | audigent.com | {"hadronId":"user-hadron-id", "auSeg":["segment1", "segment2"]} | -| ID+ | Zeotap | IDP | zeotap.com | "1111" | -| ID5 ID | ID5 | id5id | id5-sync.com | {uid: "1111", ext: { linkType: 2, abTestingControlGroup: false } } | -| IdentityLink | LiveRamp | idl_env | liveramp.com | "1111" | -| Intent IQ ID | Intent IQ | intentiqid | intentiq.com | "1111" | -| Kinesso ID | Kinesso | kpuid | kpuid.com | "1111" | -| LiveIntent ID | Live Intent | lipb.lipbid | liveintent.com | "1111" | -| Lotame Panorama ID | Lotame | lotamePanoramaId | crwdcntrl.net | "e4b9..." | -| MediaWallah OpenLink ID | MediaWallah | mwOpenLinkId | mediawallahscript.com | "1111" | -| merkleID | Merkle | merkleId | merkleinc.com | "1111" | -| naveggId | Navegg | naveggId | navegg.com | "1111" | -| netID | netID | netId | netid.de | "fH5A..." | -| Novatiq ID | Novatiq | novatiqId | novatiq.com | "1111" | -| Parrable ID | Parrable | parrableId | parrable.com | {"eid":"01.15946..."} | -| Publisher Link ID | n/a | publinkId | epsilon.com | | -| PubProvided ID | n/a | pubProvidedId | publisher domain | "1111" | -| Quantcast ID | n/a | quantcastId | quantcast.com | "1111" | -| Rewarded Interest ID | Rewarded Interest | rewardedInterestId | rewardedinterest.com | "1111" | -| Tapad ID | Tapad | tapadId | tapad.com | "1111" | -| Teads ID | Teads | teadsId | teads.com | "1111" | -| SharedID (PBJS 5.x) | n/a | pubcid | pubcid.org | "1111" | -| SharedID (PBJS 4.x)| Prebid | sharedid | sharedid.org | {"id":"01EAJWWN...", "third":"01EAJ..."} | -| Unified ID | Trade Desk | tdid | adserver.org | "1111" | -| ConnectID | Yahoo | connectId | yahoo.com | {"connectId": "72d04af6..."} | -| FreePass ID | FreePass | freepassId | | "1111" | -| UtiqMtp ID | Utiq | utiqMtpId | utiq-mtp.com | "1111" | -| Yandex ID | Yandex | yandexId | yandex.com | "11111111111111111" | - For example, the adapter code might do something like: ```javascript @@ -355,8 +321,6 @@ If you're an ID provider that wants to get on this page: * Add a new row to `/dev-docs/modules/userId.md#prebidjs-adapters` * Submit a documentation Pull Request - - ## ESP Configurations Google now supports Encrypted Signals for Publishers(ESP), a program that allows publishers can explicitly share encrypted signals on bid requests with third-party bidders. User ID modules now support code which will register the signal sources and encrypted signals are created and are sent to GAM request in a3p parameter. 'encryptedSignal' configuration under userSync Module will help to configure signal sources. diff --git a/dev-docs/modules/userid-submodules/33across.md b/dev-docs/modules/userid-submodules/33across.md index d63c246e10..0ec7bd2237 100644 --- a/dev-docs/modules/userid-submodules/33across.md +++ b/dev-docs/modules/userid-submodules/33across.md @@ -3,6 +3,9 @@ layout: userid title: 33Across ID description: 33Across ID User ID sub-module useridmodule: 33acrossIdSystem +bidRequestUserId: 33acrossId +eidsource: 33across.com +example: '"1111"' --- @@ -21,6 +24,7 @@ gulp build --modules=33acrossIdSystem,userId The following configuration parameters are available: {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this sub-module | `"33acrossId"` | diff --git a/dev-docs/modules/userid-submodules/admixer.md b/dev-docs/modules/userid-submodules/admixer.md index 1ceb62cafb..4a56a0f0d3 100644 --- a/dev-docs/modules/userid-submodules/admixer.md +++ b/dev-docs/modules/userid-submodules/admixer.md @@ -3,6 +3,9 @@ layout: userid title: AdmixerID description: AdmixerID User ID sub-module useridmodule: admixerIdSystem +bidRequestUserId: admixerId +eidsource: admixer.net +example: '"1111"' --- @@ -12,12 +15,14 @@ The Admixer privacy policy is at Add Admixer ID module to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=admixerIdSystem +``` ## AdmixerID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | `"admixerId"` | `"admixerId"` | diff --git a/dev-docs/modules/userid-submodules/adquery.md b/dev-docs/modules/userid-submodules/adquery.md index df509d54ea..7b24a99d9b 100644 --- a/dev-docs/modules/userid-submodules/adquery.md +++ b/dev-docs/modules/userid-submodules/adquery.md @@ -3,6 +3,9 @@ layout: userid title: adQuery QiD description: adQuery QiD User ID sub-module useridmodule: adqueryIdSystem +bidRequestUserId: qid +eidsource: adquery.io +example: '"p9v2dpnuckkzhuc"' --- diff --git a/dev-docs/modules/userid-submodules/adriver.md b/dev-docs/modules/userid-submodules/adriver.md index e1f6b48b7f..a4d57747aa 100644 --- a/dev-docs/modules/userid-submodules/adriver.md +++ b/dev-docs/modules/userid-submodules/adriver.md @@ -3,11 +3,15 @@ layout: userid title: Adriver ID description: Adriver ID User ID sub-module useridmodule: adriverId +bidRequestUserId: adriverId +eidsource: adriver.ru +example: '"1111"' --- ## Adriver ID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module: `"adriverId"` | `"adriverId"` | diff --git a/dev-docs/modules/userid-submodules/adtelligent.md b/dev-docs/modules/userid-submodules/adtelligent.md index ac210e75fd..f10adc76b6 100644 --- a/dev-docs/modules/userid-submodules/adtelligent.md +++ b/dev-docs/modules/userid-submodules/adtelligent.md @@ -3,6 +3,9 @@ layout: userid title: Adtelligent description: Adtelligent User ID sub-module useridmodule: adtelligentIdSystem +bidRequestUserId: adtelligentId +eidsource: adtelligent.com +example: '"1111"' --- @@ -10,8 +13,9 @@ The [Adtelligent](https://adtelligent.com) ID system is a unique per-session use Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=userId,adtelligentIdSystem +``` ## Adtelligent Configuration diff --git a/dev-docs/modules/userid-submodules/amxrtb.md b/dev-docs/modules/userid-submodules/amxrtb.md index 8ab6d0eef4..b03199e172 100644 --- a/dev-docs/modules/userid-submodules/amxrtb.md +++ b/dev-docs/modules/userid-submodules/amxrtb.md @@ -3,6 +3,9 @@ layout: userid title: AMX ID description: AMX ID User ID sub-module useridmodule: amxIdSystem +bidRequestUserId: amxId +eidsource: amxdt.net +example: '"3ca11058-..."' --- diff --git a/dev-docs/modules/userid-submodules/audienceone.md b/dev-docs/modules/userid-submodules/audienceone.md index 74d8d5bfee..158640c893 100644 --- a/dev-docs/modules/userid-submodules/audienceone.md +++ b/dev-docs/modules/userid-submodules/audienceone.md @@ -3,6 +3,9 @@ layout: userid title: AudienceOne ID by DAC description: AudienceOne ID by DAC User ID sub-module useridmodule: dacIdSystem +bidRequestUserId: dacId +eidsource: dac.co.jp +example: {"id": "1111"} --- @@ -11,12 +14,14 @@ Please visit [solutions.dac.co.jp/audienceone](https://solutions.dac.co.jp/audie Add the AudienceOne ID to your Prebid.js Package with: -{: .alert.alert-info :} +```bash gulp build --modules=dacIdSystem +``` ## AudienceOne ID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module | `"dacId"` | diff --git a/dev-docs/modules/userid-submodules/britepool.md b/dev-docs/modules/userid-submodules/britepool.md index 9e24d92391..d96c00a0d5 100644 --- a/dev-docs/modules/userid-submodules/britepool.md +++ b/dev-docs/modules/userid-submodules/britepool.md @@ -4,6 +4,9 @@ title: BritePool description: BritePool User ID sub-module useridmodule: britepoolIdSystem enable_download: false +bidRequestUserId: britepoolid +eidsource: britepool.com +example: '"1111"' --- {: .alert.alert-warning :} @@ -14,8 +17,9 @@ integration partners (such as PubMatic), are able to maximize revenues without c Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=britepoolIdSystem +``` ## BritePool Registration @@ -24,6 +28,7 @@ Please reach out to [prebid@britepool.com](mailto:prebid@britepool.com) and requ ## BritePool Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | `"britepoolId"` | `"britepoolId"` | diff --git a/dev-docs/modules/userid-submodules/ceeIdSystem.md b/dev-docs/modules/userid-submodules/ceeIdSystem.md index 59194e1150..3ab6277289 100644 --- a/dev-docs/modules/userid-submodules/ceeIdSystem.md +++ b/dev-docs/modules/userid-submodules/ceeIdSystem.md @@ -3,6 +3,9 @@ layout: userid title: CEEIdSystem description: CEEID User ID sub-module useridmodule: ceeIdSystem +bidRequestUserId: ceeId +eidsource: ceeid.eu +example: '"1111"' --- ## Prebid Configuration @@ -16,6 +19,7 @@ gulp build --modules=ceeIdSystem ## CEEID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of CEEID user ID module. | `"ceeId"` | diff --git a/dev-docs/modules/userid-submodules/cpexid.md b/dev-docs/modules/userid-submodules/cpexid.md index ee9a48fa42..f1c543c6c0 100644 --- a/dev-docs/modules/userid-submodules/cpexid.md +++ b/dev-docs/modules/userid-submodules/cpexid.md @@ -3,16 +3,21 @@ layout: userid title: Czech Ad ID (czechAdId) description: Czech Ad ID (czechAdId) User ID sub-module useridmodule: czechAdIdSystem +bidRequestUserId: czechAdId +eidsource: czechadid.cz +example: '"1111"' --- Czech Ad ID is a joint project of publishers of the [CPEx alliance](https://www.cpex.cz/) and [Seznam.cz](https://www.seznam.cz). It is a deterministic user ID that offers cross-domain and cross-device identification. For more information see [czechadid.cz](https://www.czechadid.cz)). -{: .alert.alert-info :} +```bash gulp build --modules=czechAdIdSystem +``` ## czechAdId Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module | `"czechAdId"` | diff --git a/dev-docs/modules/userid-submodules/criteo.md b/dev-docs/modules/userid-submodules/criteo.md index 8e48b94ce2..27d43641bd 100644 --- a/dev-docs/modules/userid-submodules/criteo.md +++ b/dev-docs/modules/userid-submodules/criteo.md @@ -3,6 +3,9 @@ layout: userid title: Criteo ID for Exchanges description: Criteo ID for Exchanges User ID sub-module useridmodule: criteoIdSystem +bidRequestUserId: criteoId +eidsource: criteo.com +example: '"1111"' --- @@ -13,8 +16,9 @@ The Criteo privacy policy is at [www.criteo.com/privacy/](https://www.criteo.com Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=criteoIdSystem +``` ## Criteo ID Configuration diff --git a/dev-docs/modules/userid-submodules/deepintent.md b/dev-docs/modules/userid-submodules/deepintent.md index 4640088296..171b2c0b4d 100644 --- a/dev-docs/modules/userid-submodules/deepintent.md +++ b/dev-docs/modules/userid-submodules/deepintent.md @@ -3,6 +3,9 @@ layout: userid title: Deepintent description: Deepintent User ID sub-module useridmodule: deepintentDpesIdSystem +bidRequestUserId: deepintentId +eidsource: deepintent.com +example: '"1111"' --- @@ -17,6 +20,7 @@ DPES ID is free to use and requires a simple registration with DeepIntent. Pleas ## Deepintent DPES ID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module: `"deepintentId"` | `"deepintentId"` | diff --git a/dev-docs/modules/userid-submodules/dmd.md b/dev-docs/modules/userid-submodules/dmd.md index 7e932dc0c0..95b86aea3f 100644 --- a/dev-docs/modules/userid-submodules/dmd.md +++ b/dev-docs/modules/userid-submodules/dmd.md @@ -3,6 +3,9 @@ layout: userid title: DMD ID by DMD Marketing Corp description: DMD ID by DMD Marketing Corp User ID sub-module useridmodule: dmdIdSystem +bidRequestUserId: dmdId +eidsource: hcn.health +example: '"1111"' --- @@ -12,8 +15,9 @@ For assistance setting up your module, please contact us at ` | `` | `` | `` | `` | @@ -23,8 +27,9 @@ Kinesso will then attach these users to deals ids that they will target in the O Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=kinessoIdSystem +``` ## Kinesso ID Registration @@ -33,6 +38,7 @@ You can set up Kinesso ID sub adapter by contacting Kinesso at +{: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module. | `'mwOpenLinkId'` | @@ -27,8 +32,6 @@ MediaWallah requires the creation of an accountId a partnerId in order to take a | params.accountId | Required | String | The MediaWallah assigned Account Id | `1000` | | params.partnerId | Required | String | The MediaWallah assign partner Id |`'1001'`| | params.uid | Optional | String | Your unique Id for the user or browser. Used for matching. | `'u-123xyz'` | -{: .table .table-bordered .table-striped } - ## MediaWallah OpenLinkID Examples diff --git a/dev-docs/modules/userid-submodules/merkle.md b/dev-docs/modules/userid-submodules/merkle.md index 71f583c6a9..9dd890e0f7 100644 --- a/dev-docs/modules/userid-submodules/merkle.md +++ b/dev-docs/modules/userid-submodules/merkle.md @@ -3,6 +3,9 @@ layout: userid title: Merkle ID description: Merkle IDUser ID sub-module useridmodule: merkleIdSystem +bidRequestUserId:merkleId +eidsource: merkleinc.com +example: '"1111"' --- diff --git a/dev-docs/modules/userid-submodules/netid.md b/dev-docs/modules/userid-submodules/netid.md index 67c2ff79a2..d02020a2bc 100644 --- a/dev-docs/modules/userid-submodules/netid.md +++ b/dev-docs/modules/userid-submodules/netid.md @@ -3,6 +3,9 @@ layout: userid title: netID description: netID User ID sub-module useridmodule: netIdSystem +bidRequestUserId: netId +eidsource: netid.de +example: '"fH5A..."' --- diff --git a/dev-docs/modules/userid-submodules/novatiq.md b/dev-docs/modules/userid-submodules/novatiq.md index cf86db5854..c409e68f16 100644 --- a/dev-docs/modules/userid-submodules/novatiq.md +++ b/dev-docs/modules/userid-submodules/novatiq.md @@ -3,6 +3,9 @@ layout: userid title: Novatiq Hyper ID description: Novatiq Hyper ID User ID sub-module useridmodule: novatiqIdSystem +bidRequestUserId: novatiqId +eidsource: novatiq.com +example: '"1111"' --- @@ -12,8 +15,9 @@ The [Novatiq](https://www.novatiq.com) proprietary dynamic Hyper ID is a unique, Enable by adding the Novatiq submodule to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=novatiqIdSystem,userId +``` Module activation and configuration: @@ -39,7 +43,8 @@ pbjs.setConfig({ ## Parameters for the Novatiq Module -
    +{: .table .table-bordered .table-striped } + | Param | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | Module identification: `"novatiq"` | `"novatiq"` | @@ -53,8 +58,6 @@ pbjs.setConfig({ | params.urlParams.useStandardUuid | Optional | Boolean | Use a standard UUID format, or the Novatiq UUID format | `false` | | params.urlParams.useSspId | Optional | Boolean | Send the sspid (sourceid) along with the sync request
    Makes the params.sourceid optional if set | `false` | | params.urlParams.useSspHost | Optional | Boolean | Send the ssphost along with the sync request | `false` | -{: .table .table-bordered .table-striped } -
    ## Novatiq Hyper ID with Prebid SharedID Support @@ -62,8 +65,9 @@ You can make use of the Prebid.js SharedId module as follows. Enable by adding the Novatiq and SharedId submodule to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=novatiqIdSystem,userId +``` Module activation and configuration: diff --git a/dev-docs/modules/userid-submodules/onekey.md b/dev-docs/modules/userid-submodules/onekey.md index 9b4d937868..f371228764 100644 --- a/dev-docs/modules/userid-submodules/onekey.md +++ b/dev-docs/modules/userid-submodules/onekey.md @@ -19,8 +19,9 @@ Background information: It can be added to you Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build –modules=userId,oneKeyIdSystem +``` ⚠️ This module works with a RTD module. Both must be configured. See the [OneKey RTD Module](/dev-docs/modules/oneKeyRtdProvider.html). @@ -32,6 +33,7 @@ Go to [onekey.community](https://onekey.community/) for more details. ## OneKey Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module | `"oneKeyData"` | diff --git a/dev-docs/modules/userid-submodules/pair.md b/dev-docs/modules/userid-submodules/pair.md index db98f896af..883c19d65b 100644 --- a/dev-docs/modules/userid-submodules/pair.md +++ b/dev-docs/modules/userid-submodules/pair.md @@ -11,12 +11,14 @@ reliance on third-party cookies. PAIR can help advertisers and publishers mainta Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=pairIdSystem +``` ## PAIR ID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of PAIR ID user ID module. | `"pairId"` | diff --git a/dev-docs/modules/userid-submodules/parrable.md b/dev-docs/modules/userid-submodules/parrable.md index d8aa3be3ea..99bdf612ec 100644 --- a/dev-docs/modules/userid-submodules/parrable.md +++ b/dev-docs/modules/userid-submodules/parrable.md @@ -4,6 +4,9 @@ title: Parrable ID description: Parrable ID User ID sub-module pbjs_version_notes: removed in 9.0 useridmodule: parrableIdSystem +bidRequestUserId: parrableId +eidsource: parrable.com +example: '{"eid":"01.15946..."}' --- @@ -11,8 +14,9 @@ The Parrable ID is a Full Device Identifier that can be used to identify a devic Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=parrableIdSystem +``` ## Parrable ID Registration @@ -25,6 +29,7 @@ The Parrable privacy policy as at [www.parrable.com/privacy-policy/](https://www In addition to the parameters documented above in the Basic Configuration section the following Parrable specific configuration is required: {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | params | Required | Object | Details for the Parrable ID. | | diff --git a/dev-docs/modules/userid-submodules/publisherlink.md b/dev-docs/modules/userid-submodules/publisherlink.md index 2f6f44e965..6cbace8f08 100644 --- a/dev-docs/modules/userid-submodules/publisherlink.md +++ b/dev-docs/modules/userid-submodules/publisherlink.md @@ -3,6 +3,9 @@ layout: userid title: Publisher Link description: Publisher Link User ID sub-module useridmodule: publinkIdSystem +bidRequestUserId: publinkId +eidsource: epsilon.com +example: --- @@ -24,13 +27,14 @@ The Publisher Link opt-out is included [here](https://www.epsilon.com/privacy/dm In addition to the parameters documented above in the Basic Configuration section the following Publisher Link specific configuration is available: {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module. | `'publinkId'` | | params | Required | Object | Customized parameters. | | | params.e | Required | String | Hashed email address of the user. Supports MD5 and SHA256. | `'7D320454942620664D96EF78ED4E3A2A'` | | params.site_id | Required | String | Site ID provided by Epsilon. | `'123456'` | -| params.api_key | Required | String | API key provided by Epsilon. | `'00000000-0000-0000-0000-00000000000'` +| params.api_key | Required | String | API key provided by Epsilon. | `'00000000-0000-0000-0000-00000000000'` | ## Publisher Link Examples diff --git a/dev-docs/modules/userid-submodules/pubprovided.md b/dev-docs/modules/userid-submodules/pubprovided.md index ba15abfe25..e533bd8c15 100644 --- a/dev-docs/modules/userid-submodules/pubprovided.md +++ b/dev-docs/modules/userid-submodules/pubprovided.md @@ -3,6 +3,9 @@ layout: userid title: PubProvided ID description: PubProvided ID User ID sub-module useridmodule: pubProvidedIdSystem +bidRequestUserId: pubProvidedId +eidsource: publisher domain +example: '"1111"' --- @@ -57,37 +60,37 @@ The PubProvided ID module allows publishers to set and pass a first-party user i }); ``` -If multiple parties are writing to this object in an undetermined order, a setup that feels quite awkward, they should each do something of this nature: - -```javascript -pbjs.mergeConfig({ - userSync: { - userIds: (() => { - const uidCfgs = pbjs.getConfig('userSync.userIds') || []; - let ppid = uidCfgs.find(cfg => cfg.name === 'pubProvidedId'); - if (!ppid) { - ppid = {name: 'pubProvidedId', params: {eids: []}}; - uidCfgs.push(ppid); - } - ppid.params.eids.push({ - source: "example.com", - uids: [{ - id: "example", - atype: 1, - ext: { - stype: "ppuid" - } - - }] - }) - return uidCfgs; - })() - } -}) -pbjs.refreshUserIds({submoduleNames: ['pubProvidedId']}) -``` + If multiple parties are writing to this object in an undetermined order, a setup that feels quite awkward, they should each do something of this nature: + + ```javascript + pbjs.mergeConfig({ + userSync: { + userIds: (() => { + const uidCfgs = pbjs.getConfig('userSync.userIds') || []; + let ppid = uidCfgs.find(cfg => cfg.name === 'pubProvidedId'); + if (!ppid) { + ppid = {name: 'pubProvidedId', params: {eids: []}}; + uidCfgs.push(ppid); + } + ppid.params.eids.push({ + source: "example.com", + uids: [{ + id: "example", + atype: 1, + ext: { + stype: "ppuid" + } -In each case, bid adapters will receive the eid values after consent is validated. The above examples, if calling `setConfig` instead of `mergeConfig`, will overwrite existing known IDs. If there is any possibility other id submodules have already been initiated or multiple scripts on the page are setting these fields, be sure to prefer `mergeConfig`. + }] + }) + return uidCfgs; + })() + } + }) + pbjs.refreshUserIds({submoduleNames: ['pubProvidedId']}) + ``` + + In each case, bid adapters will receive the eid values after consent is validated. The above examples, if calling `setConfig` instead of `mergeConfig`, will overwrite existing known IDs. If there is any possibility other id submodules have already been initiated or multiple scripts on the page are setting these fields, be sure to prefer `mergeConfig`. 2. This design allows for the setting of any number of uuids in the eids object. Publishers may work with multiple ID providers and nest their own ID within the same eids object. The opportunity to link a 1st party uuid and a 3rd party generated UUID presents publishers with a unique ability to address their users in a way demand sources will understand. @@ -105,12 +108,14 @@ This module is distinct from the Google Ad Manager PPID; which we enable setting Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=pubProvidedIdSystem +``` ## PubProvided Configuration {: .table .table-bordered .table-striped } + | Params under usersync.userIds[]| Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | ID value for the ID module | `"PubProvided"` | diff --git a/dev-docs/modules/userid-submodules/quantcast.md b/dev-docs/modules/userid-submodules/quantcast.md index 14ded4e370..0b4b145dff 100644 --- a/dev-docs/modules/userid-submodules/quantcast.md +++ b/dev-docs/modules/userid-submodules/quantcast.md @@ -3,14 +3,18 @@ layout: userid title: Quantcast ID description: Quantcast ID User ID sub-module useridmodule: quantcastIdSystem +bidRequestUserId: quantcastId +eidsource: quantcast.com +example: '"1111"' --- The Prebid Quantcast ID module stores a Quantcast ID in a first party cookie. The ID is then made available in the bid request. The ID from the cookie added in the bidstream allows Quantcast to more accurately bid on publisher inventories without third party cookies, which can result in better monetization across publisher sites from Quantcast. And, it’s free to use! For easier integration, you can work with one of our SSP partners, like PubMatic, who can facilitate the legal process as well as the software integration for you. Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=userId,quantcastIdSystem +``` Quantcast’s privacy policies for the services rendered can be found at @@ -26,6 +30,7 @@ The Quantcast ID module will only perform any action and return an ID in situati ## Quantcast ID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | `"quantcastId"` | `"quantcastId"` | diff --git a/dev-docs/modules/userid-submodules/ramp.md b/dev-docs/modules/userid-submodules/ramp.md index bde1b08d33..84f8f7e6d6 100644 --- a/dev-docs/modules/userid-submodules/ramp.md +++ b/dev-docs/modules/userid-submodules/ramp.md @@ -3,6 +3,9 @@ layout: userid title: LiveRamp RampID description: LiveRamp RampID User ID sub-module useridmodule: identityLinkIdSystem +bidRequestUserId: idl_env +eidsource: liveramp.com +example: '"1111"' --- @@ -10,8 +13,9 @@ RampID, formerly known as IdentityLink, provided by [LiveRamp](https://liveramp. Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=identityLinkIdSystem +``` ## RampID Registration @@ -22,17 +26,18 @@ The RampID privacy policy is at [liveramp.com/privacy/service-privacy-policy/](h ## RampID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of LiveRamp's user ID module. | `"identityLink"` | | params | Required | Object | Container of all module params. | | | params.pid | Required | String | This is the Placement ID, a unique identifier that is used to identify each publisher, obtained from registering with LiveRamp. | `"999"` | | params.notUse3P | Not required | Boolean | Property for choosing if a cookieable RampID envelope (RTIS) should be set and stored until the user authenticates which then will be replaced by an authenticated RampID envelope (ATS) (either `true` or `false`). | `false` | -| storage | Required | Object | This object defines where and for how long the results of the call to get a RampID envelope will be stored. | +| storage | Required | Object | This object defines where and for how long the results of the call to get a RampID envelope will be stored. | | | storage.type | Required | String | This parameter defines where the resolved RampID envelope will be stored (either `"cookie"` or `"html5"` localStorage). | `"cookie"` | | storage.name | Required | String | The name of the cookie or html5 localstorage where the resolved RampID envelope will be stored. LiveRamp requires `"idl_env"`. | `"idl_env"` | | storage.expires | Required | Integer | How long (in days) the RampID envelope information will be stored. To be GDPR and CCPA compliant, we strongly advise to set a 15-day TTL ("Time to Live" / expiration time). If you are not planning to obtain RampID envelopes for EU/EEA or U.S. users, we advise you to change the expiration time to 30 days. | `15` | -| storage.refreshInSeconds | Required | Integer | The amount of time (in seconds) the RampID envelope should be cached in storage before calling LiveRamp again to retrieve a potentially updated value for the RampID envelope. | `1800` +| storage.refreshInSeconds | Required | Integer | The amount of time (in seconds) the RampID envelope should be cached in storage before calling LiveRamp again to retrieve a potentially updated value for the RampID envelope. | `1800` | {: .alert.alert-info :} **NOTE:** The RampID envelope that is delivered to Prebid will be encrypted by LiveRamp with a rotating key to avoid unauthorized usage and to enforce privacy requirements. Therefore, we strongly recommend setting `storage.refreshInSeconds` to 30 minutes (1800 seconds) to ensure all demand partners receive an ID that has been encrypted with the latest key, has up-to-date privacy signals, and allows them to transact against it. diff --git a/dev-docs/modules/userid-submodules/sharedid.md b/dev-docs/modules/userid-submodules/sharedid.md index 4c2c224b6a..f68470e6ca 100644 --- a/dev-docs/modules/userid-submodules/sharedid.md +++ b/dev-docs/modules/userid-submodules/sharedid.md @@ -3,6 +3,9 @@ layout: userid title: SharedID description: SharedID User ID sub-module useridmodule: sharedIdSystem +bidRequestUserId: sharedid +eidsource: sharedid.org +example: '{"id":"01EAJWWN...", "third":"01EAJ..."}' --- @@ -13,25 +16,27 @@ SharedID into account. Prebid recommends implementing a method where users can Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=sharedIdSystem +``` ## SharedID ID Configuration In addition to the parameters documented above in the Basic Configuration section the following SharedID specific configuration is available: {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module. | `'sharedId'` | | params | Optional | Object | Customized parameters | | | params.create | Optional | Boolean | For publisher server support only. If true, the publisher's server will create the (pubcid) cookie. Default is true. | `true` | -| params.pixelUrl | Optional | String | For publisher server support only. Where to call out to for a server cookie -- see [Prebid Identity](/identity/sharedid.html) for more information. | `/wp-json/pubcid/v1/extend/` +| params.pixelUrl | Optional | String | For publisher server support only. Where to call out to for a server cookie -- see [Prebid Identity](/identity/sharedid.html) for more information. | `/wp-json/pubcid/v1/extend/` | | params.extend | Optional | Boolean | If true, the expiration time of the stored IDs will be refreshed during each page load. Default is false. | `false` | -| storage | Required | Object | The publisher must specify some kind of local storage in which to store the results of the call to get the user ID. This can be either cookie or HTML5 storage. | +| storage | Required | Object | The publisher must specify some kind of local storage in which to store the results of the call to get the user ID. This can be either cookie or HTML5 storage.| | | storage.expires | Integer | Required | How long the user ID information will be stored. | `365` | -| storage.name | String | Required | The name of the cookie or html5 local storage where the user ID will be stored. | `_pubcid` -| storage.type | String | Required | This is where the results of the user ID will be stored. Must be either: Must be either: "cookie" or "html5". For server side implementations, which have the best identifier life and revenue impact, this must be a cookie. | `cookie` +| storage.name | String | Required | The name of the cookie or html5 local storage where the user ID will be stored. | `_pubcid` | +| storage.type | String | Required | This is where the results of the user ID will be stored. Must be either: Must be either: "cookie" or "html5". For server side implementations, which have the best identifier life and revenue impact, this must be a cookie. | `cookie` | ## SharedID Examples diff --git a/dev-docs/modules/userid-submodules/tapad.md b/dev-docs/modules/userid-submodules/tapad.md index 7fdd8cfaa0..937ade5078 100644 --- a/dev-docs/modules/userid-submodules/tapad.md +++ b/dev-docs/modules/userid-submodules/tapad.md @@ -3,6 +3,9 @@ layout: userid title: Tapad ID description: Tapad ID User ID sub-module useridmodule: tapadIdSystem +bidRequestUserId: tapadId +eidsource: tapad.com +example: '"1111"' --- @@ -15,12 +18,14 @@ Tapad’s Privacy landing page containing links to region-specific Privacy Notic Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=userId,tapadIdSystem +``` ## Tapad ID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | `"tapadId"` | `"tapadId"` | diff --git a/dev-docs/modules/userid-submodules/teads.md b/dev-docs/modules/userid-submodules/teads.md index dd8f7fffcb..cf29808432 100644 --- a/dev-docs/modules/userid-submodules/teads.md +++ b/dev-docs/modules/userid-submodules/teads.md @@ -4,6 +4,9 @@ title: Teads ID description: Teads ID User ID sub-module useridmodule: teadsIdSystem pbjs_version_notes: please avoid using v7.20.0 and v7.21.0 +bidRequestUserId: teadsId +eidsource: teads.com +example: '"1111"' --- @@ -20,6 +23,7 @@ gulp build --modules=userId,teadsIdSystem Then configure the teadsId in your `userSync` configuration. {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | `"teadsId"` | `"teadsId"` | diff --git a/dev-docs/modules/userid-submodules/tncIdSystem.md b/dev-docs/modules/userid-submodules/tncIdSystem.md index d0c499e719..27d005b70e 100644 --- a/dev-docs/modules/userid-submodules/tncIdSystem.md +++ b/dev-docs/modules/userid-submodules/tncIdSystem.md @@ -21,7 +21,7 @@ gulp build --modules=tncIdSystem,userId ## TNCIdSystem module Configuration -Disclosure: This module loads external script unreviewed by the prebid.js community +{% include dev-docs/loads-external-javascript.md %} You can configure this submodule in your `userSync.userIds[]` configuration: @@ -49,6 +49,7 @@ pbjs.setConfig({ The following configuration parameters are available: {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this sub-module | `"tncId"` | diff --git a/dev-docs/modules/userid-submodules/trustpid.md b/dev-docs/modules/userid-submodules/trustpid.md index ab4ec4d7ac..ea4c4b8032 100644 --- a/dev-docs/modules/userid-submodules/trustpid.md +++ b/dev-docs/modules/userid-submodules/trustpid.md @@ -4,6 +4,9 @@ title: Trustpid description: Trustpid User ID sub-module pbjs_version_notes: not in 8.x useridmodule: trustpidSystem +bidRequestUserId: +eidsource: +example: --- {: .alert.alert-info :} @@ -16,9 +19,10 @@ Trustpid is also the brand name of the service, which is provided by Vodafone Sa ## Trustpid configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | -| name | Required | String | The name of the module | `"trustpid"` +| name | Required | String | The name of the module | `"trustpid"` | | params | Required | Object | Object with configuration parameters for trustpid User Id submodule | - | | params.maxDelayTime | Required | Integer | Max amount of time (in seconds) before looking into storage for data | 2500 | | bidders | Required | Array of Strings | An array of bidder codes to which this user ID may be sent. Currently required and supporting AdformOpenRTB | `['adf']` | diff --git a/dev-docs/modules/userid-submodules/unified.md b/dev-docs/modules/userid-submodules/unified.md index 5c9fc0856b..4a94c76a02 100644 --- a/dev-docs/modules/userid-submodules/unified.md +++ b/dev-docs/modules/userid-submodules/unified.md @@ -3,6 +3,9 @@ layout: userid title: Unified ID description: Unified ID User ID sub-module useridmodule: unifiedIdSystem +bidRequestUserId: tdid +eidsource: adserver.org +example: '"1111"' --- @@ -10,8 +13,9 @@ The Unified ID solution is provided by adsrvr.org and the Trade Desk. Add it to your Prebid.js package with: -{: .alert.alert-info :} +```bash gulp build --modules=unifiedIdSystem +``` ## Unified ID Registration @@ -25,6 +29,7 @@ The Unified ID privacy is covered under the [TradeDesk Services Privacy Policy]( ## Unified ID Configuration {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | `"unifiedId"` | `"unifiedId"` | diff --git a/dev-docs/modules/userid-submodules/unified2.md b/dev-docs/modules/userid-submodules/unified2.md index 5a6f105f0d..74593d37df 100644 --- a/dev-docs/modules/userid-submodules/unified2.md +++ b/dev-docs/modules/userid-submodules/unified2.md @@ -11,8 +11,9 @@ UID2 relies on user consent before an ID can be added to the bid stream. Consent To add UID2 to your Prebid.js package, run the following: -{: .alert.alert-info :} +```bash gulp build --modules=uid2IdSystem +``` ## Unified ID 2.0 Registration @@ -71,6 +72,7 @@ Prebid.js supports fully client side integration for UID2. See the [official UI The following parameters apply only to the Unified ID 2.0 module integration. {: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | ID value for the Unified ID 2.0 module - `"uid2"` | `"uid2"` | diff --git a/dev-docs/modules/userid-submodules/utiq.md b/dev-docs/modules/userid-submodules/utiq.md index 1b3f202ac2..0e7b92791f 100644 --- a/dev-docs/modules/userid-submodules/utiq.md +++ b/dev-docs/modules/userid-submodules/utiq.md @@ -3,6 +3,9 @@ layout: userid title: Utiq ID description: Utiq User ID sub-module useridmodule: utiqIdSystem +bidRequestUserId: utiId +eidsource: utiq.com +example: '"1111"' --- Utiq generates unique tokens, enabling improved efficiency in programmatic advertising while safeguarding transparency and control for end customers via `consenthub.utiq.com`. A website visitor’s Utiq is generated based on network identifiers provided by network operators and requires explicit user consent. diff --git a/dev-docs/modules/userid-submodules/utiqMtp.md b/dev-docs/modules/userid-submodules/utiqMtp.md index 854042d27e..94cbc2323c 100644 --- a/dev-docs/modules/userid-submodules/utiqMtp.md +++ b/dev-docs/modules/userid-submodules/utiqMtp.md @@ -3,6 +3,9 @@ layout: userid title: UtiqMtp ID description: UtiqMtp User ID sub-module useridmodule: utiqMtpIdSystem +bidRequestUserId: utiqMtpId +eidsource: utiq-mtp.com +example: '"1111"' --- Utiq generates unique tokens, enabling improved efficiency in programmatic advertising while safeguarding transparency and control for end customers via `consenthub.utiq.com`. A website visitor’s Utiq ID is generated based on network identifiers provided by network operators and requires explicit user consent. @@ -21,6 +24,7 @@ If you are interested in using Utiq on your website, please contact Utiq on +{: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | name | Required | String | The name of this module. | `"connectId"` | | params | Required | Object | Container of all module params. || -| params.pixelId | Required | Number | -The Yahoo-supplied publisher-specific pixel ID. | `"0000"` | +| params.pixelId | Required | Number | The Yahoo-supplied publisher-specific pixel ID. | `"0000"` | | params.he | Optional | String | The SHA-256 hashed user email address which has been lowercased prior to hashing. |`"ed8ddbf5a171981db8ef938596ca297d5e3f84bcc280041c5880dba3baf9c1d4"`| | params.puid | Optional | String | A domain-specific user identifier such as a first-party cookie. If not passed, a puid value will be auto-generated and stored in local and / or cookie storage. | `"ab9iibf5a231ii1db8ef911596ca297d5e3f84biii00041c5880dba3baf9c1da"` | -{: .table .table-bordered .table-striped } - ## Yahoo ConnectID Examples @@ -107,12 +109,11 @@ Finally, ConnectID follows all global privacy laws (such as the CCPA) and indust Please note that the storage related parameters are optional. We recommend that you omit them, since ConnectID module is pre-configured with the most optimal storage parameters already. -
    +{: .table .table-bordered .table-striped } + | Param under userSync.userIds[] | Scope | Type | Description | Example | | --- | --- | --- | --- | --- | | storage | Optional | Object | Defines where and for how long the results of the call to get a user ID will be stored. | | | storage.type | Optional | String | Defines where the resolved user ID will be stored (either 'cookie' or 'html5' local storage). | `'cookie'` | | storage.name | Optional | String | The name of the cookie or html5 local storage where the resolved user ID will be stored. | `'connectId'` | | storage.expires | Optional | Integer | How long (in days) the user ID information will be stored. | `15` | -{: .table .table-bordered .table-striped } -
    diff --git a/dev-docs/modules/userid-submodules/yandex.md b/dev-docs/modules/userid-submodules/yandex.md index 1b0f8bbbbc..7ff4e9ce0a 100644 --- a/dev-docs/modules/userid-submodules/yandex.md +++ b/dev-docs/modules/userid-submodules/yandex.md @@ -3,6 +3,9 @@ layout: userid title: Yandex ID description: Yandex User ID sub-module useridmodule: yandexIdSystem +bidRequestUserId: yandexId +eidsource: yandex.com +example: '"1111"' --- Yandex ID module is designed to improve the personalization of ads for publishers' users. This documentation provides information about the Yandex User ID module, and instructions to install it. @@ -11,8 +14,9 @@ Yandex ID module is designed to improve the personalization of ads for publisher Add the module to your Prebid.js package: -{: .alert.alert-info :} +```bash gulp build --modules=yandexIdSystem +``` ## Step 2. Enable Yandex ID From aa6df7e3ac95732b9184f479fa725750c3d45ebc Mon Sep 17 00:00:00 2001 From: Luca Corbo Date: Thu, 28 Nov 2024 19:16:46 +0100 Subject: [PATCH 11/28] WURFL RTD Module: enrich the ortb2.device object with WURFL data (#5712) See: https://github.com/prebid/Prebid.js/pull/12442 --- dev-docs/modules/wurflRtdProvider.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dev-docs/modules/wurflRtdProvider.md b/dev-docs/modules/wurflRtdProvider.md index 9ecd4cae12..a146b3efdb 100644 --- a/dev-docs/modules/wurflRtdProvider.md +++ b/dev-docs/modules/wurflRtdProvider.md @@ -22,7 +22,7 @@ This module loads a dynamically generated JavaScript from prebid.wurflcloud.com ## Description -The WURFL RTD module enriches the Prebid.js bid request's OpenRTB 2.0 device data with [WURFL device data](https://www.scientiamobile.com/wurfl-js-business-edition-at-the-intersection-of-javascript-and-enterprise/). The module populates the `device.ext.wurfl` with WURFL device capabilities, ensuring that all bidder adapters have access to enriched device data. At a minimum, three WURFL capabilities are made available to all adapters: `is_mobile`, `complete_device_name` and `form_factor`. +The WURFL RTD module enriches the Prebid.js bid request's OpenRTB 2.0 device data with [WURFL device data](https://www.scientiamobile.com/wurfl-js-business-edition-at-the-intersection-of-javascript-and-enterprise/). The module populates the `device` and `device.ext.wurfl` with WURFL device capabilities, ensuring that all bidder adapters have access to enriched device data. At a minimum, three WURFL capabilities are made available to all adapters: `is_mobile`, `complete_device_name` and `form_factor`. SSPs and other demand partners subscribed to this service with ScientiaMobile will also receive an expanded set of device properties, including more detailed detection for iOS devices (e.g., specific iPhone and iPad model information). For a comprehensive list of available device capabilities, please refer to the [WURFL device capabilities](https://www.scientiamobile.com/capabilities/?products%5B%5D=wurfl-js) documentation. @@ -42,8 +42,8 @@ The following scenarios are possible: | | SSP Adapter | SSP Server Side End-Point | | :------------------------ | :------------ | :--------------------------------------------------------------- | | SSP adapter is already passing the ORTB2 device to the server (auction endpoint). | No changes required. | Update backend logic to utilize the device data. | -| SSP adapter is not currently passing the data to server. | Update adapter to read `device.ext.wurfl` data and pass it to the endpoint. | Update backend logic to utilize the device data. | -| SSP doesn't have a Bidder Adapter. | Implement PreBid.js adapter and read `device.ext.wurfl` data and pass it to the endpoint. | Update end-point to read and utilize the data. | +| SSP adapter is not currently passing the data to server. | Update adapter to read `device` and/or `device.ext.wurfl` data and pass it to the endpoint. | Update backend logic to utilize the device data. | +| SSP doesn't have a Bidder Adapter. | Implement PreBid.js adapter and read `device` and/or `device.ext.wurfl` data and pass it to the endpoint. | Update end-point to read and utilize the data. | ## Usage From e7f462ef55fc951a752b0fdf8986a9a46b3518e5 Mon Sep 17 00:00:00 2001 From: Muki Seiler Date: Thu, 28 Nov 2024 19:18:40 +0100 Subject: [PATCH 12/28] Fix userId module link (#5738) --- dev-docs/modules/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/modules/index.md b/dev-docs/modules/index.md index 6141433aa6..41788113b3 100644 --- a/dev-docs/modules/index.md +++ b/dev-docs/modules/index.md @@ -92,7 +92,7 @@ These modules may require accounts with a service provider. ## User ID Modules UserID modules conform to a consistent set of publisher controls. The publisher can choose to run multiple user id modules, define an overall amount of time they're willing to wait for -results. See [the userSync setConfig](/dev-docs/publisher-api-reference/setConfig.html#setConfig-ConfigureUserSyncing-UserSyncProperties) reference and the [User ID Module](/dev-docs/modules/userId.md) for more details. +results. See [the userSync setConfig](/dev-docs/publisher-api-reference/setConfig.html#setConfig-ConfigureUserSyncing-UserSyncProperties) reference and the [User ID Module](/dev-docs/modules/userId) for more details. {% assign userid_module_pages = site.pages | where: "layout", "userid" %} From d1e5e3d617bef29ed19f293fe6409ed3b1dcce9e Mon Sep 17 00:00:00 2001 From: Komal Kumari <169047654+pm-komal-kumari@users.noreply.github.com> Date: Thu, 28 Nov 2024 23:51:45 +0530 Subject: [PATCH 13/28] Update code logic in floors module documentation (#5711) * Bug : Update logic to calculate deviceType for additional schema in floors module * Update dev-docs/modules/floors.md * Update dev-docs/modules/floors.md * Update dev-docs/modules/floors.md --------- Co-authored-by: Komal Kumari Co-authored-by: Muki Seiler --- dev-docs/modules/floors.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dev-docs/modules/floors.md b/dev-docs/modules/floors.md index 20abc03706..995c9cd850 100644 --- a/dev-docs/modules/floors.md +++ b/dev-docs/modules/floors.md @@ -559,11 +559,11 @@ e.g. let deviceType = getDeviceTypeFromUserAgent(navigator.userAgent); - if(deviceType = 'mobile') + if(deviceType === 'mobile') return 'mobile' - else if (deviceType = 'tablet') + else if (deviceType === 'tablet') return 'tablet' - else if (deviceType = 'desktop') + else if (deviceType === 'desktop') return 'desktop' } From 76ece8da6ee25b52f30e3ae54f0e0761d95c25a5 Mon Sep 17 00:00:00 2001 From: Patrick McCann Date: Thu, 28 Nov 2024 13:23:17 -0500 Subject: [PATCH 14/28] teads.md: add disclosure (#5572) * Update teads.md * Create an include for fingerprinting disclosure --------- Co-authored-by: Muki Seiler --- _includes/dev-docs/fingerprinting.md | 2 ++ dev-docs/bidders/teads.md | 4 ++++ 2 files changed, 6 insertions(+) create mode 100644 _includes/dev-docs/fingerprinting.md diff --git a/_includes/dev-docs/fingerprinting.md b/_includes/dev-docs/fingerprinting.md new file mode 100644 index 0000000000..0c230d30ec --- /dev/null +++ b/_includes/dev-docs/fingerprinting.md @@ -0,0 +1,2 @@ +{: .alert.alert-warning :} +This adapter uses JavaScript APIs commonly used in fingerprinting and may get your Prebid build flagged as a fingerprinting script. \ No newline at end of file diff --git a/dev-docs/bidders/teads.md b/dev-docs/bidders/teads.md index 52b57d77d0..dac0e35448 100644 --- a/dev-docs/bidders/teads.md +++ b/dev-docs/bidders/teads.md @@ -25,6 +25,10 @@ fpd_supported: false sidebarType: 1 --- +### Disclosure + +{% include dev-docs/fingerprinting.md %} + ### Notes 1. The Teads Bidding adapter requires setup before beginning. Please contact us on From 518021ec76b2a9f799a4721c7fc5ac05da9d9c9b Mon Sep 17 00:00:00 2001 From: Denis Logachov Date: Thu, 28 Nov 2024 20:31:33 +0200 Subject: [PATCH 15/28] Create spinx.md (#5736) --- dev-docs/bidders/spinx.md | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 dev-docs/bidders/spinx.md diff --git a/dev-docs/bidders/spinx.md b/dev-docs/bidders/spinx.md new file mode 100644 index 0000000000..a4a1e80d9f --- /dev/null +++ b/dev-docs/bidders/spinx.md @@ -0,0 +1,36 @@ +--- +layout: bidder +title: SpinX +description: SpinX Adaptor +biddercode: spinx +pbjs: true +pbs: false +media_types: banner, native, video +gvl_id: 1308 +tcfeu_supported: true +gpp_sids: tcfeu, usp +usp_supported: true +coppa_supported: true +pbs_app_supported: false +schain_supported: true +userIds: all +fpd_supported: true +prebid_member: false +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +floors_supported: true +aliasCode: adkernel +sidebarType: 1 +--- + +### Note + +The SpinX bidding adapter requires setup and approval before implementation. Please reach out to for more details. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|----------|----------|-----------------------|---------------------------|----------| +| `host` | required | RTB host | `'cpm.arteabee.com'` | `string` | +| `zoneId` | required | Zone Id | 30164 | `integer` | From 47ecce95e9425e392bb2f74b5c99b6a4d5b907b3 Mon Sep 17 00:00:00 2001 From: PGAMSSP <142323401+PGAMSSP@users.noreply.github.com> Date: Thu, 28 Nov 2024 20:32:41 +0200 Subject: [PATCH 16/28] PgamSSP Bid Adapter: add endpointId parameter to doc (#5700) * new adapter PGAMSSP * upd * hide parametr * hide parametr * add support gpp * add endpointId parameter to doc * add gvl_id * add gpp_sids --- dev-docs/bidders/pgamssp.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/dev-docs/bidders/pgamssp.md b/dev-docs/bidders/pgamssp.md index e132d8edb1..3db48e851d 100644 --- a/dev-docs/bidders/pgamssp.md +++ b/dev-docs/bidders/pgamssp.md @@ -4,11 +4,12 @@ title: PGAMSSP description: Prebid PGAMSSP Bidder Adapter biddercode: pgamssp usp_supported: true -tcfeu_supported: false +gvl_id: 1353 +tcfeu_supported: true coppa_supported: true schain_supported: true floors_supported: true -gpp_supported: true +gpp_sids: tcfeu, usstate_all, usp media_types: banner, video, native pbjs: true pbs: true @@ -23,4 +24,9 @@ safeframes_ok: true {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |---------------|----------|-----------------------|-----------|-----------| -| `placementId` | required | Placement Id | `'0'` | `'string'` | +| `placementId` | optional | Placement Id | `'0'` | `'string'` | +| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` | + +### Note + +For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId From ace2af3ad6aac984936cd803d6089ce17787a580 Mon Sep 17 00:00:00 2001 From: bretg Date: Wed, 4 Dec 2024 08:37:18 -0500 Subject: [PATCH 17/28] PBS docs: minor wordsmithing (#5747) * PBS docs: minor wordsmithing * lint --- prebid-server/developers/add-new-bidder-go.md | 142 +++++++++--------- .../developers/add-new-bidder-java.md | 8 +- 2 files changed, 75 insertions(+), 75 deletions(-) diff --git a/prebid-server/developers/add-new-bidder-go.md b/prebid-server/developers/add-new-bidder-go.md index 02f3eb8ae0..b18d63acdb 100644 --- a/prebid-server/developers/add-new-bidder-go.md +++ b/prebid-server/developers/add-new-bidder-go.md @@ -8,16 +8,16 @@ title: Prebid Server | Developers | Building a Bid Adapter (Go) # Prebid Server - New Bid Adapter (Go) {: .no_toc} -Thank you for your valuable contribution of a bid adapter to the open source Prebid Server project. Each new adapter expands the monetization possibilities for publishers and provides greater options to maximize their inventory's potential. We truly appreciate your support in making this ecosystem thrive! +- TOC +{:toc } + +Thank you for your contribution of a bid adapter to the open source Prebid Server project. Each new adapter expands the monetization possibilities for publishers and provides greater options to maximize their inventory's potential. We appreciate your support in making this ecosystem thrive! This document guides you through the process of developing a new bid adapter for your bidding server. We encourage you to look at [existing bid adapters](https://github.com/prebid/prebid-server/tree/master/adapters) for working examples and practical guidance. You can ask us questions by [submitting a GitHub issue](https://github.com/prebid/prebid-server/issues/new). {: .alert.alert-info :} There are two implementations of Prebid Server: [PBS-Go](https://github.com/prebid/prebid-server) and [PBS-Java](https://github.com/prebid/prebid-server-java). We recommend you build new adapters for PBS-Go and allow us to port it to PBS-Java within a couple of months. If you'd like to build both yourself, please also follow these [instructions for building an adapter in PBS-Java](/prebid-server/developers/add-new-bidder-java.html). -* TOC -{:toc } - ## Overview Bid adapters are responsible for translating a 'Prebid-flavored' OpenRTB Bid Request to your bidding server's protocol and mapping your server's response to a Prebid-flavored response. @@ -71,15 +71,15 @@ We are proud to run the Prebid Server project as a transparent and trustworthy h **Please take the time to read the rules in full.** Below is a summary of some of the rules which apply to your Prebid Server bid adapter: -* Adapters must include maintainer information with a group email address for Prebid.org to contact for ongoing support and maintenance. -* Your bidder's endpoint domain name cannot be fully variable. We will accept endpoint domains that include account IDs, but we do not like them, and Prebid Server host companies may disable adapters using this approach if there are technical issues with it. We will not accept hostnames that have a required dynamic element for the purpose of sending traffic to different geographic regions. -* If you have a client-side adapter, all parameters (including biddercodes and aliases) must be consistent between your client- and server-side adapters. This allows publishers to utilize the PBJS [s2sTesting module](/dev-docs/modules/s2sTesting.html). -* Adapters must not modify bids from demand partners, except to either change the bid from gross to net or from one currency to another. -* Adapters must use the functions provided by the core framework for all external communication. Initiation of any form of network connection outside of what is provided by the core framework is strictly prohibited. No exceptions will be made for this rule. -* Adapters must support the creation of multiple concurrent instances. This means adapters may not mutate global or package scoped variables. -* Bidding server endpoints should prefer secure HTTPS to protect user privacy and should allow keep alive connections (preferably with HTTP/2 support) to increase host performance. -* Adapters must annotate the bid response with the proper media type, ideally based on the response from the bidding server. -* Bid adapters must not create their own transaction IDs or overwrite the tids supplied by Prebid. +- Adapters must include maintainer information with a group email address for Prebid.org to contact for ongoing support and maintenance. +- Your bidder's endpoint domain name cannot be fully variable. We will accept endpoint domains that include account IDs, but we do not like them, and Prebid Server host companies may disable adapters using this approach if there are technical issues with it. We will not accept hostnames that have a required dynamic element for the purpose of sending traffic to different geographic regions. +- If you have a client-side adapter, all parameters (including biddercodes and aliases) must be consistent between your client- and server-side adapters. This allows publishers to utilize the PBJS [s2sTesting module](/dev-docs/modules/s2sTesting.html). +- Adapters must not modify bids from demand partners, except to either change the bid from gross to net or from one currency to another. +- Adapters must use the functions provided by the core framework for all external communication. Initiation of any form of network connection outside of what is provided by the core framework is strictly prohibited. No exceptions will be made for this rule. +- Adapters must support the creation of multiple concurrent instances. This means adapters may not mutate global or package scoped variables. +- Bidding server endpoints should prefer secure HTTPS to protect user privacy and should allow keep alive connections (preferably with HTTP/2 support) to increase host performance. +- Adapters must annotate the bid response with the proper media type, ideally based on the response from the bidding server. +- Bid adapters must not create their own transaction IDs or overwrite the tids supplied by Prebid. {: .alert.alert-warning :} Failure to follow the rules will lead to delays in approving your adapter. If you'd like to discuss an exception to a rule, please make your request by [submitting a GitHub issue](https://github.com/prebid/prebid-server/issues/new). @@ -150,20 +150,20 @@ userSync: Modify this template for your bid adapter: -* The endpoint can be static if you only have one data center or use a Global Load Balancer as described in 'Planning Your Adapter' above. -* Remove the `endpointCompression` value if your bidding server does not accept gzip compressed bid requests. Setting this value to `gzip` will save on network bandwidth at the expense of slightly increased cpu and memory usage for the host. -* The `geoscope` parameter is not currently read programmatically. Instead, it's intended to be used by PBS host companies to disable your adapter in geographic regions where you don't do business. However, we may make a module for this someday, so we ask that you follow this syntax for `geoscope`: - * YAML array - * Values can be either a 3-letter country code, "EEA", or "global". (EEA means European Economic Area) - * Values can be negated. e.g. "!EEA" -* Change the maintainer email address to a group distribution list on your ad server's domain. A distribution list is preferred over an individual mailbox to allow for robustness, as roles and team members naturally change. -* Change the `gvlVendorID` from the sample value of `42` to the id of your bidding server as registered with the [GDPR Global Vendor List (GVL)](https://iabeurope.eu/tcf-for-vendors/), or remove this line entirely if your bidding server is not registered with IAB Europe. -* Remove the `openrtb.version` parameter if your adapter cannot receive the OpenRTB 2.6 data model. In this case, Prebid Server will downgrade values back to their 2.5 ext locations. New OpenRTB 2.6 fields are still passed to adapters. -* If absolutely necessary, change the `modifyingVastXmlAllowed` value to `false` to opt-out of [video impression tracking](https://github.com/prebid/prebid-server/issues/1015). However, please note that Prebid Server host companies depend on this feature being enabled to track video analytics. This feature has been live for many years with no known problems. -* Remove the `capabilities` (app/site/dooh) and `mediaTypes` (banner/video/audio/native) combinations which your adapter does not support. (Note: 'dooh' is [Digital Out Of Home](/prebid-server/use-cases/pbs-dooh.html)) -* Add an `extra_info` field if you'd like to pass additional values that your adapter may need. See below for an example. -* Add the `disabled` flag and set it to true if you would like to unregister adapter from the core. It's enabled by default. -* Follow the [User Sync Configuration](#user-sync-configuration) documentation below to configure the endpoints for your bid adapter, or remove the `userSync` section if not supported. +- The endpoint can be static if you only have one data center or use a Global Load Balancer as described in 'Planning Your Adapter' above. +- Remove the `endpointCompression` value if your bidding server does not accept gzip compressed bid requests. Setting this value to `gzip` will save on network bandwidth at the expense of slightly increased cpu and memory usage for the host. +- The `geoscope` parameter is not currently read programmatically. Instead, it's intended to be used by PBS host companies to disable your adapter in geographic regions where you don't do business. However, we may make a module for this someday, so we ask that you follow this syntax for `geoscope`: + - YAML array + - Values can be either a 3-letter country code, "EEA", or "global". (EEA means European Economic Area) + - Values can be negated. e.g. "!EEA" +- Change the maintainer email address to a group distribution list on your ad server's domain. A distribution list is preferred over an individual mailbox to allow for robustness, as roles and team members naturally change. +- Change the `gvlVendorID` from the sample value of `42` to the id of your bidding server as registered with the [GDPR Global Vendor List (GVL)](https://iabeurope.eu/tcf-for-vendors/), or remove this line entirely if your bidding server is not registered with IAB Europe. +- Remove the `openrtb.version` parameter if your adapter cannot receive the OpenRTB 2.6 data model. In this case, Prebid Server will downgrade values back to their 2.5 ext locations. New OpenRTB 2.6 fields are still passed to adapters. +- If absolutely necessary, change the `modifyingVastXmlAllowed` value to `false` to opt-out of [video impression tracking](https://github.com/prebid/prebid-server/issues/1015). However, please note that Prebid Server host companies depend on this feature being enabled to track video analytics. This feature has been live for many years with no known problems. +- Remove the `capabilities` (app/site/dooh) and `mediaTypes` (banner/video/audio/native) combinations which your adapter does not support. (Note: 'dooh' is [Digital Out Of Home](/prebid-server/use-cases/pbs-dooh.html)) +- Add an `extra_info` field if you'd like to pass additional values that your adapter may need. See below for an example. +- Add the `disabled` flag and set it to true if you would like to unregister adapter from the core. It's enabled by default. +- Follow the [User Sync Configuration](#user-sync-configuration) documentation below to configure the endpoints for your bid adapter, or remove the `userSync` section if not supported. #### Additional Bidder Info Examples @@ -355,7 +355,7 @@ Publishers will provide extra information using an OpenRTB 2.x Bid Request Exten We request you do not duplicate information already present in the [OpenRTB 2.x Bid Request specification](https://github.com/InteractiveAdvertisingBureau/openrtb2.x) or already part of an established Prebid convention. For example, your bidder parameters should not include first party data, bid floors, schain, video parameters, referrer information, or privacy consent including COPPA, CCPA, and GDPR TCF. For video parameters in particular, you must prefer the OpenRTB 2.x Bid Request standard of `request.imp[].video`. {: .alert.alert-warning :} -You may not try so set the full endpoint domain from a publisher-specified bidder parameter. Prebid Server is not an open proxy. If absolutely necessary, you may specify a *portion* of the domain as a parameter to support geo regions or account specific servers. However, this is discouraged and may degrade the performance of your adapter since the server needs to maintain more outgoing connections. Host companies may choose to disable your adapter if it uses a dynamically configured domain. +You may not try to set the full endpoint domain from a publisher-specified bidder parameter. Prebid Server is not an open proxy. If absolutely necessary, you may specify a *portion* of the domain as a parameter to support geo regions or account specific servers. However, this is discouraged and may degrade the performance of your adapter since the server needs to maintain more outgoing connections. Host companies may choose to disable your adapter if it uses a dynamically configured domain. Create a file with the path `static/bidder-params/{bidder}.json` and use [JSON Schema](https://json-schema.org/understanding-json-schema/) to define your bidder parameters. Prebid Server requires this file for every adapter, even if yours doesn't require bidder parameters (see the 'no parameters' example at the end of this section). @@ -545,8 +545,8 @@ Each adapter has its own directory (a 'package' in Go parlance) for all code and Create a file with the path `adapters/{bidder}/{bidder}.go`. Your bid adapter code will need to implement and export: -* The `adapters.Builder` method to create a new instance of the adapter based on the host configuration. -* The `adapters.Bidder` interface consisting of the `MakeRequests` method to create outgoing requests to your bidding server and the `MakeBids` method to create bid responses. +- The `adapters.Builder` method to create a new instance of the adapter based on the host configuration. +- The `adapters.Bidder` interface consisting of the `MakeRequests` method to create outgoing requests to your bidding server and the `MakeBids` method to create bid responses. {: .alert.alert-info :} **ACCESS MODIFIERS:** Go has only two kinds of access modifiers, exported and private, which are scoped at the package level. The access modifier is encoded into the name of the type or method. Names starting with an upper case letter are exported whereas names starting with a lower case letter are private. Please only export the three required methods and keep everything else private. @@ -667,8 +667,8 @@ The first argument, `bidderName`, is the name of the bidder being built. This ma The second argument, `config`, is all the configuration values set for your adapter. However, not all of this information is intended for use by the `Builder` method. The only two fields relevant here are `config.Endpoint` and `config.ExtraAdapterInfo`: -* `config.Endpoint` is the base url of your bidding server and may be interpreted as either a literal address or as a templated macro to support dynamic paths. -* `config.ExtraAdapterInfo` is an optional setting may be used for any other values your adapter may need, such as an application token or publisher allow/deny list. You may interpret this string however you like, although JSON is a common choice. +- `config.Endpoint` is the base url of your bidding server and may be interpreted as either a literal address or as a templated macro to support dynamic paths. +- `config.ExtraAdapterInfo` is an optional setting may be used for any other values your adapter may need, such as an application token or publisher allow/deny list. You may interpret this string however you like, although JSON is a common choice. The third argument, `server`, is a set of host configs. It can be passed in two different ways. One way is to pass this info in the auction request itself at the path `ext.prebid.server` (i.e. `ext.prebid.server.datacenter`). The second way is to pass this info as a configuration data structure. @@ -770,9 +770,9 @@ if request.Imp[i].W == nil && request.Imp[i].H == nil && len(request.Imp[i].Form The second argument, `requestInfo`, is for extra information and helper methods provided by the core framework. This includes: -* `requestInfo.PbsEntryPoint` to access the entry point of the bid request, commonly used to determine if the request is for AMP or for a [Long Form Video Ad Pod](/dev-docs/modules/adpod.html). -* `requestInfo.GlobalPrivacyControlHeader` to read the value of the `Sec-GPC` Global Privacy Control (GPC) header of the bid request. -* `requestInfo.ConvertCurrency` a method to perform currency conversions. +- `requestInfo.PbsEntryPoint` to access the entry point of the bid request, commonly used to determine if the request is for AMP or for a [Long Form Video Ad Pod](/dev-docs/modules/adpod.html). +- `requestInfo.GlobalPrivacyControlHeader` to read the value of the `Sec-GPC` Global Privacy Control (GPC) header of the bid request. +- `requestInfo.ConvertCurrency` a method to perform currency conversions. The `MakeRequests` method is expected to return a slice (similar to a C# `List` or a Java `ArrayList`) of `adapters.RequestData` objects representing the HTTP calls to be sent to your bidding server and a slice of type `error` for any issues encountered creating them. If there are no HTTP calls or if there are no errors, please return `nil` for both return values. Please do not add `nil` items in the slices. @@ -1076,8 +1076,8 @@ aliasOf: "appnexus" Notes: -* The alias name must be unique for the first 6 chars as noted above for biddercodes. -* This process will be simplified someday. +- The alias name must be unique for the first 6 chars as noted above for biddercodes. +- This process will be simplified someday. {: .alert.alert-info :} Note on aliases and TCF Global Vendor List IDs: if an alias entry does not have its own GVLID but wishes to claim GDPR support, @@ -1128,8 +1128,8 @@ You should use an obviously fake endpoint for your tests. There's no reason to u Each test case should be written in its own JSON file with a succinct, yet descriptive, name of what's being tested. The files should be located in either: -* `adapters/{bidder}/{bidder}test/exemplary/` for straight forward "happy path" tests. We expect to see tests here for each supported media type. -* `adapters/{bidder}/{bidder}test/supplemental` for tests which produce errors or cover more complicated scenarios. +- `adapters/{bidder}/{bidder}test/exemplary/` for straight forward "happy path" tests. We expect to see tests here for each supported media type. +- `adapters/{bidder}/{bidder}test/supplemental` for tests which produce errors or cover more complicated scenarios. The format of a JSON test is as follows: @@ -1382,41 +1382,41 @@ The Example Bidding adapter requires setup before beginning. Please contact us a Notes on the metadata fields: -* Add `pbs: true`. If you also have a [Prebid.js bid adapter](/dev-docs/bidder-adaptor.html), add `pbjs: true`. Default is false for both. -* If you're on the IAB's Global Vendor List, place your ID in `gvl_id`. No default. -* If you support the IAB's TCF protocol and have a GVL ID, you may add `tcfeu_supported: true`. Default is false. -* If you support the US Privacy consentManagementUsp module, add `usp_supported: true`. Default is false. -* If you support one or more userId modules, add `userId: (list of supported vendors)`. Default is none. -* If you support video, native, or audio mediaTypes add `media_types: video, native, audio`. 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`. No defaults. -* If you support COPPA, add `coppa_supported: true`. Default is false. -* If you support sections within the IAB's GPP consent string, add `gpp_sids:' and then which sections you support: tcfeu, tcfca, usnat, usstate_all, usp -* If you support the [supply chain](/dev-docs/modules/schain.html) feature, add `schain_supported: true`. Default is false. -* If you support adding a demand chain on the bid response, add `dchain_supported: true`. Default is false. -* 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. No default. -* If your bidder supports mobile apps, set `pbs_app_supported: true`. No default value. -* If your bidder supports deals, set `deals_supported: true`. No default value. -* If your bidder supports floors, set `floors_supported: true`. No default value. -* If you support first party data, you must document what exactly is supported and then you may set `fpd_supported: true`. No default value. -* If you support any OpenRTB blocking parameters, you must document what exactly is supported and then you may set `ortb_blocking_supported` to ‘true’,’partial’, or ‘false’. No default value. In order to set ‘true’, you must support: bcat, badv, battr, and bapp. -* Let publishers know how you support multiformat requests -- those with more than one mediatype (e.g. both banner and video). Here are the options: will-bid-on-any, will-bid-on-one, will-not-bid -* If you're a member of Prebid.org, add `prebid_member: true`. Default is false. +- Add `pbs: true`. If you also have a [Prebid.js bid adapter](/dev-docs/bidder-adaptor.html), add `pbjs: true`. Default is false for both. +- If you're on the IAB's Global Vendor List, place your ID in `gvl_id`. No default. +- If you support the IAB's TCF protocol and have a GVL ID, you may add `tcfeu_supported: true`. Default is false. +- If you support the US Privacy consentManagementUsp module, add `usp_supported: true`. Default is false. +- If you support one or more userId modules, add `userId: (list of supported vendors)`. Default is none. +- If you support video, native, or audio mediaTypes add `media_types: video, native, audio`. 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`. No defaults. +- If you support COPPA, add `coppa_supported: true`. Default is false. +- If you support sections within the IAB's GPP consent string, add `gpp_sids:' and then which sections you support: tcfeu, tcfca, usnat, usstate_all, usp +- If you support the [supply chain](/dev-docs/modules/schain.html) feature, add `schain_supported: true`. Default is false. +- If you support adding a demand chain on the bid response, add `dchain_supported: true`. Default is false. +- 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. No default. +- If your bidder supports mobile apps, set `pbs_app_supported: true`. No default value. +- If your bidder supports deals, set `deals_supported: true`. No default value. +- If your bidder supports floors, set `floors_supported: true`. No default value. +- If you support first party data, you must document what exactly is supported and then you may set `fpd_supported: true`. No default value. +- If you support any OpenRTB blocking parameters, you must document what exactly is supported and then you may set `ortb_blocking_supported` to ‘true’,’partial’, or ‘false’. No default value. In order to set ‘true’, you must support: bcat, badv, battr, and bapp. +- Let publishers know how you support multiformat requests -- those with more than one mediatype (e.g. both banner and video). Here are the options: will-bid-on-any, will-bid-on-one, will-not-bid +- If you're a member of Prebid.org, add `prebid_member: true`. Default is false. ## File Checklist -* Bidder Info - * `static/bidder-info/{bidder}.yaml` -* Bidder Parameters - * `static/bidder-params/{bidder}.json` - * `openrtb_ext/imp_{bidder}.go` - * `adapters/{bidder}/params_test.go` -* Adapter Code - * `adapters/{bidder}/{bidder}.go` - * `adapters/{bidder}/{bidder}_test.go` - * `adapters/{bidder}/{bidder}test/exemplary/*.json` - * `adapters/{bidder}/{bidder}test/supplemental/*.json` -* Register With The Core - * `openrtb_ext/bidders.go` - * `exchange/adapter_builders.go` +- Bidder Info + - `static/bidder-info/{bidder}.yaml` +- Bidder Parameters + - `static/bidder-params/{bidder}.json` + - `openrtb_ext/imp_{bidder}.go` + - `adapters/{bidder}/params_test.go` +- Adapter Code + - `adapters/{bidder}/{bidder}.go` + - `adapters/{bidder}/{bidder}_test.go` + - `adapters/{bidder}/{bidder}test/exemplary/*.json` + - `adapters/{bidder}/{bidder}test/supplemental/*.json` +- Register With The Core + - `openrtb_ext/bidders.go` + - `exchange/adapter_builders.go` ## Contribute diff --git a/prebid-server/developers/add-new-bidder-java.md b/prebid-server/developers/add-new-bidder-java.md index 18b20e2b0b..f0aa1b5f3c 100644 --- a/prebid-server/developers/add-new-bidder-java.md +++ b/prebid-server/developers/add-new-bidder-java.md @@ -11,7 +11,7 @@ title: Prebid Server | Developers | Adding a New Bidder - TOC {:toc } -Thank you for your valuable contribution of a bid adapter to the open source Prebid Server project. Each new adapter expands the monetization possibilities for publishers and provides greater options to maximize their inventory's potential. We truly appreciate your support in making this ecosystem thrive! +Thank you for your contribution of a bid adapter to the open source Prebid Server project. Each new adapter expands the monetization possibilities for publishers and provides greater options to maximize their inventory's potential. We appreciate your support in making this ecosystem thrive! This document guides you through the process of developing a new bid adapter for your bidding server. We encourage you to look at [existing bid adapters](https://github.com/prebid/prebid-server-java/tree/master/src/main/java/org/prebid/server/bidder) for working examples and practical guidance. You can ask us questions by [submitting a GitHub issue](https://github.com/prebid/prebid-server-java/issues/new). @@ -267,7 +267,7 @@ Publishers will provide extra information using an OpenRTB 2.x Bid Request Exten We request that you do not duplicate information that is already present in the [OpenRTB 2.x request](https://github.com/InteractiveAdvertisingBureau/openrtb2.x/blob/main/2.6.md) or is already part of an established Prebid convention. For example, your bidder parameters should not include first party data, bid floors, schain, video parameters, referrer information, or privacy consent including COPPA, CCPA, and GDPR TCF. For video parameters in particular, you must prefer the OpenRTB 2.x Bid Request standard of `request.imp[].video`. {: .alert.alert-warning :} -**ENDPOINT NOTE:** You may not try so set the full endpoint domain from a publisher-specified bidder parameter. Prebid Server is not an open proxy. If absolutely necessary, you may specify a *portion* of the domain as a parameter to support geo regions or account specific servers. However, this is discouraged and may degrade the performance of your adapter since the server needs to maintain more outgoing connections. Host companies may choose to disable your adapter if it uses a dynamically configured domain. +You may not try to set the full endpoint domain from a publisher-specified bidder parameter. Prebid Server is not an open proxy. If absolutely necessary, you may specify a *portion* of the domain as a parameter to support geo regions or account specific servers. However, this is discouraged and may degrade the performance of your adapter since the server needs to maintain more outgoing connections. Host companies may choose to disable your adapter if it uses a dynamically configured domain. Create a file with the path `static/bidder-params/{bidder}.json` using [JSON Schema](https://json-schema.org/understanding-json-schema/) to define your bidder parameters. Prebid Server requires this file for every adapter, even if yours doesn't require bidder parameters (see the 'no parameters' example at the end of this section). @@ -428,11 +428,11 @@ Please follow [Java standard naming convention](https://www.oracle.com/java/tech Now it's time to write your bid adapter code. -Each adapter has its own directory (a 'package' in java parlance) for all code and tests associated with translating an OpenRTB 2.x Bid Request to your bidding server's protocol and mapping your server's response to an OpenRTB 2.x Bid Response. The use of separate packages provide each adapter with its own naming scope to avoid conflicts and gives the freedom to organize files as you best see fit (although we make suggestions in this guide). +Each adapter has its own directory (a 'package' in java parlance) for all code and tests associated with translating an OpenRTB 2.x Bid Request to your bidding server's protocol and mapping your server's response to an OpenRTB 2.x Bid Response. The use of separate packages provides each adapter with its own naming scope to avoid conflicts and gives the freedom to organize files as you best see fit (although we make suggestions in this guide). Create a file with the path `org.prebid.server.bidder.{bidder}/{bidder}Bidder.java`. Your bid adapter code will need to implement Bidder interface where `T` is a model which will represent HttpRequest body. -- The `Bidder` interface consisting of the `MakeHttpRequests` method to create outgoing requests to your bidding server and the `MakeBids` method to create bid responses. +- The `Bidder` interface consists of the `MakeHttpRequests` method to create outgoing requests to your bidding server and the `MakeBids` method to create bid responses. Here is a reference implementation for a bidding server which uses the OpenRTB 2.x protocol: From e9d55e525ac65f12ab9962f1d0af369e1cca21c2 Mon Sep 17 00:00:00 2001 From: khang-vu-ttd <109103626+khang-vu-ttd@users.noreply.github.com> Date: Thu, 5 Dec 2024 00:56:43 -0800 Subject: [PATCH 18/28] update placement to plcmt (#5750) --- dev-docs/bidders/ttd.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-docs/bidders/ttd.md b/dev-docs/bidders/ttd.md index 7768c16df0..5c29b31048 100644 --- a/dev-docs/bidders/ttd.md +++ b/dev-docs/bidders/ttd.md @@ -92,7 +92,7 @@ var bannerAdUnit = { #### `mediaTypes.video` Parameters The TTD adapter for video requires certain parameters in the AdUnit's -[mediaTypes.video](https://docs.prebid.org/dev-docs/adunit-reference.html#adUnit.mediaTypes.video) definition. Specifically, `maxduration`, `api`, `mimes`, `placement`, and `protocols` are all required for video ad units. `playerSize`, `startdelay`, `playbackmethod`, and `pos` are recommended. `minduration`, `minbitrate`, `maxbitrate`, `skip`, `skipmin`, and `skipafter` are optional. +[mediaTypes.video](https://docs.prebid.org/dev-docs/adunit-reference.html#adUnit.mediaTypes.video) definition. Specifically, `maxduration`, `api`, `mimes`, `plcmt`, and `protocols` are all required for video ad units. `playerSize`, `startdelay`, `playbackmethod`, and `pos` are recommended. `minduration`, `minbitrate`, `maxbitrate`, `skip`, `skipmin`, and `skipafter` are optional. Note: TTD does not currently support `adpod` video contexts. @@ -108,7 +108,7 @@ var videoAdUnit = { playerSize: [640, 480], api: [1, 3], mimes: ['video/mp4'], - placement: 3, + plcmt: 3, protocols: [2, 3, 5, 6], startdelay: -1, playbackmethod: [1], From a2dc6757fc2657d0c29842026407ce9c46d275bc Mon Sep 17 00:00:00 2001 From: bretg Date: Thu, 5 Dec 2024 11:03:35 -0500 Subject: [PATCH 19/28] PBS modules: add greenbids RTD (#5754) --- prebid-server/pbs-modules/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/prebid-server/pbs-modules/index.md b/prebid-server/pbs-modules/index.md index d0b88cd008..7179e0ba9c 100644 --- a/prebid-server/pbs-modules/index.md +++ b/prebid-server/pbs-modules/index.md @@ -33,6 +33,7 @@ The full list of modules: | [**US Custom Logic Privacy**](/prebid-server/features/pbs-uscustomlogic.html) | Similar to the `US Gen Privacy` module, but publishers define their own interpretation of the GPP string. | privacy | | check | | [**Richmedia Filter**](/prebid-server/pbs-modules/richmedia.html) | Can filter MRAID creatives from the bid stream. | validation | | check | | [**51Degrees Device Detection**](/prebid-server/pbs-modules/51degrees-device-detection.html) | Enriches an incoming OpenRTB request with [51Degrees Device Data](https://51degrees.com/documentation/_device_detection__overview.html) | general | check | check | +| [**Greenbids Real Time Data**](/prebid-server/pbs-modules/greenbids-real-time-data.html) | Filters out bidders that are not expected to bid on this request, saving money and carbon. | general | | check | | [**Request Correction**](/prebid-server/pbs-modules/request-correction.html) | Apply optional corrections to bid requests. | general | | check | | [**Response Correction**](/prebid-server/pbs-modules/response-correction.html) | Apply optional corrections to bid responses. | general | | check | From c90a697ecbbccc478ec903f608a32551a435288a Mon Sep 17 00:00:00 2001 From: Evgenii Novikov Date: Fri, 6 Dec 2024 13:37:28 +0100 Subject: [PATCH 20/28] Yandex Metrica Analytics: updated links to the interface (#5756) --- dev-docs/analytics/yandex.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-docs/analytics/yandex.md b/dev-docs/analytics/yandex.md index a1d380e372..5626374e5b 100644 --- a/dev-docs/analytics/yandex.md +++ b/dev-docs/analytics/yandex.md @@ -20,7 +20,7 @@ Disclosure: The adapter utilizes the Metrica Tag build based on [github.com/yand 2. **Insert Counter Initialization Code:** - Retrieve the counter initialization code from the Yandex Metrica settings page at `https://metrica.yandex.com/settings?id={counterId}`, where `{counterId}` is your counter ID, and embed it into your website's HTML. + Retrieve the counter initialization code from the Yandex Metrica settings page at [metrica.yandex.com/r/settings](https://metrica.yandex.com/r/settings), and embed it into your website's HTML. 3. **Initialize the Adapter in Prebid.js:** @@ -43,4 +43,4 @@ Disclosure: The adapter utilizes the Metrica Tag build based on [github.com/yand ## Accessing Analytics Data -You can view the collected analytics data in the Yandex Metrica dashboard. Navigate to [metrika.yandex.com/dashboard](https://metrika.yandex.com/dashboard) and look for the Prebid Analytics section to analyze your data. +You can view the collected analytics data in the Yandex Metrica dashboard. Navigate to [metrika.yandex.com/r/stat/prebid_events](https://metrika.yandex.com/r/stat/prebid_events) to analyze your data. From 31c95ea46e8a6b7fc800437a941c495f408378f9 Mon Sep 17 00:00:00 2001 From: pm-azhar-mulla <75726247+pm-azhar-mulla@users.noreply.github.com> Date: Fri, 6 Dec 2024 18:23:13 +0530 Subject: [PATCH 21/28] JS: Added documentation for suppressExpiredRender flag (#5746) * documentation for suppressExpiredRender flag * add wording --------- Co-authored-by: pm-azhar-mulla Co-authored-by: Chris Huie --- dev-docs/publisher-api-reference/setConfig.md | 25 ++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/dev-docs/publisher-api-reference/setConfig.md b/dev-docs/publisher-api-reference/setConfig.md index fef8e66c1e..43957cffb6 100644 --- a/dev-docs/publisher-api-reference/setConfig.md +++ b/dev-docs/publisher-api-reference/setConfig.md @@ -1175,7 +1175,8 @@ The `auctionOptions` object controls aspects related to auctions. | Field | Scope | Type | Description | |----------+---------+--------+---------------------------------------------------------------------------------------| | `secondaryBidders` | Optional | Array of Strings | Specifies bidders that the Prebid auction will no longer wait for before determining the auction has completed. This may be helpful if you find there are a number of low performing and/or high timeout bidders in your page's rotation. | -| `suppressStaleRender` | Optional | Boolean | When true, prevents `banner` bids from being rendered more than once. It should only be enabled after auto-refreshing is implemented correctly. Default is false. +| `suppressStaleRender` | Optional | Boolean | When true, prevents `banner` bids from being rendered more than once. It should only be enabled after auto-refreshing is implemented correctly. Default is false. | +| `suppressExpiredRender` | Optional | Boolean | When true, prevent bids from being rendered if TTL is reached. Default is false. #### Examples {: .no_toc} @@ -1212,6 +1213,28 @@ PBJS performs following actions when stale rendering is detected. Stale winning bids will continue to be rendered unless `suppressStaleRender` is set to true. Events including `STALE_RENDER` and `BID_WON` are unaffected by this option. +Render only non-expired bids. + +```javascript +pbjs.setConfig({ + 'auctionOptions': { + 'suppressExpiredRender': true + } +}); +``` + +#### More on Expired Rendering +{: .no_toc} + +We are validating the `ttl` property before rendering an ad. If the ad has exceeded its ttl value and the `suppressExpiredRender` property is enabled, the system will suppress the rendering of the expired ad. + +PBJS performs the following actions when expired rendering is detected. + +* Log a warning in the browser console if pbjs_debug=true. +* Emit a `EXPIRED_RENDER` event before `BID_WON` event. + +Expired winning bids will continue to be rendered unless `suppressExpiredRender` is set to true. Events including `STALE_RENDER` and `BID_WON` are unaffected by this option. + ### maxNestedIframes From f9955f5f82ae8deaee1855fb033cd5937851c396 Mon Sep 17 00:00:00 2001 From: Jeff Mahoney Date: Fri, 6 Dec 2024 11:13:54 -0500 Subject: [PATCH 22/28] Equativ Bid Adapter: Updating information about bid params (#5760) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * SADR-6590: initial documentation for Equativ JS bid adapter * SADR-6590: doc refinements * Update equativ.md SADR-6590: adjustments to doc from review feedback. * SADR-6590: fix linting issues * SADR-6590: another linting issue * update app.publisher.id * SADR-6590: providing link to Equativ OpenRTB API documentation * SADR-6590: providing additional required fields for documentation * SADR-6590: adding peer answers to questions * SADR-6590: remove FPD section for now * Equativ: updating documentation on bid adapter parameter requirements --------- Co-authored-by: Krzysztof Sokół --- dev-docs/bidders/equativ.md | 64 ++++++++----------------------------- 1 file changed, 14 insertions(+), 50 deletions(-) diff --git a/dev-docs/bidders/equativ.md b/dev-docs/bidders/equativ.md index ffa7dfb630..4ddca56f68 100644 --- a/dev-docs/bidders/equativ.md +++ b/dev-docs/bidders/equativ.md @@ -35,20 +35,19 @@ The Equativ bidder adapter requires setup and approval from the Equativ service {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |------|-------|-------------|---------|------| -| `networkId` | required | The network identifier you have been provided with. _See **Bid Parameter Usage** notes below for more information_. | `1234` | `integer` | -| `siteId` | required | The placement site ID. _See **Bid Parameter Usage** notes below for more information_. |`1234` | `integer` | -| `pageId` | required | The placement page ID. _See **Bid Parameter Usage** notes below for more information_. | `1234` | `integer` | -| `formatId` | required | The placement format ID. _See **Bid Parameter Usage** notes below for more information_. | `1234` | `integer` | +| `networkId` | required | The network identifier you have been provided with. Normally required, but there are certain conditions under which this may be omitted. _See **Bid Parameter Usage** notes below for more information_. | `1234` | `integer` | +| `siteId` | optional | The placement site ID. _See **Bid Parameter Usage** notes below for more information_. |`1234` | `integer` | +| `pageId` | optional | The placement page ID. _See **Bid Parameter Usage** notes below for more information_. | `1234` | `integer` | +| `formatId` | optional | The placement format ID. _See **Bid Parameter Usage** notes below for more information_. | `1234` | `integer` | #### Bid Parameter Usage Different combinations of parameters are required depending upon which ones you choose to use. -There are three options for passing bidder parameters: +There are two options for passing parameters: -- **Option 1**. Specify `networkId` by itself (_without_ `siteId`, `pageId` and `formatId`), or -- **Option 2**. Specify `siteId` _and_ `pageId` _and_ `formatId` (all together) _without_ `networkId`, or -- **Option 3**. Specify _none_ of the above parameters, and instead use either `ortb2.site.publisher.id`, `ortb2.app.publisher.id` or `ortb2.dooh.publisher.id` +- **Option 1**. Specify `networkId` by itself (_and optionally providing_ `siteId`, `pageId` and `formatId`), or +- **Option 2**. Specify either `ortb2.site.publisher.id`, `ortb2.app.publisher.id` or `ortb2.dooh.publisher.id` See **Sample Banner Setup** for examples of these parameter options. @@ -93,9 +92,9 @@ pbjs.bidderSettings = { #### Sample Banner Setup -As mentioned in the **Bid Parameter Usage** section, when including `'equativ'` as one of your available bidders your adunit setup, there are three general approaches to how you can specify parameters. Below are examples that illustrate them. +As mentioned in the **Bid Parameter Usage** section, when including `'equativ'` as one of your available bidders your adunit setup, there are two approaches to how you can specify parameters. Below are examples that illustrate them. -#### Option 1 -- Using networkId as the only bid param +#### Option 1 -- Using networkId as a parameter ```html ``` -#### Option 2 - Using siteId, pageId and formatId as bid params - -```html - -``` - -#### Option 3 - Using ortb2 for parameter info +#### Option 2 - Using ortb2 for parameter info You can also, as an alternative to using bidder params, specify a value for `publisher.id` that may be nested under an `app`, `site` or `dooh` object. The Equativ adapter will, in turn, look for these property paths under the `ortb2` property of the request: From 1d1ed2271e412b8738943ef991a29c6588a2017b Mon Sep 17 00:00:00 2001 From: "Adserver.Online" <61009237+adserver-online@users.noreply.github.com> Date: Fri, 6 Dec 2024 18:26:07 +0200 Subject: [PATCH 23/28] add kuantix alias doc (#5740) Co-authored-by: dev --- dev-docs/bidders/kuantyx.md | 44 +++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 dev-docs/bidders/kuantyx.md diff --git a/dev-docs/bidders/kuantyx.md b/dev-docs/bidders/kuantyx.md new file mode 100644 index 0000000000..cf13210888 --- /dev/null +++ b/dev-docs/bidders/kuantyx.md @@ -0,0 +1,44 @@ +--- +layout: bidder +title: Kuantyx +description: Kuantyx Bid Adapter +biddercode: kuantyx +tcfeu_supported: false +usp_supported: true +media_types: video, native +safeframes_ok: true +pbjs: true +pbs: true +pbs_app_supported: true +floors_supported: true +schain_supported: true +fpd_supported: true +ortb_blocking_supported: true +multiformat_supported: will-bid-on-one +userIds: all +sidebarType: 1 +aliasCode: aso +--- +### Note + +The Kuantyx adapter requires approval and setup. Please reach out to or visit us at [kuantyx.com](https://kuantyx.com) for more details. + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|------------------|-----------------------------|-----------| +| `server` | required | Server endpoint | `https://srv.kuantyx.com` | `String` | +| `zone` | required | Zone ID | `73815` | `Integer` | + +#### Video Caching + +Note that the Kuantyx adapter expects a client-side Prebid Cache to be enabled for video bidding. + +```js +pbjs.setConfig({ + cache: { + url: 'https://prebid.adnxs.com/pbc/v1/cache' + } +}); +``` From 205736da5906c032d202121d5e7668cc65095c02 Mon Sep 17 00:00:00 2001 From: Chris Huie Date: Fri, 6 Dec 2024 09:33:44 -0700 Subject: [PATCH 24/28] update tcfeu support (#5761) --- dev-docs/bidders/smilewanted.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/smilewanted.md b/dev-docs/bidders/smilewanted.md index 4cedc9c33c..0bac421c76 100644 --- a/dev-docs/bidders/smilewanted.md +++ b/dev-docs/bidders/smilewanted.md @@ -3,7 +3,7 @@ layout: bidder title: Smile Wanted description: SmileWanted Bidder Adapter biddercode: smilewanted -tcfeu_supported: false +tcfeu_supported: true gvl_id: 639 usp_supported: true coppa_supported: true From 5b718200c0af3b7b725cdadef38ecc2b3bcd3fe6 Mon Sep 17 00:00:00 2001 From: Anton Babak <76536883+AntoxaAntoxic@users.noreply.github.com> Date: Fri, 6 Dec 2024 20:00:56 +0100 Subject: [PATCH 25/28] Exitpoint Stage Documentation (#5739) * Exitpoint Stage Documentation * wordsmithing * wordsmithing --------- Co-authored-by: bretg --- .../images/prebid-server/module-example.png | Bin 164802 -> 72541 bytes prebid-server/developers/add-a-module-java.md | 12 ++++++++++++ prebid-server/developers/add-a-module.md | 3 ++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/assets/images/prebid-server/module-example.png b/assets/images/prebid-server/module-example.png index ea864b1c1579fab9ce280cf682d40998e5149207..3c3d22e4689ecb9538fbbdb1e508036f4203eb42 100644 GIT binary patch literal 72541 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

    !Iv5X>v3Ue>r#JTn(fbj@fBqAzhh7zbdb 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 Ck8yYa literal 164802 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 y`&9|Od7vk;egfc$tQ~w z$Z}DSbtpcCdr*=-Fj==Sfv0h=>iAMgS1q}If^xuxD4<$?2u00e%cx;ebJ2Nz%Am`h z!k9)!`FLh@S}tA_rq}rUkhVjd75hs4u&wptpt}XS@?xtE08e{C(k<_{7s)aR4&)9W zZP-=Eagn~)l?*Rv|K->Lph59-%yp|Fcy*n3k1T+2Irc@i-lOdcQCng>eIjqoJ^L%f zDNf|iX6UI4e}6`Jt1l`+?l5|si|gQB2Kl~TNFUb&tHEfLyrIj4XmkvI&NF8=@L`UB zp?^EAu&>*iO7_=4PUJ`bTns#URyLy{@2i1UoX6T2&PCr_+<)_j+p5^{h?nTzCu=({ zs8W>`-J$43aooI1_TI(jigD?KXeY}-)(ZayR9+qP^zE=xM3%sAp~Xr%dn{IX3_Wbl?PgwAJbvY67gkxPH_BqQ zD)+|9c|<HDkOR zyQH$h4DX$QFAm;+(QPHXXz8270E`)+zxxp(9j2`ee3-zc$M`vy*L*q0)>a;l{uZa) z+K1pnU4zQRp5Rb3J46f|-!3$E$Hh#Dc7y4nvWwjJbIG@w@*hnrmWr4WN_ol%E}vaL z(DWBw4B?L}y!Y@tT>M$IIy1%uDTNQ+EzIMMAIwd)%-CY#r(;H)yuq}Hlw%12@LEe3 z>~O8(TrRUJu|&r`gNG1P2~lVsRAf0Gft-~ZQ>uF7o)sA}$GQGo;cl*2xKu0ELemHw zD6u3#lePhaPh!7lX-y23UmfT$;ov*>B+)hMeZk|~iMulIFvkoy)@Fq#uwTV&P3s~o zO7K}|kER3qZ*2hd$YFSH!5Qg@R+!|PfG`(J)RX5g9uS&5Ck6SO&+zomKZp(XejmoM z7vV?31ix1mV2pzb7vhh*Gqu#gB#Gw%ooY{q$%+NY#+2~dfxwn~lRR4$G7Ai+Ce5D0 zR_Yo&o<|o-9hAB!%ZHQp@`p`AqF5m!cgf?@_$GMikm$_j_0l!dV_4Em{FOU-P&h;6UOc}(-pB`|H zyG0o^f?}X&|2+1U@&f^#%|T7bDmkx7f41(}c*m5kMMPhc>Iw7l`;qv-+(b+C`w7>{ zl<3Jrtl~2F;<~B$=2r=xptu3^Jo_w{+RJt_IN7i4a)#$+yNexBSAdB03i-FP*MYVs zoY7)YAq_<(6zWm&163i#YRvPC1;>yrVj$4!Tzyo{!ZL|aPqc9JN#p_E0Bo|acG%d; zlSy~2JXUNW@==d}<7B9ktJ5C%=H5ssLS%<&4w$elg7Ddrr*!s^m3jq$Az12reJ3~WZ#G{K`Rc@*4}Hp$PqoL@ORRZ~gD$*8 zc7*sDH7caj9>_x?w!Iz0z+Z;P9Zfw8(o76qP|b>~te3qHIFFgSvqf$99c`m**N?l@ z@bASMGGs!06~^r}!FZCXF~gV&nnozK{DuYQ3N@ImKA~=Dj?QC?GOqwH)IPcK-R+cH z<99nlFKg2fUoy$J83*5qMuF<|d;*&|oIhpPKptNZzZFfugd@M-NfEK$A#=ji=y&!3 zxksduG~9z9R?mh1CFMVcLb?ZE`J6{U$KIzQz@u#viK+RoMg-#v(N=pn@5T8hgE41f zAsX=W6uT5>2Y+bKv58AL;k8E?FPSf3iLXJjn>to+zrF1Qykd3Jb2>Mncl$!qOl4c9 z4qEfUyvFJi`en{q7T4FRe6?4^61TLDw>eRz!@5hdAKWTj6J3Tw07C=J)!@w7?qT1Hg;8NIMg+ zAMHqXa&vbbb2QHn<~OdJ&psC@hv=42fY-e)Cto7E`+-Y|Q_taD`^maa-4nr3d3TUG z3Yq0`Y6;FKt(%N$jKMeE^|X~ga*~O#PJTgR{6VODTQ?sHLxhz8spved$Bg&Ff%3vr z+>I1Qj=Y>B0>PJrBRc*;xY6d1nQYRD)A0A7O5i{q>6O|ltQMYS1Xf{+p6I8?n*|qEU+>8yo?*m+OaeV}dZX8QY+4B@AU0c8{gZQ@Y)J;Cz zUg?xRT2gUralCF?9GN!URo--`quPxmu0BDZD!zar8IP5Prxh}j25!o?C|c?`aDE*u zL3Yp$)mh>A##qrRjv1#x4|oH0V@Y; zE~^{p_2;@yzAQWEojZ_r7N*C|_Y8q7(wj?p=bRrE7il0%do#udNuF*5>YO!@2I!+d zpFcNGFUgnx66U4Bx#F|~Ur`6CO-Mwwdo1~A`tHRGxFexyVrtE0dK3q(aNN_^s%r0;nSzUt`^y5Z4>TMeS6`?@F&I4jKDsf^G{>_&}oK#!1m{9GWiv<=6q>$y)} zR39qpK?jyx#GGpq_@Om9UhaJ8Vu6OoV^SX3_cRtpo+bN_O9J4>aaR_oCIV^ab&D?d zIJa?C^1!S5MEqZb0EbeB8Mo6Q&fl5P*oyOWYE9}x)uR&9;Qcfc0mG|BQl_uysOj+? z0+NQeJ=R489Kv>bl<}c=-^`GrJAq*|UzMCrJ_YKf<86!R`bq}sfK#`i+*mwF-Sz6% z;)XlST^<3eHp+fnGx*Q0;63jQioYK;c(v2tF_k|pbR-v|et9&QoVC9(ACJ>8oK;v} zwziq!l$TpcOTDU_jjcjlXP!0ubo$KhB|SO3el7;1-{0%9BTmiDwBx!{={`D}>GEMt zM&IRC?!1foiZEa7I$1pA2mu@RXGG3+NXpgyvD-beYB`{!{4iUqD62^gP8zu{T`w}A zF)hd!WG;3X5X*b?D8HX^51Y!5uLvC?A!m`=3Ln?3)Xw4gfX zBR5V~<){BMGjpM03H9=&>~``g=-L=^EXt03JpT&f9mD?F5)c9ygmSV$0!6lz(|_A1 z7s^!=|3_XiUBURR=-jz)%a|FkNi^ zJRPE)FSKVC(z-5j>#sjf!p!%=6FhyyJxahDZ75%m&#{YaXu8pwd3lt@Z^ ziAni#gDD*Nq7;trV0lP;@P#$Gu`uBI)3<2f%7Z(r+IBs54GU6K%(dBxkd6=~^ z8;WdfmNs7mq!#fcPba9eZdAy7Q)J20P&=qzNOZjq!y`+16nW7kge1bDb<4aUk@an~ z8n5^gcX7+Ta<6#ftS%=Wk{Wx_k)f;40$-eoJ!&a`!6|}9!CE|{wQG%0D#2qPxVXw* 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

  • D|v|hkfOt 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 diff --git a/prebid-server/developers/add-a-module-java.md b/prebid-server/developers/add-a-module-java.md index 90aaa31aa7..72b43f3b14 100644 --- a/prebid-server/developers/add-a-module-java.md +++ b/prebid-server/developers/add-a-module-java.md @@ -123,6 +123,7 @@ These are the available hooks that can be implemented in a module: - org.prebid.server.hooks.v1.bidder.RawBidderResponseHook - org.prebid.server.hooks.v1.bidder.AllProcessedBidResponsesHook - org.prebid.server.hooks.v1.auction.AuctionResponseHook +- org.prebid.server.hooks.v1.exitpoint.ExitpointHook In a module it is not necessary to implement all mentioned interfaces but only one (or several) required by your functionality. @@ -131,6 +132,17 @@ Each hook interface internally extends org.prebid.server.hooks.v1.Hook basic int - `code()` - returns module code. - `call(...)` - returns result of hook invocation. +### Difference between AuctionResponseHook and ExitpointHook +In a nutshell, both hooks allow the modification of the OpenRTB Bid Response but in different ways. +The `AuctionResponseHook` provides a last chance to work with the Java objects that modify the auction response. +The `ExitpointHook` allows you to build a completely different response based on the received auction context. i.e. something that's not OpenRTB JSON - something like VAST. These hooks could modify the auction/amp/video response that PBS has built, or it could build another one and modify response headers accordingly. + +Important Notes: + +- The ExitpointHook is a powerful tool that allows rewriting the auction results, so make sure important data won't be lost for the client. +- Since the response body is not modified after calling the ExitpointHook, debug and traces won't be added by PBS-core. The exitpoint hook is responsible for adding its own tracing to the generated output. +- Analytics adapters doesn't have access to the response built by the ExitpointHook, but they receive the up-to-date auction context with the ExitpointHook execution status and analytics tags. + ### Examples 1. To **update** the request in the `RawAuctionRequestHook` you would return: diff --git a/prebid-server/developers/add-a-module.md b/prebid-server/developers/add-a-module.md index 74059d93a3..0edbbd3cb7 100644 --- a/prebid-server/developers/add-a-module.md +++ b/prebid-server/developers/add-a-module.md @@ -70,7 +70,8 @@ Here's a description of the Stages of a PBS request that modules can tap into fo | Bidder Request | The request has been customized for a particular bidder in the auction. Note that the module will be called in parallel for each bidder in the auction. | auction, amp, video | Bidder-specific bcat/badv, Bidder-specific deals | | Raw Bidder Response | Hook functions can get access to the unprocessed bidder response. Note that the module will be called in parallel for each bidder in the auction. | auction, amp, video | Response validations | | All Processed Bid Responses | All bids are back and PBS-core bid validations are done. | auction, amp, video | Creative validation, advanced bid validations. | -| Auction Response | Last step before the response goes back to the client | auction, amp, video | Inject ad server targeting, alternate auction winner logic | +| Auction Response | Last chance to modify the bid auction response | auction, amp, video | Inject ad server targeting, alternate auction winner logic | +| Exitpoint | (PBS-Java 3.16+) Last step before the response goes back to the client. Specify the response headers and body | auction, amp, video | Create a VAST response instead of OpenRTB. | ### 3. Figure Out Which Stages You're Going to Hook Into From 2aee20bdf803157c6681b7a8c7f5872cbae4b8c6 Mon Sep 17 00:00:00 2001 From: mkomorski Date: Fri, 6 Dec 2024 21:09:25 +0100 Subject: [PATCH 26/28] Adding auctionDelay param to currency module (#5749) Co-authored-by: Marcin Komorski --- dev-docs/modules/currency.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dev-docs/modules/currency.md b/dev-docs/modules/currency.md index be27ef75a7..51358c93d2 100644 --- a/dev-docs/modules/currency.md +++ b/dev-docs/modules/currency.md @@ -30,6 +30,7 @@ currency conversion file while the bids are taking place. Alternately, the conve be provided in the page. 1. At runtime, bids are converted to the ad server currency as needed. 1. Default rates can be provided in case the file cannot be loaded. +1. When `requestBids` is called, the Currency Module will delay the auction up to the supplied amount of time in `currency.auctionDelay` or as soon as the dynamic endpoint returns data, whichever is first. ## Currency Architecture @@ -195,6 +196,8 @@ pbjs.setConfig({ "conversionRateFile": "URL_TO_RATE_FILE", // optionally provide a default rate in case the file can't be read "defaultRates": { "USD": { "GPB": 0.75 }} + // optionally sets the auction defer time if the file has not been loaded yet + "auctionDelay": 1000 } }); ``` From a5bc143d321b9a9869249b93e0f8aaa2bebac430 Mon Sep 17 00:00:00 2001 From: Anton Babak <76536883+AntoxaAntoxic@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:17:21 +0100 Subject: [PATCH 27/28] Module Execution Config (#5741) * Module Execution Config * Module Execution Config * Module Execution Config * Remove mentioning the host-level config * Getting back the host-level config * update wording * expanded the example * lint * adding module A/B test @AntoxaAntoxic - can you please take a look at the new section 3.2 and make sure I got the A/B test parameter defaults correct? Thanks. * lint --------- Co-authored-by: Chris Huie Co-authored-by: bretg --- prebid-server/pbs-modules/index.md | 144 ++++++++++++++++++++++++++--- 1 file changed, 131 insertions(+), 13 deletions(-) diff --git a/prebid-server/pbs-modules/index.md b/prebid-server/pbs-modules/index.md index 7179e0ba9c..c07d1de507 100644 --- a/prebid-server/pbs-modules/index.md +++ b/prebid-server/pbs-modules/index.md @@ -12,7 +12,7 @@ The core of Prebid Server contains the foundational code needed for header biddi If you're looking for bidder adapter parameters, see [Bidders' Params](/dev-docs/pbs-bidders.html). -* TOC +- TOC {:toc} ## The Modules @@ -54,10 +54,10 @@ mvn clean package --file extra/pom.xml The execution plan details: -* which modules are used in your server -* what order they're invoked in -* how long modules have to run before timeout -* whether any modules depend on each other +- which modules are used in your server +- what order they're invoked in +- how long modules have to run before timeout +- whether any modules depend on each other If you want the module to run on every request regardless of account, this is a host-level config you should place in `application.yaml`. If the module should @@ -65,9 +65,9 @@ be active only for certain accounts, you'll need to place the plan in the accoun To define a plan, you'll need to know the following module details, which should be available in the module documentation: -* urls: which PBS 'entry points' are relevant. e.g. /openrtb2/auction, /openrtb2/amp -* stages: one or more of the 7 workflow stages where the module should be called: entrypoint, raw-auction-request, processed-auction-request, bidder-request, raw-bidder-response, processed-bidder-response, and/or auction-response. -* hooks: for each stage where a module runs, its documentation will provide the hook function name. +- urls: which PBS 'entry points' are relevant. e.g. /openrtb2/auction, /openrtb2/amp +- stages: one or more of the 7 workflow stages where the module should be called: entrypoint, raw-auction-request, processed-auction-request, bidder-request, raw-bidder-response, processed-bidder-response, and/or auction-response. +- hooks: for each stage where a module runs, its documentation will provide the hook function name. Here's an example application.yaml entry: @@ -132,13 +132,131 @@ hooks: } ``` +{: .alert.alert-info : +Execution plans can be placed in account configuration, but depending on how modules are enabled in your environment, it can be inconvenient to provide instructions to place the highly technical execution plan into the account config. Some organizations have +chosen to keep all execution plans in host-level config, then enabling the `require-config-to-invoke` option as described in the next section. + ### 3. Supply the module with configuration Modules may require configuration at startup or during the request: -* If the module requires config at initialization, its documentation will +- If the module requires config at initialization, its documentation will describe where the config file lives and what format it should take. -* If the module requires runtime config, it should be passed via the account-conig mechanism. +- If the module requires runtime config, it should be passed via the account-config mechanism. + +### 3.1 Module Execution Configuration + +PBS-Java 3.16 introduced new configurations that give the host company flexible control over which modules run for which accounts +while still allowing all execution plans to be defined at the host-level. + +- `hooks.admin.module-execution` is a key-value map, where a key is a module name and a value is a boolean. It defines whether a module's hooks should be executed. +This property can be configured on the host level at initialization as well as via account-config mechanism (a runtime config). +- `settings.modules.require-config-to-invoke` is a host-level boolean property. When set to `true`, it requires a runtime config to exist for a module in order to actually run the execution plan. + +Here's how these work together: + +1. If `hooks.admin.module-execution` is defined at the host-level (application.yaml), it overrides all account config. No account can turn off a module flagged as true, and likewise they can’t turn on a module flagged as false. +1. Essentially, setting false at the host level has the same effect as removing the module’s execution plan. +1. If `hooks.admin.module-execution` is not defined at the host level, then normal precedence rules are in effect: any value in account config overrides what’s in default account config. +1. If nothing is found for the module in the merged `hooks.admin.module-execution` and `require-config-to-invoke` is true, then account-level config is required. + +Example: + +```yaml +# host-level config +settings: + modules: + require-config-to-invoke: true +hooks: + admin: + host-execution-plan: > + {"endpoints":{... define execution plans for module1, module3, and module4 here ...}} + module-execution: + module1: true // don't allow accounts to turn off this module. Also don't worry about requiring config. Always run this one. + module2: false // don't allow accounts to utilize this module at all, even if they define a plan in account config. +``` + +```json +// account-level config +// the end result is that module1, module3, and module5 are run. +// module2 is not run even though a plan is defined in this account config because the host company has forbidden it above +// module4 is not run because there's no config and require-config-to-invoke is true +{ + "hooks": { + "admin": { + "module-execution": { + "module1": false // does nothing, since module1 is always on at the host level + } + }, + "modules": { + "module3": { ... module 3 config ... }, + "module5": { ... module 5 config ... }, + }, + "execution-plan": { + ... define an execution plan for module2 and module5 here ... + } + } +} +``` + +### 3.2 A/B Testing Modules + +Host companies and accounts might want to try enabling a module on a small percentage of traffic before turning it on all the way. + +PBS-Java 3.16 introduced a new A/B testing framework that applies to any module. + +```json5 +{ + "hooks": { + "execution-plan": { + "abtests": [{ + "accounts": [ 123, 456 ], // these are ignored if in account-level config + "module-code": "module1", + "enabled": true, // defaults to false + "percent-active": 5, // defaults to 100 + "log-analytics-tag": true // defaults to true + },{ + ... abtest config for other modules ... + }], + "endpoints": { + "/openrtb2/auction": { + ... + } + } + ] + ] +] +``` + +These are the parameters accepted within the `abtests` object: + +{: .table .table-bordered .table-striped } +| Parameter | Scope | Description | Type | Default | +|-----------+-------+-------------+------+---------| +| module-code | required | Which module is being tested. | string | none | +| percent-active | required | What percent of the time the module will run. | integer | none | +| accounts | optional | Defines which accounts this abtest block applies to. This is useful when the execution plan is defined at the host level and is ignored when the plan is at the account level. | array of int | none | +| enabled | optional | Allows the abtest to be disabled without removing it. | boolean | true | +| log-analytics-tag | optional | Directs PBS-core to log an analytics tag for reporting. | boolean | false | + +To get reporting on the test results, analytics adapters will need to read the [analytics tag](/prebid-server/developers/module-atags.html) created by the A/B test, which looks like this: + +```json5 +{ + activities: [{ + name: "core-module-abtests", + status: "success", + results: [{ // one results object for each module in the abtests object + "status": STATUS, // "run" or "skipped" + "values": { + "module": "module1" + } + }] + }, + ... the status of other abtest decisions ... + }] +} +``` ## Installing a PBS Privacy Module @@ -147,6 +265,6 @@ relevant 'Activity' using the `privacyreg` directive as described in the [Activi ## Further Reading -* [Developing a Prebid Server General Module](/prebid-server/developers/add-a-module.html) -* [Developing a Prebid Server Privacy Module](/prebid-server/developers/add-a-privacy-module.html) -* [Prebid Server Features](/prebid-server/features/pbs-feature-idx.html) +- [Developing a Prebid Server General Module](/prebid-server/developers/add-a-module.html) +- [Developing a Prebid Server Privacy Module](/prebid-server/developers/add-a-privacy-module.html) +- [Prebid Server Features](/prebid-server/features/pbs-feature-idx.html) From 2bd11ce1e422cdb378b838cf8a747c7780183026 Mon Sep 17 00:00:00 2001 From: Denis Logachov Date: Mon, 9 Dec 2024 19:20:43 +0200 Subject: [PATCH 28/28] Update spinx.md (#5744) --- dev-docs/bidders/spinx.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/spinx.md b/dev-docs/bidders/spinx.md index a4a1e80d9f..60ca37b1b3 100644 --- a/dev-docs/bidders/spinx.md +++ b/dev-docs/bidders/spinx.md @@ -32,5 +32,5 @@ The SpinX bidding adapter requires setup and approval before implementation. Ple {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | |----------|----------|-----------------------|---------------------------|----------| -| `host` | required | RTB host | `'cpm.arteabee.com'` | `string` | +| `host` | required | RTB host | `'cpm.rtads.bid'` | `string` | | `zoneId` | required | Zone Id | 30164 | `integer` |