diff --git a/_includes/mobile/rewarded-server-side-configuration.md b/_includes/mobile/rewarded-server-side-configuration.md
index 12ce47d281..838d8785e2 100644
--- a/_includes/mobile/rewarded-server-side-configuration.md
+++ b/_includes/mobile/rewarded-server-side-configuration.md
@@ -1,3 +1,5 @@
+
+
##### Server-side Rewarded Ad Unit Configuration
The Rewarded Ad Unit assumes special behavior that should be configurable by the platform or publisher according to the application or ad experience guides.
@@ -7,6 +9,7 @@ Configuration of rewarded ad unit can be done by defining the Prebid Server [pas
Prebid SDK will search for a particular `rwdd` object in `$.seatbid.bid.ext.prebid.passthrough` of bid response to configure the behavior and rendering of the Rewarded Ad Unit. The following table describes the structure and usage purpose of `rwdd` configuration parameters.
{: .table .table-bordered .table-striped }
+
| Attribute | Type | Description | Example |
|-----------|------|-------------|---------|
| `reward` | object
(optional) | Metadata provided by the publisher to describe the reward. |{
"type": "SuperDollars",
"count": 10
} |
@@ -26,7 +29,38 @@ Prebid SDK will search for a particular `rwdd` object in `$.seatbid.bid.ext.preb
| `close` | object
(optional) | Describes the ad close behavior after the reward is earned. |{
"postrewardtime": 3,
"action": "autoclose"
} |
| `close.postrewardtime` | integer | Time interval (seconds) after reward event when SDK should close interstitial. | `3` |
| `close.action` | string | Action SDK should make: `"autoclose"` (close interstitial) or `"closebutton"` (show close button) | `"autoclose"` |
+
+
+Publishers can also supply the same impression-level configuration from the app with the ad unit's `setImpORTBConfig()` method. This is useful when a bidder does not return `rwdd` and the app needs to replace the default 120-second end-card completion time. Pass the `ext.prebid.passthrough` portion of the impression, for example:
+
+```json
+{
+ "ext": {
+ "prebid": {
+ "passthrough": [
+ {
+ "type": "prebidmobilesdk",
+ "rwdd": {
+ "completion": {
+ "video": {
+ "endcard": {
+ "time": 15
+ }
+ }
+ },
+ "close": {
+ "postrewardtime": 0,
+ "action": "closebutton"
+ }
+ }
+ }
+ ]
+ }
+ }
+}
+```
+Serialize this object as JSON and pass it to `RewardedAdUnit.setImpORTBConfig()`. Prebid Server returns the passthrough data with the bid, where the SDK reads the `rwdd` configuration.
An example of an impression-level stored request:
diff --git a/dev-docs/analytics/eightPod.md b/dev-docs/analytics/eightPod.md
deleted file mode 100644
index f53db035a6..0000000000
--- a/dev-docs/analytics/eightPod.md
+++ /dev/null
@@ -1,15 +0,0 @@
----
-layout: analytics
-title: 8pod
-description: 8pod Analytics Adapter
-modulecode: eightPodAnalyticsAdapter
-tcfeu_supported: false
-usp_supported: false
-coppa_supported: false
-prebid_member: false
-gvl_id: none
-enable_download: false
----
-
-### Disclosure
-The adapter subscribe on events from 8pod's ad unit when the bidWon event for each ad slot and then send internal event to our tracker once in 10 sec.
diff --git a/dev-docs/analytics/eightpod.md b/dev-docs/analytics/eightpod.md
new file mode 100644
index 0000000000..214e5aa29e
--- /dev/null
+++ b/dev-docs/analytics/eightpod.md
@@ -0,0 +1,25 @@
+---
+layout: analytics
+title: 8pod
+description: 8pod Analytics Adapter
+modulecode: eightpodAnalyticsAdapter
+tcfeu_supported: false
+usp_supported: false
+coppa_supported: false
+prebid_member: false
+gvl_id: none
+enable_download: false
+---
+
+## Configuration
+
+```javascript
+pbjs.enableAnalytics({
+ provider: 'eightpod'
+});
+```
+
+Use the lowercase provider code `eightpod` to match adapter registration.
+
+### Disclosure
+The adapter subscribes to events from 8pod's ad unit when the bidWon event fires for each ad slot and sends supported ad unit events to Tealium from the rendered ad frame.
diff --git a/dev-docs/analytics/nexx360.md b/dev-docs/analytics/nexx360.md
new file mode 100644
index 0000000000..eb9a69b68f
--- /dev/null
+++ b/dev-docs/analytics/nexx360.md
@@ -0,0 +1,46 @@
+---
+layout: analytics
+title: Nexx360
+description: Nexx360 Analytics Adapter
+modulecode: nexx360Analytics
+prebid_member: false
+tcfeu_supported: false
+usp_supported: false
+coppa_supported: false
+---
+
+## About
+
+The Nexx360 Analytics Adapter reports Prebid.js auction activity to the Nexx360
+monitoring platform for reporting and troubleshooting. It tracks the auction
+lifecycle — auction init, bid requests, bid responses, and bid timeouts (batched
+per auction) — and sends bid wins and ad-render outcomes as they happen. For
+Nexx360 server-side demand, it also reports a per-auction server-auction summary.
+
+Sampling is applied server-side by the Nexx360 collector, so the adapter sends
+all events and exposes no client-side sampling option. The adapter does not read
+or write browser storage.
+
+## Analytics Options
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+| ------ | ------- | ------------- | --------- | ------ |
+| publisherId | required | Your Nexx360 publisher identifier | `'1067'` | string |
+| endpoint | optional | Collector endpoint URL. Defaults to `https://monitoring.nexx360.io`. | `'https://monitoring.nexx360.io'` | string |
+| abTestLabel | optional | A/B test variant label, attached to every event so analytics can be sliced by test arm | `'variantA'` | string |
+
+## Example Configuration
+
+```javascript
+pbjs.enableAnalytics({
+ provider: 'nexx360Analytics',
+ options: {
+ publisherId: 'your-publisher-id'
+ }
+});
+```
+
+## Registration
+
+Please contact [tech@nexx360.io](mailto:tech@nexx360.io) to obtain your Nexx360 publisher credentials.
diff --git a/dev-docs/bidders/SMB.md b/dev-docs/bidders/SMB.md
new file mode 100644
index 0000000000..f681d50b08
--- /dev/null
+++ b/dev-docs/bidders/SMB.md
@@ -0,0 +1,31 @@
+---
+layout: bidder
+title: SMB
+description: SMB Bidder Adapter
+biddercode: SMB
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+media_types: banner, video, native
+safeframes_ok: true
+deals_supported: false
+floors_supported: true
+fpd_supported: false
+pbjs: true
+pbs: true
+pbs_app_supported: true
+multiformat_supported: will-bid-on-any
+---
+
+
+## Bid Params
+
+{:.table .table-bordered .table-striped}
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------|---------|----------|
+| `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`.
diff --git a/dev-docs/bidders/adbix.md b/dev-docs/bidders/adbix.md
new file mode 100644
index 0000000000..5b809d8412
--- /dev/null
+++ b/dev-docs/bidders/adbix.md
@@ -0,0 +1,41 @@
+---
+layout: bidder
+title: Adbix
+description: Prebid Adbix Bidder Adapter
+pbjs: true
+pbs: false
+biddercode: adbix
+media_types: banner
+coppa_supported: false
+tcfeu_supported: false
+usp_supported: false
+schain_supported: true
+dchain_supported: false
+safeframes_ok: true
+deals_supported: true
+floors_supported: true
+fpd_supported: true
+userId: none
+sidebarType: 1
+---
+
+## Registration
+
+To use the Adbix bidder you will need a valid publisher ID and placement ID from Adbix. For further information, please contact .
+
+## Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-------------------------------------|--------------------|-----------|
+| `publisherId` | required | Adbix publisher identifier | `'test-publisher'` | `string` |
+| `placementId` | required | Adbix placement identifier | `'test-300x250'` | `string` |
+| `test` | optional | Enables the Adbix test response | `true` | `boolean` |
+
+## User Sync
+
+User sync is recommended to improve match rates and monetization. The adapter registers an image user-sync request when image/pixel syncing is enabled by the publisher. The auction continues to work when image user syncing is disabled.
+
+## Privacy
+
+For information about Adbix privacy practices, see:
diff --git a/dev-docs/bidders/adkernel.md b/dev-docs/bidders/adkernel.md
index 28d8a455fb..e6adb3ebdf 100644
--- a/dev-docs/bidders/adkernel.md
+++ b/dev-docs/bidders/adkernel.md
@@ -4,7 +4,7 @@ title: AdKernel
description: Prebid AdKernel Bidder Adaptor
biddercode: adkernel
tcfeu_supported: true
-dsa_supported: false
+dsa_supported: true
gvl_id: 14
usp_supported: true
coppa_supported: true
@@ -27,14 +27,14 @@ privacy_sandbox: no
sidebarType: 1
---
-### Note
+## Note
The Adkernel Bidding adaptor requires setup and approval before beginning. Please reach out to for more details
### Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|----------|----------|-----------------------|---------------------------|----------|
-| `host` | required | Ad network's RTB host | `'cpm.metaadserving.com'` | `string` |
-| `zoneId` | required | RTB zone id | `30164` | `integer` |
+|Name|Scope|Description|Example|Type|
+|---|---|---|---|---|
+|`host`|required|Ad network's RTB host|`'cpm.metaadserving.com'`|`string`|
+|`zoneId`|required|RTB zone id|`30164`|`integer`|
diff --git a/dev-docs/bidders/adswag.md b/dev-docs/bidders/adswag.md
new file mode 100644
index 0000000000..93cb00a1dc
--- /dev/null
+++ b/dev-docs/bidders/adswag.md
@@ -0,0 +1,140 @@
+---
+layout: bidder
+title: Adswag
+description: Prebid Adswag Bidder Adapter
+biddercode: adswag
+media_types: banner, video, audio
+multiformat_supported: will-bid-on-any
+tcfeu_supported: true
+dsa_supported: true
+gvl_id: 1417
+usp_supported: false
+gpp_sids: tcfeu
+userId: all
+coppa_supported: false
+schain_supported: true
+dchain_supported: false
+prebid_member: false
+floors_supported: true
+fpd_supported: true
+ortb_blocking_supported: false
+safeframes_ok: true
+deals_supported: false
+pbjs: true
+pbs: true
+pbs_app_supported: true
+privacy_sandbox: no
+sidebarType: 1
+---
+
+## Note
+
+Maintainer contact: [prebid@adswag.ai](mailto:prebid@adswag.ai)
+
+Adswag bids in **EUR** on every bid. Publishers whose ad-server currency is
+not EUR should include the Prebid
+[currency module](https://docs.prebid.org/dev-docs/modules/currency.html).
+
+Outstream video units get an Adswag renderer attached automatically: nothing
+is downloaded unless an Adswag outstream bid wins, and a publisher-supplied
+`renderer` overrides it per Prebid convention.
+
+Audio requires the `FEATURES.AUDIO` build flag and `mimes`; Prebid has no
+built-in audio renderer, so hand the returned VAST to your audio player.
+
+From `ortb2.user` only extended identifiers (`user.eids` / `user.ext.eids`)
+are forwarded, gated on consent; other `user` first-party data is not sent.
+
+## Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|----------------------------------------------------------------------------------------------|-----------------------|----------|
+| `publisherId` | required | Adswag publisher id (issued at onboarding). Resolves the canonical publisher at the edge. | `"pub-nl-news-1"` | `string` |
+| `placementId` | optional | Explicit placement override. Omit to let Adswag discover the placement from GPID/adUnitCode. | `"plc-homepage-mrec"` | `string` |
+| `bidFloor` | optional | Static floor (EUR) used only when the Prebid Price Floors module is not configured. | `0.50` | `number` |
+| `video` | optional | Overrides for `mediaTypes.video` ad-unit params (Prebid video-params convention). | `{ maxduration: 15 }` | `object` |
+
+## Video params
+
+Standard Prebid video params are read from `mediaTypes.video` (with
+`params.video` overrides); `mimes` is required. The endpoint consumes
+`mimes`, `minduration`, `maxduration`, `protocols`, `playerSize` (as
+`w`/`h`), `plcmt` (derived from `context` when not set explicitly),
+`linearity`, `skip` and `skipafter`.
+
+## Example ad units
+
+```javascript
+var adUnits = [
+ {
+ code: "div-gpt-ad-homepage-mrec",
+ mediaTypes: {
+ banner: {
+ sizes: [[300, 250], [300, 600]]
+ }
+ },
+ ortb2Imp: {
+ ext: { gpid: "/1234/homepage#mrec" }
+ },
+ bids: [
+ {
+ bidder: "adswag",
+ params: {
+ publisherId: "pub-nl-news-1"
+ }
+ }
+ ]
+ },
+ {
+ code: "video-player-1",
+ mediaTypes: {
+ video: {
+ context: "instream",
+ playerSize: [[640, 480]],
+ mimes: ["video/mp4"],
+ minduration: 5,
+ maxduration: 30,
+ protocols: [2, 3, 7, 8]
+ }
+ },
+ ortb2Imp: {
+ ext: { gpid: "/1234/article#player" }
+ },
+ bids: [
+ {
+ bidder: "adswag",
+ params: {
+ publisherId: "pub-nl-news-1"
+ }
+ }
+ ]
+ },
+ {
+ code: "audio-slot-1",
+ mediaTypes: {
+ audio: {
+ mimes: ["audio/mpeg", "audio/mp4"],
+ minduration: 10,
+ maxduration: 30,
+ protocols: [2, 3, 7, 8]
+ }
+ },
+ bids: [
+ {
+ bidder: "adswag",
+ params: {
+ publisherId: "pub-nl-news-1"
+ }
+ }
+ ]
+ }
+];
+```
+
+## Privacy / consent / identity
+
+Consentless traffic is served contextually: no identifiers are read,
+written, or forwarded. Enabling user syncs is recommended (registered via
+`getUserSyncs`, one iframe or image sync per auction on `ev.adswag.ai`,
+honoring your `userSync` configuration and GDPR/GPP/USP consent).
diff --git a/dev-docs/bidders/advertronic.md b/dev-docs/bidders/advertronic.md
new file mode 100644
index 0000000000..0db4dc17cf
--- /dev/null
+++ b/dev-docs/bidders/advertronic.md
@@ -0,0 +1,38 @@
+---
+layout: bidder
+title: Advertronic
+description: Prebid Advertronic Bidder Adapter
+biddercode: advertronic
+media_types: banner, video
+multiformat_supported: will-bid-on-any
+tcfeu_supported: false
+usp_supported: false
+coppa_supported: false
+schain_supported: false
+deals_supported: false
+floors_supported: true
+safeframes_ok: true
+pbjs: true
+pbs: false
+sidebarType: 1
+---
+
+## Note
+
+The Advertronic bid adapter connects to Advertronic SSP (Russian supply-side
+platform). Both `publisherId` and `placementId` are issued during onboarding —
+reach out to .
+
+Bids are returned **net to the publisher** in **RUB**: enable the currency
+module (or set `adServerCurrency: "RUB"`) if your ad server currency differs.
+
+Video is supported for both contexts. For `outstream` the adapter supplies its
+own renderer (loaded from Advertronic servers) unless the ad unit defines one.
+
+## Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|------------------------------------------|------------------|----------|
+| `publisherId` | required | Publisher ID issued during onboarding | `'42'` | `string` |
+| `placementId` | required | Placement token issued during onboarding | `'a1b2c3d4e5f6'` | `string` |
diff --git a/dev-docs/bidders/anzuDSP.md b/dev-docs/bidders/anzuDSP.md
index d790fb9e41..36df4f82bb 100644
--- a/dev-docs/bidders/anzuDSP.md
+++ b/dev-docs/bidders/anzuDSP.md
@@ -9,7 +9,7 @@ tcfeu_supported: false
usp_supported: true
prebid_member: false
pbjs: true
-pbs: false
+pbs: true
schain_supported: true
floors_supported: true
multiformat_supported: will-bid-on-any
@@ -30,3 +30,11 @@ privacy_sandbox: no
| `pid` | required | Placement ID | `0e232769e6f71d291ee7dbc9d157cf84` | `string` |
| `env` | required | Environment name | `anzuDSP` | `string` |
| `ext` | optional | Specific integration config | `{}` | `object` |
+
+## Prebid Server Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|-----------------------------|------------------------------------|-----------|
+| `pid` | required | Placement ID | `0e232769e6f71d291ee7dbc9d157cf84` | `string` |
+| `env` | required | Environment name | `anzuDSP` | `string` |
diff --git a/dev-docs/bidders/balancex.md b/dev-docs/bidders/balancex.md
new file mode 100644
index 0000000000..b54a4a336f
--- /dev/null
+++ b/dev-docs/bidders/balancex.md
@@ -0,0 +1,38 @@
+---
+layout: bidder
+title: BalanceX
+description: Prebid BalanceX Adaptor
+biddercode: balancex
+pbjs: true
+pbs: false
+media_types: banner, video, audio, native
+userIds: all
+fpd_supported: false
+tcfeu_supported: false
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: false
+aliasCode: limelightDigital
+sidebarType: 1
+---
+
+## Note
+
+The BalanceX adapter requires setup before beginning.
+
+## Bid Params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+|:--------------|:---------|:----------------------|:-------------------------|:----------|
+| `host` | required | Ad network's RTB host | `'ssp.balance-x.com'` | `string` |
+| `publisherId` | required | Publisher ID | `12345` | `integer` |
+
+Prebid BalanceX server-side Prebid Server adapter requires only `publisherId` and `host` parameters. But Prebid BalanceX client-side Prebid.js adapter requires only `host`, `adUnitId`, `adUnitType`.
+
+Prebid BalanceX server-side Prebid Server adapter supports only `banner`, `video`, `audio`, `native` media types. But Prebid BalanceX client-side Prebid.js adapter supports only `banner` and `video` media types, doesn't support `audio` and `native`.
diff --git a/dev-docs/bidders/bidstailamedia.md b/dev-docs/bidders/bidstailamedia.md
index 0288468a2d..258ec53fcb 100644
--- a/dev-docs/bidders/bidstailamedia.md
+++ b/dev-docs/bidders/bidstailamedia.md
@@ -3,6 +3,7 @@ layout: bidder
title: stailamedia Bidder
description: Prebid bidstailamedia Bidder Adapter
pbjs: true
+pbs: true
biddercode: bidstailamedia
aliasCode: nexx360
gvl_id: 965 (nexx360)
@@ -13,7 +14,6 @@ schain_supported: true
dchain_supported: false
floors_supported: true
userIds: all
-tcfeu_supported: true
media_types: banner, video, native
safeframes_ok: true
deals_supported: true
@@ -23,13 +23,13 @@ multiformat_supported: will-bid-on-any
---
-### Bid Params
+## Bid Params
| Name | Scope | Description | Example | Type |
|---------------|----------|----------------------------|-------------------------------------- |-----------|
-| `tagId` | required | tag ID | `"hk15z9sy"` | `string` |
+| `tagId` | required | tag ID | `"hk15z9sy"` | `string` |
-### First Party Data
+## First Party Data
Publishers should use the `ortb2` method of setting [First Party Data](/features/firstPartyData.html).
The following fields are supported:
@@ -39,7 +39,7 @@ The following fields are supported:
* ortb2.user.ext.data.*
* ortb2.user.data[]
-### Test Parameters
+## Test Parameters
```javascript
var adUnits = [
diff --git a/dev-docs/bidders/copper6ssp.md b/dev-docs/bidders/copper6ssp.md
index ee0131c1ac..a2b588a52a 100644
--- a/dev-docs/bidders/copper6ssp.md
+++ b/dev-docs/bidders/copper6ssp.md
@@ -3,34 +3,126 @@ layout: bidder
title: Copper6SSP
description: Prebid Copper6SSP Bidder Adapter
biddercode: copper6ssp
-gpp_sids: usstate_all
-gvl_id: 1356
-tcfeu_supported: true
+userIds: criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+tcfeu_supported: false
usp_supported: true
-coppa_supported: true
+gvl_id: 1356
+coppa_supported: false
schain_supported: true
-deals_supported: false
+gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp
floors_supported: true
+media_types: banner, video
+prebid_member: false
+safeframes_ok: false
+deals_supported: false
+pbs_app_supported: false
fpd_supported: false
ortb_blocking_supported: false
-media_types: banner, video, native
multiformat_supported: will-bid-on-one
-userIds: all
pbjs: true
-pbs: true
-pbs_app_supported: true
-safeframes_ok: true
+pbs: false
sidebarType: 1
---
-### Bid Params
+## Bid Params for Prebid.js
+
+### New request params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|--------------|---------------------------------|------------|
-| `placementId` | optional | Placement Id | `'0'` | `'string'` |
-| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` |
-### Note
+| Name | Scope | Description | Example | Type |
+|---------------|----------|------------------------------------------------------------------------------------------|------------------------------|------------|
+| `cId` | required | The connection ID from Copper6. | `'562524b21b1c1f08117fc7f9'` | `string` |
+| `pId` | required | The publisher ID from Copper6 (pbjs only). | `'59ac17c192832d0011283fe3'` | `string` |
+| `bidFloor` | optional | The minimum bid value desired. Copper6 will not respond with bids lower than this value. | `0.90` | `float` |
+
+### Backward compatibility (will be removed in v12)
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+|---------------|----------|------------------------------------------------------------------------------------------|------------------------------|------------|
+| `placementId` | optional | Placement Id | `'0'` | `'string'` |
+| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` |
+
+## Bid Params for Prebid Server
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+|------------|----------|------------------------------------------------------------------------------------------|------------------------------|----------|
+| `cId` | required | The connection ID from Copper6. | `'562524b21b1c1f08117fc7f9'` | `string` |
+
+### Example
+
+#### New request example
+
+ ```javascript
+var adUnits = [{
+ code: 'banner-div',
+ mediaTypes: {
+ banner: {
+ sizes: [
+ [300, 250],
+ [728, 90]
+ ]
+ }
+ },
+ bids: [{
+ bidder: 'copper6ssp',
+ params: {
+ cId: '562524b21b1c1f08117fc7f9', // Required - PROVIDED DURING SETUP...
+ pId: '59ac17c192832d0011283fe3', // Required - PROVIDED DURING SETUP...
+ bidFloor: 1.23 // Optional
+ }
+ }]
+}
+];
+
+// configure pbjs to enable user syncing
+pbjs.setConfig({
+ userSync: {
+ filterSettings: {
+ iframe: {
+ bidders: 'copper6ssp',
+ filter: 'include'
+ }
+ }
+ }
+});
+```
+
+#### Supported backward compatibility
+
+``` javascript
+var adUnits = [{
+ code: 'banner-div',
+ mediaTypes: {
+ banner: {
+ sizes: [
+ [300, 250],
+ [728, 90]
+ ]
+ }
+ },
+ bids: [{
+ bidder: 'copper6ssp',
+ params: {
+ placementId: '562524b21b1c1f08117fc7f9',
+ }
+ }]
+}
+];
-For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId
+// configure pbjs to enable user syncing
+pbjs.setConfig({
+ userSync: {
+ filterSettings: {
+ iframe: {
+ bidders: 'copper6ssp',
+ filter: 'include'
+ }
+ }
+ }
+});
+```
diff --git a/dev-docs/bidders/cortex.md b/dev-docs/bidders/cortex.md
index 30617aa6cf..3ea0f36ec6 100644
--- a/dev-docs/bidders/cortex.md
+++ b/dev-docs/bidders/cortex.md
@@ -33,3 +33,30 @@ sidebarType: 1
## Note
For the prebid server you only need to use one parameter: either `placementId` or `endpointId`
+
+## Regional Endpoints
+
+Cortex supports the following regional endpoint subdomains:
+
+- `eu` — EU
+- `us-east` — US East
+- `apac` — APAC
+
+### Prebid Server
+
+The Prebid Server config endpoint is defined with a `REGION` placeholder:
+
+```yaml
+endpoint: "https://REGION.targetadserver.com/pserver"
+```
+
+Please deploy this config in each of your datacenters and replace `REGION` with the appropriate regional subdomain (`eu`, `us-east`, or `apac`).
+
+### Prebid.js
+
+The Prebid.js adapter automatically selects the regional endpoint based on the browser timezone:
+
+- Europe / Africa / Atlantic / Arctic → `eu`
+- Asia / Australia / Antarctica / Pacific / Indian → `apac`
+- America / US / Canada → `us-east`
+- Unknown / unresolved timezone → `eu` (fallback)
diff --git a/dev-docs/bidders/cwire.md b/dev-docs/bidders/cwire.md
index ed58c8ed99..90b373a670 100644
--- a/dev-docs/bidders/cwire.md
+++ b/dev-docs/bidders/cwire.md
@@ -11,12 +11,13 @@ usp_supported: false
schain_supported: false
userIds: none
enable_download: true
-media_types: banner
+media_types: banner, video
+multiformat_supported: will-bid-on-any
sidebarType: 1
---
---
-### Bid Params
+## Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
@@ -25,7 +26,7 @@ sidebarType: 1
| `placementId` | optional | C-WIRE placement id | `113244` | `integer` |
| `domainId` | required | C-WIRE domain id | `2453` | `integer` |
-### URL parameters
+## URL parameters
Additionally, the following parameters can be passed by URL parameters for testing.
diff --git a/dev-docs/bidders/displayio.md b/dev-docs/bidders/displayio.md
index 9abe57b05c..4b8e4f0dc2 100644
--- a/dev-docs/bidders/displayio.md
+++ b/dev-docs/bidders/displayio.md
@@ -3,7 +3,7 @@ layout: bidder
title: Displayio
description: Prebid Displayio Bidder Adapter
biddercode: displayio
-media_types: banner, video
+media_types: banner, video, audio, native
tcfeu_supported: true
usp_supported: true
safeframes_ok: true
@@ -20,7 +20,7 @@ ortb_blocking_supported: true
multiformat: will-bid-on-any
---
-### Note
+## Note
Before configuring the display.io adapter you must reach out your account manager from display.io team (or send a request to ) for approval and setup steps.
@@ -28,28 +28,28 @@ Before configuring the display.io adapter you must reach out your account manage
{: .table .table-bordered .table-striped }
-| Name | Scope | Type | Description | Example |
-|----------------| ----- | ---- |----------------------------------------|--------------------------------------------------------------|
-| `siteId` | required | Number | SiteId and PlacementID are your inventory IDs on the display.io platform (please ask your Account Manager for your site and placement IDs). | 7753 |
-| `placementId` | required | Number | SiteId and PlacementID are your inventory IDs on the display.io platform (please ask your Account Manager for your site and placement IDs). | 5375 |
-| `adsSrvDomain` | required | String | | "appsrv.display.io" |
-| `cdnDomain` | required | String | | "cdn.display.io" |
-| `renderURL` | optional | String | | "" |
-| `pageCategory` | optional | String | Comma-separated list of IAB content categories that describe the current page or view of the site, list of available values. | "pageCategory1, pageCategory2" |
-| `keywords` | optional | String | Comma-separated list of keywords describing the content. | "keyword1, keyword2, keyword3" |
-| `custom` | optional | Object | User-defined targeting key-value pairs. custom applies to a specific unit. | `{headerTextColor: "red", fixedHeaderSelector: '.site-header'}` |
-| `custom.headerText`| optional | String | Ad container header text. By default, text is "Scroll to continue with content". Limited to 50 characters. | "Our awesome advertisement" |
-| `custom.headerTextColor`| optional | String | Ad container header text color, "white" by default | "#2196f3" |
-| `custom.headerBackgroundColor`| optional | String | Ad container header background color, "black" by default | "#fff" |
-| `custom.adContainerBackgroundColor`| optional | String | Ad container body background color, "transparent" by default | "#000" |
-| `custom.fixedHeaderSelector`| optional | String | In case your webpage has a fixed header – the header Id attribute or header class attribute should be defined as a value for parameter fixedHeaderSelector. | ".site-header" |
+| Name | Scope | Type | Description | Example |
+| ------ | ------- | ------ | ------------- | --------- |
+| `siteId` | required | Number | SiteId and PlacementID are your inventory IDs on the display.io platform (please ask your Account Manager for your site and placement IDs). | 7753 |
+| `placementId` | required | Number | SiteId and PlacementID are your inventory IDs on the display.io platform (please ask your Account Manager for your site and placement IDs). | 5375 |
+| `adsSrvDomain` | required | String | | "appsrv.display.io" |
+| `cdnDomain` | required | String | | "cdn.display.io" |
+| `renderURL` | optional | String | | "" |
+| `pageCategory` | optional | String | Comma-separated list of IAB content categories that describe the current page or view of the site, list of available values. | "pageCategory1, pageCategory2" |
+| `keywords` | optional | String | Comma-separated list of keywords describing the content. | "keyword1, keyword2, keyword3" |
+| `custom` | optional | Object | User-defined targeting key-value pairs. custom applies to a specific unit. | `{headerTextColor: "red", fixedHeaderSelector: '.site-header'}` |
+| `custom.headerText` | optional | String | Ad container header text. By default, text is "Scroll to continue with content". Limited to 50 characters. | "Our awesome advertisement" |
+| `custom.headerTextColor` | optional | String | Ad container header text color, "white" by default | "#2196f3" |
+| `custom.headerBackgroundColor` | optional | String | Ad container header background color, "black" by default | "#fff" |
+| `custom.adContainerBackgroundColor` | optional | String | Ad container body background color, "transparent" by default | "#000" |
+| `custom.fixedHeaderSelector` | optional | String | In case your webpage has a fixed header – the header Id attribute or header class attribute should be defined as a value for parameter fixedHeaderSelector. | ".site-header" |
### Prebid Server Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Type | Description | Example |
-|----------------| ----- | ---- |----------------------------------------|--------------------------------------------------------------|
-| `publisherId` | required | String | Publisher Id on the display.io platform (please ask your Account Manager for your publisher id). | "101" |
-| `inventoryId` | required | String | Inventory Id on the display.io platform (please ask your Account Manager for your inventory id). | "1011" |
-| `placementId` | required | String | Placement Id on the display.io platform (please ask your Account Manager for your placement id). | "1011" |
+| Name | Scope | Type | Description | Example |
+| ------ | ------- | ------ | ------------- | --------- |
+| `publisherId` | required | String | Publisher Id on the display.io platform (please ask your Account Manager for your publisher id). | "101" |
+| `inventoryId` | required | String | Inventory Id on the display.io platform (please ask your Account Manager for your inventory id). | "1011" |
+| `placementId` | required | String | Placement Id on the display.io platform (please ask your Account Manager for your placement id). | "1011" |
diff --git a/dev-docs/bidders/eightPod.md b/dev-docs/bidders/eightPod.md
deleted file mode 100644
index e9fcf8cf17..0000000000
--- a/dev-docs/bidders/eightPod.md
+++ /dev/null
@@ -1,51 +0,0 @@
----
-layout: bidder
-title: 8pod
-description: Prebid EightPod Bidder Adaptor
-biddercode: eightPod
-tcfeu_supported: false
-gvl_id: none
-usp_supported: false
-coppa_supported: false
-gpp_sids: none
-schain_supported: false
-dchain_supported: false
-userId: none
-media_types: banner, video
-deals_supported: false
-userIds: check with bidder
-floors_supported: false
-fpd_supported: true
-pbjs: true
-pbs: false
-prebid_member: false
-sidebarType: 1
-safeframes_ok: false
-multiformat_supported: will-not-bid
-privacy_sandbox: no
-ortb_blocking_supported: false
----
-
-### Registration
-
-The EightPod adapter requires setup before beginning. Please contact us at
-
-### Bid Params
-
-| Name | Scope | Description | Example | Type |
-|---------------|----------|-------------------------------------------------------------------------------------------------------------|----------------------------|----------|
-| `placementId` | required | The unique identifier of the ad placement. Could be obtained from the 8pod UI or from your account manager. | "placementId-438753744289" | `string` |
-| `publisherId` | optional | The unique identifier of the publisher. | "publisherId-438753744289" | `string` |
-
-### First Party Data
-
-We accept all standard OpenRTB 2.6 fields for following object:
-
-`ortb2.site`
-`ortb2.user`
-`ortb2.device`
-`ortb2.user.data.*`
-`ortb2.site.content.data`
-
-Note that all fields are optional. For contextual data (e.g. categories), standard IAB taxonomies are supported.
-Also, note that any 1st party data circulation should be agreed in advance.
diff --git a/dev-docs/bidders/eightpod.md b/dev-docs/bidders/eightpod.md
new file mode 100644
index 0000000000..c6bb36fd0e
--- /dev/null
+++ b/dev-docs/bidders/eightpod.md
@@ -0,0 +1,79 @@
+---
+layout: bidder
+title: 8pod
+description: Prebid EightPod Bidder Adaptor
+biddercode: eightpod
+filename: eightpodBidAdapter
+tcfeu_supported: true
+gvl_id: 1497
+usp_supported: true
+coppa_supported: true
+gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp
+schain_supported: false
+dchain_supported: false
+userIds: unifiedId, id5Id, identityLink, uid2
+media_types: banner
+deals_supported: true
+floors_supported: false
+fpd_supported: true
+pbjs: true
+pbs: false
+prebid_member: false
+sidebarType: 1
+safeframes_ok: false
+multiformat_supported: will-not-bid
+privacy_sandbox: no
+ortb_blocking_supported: false
+---
+
+## Registration
+
+The EightPod adapter requires setup before beginning. Please contact us at
+
+## Privacy Regulation Support
+
+The EightPod adapter passes through GDPR (TCF), US Privacy (CCPA/USP), GPP, and COPPA consent signals in OpenRTB bid requests:
+
+| Regulation | OpenRTB fields |
+| --- | --- |
+| GDPR (TCF EU) | `user.ext.consent`, `regs.ext.gdpr` |
+| US Privacy (CCPA/USP) | `regs.ext.us_privacy` |
+| GPP | `regs.gpp`, `regs.gpp_sid`, `regs.ext.gpp`, `regs.ext.gpp_sid` |
+| COPPA | `regs.coppa` |
+
+The adapter is registered with IAB Global Vendor List ID **1497**.
+
+Bid responses populate `meta.advertiserDomains` from OpenRTB `adomain` and set `meta.mediaType` to `banner`.
+
+The adapter relies on Prebid's OpenRTB conversion for User ID module values and preserves identifiers in `user.ext.eids`. Publishers should use User ID modules or `ortb2.user.ext.eids` for identity signals.
+
+The `userIds` metadata above indicates supported Prebid User ID modules, including UID2. Their identifiers are expected to flow through OpenRTB `user.ext.eids`; they are not copied into `user.id`.
+
+## User Identifier Disclosure
+
+The adapter does not create or persist any browser storage values. When available, it reads the Tealium `utag_main_v_id` cookie and sends it in the OpenRTB extended identifiers field as `user.ext.eids` with source `8podx.com`. For backward compatibility, the same value is also sent as `user.ext.eightPodVisitorId`; publishers may override this value with `params.eightPodVisitorId`. This identifier is used only as an EightPod/Tealium visitor reference for bidder-side matching and reporting. The adapter does not set the cookie, and its lifetime is controlled by the Tealium configuration.
+
+Prebid User ID module values remain the preferred source for OpenRTB `user.ext.eids`.
+
+## Bid Params
+
+OpenRTB first-party data should be supplied through `ortb2` / `ortb2Imp`. The adapter preserves Prebid User ID module identifiers in `user.ext.eids`.
+
+| Name | Scope | Description | Example | Type |
+| --- | --- | --- | --- | --- |
+| `placementId` | optional | The unique identifier of the ad placement. When provided, sent as OpenRTB `imp.tagid`; also sent as legacy `ext.adSlotPlacementId` for compatibility. Could be obtained from the 8pod UI or from your account manager. | "placementId-438753744289" | `string` |
+| `publisherId` | optional, legacy override | Overrides OpenRTB `site.publisher.id` when provided. Prefer `ortb2.site.publisher.id`. | "publisherId-438753744289" | `string` |
+| `dealId` | optional | PMP deal ID sent as `imp.pmp.deals[].id` when provided. | "deal-123" | `string` |
+| `trace` | optional | Enables trace mode by adding `?trace=true` to the bidder endpoint for debugging. | true | `boolean` or `string` |
+| `userId` | optional, legacy override | Overrides OpenRTB `user.id` when provided. Prefer User ID modules or `ortb2.user.ext.eids`. | "user-123" | `string` |
+| `eightPodVisitorId` | optional | Publisher-provided EightPod/Tealium visitor reference sent as OpenRTB `user.ext.eids` and legacy `user.ext.eightPodVisitorId`. Overrides the `utag_main_v_id` cookie value when provided. | "visitor-123" | `string` |
+| `country` | optional, legacy override | Overrides OpenRTB `device.geo.country` and `user.geo.country` when provided. Prefer `ortb2.device.geo.country` / `ortb2.user.geo.country`. | "AUS" | `string` |
+| `language` | optional, legacy override | Overrides OpenRTB `device.language` when provided. Prefer `ortb2.device.language`. | "en" | `string` |
+| `publishercat` | optional, legacy override | Comma-separated override for OpenRTB `site.publisher.cat`. Prefer `ortb2.site.publisher.cat`. | "IAB1,IAB2" | `string` |
+| `sitecat` | optional, legacy override | Comma-separated override for OpenRTB `site.cat`. Prefer `ortb2.site.cat`. | "IAB3" | `string` |
+| `pagecat` | optional, legacy override | Comma-separated override for OpenRTB `site.pagecat`. Prefer `ortb2.site.pagecat`. | "IAB4" | `string` |
+| `sectioncat` | optional, legacy override | Comma-separated override for OpenRTB `site.sectioncat`. Prefer `ortb2.site.sectioncat`. | "IAB5" | `string` |
+| `yob` | optional, legacy override | Overrides OpenRTB `user.yob` when provided. Prefer `ortb2.user.yob`. | 1990 | `number` or `string` |
+| `gender` | optional, legacy override | Overrides OpenRTB `user.gender` when provided. Prefer `ortb2.user.gender`. | "M" | `string` |
+| `city` | optional, legacy override | Overrides OpenRTB `user.geo.city` when provided. Prefer `ortb2.user.geo.city`. | "Sydney" | `string` |
+| `region` | optional, legacy override | Overrides OpenRTB `user.geo.region` when provided. Prefer `ortb2.user.geo.region`. | "NSW" | `string` |
diff --git a/dev-docs/bidders/engerio.md b/dev-docs/bidders/engerio.md
index 5ce31d6211..346120faff 100644
--- a/dev-docs/bidders/engerio.md
+++ b/dev-docs/bidders/engerio.md
@@ -9,7 +9,7 @@ gvl_id: none
usp_supported: false
coppa_supported: false
gpp_sids: none
-schain_supported: false
+schain_supported: true
dchain_supported: false
media_types: banner
safeframes_ok: true
@@ -25,13 +25,42 @@ privacy_sandbox: no
sidebarType: 1
---
-### Note
+## Note
The Engerio adapter requires an active publisher account. Please contact [info@thinkeasy.cz](mailto:info@thinkeasy.cz) to obtain an ad slot code (`adUnitCode`) for your placement.
-### Bid Params
+## Supply chain
+
+Engerio publishes [https://api.engerio.sk/sellers.json](https://api.engerio.sk/sellers.json). Your account's seller id from that file is what belongs in your `ads.txt`:
+
+```text
+api.engerio.sk, , DIRECT
+```
+
+and in the supply chain node for this bidder:
+
+```javascript
+pbjs.setBidderConfig({
+ bidders: ['engerio'],
+ config: {
+ ortb2: {
+ source: {
+ ext: {
+ schain: {
+ ver: '1.0',
+ complete: 1,
+ nodes: [{ asi: 'api.engerio.sk', sid: '', hp: 1 }]
+ }
+ }
+ }
+ }
+ }
+});
+```
+
+## Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|------|-------|-------------|---------|------|
+| Name | Scope | Description | Example | Type |
+| ------------ | -------- | -------------------------------------------------------------------------- | -------------------- | -------- |
| `adUnitCode` | required | The ad slot identifier configured in the Engerio admin for this placement. | `'homepage-sidebar'` | `string` |
diff --git a/dev-docs/bidders/ex_geniee.md b/dev-docs/bidders/ex_geniee.md
new file mode 100644
index 0000000000..31c76f99f7
--- /dev/null
+++ b/dev-docs/bidders/ex_geniee.md
@@ -0,0 +1,97 @@
+---
+layout: bidder
+title: Geniee Exchange
+description: Geniee Exchange Bidder Adapter
+biddercode: ex_geniee
+tcfeu_supported: false
+dsa_supported: false
+gvl_id: none
+usp_supported: false
+coppa_supported: false
+gpp_sids: none
+schain_supported: true
+dchain_supported: false
+userIds: all
+media_types: banner
+safeframes_ok: false
+deals_supported: false
+floors_supported: true
+fpd_supported: true
+pbjs: true
+pbs: false
+prebid_member: false
+multiformat_supported: will-bid-on-one
+ortb_blocking_supported: partial
+privacy_sandbox: no
+sidebarType: 1
+---
+## Note
+
+This is the [Geniee](https://geniee.co.jp) *Exchange* Bidder Adapter for Prebid.js.
+
+{: .alert.alert-info :}
+Geniee maintains three separate bid adapters. This adapter (`ex_geniee`) is independent of "Geniee SSP" (`ssp_geniee`, `zoneId` based) and "Geniee" (`dsp_geniee`, Geniee DSP) and can be used alongside them.
+
+Please contact us at before using the adapter. `partnerId` values are publisher-specific and are issued by Geniee; a generic value will not return bids.
+
+Ads are served when all of the following conditions are satisfied:
+
+- The ad unit declares `mediaTypes.banner` with valid sizes. Video- or native-only ad units are rejected. Multiformat ad units that include banner are accepted, but only the banner part is sent.
+- Payment is possible in Japanese yen or US dollars.
+- The request contains either `site` (with `site.page`) or `app` (with `app.bundle`).
+- GDPR does not apply to the request. The Exchange does not serve GDPR territories, so no request is sent when `gdprApplies` is true. The adapter does not add consent signals itself; values written to `ortb2` by the TCF consent module (`regs.ext.gdpr`, `user.ext.consent`) are passed through with the rest of the first party data.
+
+## Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|-----------|
+| `partnerId` | required | The per-publisher ID issued by Geniee. Must be an integer >= 1 (number only; string forms such as `'123'` are rejected). | `123` | `integer` |
+| `currency` | optional | Currency setting, `'JPY'` or `'USD'`. When omitted, the currency module's `adServerCurrency` is used, then `'USD'`. If the resolved currency is neither `JPY` nor `USD`, no request is sent. | `'JPY'` | `string` |
+| `placementId` | optional | Reporting label for the ad unit, defined by the publisher (not issued by Geniee). Use a fixed value per ad unit; if omitted, Geniee reports cannot be broken down by ad unit. Alphanumeric, hyphen and underscore, max 40 characters, case-insensitive. Sent as `imp.tagid`. If the value violates these rules, the request is still bid on, but reports cannot be broken down correctly by that `placementId`. | `'top-banner_1'` | `string` |
+
+## First Party Data
+
+`ortb2` and `ortb2Imp` first party data are included in the OpenRTB request. Note the following:
+
+- `imp.tagid` set through `ortb2Imp` is overridden when `params.placementId` is set.
+- User IDs are read from `user.ext.eids` and mirrored to `user.eids`.
+- The Exchange runs a first price auction only. If `at` is set to any value other than `1` through `ortb2`, no request is sent.
+
+## OpenRTB Blocking
+
+Support for OpenRTB blocking parameters is partial. All four parameters below are forwarded to demand partners, but only `badv` and `bapp` are enforced by the Exchange when it filters bid responses. `bcat` and `battr` are passed on to demand partners only; the Exchange does not reject a bid that violates them, so blocking depends on each demand partner honoring the value. Set them through first party data; the adapter passes them to the Exchange unchanged.
+
+{: .table .table-bordered .table-striped }
+| Parameter | Where to set | Forwarded to demand partners | Enforced on bid responses by the Exchange |
+|-----------|-------------------------|------------------------------|-------------------------------------------|
+| `badv` | `ortb2.badv` | yes | yes |
+| `bapp` | `ortb2.bapp` | yes | yes |
+| `bcat` | `ortb2.bcat` | yes | no |
+| `battr` | `ortb2Imp.banner.battr` | yes | no |
+
+Notes:
+
+- `badv`: every listed domain is checked against the winning bid's advertiser domains. A bid whose advertiser domain contains a listed value is dropped, so `example.com` also blocks subdomains such as `ads.example.com`. An empty array is forwarded as an explicit "nothing blocked" declaration.
+- `bapp`: matched case-insensitively against the bid's app bundle.
+- `bcat`: only IAB content taxonomy codes with the `IAB` prefix (for example `IAB1`, `IAB26-1`) are forwarded; codes in any other format are dropped.
+- `battr`: only `banner.battr` applies, since this adapter is banner-only.
+
+## User Sync
+
+On a winning response the Exchange returns a single cookie-sync URL, which the adapter registers as an iframe sync. Only the iframe type is supported; no sync is registered on a no-bid.
+
+Prebid disables iframe syncs by default, so publishers must allow them for this bidder:
+
+```javascript
+pbjs.setConfig({
+ userSync: {
+ filterSettings: {
+ iframe: {
+ bidders: ['ex_geniee'],
+ filter: 'include'
+ }
+ }
+ }
+});
+```
diff --git a/dev-docs/bidders/ezoic.md b/dev-docs/bidders/ezoic.md
new file mode 100644
index 0000000000..32b483fb37
--- /dev/null
+++ b/dev-docs/bidders/ezoic.md
@@ -0,0 +1,41 @@
+---
+layout: bidder
+title: Ezoic
+description: Prebid Ezoic Bidder Adapter
+biddercode: ezoic
+tcfeu_supported: true
+gvl_id: 347
+usp_supported: true
+gpp_sids: tcfeu, usp
+coppa_supported: false
+schain_supported: true
+dchain_supported: false
+media_types: banner, video, native
+safeframes_ok: false
+deals_supported: false
+floors_supported: true
+fpd_supported: true
+pbjs: false
+pbs: true
+pbs_app_supported: true
+multiformat_supported: will-bid-on-one
+ortb_blocking_supported: false
+privacy_sandbox: no
+sidebarType: 1
+---
+
+## Registration
+
+The Ezoic bidder adapter requires approval before use. Bids are returned
+only for publisher domains that have been registered and approved by
+Ezoic; requests for unapproved inventory receive no-bid responses.
+Contact to get set up before adding the bidder.
+
+## Bid Params
+
+The Ezoic adapter requires no parameters.
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------|-----------|----------|
+| `placementId` | optional | Placement ID | `'11111'` | `string` |
diff --git a/dev-docs/bidders/floxis.md b/dev-docs/bidders/floxis.md
index e8c7b1f75b..02aa5d83fa 100644
--- a/dev-docs/bidders/floxis.md
+++ b/dev-docs/bidders/floxis.md
@@ -4,20 +4,21 @@ title: Floxis
description: Prebid Floxis Bidder Adapter
biddercode: floxis
pbjs: true
-pbs: false
-media_types: banner, video, native
+pbs: true
+pbs_app_supported: true
+media_types: banner, video, native, audio
safeframes_ok: true
sidebarType: 1
tcfeu_supported: true
dsa_supported: false
-gvl_id: none
+gvl_id: 1609
usp_supported: true
coppa_supported: true
-gpp_supported: true
+gpp_sids: tcfeu, usnat, usstate_all, usp
schain_supported: true
dchain_supported: false
deals_supported: false
-floors_supported: yes
+floors_supported: true
fpd_supported: false
prebid_member: false
multiformat_supported: will-bid-on-any
@@ -25,29 +26,57 @@ ortb_blocking_supported: true
privacy_sandbox: no
---
-### Note
+## Note
-The Floxis bidder adapter enables integration with the Floxis programmatic advertising platform via Prebid.js. It supports banner, video, and native formats with OpenRTB 2.x compliance. Please contact Floxis to set up your partner account and obtain the required parameters.
+The Floxis bidder adapter enables integration with the Floxis programmatic advertising platform. It supports banner, video, and native formats with OpenRTB 2.x compliance via Prebid.js, and banner, video, native, and audio via Prebid Server. Please contact Floxis at to set up your account and obtain the required parameters.
-### Bid Params
+## Prebid.js Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
-|------|-------|-------------|---------|------|
+| ---- | ----- | ----------- | ------- | ---- |
| `seat` | required | Seat identifier provided by Floxis | `"testSeat"` | `string` |
-| `region` | required | Region identifier for routing | `"us-e"` | `string` |
-| `partner` | required | Partner identifier provided by Floxis | `"floxis"` | `string` |
+| `region` | optional | Routing region: `us-e`, `eu`, or `apac` (default: `us-e`) | `"us-e"` | `string` |
+| `partner` | optional | Partner identifier (default: `floxis`) | `"floxis"` | `string` |
-### Floors Support
+## Prebid Server
+
+The Floxis Prebid Server adapter is available in `prebid-server-java`. The server-side endpoint follows the pattern `https://{region}.floxis.tech/pbs`, where `{region}` is one of `us-e`, `eu`, or `apac` (default: `us-e`). When a non-default `partner` is configured, the region host is prefixed accordingly (`https://{partner}-{region}.floxis.tech/pbs`). User-sync is handled via the standard Prebid Server cookie-sync mechanism. For setup assistance contact .
+
+## Prebid Server Bid Params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+| ---- | ----- | ----------- | ------- | ---- |
+| `seat` | required | Seat identifier provided by Floxis | `"testSeat"` | `string` |
+| `region` | optional | Routing region: `us-e`, `eu`, or `apac` (default: `us-e`) | `"us-e"` | `string` |
+| `partner` | optional | Partner identifier (default: `floxis`) | `"floxis"` | `string` |
+
+## Floors Support
The Floxis adapter supports the Prebid.js [Floors Module](https://docs.prebid.org/dev-docs/modules/floors.html). Floor values are automatically included in the OpenRTB request as `imp.bidfloor` and `imp.bidfloorcur`.
-### Privacy Support
+## Privacy Support
+
+Privacy signals (GDPR/TCF EU, US Privacy, GPP, COPPA) are provided by Prebid.js core / Prebid Server and forwarded on the OpenRTB request. The Floxis exchange enforces IAB TCF EU vendor consent (GVL ID 1609) and honors US Privacy and GPP US national/state opt-out signals.
+
+## First-Party Fallback Id (Storage Use)
+
+In browsers that block third-party cookies, the Prebid.js adapter maintains a first-party fallback identifier: a random v4 UUID stored under the key `flx_uid` in `localStorage` (preferred) and a cookie (~30-day lifetime), both scoped to the publisher's own origin. The id is per-publisher — it is never shared across sites — and is sent as `user.ext.floxisId`. It is used only as an identity of last resort when the Floxis `__fxId` cookie is unavailable. Storage details are disclosed at [floxis.tech/vendor-storage.json](https://floxis.tech/vendor-storage.json).
-Privacy fields (GDPR, USP, GPP, COPPA) are handled by Prebid.js core and automatically included in the OpenRTB request.
+All storage access goes through the Prebid.js `storageManager`, so it is gated by the standard `deviceAccess` configuration and GDPR purpose-1 consent under GVL ID 1609. Bidder-level storage access is denied by default and requires an explicit publisher opt-in — without it, no id is generated or sent (a safe no-op):
+
+```javascript
+pbjs.bidderSettings = {
+ floxis: {
+ storageAllowed: true
+ }
+};
+```
-### AdUnit Configuration for Banner
+## AdUnit Configuration for Banner
```javascript
var adUnits = [{
@@ -68,7 +97,7 @@ var adUnits = [{
}];
```
-### AdUnit Configuration for Video
+## AdUnit Configuration for Video
```javascript
var adUnits = [{
@@ -94,7 +123,7 @@ var adUnits = [{
}];
```
-### AdUnit Configuration for Native
+## AdUnit Configuration for Native
```javascript
var adUnits = [{
@@ -128,7 +157,7 @@ var adUnits = [{
}];
```
-### Example
+## Example
```javascript
var pbjs = pbjs || {};
diff --git a/dev-docs/bidders/glomexbidder.md b/dev-docs/bidders/glomexbidder.md
index 5cf70c0a1c..ff8396e906 100644
--- a/dev-docs/bidders/glomexbidder.md
+++ b/dev-docs/bidders/glomexbidder.md
@@ -14,7 +14,6 @@ schain_supported: true
dchain_supported: true
floors_supported: true
userIds: all
-tcfeu_supported: true
media_types: banner, video, native
safeframes_ok: true
deals_supported: true
@@ -24,7 +23,7 @@ multiformat_supported: will-bid-on-any
---
-### Bid Params
+## Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
@@ -34,7 +33,7 @@ multiformat_supported: will-bid-on-any
For the prebid.js you only need to use one parameter: either tagId or placement
-### First Party Data
+## First Party Data
Publishers should use the `ortb2` method of setting [First Party Data](/features/firstPartyData.html).
The following fields are supported:
@@ -44,7 +43,7 @@ The following fields are supported:
* ortb2.user.ext.data.*
* ortb2.user.data[]
-### Test Parameters
+## Test Parameters
```javascript
var adUnits = [
diff --git a/dev-docs/bidders/sspBC.md b/dev-docs/bidders/gopl.md
similarity index 53%
rename from dev-docs/bidders/sspBC.md
rename to dev-docs/bidders/gopl.md
index ea3a9992f7..177b36574c 100644
--- a/dev-docs/bidders/sspBC.md
+++ b/dev-docs/bidders/gopl.md
@@ -1,26 +1,26 @@
---
layout: bidder
-title: sspBC
-description: Prebid sspBC Bidder Adaptor
+title: gopl
+description: Go.pl Bidder Adaptor
pbjs: true
pbs: true
-biddercode: sspBC
+biddercode: gopl
+redirect_from:
+ - /dev-docs/bidders/sspBC
media_types: banner, video, native
floors_supported: true
tcfeu_supported: true
-gvl_id: 676
+gvl_id: 690
sidebarType: 1
---
+{: .alert.alert-info :}
+This adapter was formerly named `sspBC`. It has been renamed to `gopl`; if you're upgrading from the old integration, update your bidder code from `sspBC` to `gopl`.
-### Bid Params
+## Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|---------------|----------|----------------------------|-----------------------------|-----------|
| `id` | optional | placement id | `'006'` | `string` |
| `siteId` | optional | site id | `'235911'` | `string` |
-| `publisherId` | optional | publisher id | `'728'` | `string` |
-| `domain` | optional | site domain | `'somesite.com'` | `string` |
-| `page` | optional | page url | `'somesite.com/index.html'` | `string` |
-| `tmax` | optional | tmax for server connection | `400` | `integer` |
diff --git a/dev-docs/bidders/hyperbrainz.md b/dev-docs/bidders/hyperbrainz.md
new file mode 100644
index 0000000000..49ea599413
--- /dev/null
+++ b/dev-docs/bidders/hyperbrainz.md
@@ -0,0 +1,47 @@
+---
+layout: bidder
+title: HyperBrainz
+description: Prebid.js HyperBrainz Bid Adapter
+biddercode: hyperbrainz
+tcfeu_supported: false
+gvl_id: none
+dsa_supported: false
+usp_supported: true
+coppa_supported: true
+gpp_sids: usnat, usstate_all, usp
+schain_supported: true
+dchain_supported: false
+userIds: all
+media_types: banner, video, native
+safeframes_ok: true
+deals_supported: false
+floors_supported: true
+fpd_supported: true
+pbjs: true
+pbs: false
+pbs_app_supported: false
+prebid_member: false
+multiformat_supported: will-bid-on-any
+ortb_blocking_supported: false
+privacy_sandbox: no
+maintainer_email: it@hyperbrainz.com
+sidebarType: 1
+---
+
+## Note
+
+The HyperBrainz bid 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 |
+|----------------|----------|------------------------------------------------------------------|-------------------|----------|
+| `placementId` | required | Unique placement identifier | `hb_test_banner` | `string` |
+| `publisherId` | optional | Publisher identifier | `pub-1` | `string` |
+| `bidFloor` | optional | Minimum CPM floor override (USD) | `0.30` | `number` |
+| `userId` | optional | User ID sent as `user.id`; overrides the local storage value | `user-1` | `string` |
+| `ext` | optional | Custom extension fields passed to the exchange | `{}` | `object` |
diff --git a/dev-docs/bidders/m152.md b/dev-docs/bidders/m152.md
new file mode 100644
index 0000000000..dd5684516c
--- /dev/null
+++ b/dev-docs/bidders/m152.md
@@ -0,0 +1,36 @@
+---
+layout: bidder
+title: m152
+description: Prebid m152 Bidder Adapter
+biddercode: m152
+gvl_id: 1111
+tcfeu_supported: true
+usp_supported: true
+coppa_supported: true
+gpp_sids: usstate_all
+schain_supported: true
+deals_supported: false
+floors_supported: true
+fpd_supported: false
+ortb_blocking_supported: false
+media_types: banner, video, native
+multiformat_supported: will-bid-on-one
+userIds: all
+pbjs: true
+pbs: true
+pbs_app_supported: true
+safeframes_ok: true
+sidebarType: 1
+---
+
+## Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|---------------|----------|--------------|---------------------------------|------------|
+| `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
diff --git a/dev-docs/bidders/matterfull.md b/dev-docs/bidders/matterfull.md
index d7e02aa524..d0187b317f 100644
--- a/dev-docs/bidders/matterfull.md
+++ b/dev-docs/bidders/matterfull.md
@@ -9,7 +9,7 @@ tcfeu_supported: false
usp_supported: true
prebid_member: false
pbjs: true
-pbs: false
+pbs: true
schain_supported: true
floors_supported: true
multiformat_supported: will-bid-on-any
@@ -30,3 +30,11 @@ privacy_sandbox: no
| `pid` | required | Placement ID | `0e232769e6f71d291ee7dbc9d157cf84` | `string` |
| `env` | required | Environment name | `matterfull` | `string` |
| `ext` | optional | Specific integration config | `{}` | `object` |
+
+## Prebid Server Bid Params
+
+{: .table .table-bordered .table-striped }
+| Name | Scope | Description | Example | Type |
+|-------------|----------|-----------------------------|------------------------------------|-----------|
+| `pid` | required | Placement ID | `0e232769e6f71d291ee7dbc9d157cf84` | `string` |
+| `env` | required | Environment name | `matterfull` | `string` |
diff --git a/dev-docs/bidders/mgtechnology.md b/dev-docs/bidders/mgtechnology.md
index 52f6e5f4ce..7b3b894ce4 100644
--- a/dev-docs/bidders/mgtechnology.md
+++ b/dev-docs/bidders/mgtechnology.md
@@ -11,7 +11,7 @@ tcfeu_supported: true
coppa_supported: true
usp_supported: true
pbjs: true
-pbs: false
+pbs: true
floors_supported: true
gvl_id: 1575
pbjs_version_notes: Registered as an alias of mediagoBidAdapter
diff --git a/dev-docs/bidders/msftstaila.md b/dev-docs/bidders/msftstaila.md
new file mode 100644
index 0000000000..f7b1f98343
--- /dev/null
+++ b/dev-docs/bidders/msftstaila.md
@@ -0,0 +1,96 @@
+---
+layout: bidder
+title: msftstaila
+description: Prebid Microsoft Bidder Adaptor
+biddercode: msftstaila
+aliasCode : msft
+media_types: banner, video, native
+tcfeu_supported: true
+dsa_supported: true
+prebid_member: true
+userIds: all (with commercial activation)
+schain_supported: true
+coppa_supported: true
+usp_supported: true
+gpp_supported: true
+floors_supported: true
+fpd_supported: true
+pbjs: true
+pbjs_version_notes:
+pbs: true
+gvl_id: 32
+sidebarType: 1
+---
+
+## Bid Params
+
+{: .alert.alert-note :}
+msftstaila is an aliased bidder of Microsoft.
+Either `placement_id` OR both `member` and `inv_code` are required. Please don't specify all three together, it may impact delivery.
+
+{: .alert.alert-note :}
+We recommend to use the `use_pmt_rule` parameter set to true, when integrating, to ensure the bidding is net.
+
+For setup with Staila Media, please reach out to [prebid@stailamedia.com](mailto:prebid@stailamedia.com).
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+| :--- | :--- | :--- | :--- | :--- |
+| `placement_id` | required (see note above) | The placement ID from Microsoft Monetize. You may identify a placement using the `inv_code` and `member` instead of a placement ID. | `11223344` | `integer` |
+| `member` | required (see note above) | The member ID from Microsoft Monetize. Must be used with `inv_code`. | `1234` | `integer` |
+| `inv_code` | required (see note above) | The inventory code from Microsoft Monetize. Must be used with `member`. | `'abc123'` | `string` |
+| `allow_smaller_sizes` | optional | If `true`, ads smaller than the values in your ad unit's `sizes` array will be allowed to serve. Defaults to `false`. | `true` | `boolean` |
+| `use_pmt_rule` | optional | If `true`, Microsoft Monetize will return net price to Prebid.js after publisher payment rules have been applied. | `true` | `boolean` |
+| `keywords` | optional | A comma-delimited string of key-value pairs (or terms) applied to this specific ad slot on the page. Mapped to [buy-side segment targeting](https://learn.microsoft.com/en-us/xandr/monetize/segment-targeting) (login required). A maximum of 100 key/value pairs can be defined at the request/page level. Each tag can have up to 100 additional key/value pairs defined. If you want to pass keywords for all adUnits, please use the relevant keywords fields in the First Party Data feature. Note that to use keyword with the Prebid Server adapter, that feature must be enabled for your account by an Microsoft Monetize account manager. | `pet=dog,food,brand=oldroy` | `string` |
+| `traffic_source_code` | optional | Specifies the third-party source of this impression. | `'my_traffic_source'` | `string` |
+| `pubclick` | optional | Specifies a publisher-supplied URL for third-party click tracking. This is just a placeholder into which the publisher can insert their own click tracker. This parameter should be used for an unencoded tracker. This parameter is expected to be the last parameter in the URL. Please note that the click tracker placed in this parameter will only fire if the creative winning the auction is using Microsoft Monetize click tracking properly. | `'http://click.adserver.com/'` | `string` |
+| `ext_inv_code` | optional | Specifies predefined value passed on the query string that can be used in reporting. The value must be entered into the system before it is logged. | `'10039'` | `string` |
+| `ext_imp_id` | optional | Specifies the unique identifier of an externally generated auction. | `'bacbab02626452b097f6030b3c89ac05'` | `string` |
+| `banner_frameworks` | optional | Array of integers listing API frameworks for Banner supported by the publisher. | `[1,2]` | `array of integers` |
+
+### Migrating from the AppNexus Bid Adapter & Bid Params
+
+If you are migrating from the AppNexus bid adapter, a number of the previously available AppNexus bid parameters have been deprecated as available options for the Microsoft bid parameters. These deprecated bid parameters are still available however, they're just read from other standarized locations offered within Prebid.js. This change was implemented to help us align better to the publisher-aligned features (such as First Party Data) to use a single setup for many bidders.
+
+The Microsoft Bid Adapter connects to Microsoft's advertising exchange for bids. This adapter supports banner, video (instream and outstream), and native ad formats using OpenRTB 2.5 standards.
+
+For reference, here is the IAB OpenRTB 2.5 [specification](https://www.iab.com/wp-content/uploads/2016/03/OpenRTB-API-Specification-Version-2-5-FINAL.pdf)
+
+The following table shows how the bid parameters have changed between the two adapters:
+
+{: .table .table-bordered .table-striped }
+
+| AppNexus Parameter | Microsoft Parameter | Description |
+| :--- | :--- | :--- |
+| `params.placementId` | `params.placement_id` | Placement ID (**only** the underscore case is now supported in the name, value **only** accepts integers) |
+| `params.member` | `params.member` | Member ID (value **only** accepts integers) |
+| `params.inv_code` | `params.inv_code` | Inventory code (unchanged) |
+| `params.publisher_id` | Use `ortb2.publisher.id` | Publisher ID (moved to ortb2 config) |
+| `params.frameworks` | `params.banner_frameworks` | Banner API frameworks array (small name change to clarify banner only) |
+| `params.user` | Use `ortb2.user` | User data (moved to ortb2 config) |
+| `params.allow_smaller_sizes` | `params.allow_smaller_sizes` | Allow smaller ad sizes (unchanged) |
+| `params.use_pmt_rule` | `params.use_pmt_rule` | Use payment rule (unchanged) |
+| `params.keywords` | `params.keywords` | Tag/Imp-level keywords (use ORTB format of comma-delimited string value; eg `'pet=cat,food,brand=fancyfeast'`) |
+| `params.video` | Use `mediaTypes.video` | Video parameters (moved to mediaTypes) |
+| `params.video.frameworks` | Use `mediaTypes.video.api` | Video API frameworks (moved to mediaTypes) |
+| `params.app` | Use `ortb2.app` | App data (moved to ortb2 config) |
+| `params.reserve` | Use bidfloor module | Reserve price (use bidfloor module) |
+| `params.position` | Use `mediaTypes.banner.pos` | Banner position (moved to mediaTypes) |
+| `params.traffic_source_code` | `params.traffic_source_code` | Traffic source code (unchanged) |
+| `params.supply_type` | Use `ortb2.site` or `ortb2.app` | Supply type (moved to ortb2 config) |
+| `params.pub_click` | `params.pubclick` | Publisher click URL (dropped underscore to align to endpoint) |
+| `params.ext_inv_code` | `params.ext_inv_code` | External inventory code (unchanged) |
+| `params.external_imp_id` | `params.ext_imp_id` | External impression ID (shortend to ext) |
+
+### Keywords
+
+With the AppNexus adapter, keywords followed this format: keyname=keyvalue1,keyvalue2,keyvalue3
+
+In the Microsoft Bid Adapter, the new required format is: `keyname=keyvalue1,keyname=keyvalue2,keyname=keyvalue3`
+
+### First Party Data
+
+Publishers should use the `ortb2` method of setting [First Party Data](/features/firstPartyData.html).
+
+PBS/PSP supports all first party data fields: site, user, segments, and imp-level first party data.
diff --git a/dev-docs/bidders/mycodemedia.md b/dev-docs/bidders/mycodemedia.md
index ac3906834a..7147bceb39 100644
--- a/dev-docs/bidders/mycodemedia.md
+++ b/dev-docs/bidders/mycodemedia.md
@@ -1,8 +1,8 @@
---
layout: bidder
-title: MyCodeMedia
-description: Prebid MyCodeMedia Bidder Adapter
-biddercode: mycodemedia
+title: MCodeMedia
+description: Prebid MCodeMedia Bidder Adapter
+biddercode: mcodemedia
gpp_sids: usstate_all
tcfeu_supported: false
usp_supported: true
@@ -22,7 +22,7 @@ safeframes_ok: true
sidebarType: 1
---
-### Bid Params
+## Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
@@ -30,6 +30,6 @@ sidebarType: 1
| `placementId` | optional | Placement Id | `'0'` | `'string'` |
| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` |
-### Note
+## Note
For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId
diff --git a/dev-docs/bidders/nasrev.md b/dev-docs/bidders/nasrev.md
new file mode 100644
index 0000000000..1b081a002c
--- /dev/null
+++ b/dev-docs/bidders/nasrev.md
@@ -0,0 +1,38 @@
+---
+layout: bidder
+title: Nasrev
+description: Prebid Nasrev Adaptor
+biddercode: nasrev
+pbjs: true
+pbs: false
+media_types: banner, video, audio, native
+userIds: all
+fpd_supported: false
+tcfeu_supported: false
+usp_supported: true
+coppa_supported: true
+schain_supported: true
+prebid_member: false
+ortb_blocking_supported: true
+multiformat_supported: will-bid-on-one
+floors_supported: false
+aliasCode: limelightDigital
+sidebarType: 1
+---
+
+## Note
+
+The Nasrev adapter requires setup before beginning.
+
+## Bid Params
+
+{: .table .table-bordered .table-striped }
+
+| Name | Scope | Description | Example | Type |
+|:--------------|:---------|:----------------------|:-----------------|:----------|
+| `host` | required | Ad network's RTB host | `'nasrev.bid'` | `string` |
+| `publisherId` | required | Publisher ID | `12345` | `integer` |
+
+Prebid Nasrev server-side Prebid Server adapter requires only `publisherId` and `host` parameters. But Prebid Nasrev client-side Prebid.js adapter requires only `host`, `adUnitId`, `adUnitType`.
+
+Prebid Nasrev server-side Prebid Server adapter supports only `banner`, `video`, `audio`, `native` media types. But Prebid Nasrev client-side Prebid.js adapter supports only `banner` and `video` media types, doesn't support `audio` and `native`.
diff --git a/dev-docs/bidders/ntvagents.md b/dev-docs/bidders/ntvagents.md
index 2f45839851..4ab9c3eac2 100644
--- a/dev-docs/bidders/ntvagents.md
+++ b/dev-docs/bidders/ntvagents.md
@@ -1,13 +1,15 @@
---
layout: bidder
title: Native Agents
-description: Prebid Native Agents Bidder Adapter
+description: Native Agents Prebid Bidder Adapter
biddercode: ntvagents
gpp_sids: usstate_all
tcfeu_supported: false
+dsa_supported: false
usp_supported: true
coppa_supported: true
schain_supported: true
+dchain_supported: false
deals_supported: false
floors_supported: true
fpd_supported: false
@@ -18,18 +20,255 @@ userIds: all
pbjs: true
pbs: true
pbs_app_supported: true
+prebid_member: false
safeframes_ok: true
sidebarType: 1
---
-## Bid Params
+# Overview
+
+Publishers may integrate with Native Agents through our Prebid.js and/or Prebid Server adapters. See below.
+
+{: .alert.alert-info :}
+The Native Agents Prebid Server bidding adapter and user sync endpoint require setup before starting. Please contact us at .
+
+# Native Agents Bidder Adapter
+
+The Native Agents bidder enables publishers to monetize their inventory through the Native Agents advertising platform using either **Prebid.js** or **Prebid Server**, for the ad formats described below.
+
+# Registration
+
+Before integrating the Native Agents bidder, your inventory must be configured within the Native Agents platform.
+
+During onboarding, Native Agents creates:
+
+- A **Supply Source** representing your website or mobile application.
+- One or more **Placements** representing individual ad locations on your inventory.
+
+Each Placement receives a unique **placementId**, which is used by the bidder to identify the inventory during bidding.
+
+Depending on your account configuration, Native Agents may instead provide an **endpointId**.
+
+Only **one** identifier is required when configuring the bidder.
+
+For onboarding and production credentials, contact your Native Agents account representative.
+
+# Bid Parameters
+
+Specify **either** `placementId` **or** `endpointId`.
+
+Do **not** provide both.
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|--------------|---------------------------------|------------|
-| `placementId` | optional | Placement Id | `'0'` | `'string'` |
-| `endpointId` | optional | Endpoint Id | `'0'` | `'string'` |
-## Note
+| Name | Required | Description | Type | Example |
+|-------------|----------|---------------------------------------------------------------------------------|--------|------------|
+| placementId | No* | Unique identifier for a Placement configured within the Native Agents platform. | String | `"100001"` |
+| endpointId | No* | Unique identifier for an Endpoint configured for your account. | String | `"200001"` |
+
+\*One of `placementId` or `endpointId` is required.
+
+# Banner Example
+
+```javascript
+var adUnits = [{
+ code: "banner-div",
+
+ mediaTypes: {
+ banner: {
+ sizes: [
+ [300,250],
+ [300,600]
+ ]
+ }
+ },
+
+ bids: [{
+ bidder: "ntvagents",
+
+ params: {
+ placementId: "100001"
+ }
+ }]
+}];
+```
+
+# Native Example
+
+```javascript
+var adUnits = [{
+ code: "native-div",
+
+ mediaTypes: {
+ native: {
+ ortb: {
+ assets: [
+ {
+ id: 1,
+ required: 1,
+ title: {
+ len: 100
+ }
+ },
+ {
+ id: 2,
+ required: 1,
+ img: {
+ type: 3,
+ w: 300,
+ h: 250
+ }
+ },
+ {
+ id: 3,
+ required: 1,
+ data: {
+ type: 1
+ }
+ }
+ ]
+ }
+ }
+ },
+
+ bids: [{
+ bidder: "ntvagents",
+
+ params: {
+ placementId: "100001"
+ }
+ }]
+}];
+```
+
+# Video Example
+
+Both **Instream** and **Outstream** video contexts are supported.
+
+```javascript
+var adUnits = [{
+ code: "video-div-instream",
+
+ mediaTypes: {
+ video: {
+ context: "instream",
+ playerSize: [640,480],
+ mimes: ["video/mp4"],
+ protocols: [2,3,5,6],
+ api: [2],
+ minduration: 5,
+ maxduration: 30,
+ linearity: 1
+ }
+ },
+
+ bids: [{
+ bidder: "ntvagents",
+
+ params: {
+ placementId: "100001"
+ }
+ }]
+}];
+```
+
+```javascript
+var adUnits = [{
+ code: "video-div-outstream",
+
+ mediaTypes: {
+ video: {
+ context: "outstream",
+ playerSize: [640,480],
+ mimes: ["video/mp4"],
+ protocols: [2,3,5,6],
+ api: [2],
+ maxduration: 30,
+ linearity: 1
+ }
+ },
+
+ bids: [{
+ bidder: "ntvagents",
+
+ params: {
+ placementId: "100001"
+ }
+ }]
+}];
+```
+
+# OpenRTB Support
+
+The Native Agents bidder converts Prebid bid requests into OpenRTB bid requests before forwarding them to the Native Agents bidding platform.
+
+The adapter supports OpenRTB requests for:
+
+- Banner
+- Native
+- Video (Instream & Outstream)
+
+using the corresponding OpenRTB object definitions.
+
+# Creative Rendering
+
+The Native Agents bidder returns creatives compatible with standard Prebid rendering workflows.
+
+Supported creative formats include:
+
+| Media Type | Response |
+|------------------------------|-----------------------|
+| Banner | HTML Markup |
+| Native | OpenRTB Native Assets |
+| Video (Instream & Outstream) | VAST XML / VAST URL |
+
+Banner and Native creatives are rendered using Prebid's standard rendering pipeline.
+
+Video responses return VAST-compatible creatives suitable for both instream video players and supported outstream video players.
+
+# User Sync
+
+Native Agents supports both iframe and image user synchronization.
+
+```javascript
+pbjs.setConfig({
+ userSync: {
+ filterSettings: {
+ iframe: {
+ bidders: ["ntvagents"],
+ filter: "include"
+ },
+ image: {
+ bidders: ["ntvagents"],
+ filter: "include"
+ }
+ }
+ }
+});
+```
+
+User synchronization is performed only when permitted by applicable privacy regulations.
+
+# Test Parameters
+
+Native Agents provides test placements during onboarding.
+
+Replace the example values below with the test identifiers supplied by your Native Agents account representative.
+
+```javascript
+{
+ bidder: "ntvagents",
+
+ params: {
+ placementId: "100001"
+ }
+}
+```
+
+# Notes
-For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId
+- Configure **either** `placementId` **or** `endpointId`.
+- Banner, Native, and Video (Instream & Outstream) are supported.
+- Compatible with both **Prebid.js** and **Prebid Server**.
+- Inventory must be configured within the Native Agents platform before bid requests can be made.
+- Native Agents also supports Direct Tag and JavaScript tag integrations outside of Prebid. Refer to the Native Agents integration documentation for those integration methods.
diff --git a/dev-docs/bidders/ocm.md b/dev-docs/bidders/ocm.md
index 408e1bba9e..3ecc307f6f 100644
--- a/dev-docs/bidders/ocm.md
+++ b/dev-docs/bidders/ocm.md
@@ -1,107 +1,37 @@
---
layout: bidder
-title: Orangeclickmedia
+title: OCM
description: Prebid OCM Bidder Adapter
biddercode: ocm
-media_types: video,banner
+media_types: video,banner,native
tcfeu_supported: true
gpp_supported: true
-userIds: britepoolId, criteo, id5Id, identityLink, liveIntentId, netId, parrableId, pubCommonId, unifiedId
+userIds: criteo, id5Id, panoramaId, pubCommonId, unifiedId
schain_supported: true
+dchain_supported: true
coppa_supported: true
usp_supported: true
-safeframes_ok: true
+safeframes_ok: false
prebid_member: true
+multiformat_supported: will-bid-on-any
+ortb_blocking_supported: partial
pbjs: true
pbs: false
-deals_supported: false
+deals_supported: true
+floors_supported: true
gvl_id: 1148
sidebarType: 1
---
-### Bid params
+## Bid params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|-------|----------|---------------------------------|----------|-----------|
-| `aid` | required | The source ID from OCM. | `529814` | `integer` |
+| Name | Scope | Description | Example | Type |
+|---------------|----------|----------------------------------------|---------------|----------|
+| `publisherId` | required | The publisher id (e.g. "domain.tld") | `example.com` | `string` |
+| `placementId` | required | Domain-wide placement id | `1234567890` | `string` |
### Description
OCM header bidding adapter connects with OCM demand sources in order to fetch bids.
-This adapter provides a solution for accessing Video demand and display demand.
-
-### Test Parameters
-
-``` javascript
- var adUnits = [
-
- // Video instream adUnit
- {
- code: 'test-div',
- mediaTypes: {
- video: {
- context: 'instream',
- playerSize: [640, 480]
- }
- },
- bids: [{
- bidder: 'ocm',
- params: {
- aid: 472386
- }
- }]
- },
-
- // Video outstream adUnit
- {
- code: 'test-div',
- mediaTypes: {
- video: {
- context: 'outstream',
- playerSize: [640, 480]
- }
- },
- bids: [{
- bidder: 'ocm',
- params: {
- aid: 472386
- }
- }]
- },
-
- // Video ADPOD adUnit
- {
- code: 'test-div',
- sizes: [[640, 480]],
- mediaTypes: {
- video: {
- context: 'adpod',
- playerSize: [640, 480]
- }
- },
- bids: [{
- bidder: 'ocm',
- params: {
- aid: 472386
- }
- }]
- },
-
- // Banner adUnit
- {
- code: 'test-div',
- mediaTypes:{
- banner:{
- sizes: [[300, 250]]
- }
- }
- bids: [{
- bidder: 'ocm',
- params: {
- aid: 529814
- }
- }]
- }
- ];
-```
+This adapter provides a solution for accessing Video, Display and Native demand.
diff --git a/dev-docs/bidders/ogury.md b/dev-docs/bidders/ogury.md
index 141be4a1c4..380dcc6bbd 100644
--- a/dev-docs/bidders/ogury.md
+++ b/dev-docs/bidders/ogury.md
@@ -10,7 +10,8 @@ coppa_supported: false
schain_supported: false
floors_supported: true
dchain_supported: false
-media_types: banner
+media_types: banner, video
+multiformat_supported: will-bid-on-one
safeframes_ok: false
deals_supported: false
pbjs: true
@@ -20,7 +21,7 @@ prebid_member: false
sidebarType: 1
gpp_sids: tcfeu, usnat, usstate_all
---
-### Registration
+## Registration
Before Ogury's adapter integration, you have to register an account in the Ogury Platform. Please contact if you're interested in a partnership.
If you already have an account you'll need to register your websites (= assets) and the placements (= ad units) within the Platform. Alternatively reach out to your POC within Ogury to assist you with the placement creation.
@@ -34,10 +35,10 @@ This is the minimal list of params for integrating with Ogury:
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|-----------------------|-----------|-----------|
-| `assetKey` | required | The asset key provided by Ogury | `'OGY-CA41D116484F'` | `string` |
-| `adUnitId` | required | Your ad unit id configured with Ogury | `'2c4d61d0-90aa-0139-0cda-0242ac120004'` | `string` |
+| Name | Scope | Description | Example | Type |
+|------------|----------|---------------------------------------|------------------------------------------|----------|
+| `assetKey` | required | The asset key provided by Ogury | `'OGY-CA41D116484F'` | `string` |
+| `adUnitId` | required | Your ad unit id configured with Ogury | `'2c4d61d0-90aa-0139-0cda-0242ac120004'` | `string` |
NOTE: You don't need these params to integrate with Ogury, see [inventory mapping](#inventory-mapping)
@@ -80,6 +81,39 @@ Use this example configuration for enabling Ogury ad server integration on a spe
```
+For video ad units, configure the `video` media type as shown below:
+
+```javascript
+var videoAdUnits = [
+ {
+ code: 'video-ad-unit-code',
+ mediaTypes: {
+ video: {
+ context: 'instream',
+ playerSize: [[640, 480]],
+ mimes: ['video/mp4', 'video/webm'],
+ protocols: [2, 3, 5, 6],
+ playbackmethod: [1, 2],
+ maxduration: 30
+ }
+ },
+ bids: [
+ {
+ bidder: 'ogury',
+ params: {
+ assetKey: 'YOUR_OGURY_ASSET_KEY',
+ adUnitId: 'YOUR_OGURY_VIDEO_AD_UNIT_ID'
+ }
+ }
+ ]
+ }
+];
+
+pbjs.que.push(function () {
+ pbjs.addAdUnits(videoAdUnits);
+});
+```
+
#### Inventory mapping
_Note: If you choose inventory mapping, you can skip specifying assetKey and adUnitId per ad unit._
@@ -132,7 +166,7 @@ pbjs.que.push(function () {
### Optional bid Params
-Depending on your advertising format needs, other optional parameters can be used. Supported parameters are detailed [here](https://ogury-ltd.gitbook.io/mobile-web/header-bidding/ogury-prebid.js-adapter-integration#optional-configuration).
+Depending on your advertising format needs, other optional parameters can be used. See the [optional configuration documentation](https://ogury-ltd.gitbook.io/mobile-web/header-bidding/ogury-prebid.js-adapter-integration#optional-configuration) for supported parameters.
### Contact information
diff --git a/dev-docs/bidders/pinelake.md b/dev-docs/bidders/pinelake.md
index 4ad28b7a9e..d57ec473a5 100644
--- a/dev-docs/bidders/pinelake.md
+++ b/dev-docs/bidders/pinelake.md
@@ -51,3 +51,30 @@ var adUnits = [
}
];
```
+
+### First Party Data
+
+In release 4.30 and later, publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html). The following fields are supported:
+
+* ortb2.user.id
+* ortb2.user.buyeruid
+* ortb2.user.keywords
+* ortb2.user.ext.*
+
+Example first party data that's available to all bidders and all adunits:
+
+```javascript
+pbjs.setConfig({
+ ortb2: {
+ user: {
+ id: 123456789, // Unique pseudonymized ID for the user (e.g., NPI).
+ buyeruid: 987654321, // DSP-assigned user ID for identity resolution.
+ keywords: "kw1,kw2", // Interest or specialty tags (e.g., oncology, cardiology)
+ ext: {
+ key1: "values", // Custom healthcare metadata (e.g., icd10), single or comma seperated.
+ key2: "values" // Additional campaign context (e.g., ndc), single or comma seperated.
+ }
+ }
+ }
+});
+```
diff --git a/dev-docs/bidders/pixfuture.md b/dev-docs/bidders/pixfuture.md
index b10b497fac..f920b95041 100644
--- a/dev-docs/bidders/pixfuture.md
+++ b/dev-docs/bidders/pixfuture.md
@@ -10,7 +10,7 @@ prebid_member: false
coppa_supported: true
usp_supported: true
userIds: criteoId, unifiedId, id5Id, sharedId, identityLink, liveIntentId, fabrickId
-pbs: false
+pbs: true
pbjs: true
sidebarType: 1
---
diff --git a/dev-docs/bidders/projectagora.md b/dev-docs/bidders/projectagora.md
index 19cdddbdf3..d7f4f4ad3e 100644
--- a/dev-docs/bidders/projectagora.md
+++ b/dev-docs/bidders/projectagora.md
@@ -5,7 +5,7 @@ description: Prebid Project Agora Bidder Adapter
biddercode: projectagora
pbjs: true
pbs: false
-aliasCode: appnexus
+aliasCode: msft
tcfeu_supported: true
media_types: banner, video, native
gvl_id: 1032
@@ -13,15 +13,15 @@ schain_supported: true
userId: all
sidebarType: 1
---
-### Bid Params
+## Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|-----------------------|-----------|-----------|
-| `placementId` | required | Placement id | `'11111'` | `integer` |
+| Name | Scope | Description | Example | Type |
+|----------------|----------|--------------|---------|-----------|
+| `placement_id` | required | Placement id | `11111` | `integer` |
-Project Agora is an aliased bidder for AppNexus.
+Project Agora is an aliased bidder for Microsoft.
-### Note:
+## Note
-The Project Agora bidder adapter requires setup before beginning. Please contact us at pub_growth@projectagora.com.
+The Project Agora bidder adapter requires setup before beginning. Please contact us at [pub_growth@projectagora.com](mailto:pub_growth@projectagora.com).
diff --git a/dev-docs/bidders/proxistore.md b/dev-docs/bidders/proxistore.md
index 2fa119fb54..eda4267fbd 100644
--- a/dev-docs/bidders/proxistore.md
+++ b/dev-docs/bidders/proxistore.md
@@ -7,6 +7,7 @@ biddercode: proxistore
gvl_id: 418
tcfeu_supported: true
sidebarType: 1
+pbs: true
---
diff --git a/dev-docs/bidders/reklamup.md b/dev-docs/bidders/reklamup.md
index 6a967912b0..c830e48614 100644
--- a/dev-docs/bidders/reklamup.md
+++ b/dev-docs/bidders/reklamup.md
@@ -4,7 +4,8 @@ title: Reklamup
description: Prebid Reklamup Bidder Adapter
biddercode: reklamup
gpp_sids: usstate_all
-tcfeu_supported: false
+gvl_id: 1619
+tcfeu_supported: true
usp_supported: true
coppa_supported: true
schain_supported: true
@@ -33,3 +34,29 @@ sidebarType: 1
## Note
For the prebid server and prebid.js you only need to use one parameter: either placementId or endpointId
+
+## Regional Endpoints
+
+Reklamup supports the following regional endpoint subdomains:
+
+- `eu-node` — EU
+- `node` — US East
+
+### Prebid Server
+
+The Prebid Server config endpoint is defined with a `REGION` placeholder:
+
+```yaml
+endpoint: "https://REGION.reklamup.com/pserver"
+```
+
+Please deploy this config in each of your datacenters and replace `REGION` with the appropriate regional subdomain (`eu-node` or `node`).
+
+### Prebid.js
+
+The Prebid.js adapter automatically selects the regional endpoint based on the browser timezone:
+
+- Europe / Africa / Atlantic / Arctic / Asia → `eu-node`
+- Australia / Antarctica / Pacific / Indian → `node`
+- America → `node`
+- Unknown / unresolved timezone → `node` (fallback)
diff --git a/dev-docs/bidders/revnew.md b/dev-docs/bidders/revnew.md
index c0c32f61ef..bd5d3b5ba1 100644
--- a/dev-docs/bidders/revnew.md
+++ b/dev-docs/bidders/revnew.md
@@ -13,7 +13,6 @@ schain_supported: true
dchain_supported: false
floors_supported: true
userIds: all
-tcfeu_supported: true
media_types: banner, video, native
safeframes_ok: true
deals_supported: true
@@ -23,7 +22,7 @@ multiformat_supported: will-bid-on-any
---
-### Bid Params
+## Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
@@ -34,7 +33,7 @@ multiformat_supported: will-bid-on-any
*You*must* only include one ID field - either `tagId` or `placement`, not both. If you have questions on which parameter to use, please reach out to your Account Manager.
The `tagId` and `placement` are **mutually exclusive** but at least one is required. If you pass both, `tagId` takes precedence.
-### Bidder Config
+## Bidder Config
You can allow writing in localStorage `pbjs.bidderSettings` for the bidder `revnew`
@@ -48,11 +47,11 @@ pbjs.bidderSettings = {
}
```
-### First Party Data
+## First Party Data
Publishers should use the `ortb2` method of setting [First Party Data](https://docs.prebid.org/features/firstPartyData.html).
-### Test Parameters
+## Test Parameters
```javascript
var adUnits = [
diff --git a/dev-docs/bidders/richaudience.md b/dev-docs/bidders/richaudience.md
index 0429d123c0..7717ac2261 100644
--- a/dev-docs/bidders/richaudience.md
+++ b/dev-docs/bidders/richaudience.md
@@ -23,6 +23,5 @@ sidebarType: 1
| Name | Scope | Description | Example | Type |
|-------------|-----------------|----------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|------------|
| `pid` | required | The placement ID from Rich Audience. | `'ADb1f40rmi'` | `string` |
-| `supplyType`| required | Define if site or app. | `'site / app'` | `string` |
| `ifa` | optional | Identifier For Advertisers | `'AAAAAAAAA-BBBB-CCCC-1111-222222220000234234234234234'` | `string` |
| `keywords` | optional | A key-value applied only to the configured bid. This value is optional. Strings separated by semicolon. | `car=mercedes;car=audi;` | `string` |
diff --git a/dev-docs/bidders/scoremedia.md b/dev-docs/bidders/scoremedia.md
index c82b47cafd..18938e0f47 100644
--- a/dev-docs/bidders/scoremedia.md
+++ b/dev-docs/bidders/scoremedia.md
@@ -3,9 +3,10 @@ layout: bidder
title: scoremedia
description: Prebid scoremedia Bidder Adapter
pbjs: true
+pbs: true
biddercode: scoremedia
aliasCode: nexx360
-gvl_id: 965
+gvl_id: 1090
tcfeu_supported: true
usp_supported: true
gpp_supported: true
@@ -13,7 +14,6 @@ schain_supported: true
dchain_supported: false
floors_supported: true
userIds: all
-tcfeu_supported: true
media_types: banner, video, native
safeframes_ok: true
deals_supported: true
@@ -23,14 +23,14 @@ multiformat_supported: will-bid-on-any
---
-### Bid Params
+## Bid Params
{: .table .table-bordered .table-striped }
| Name | Scope | Description | Example | Type |
|---------------|----------|----------------------------|-------------------------------------- |-----------|
-| `tagId` | required | tag ID | `"795dtj21"` | `string` |
+| `tagId` | required | tag ID | `"795dtj21"` | `string` |
-### First Party Data
+## First Party Data
Publishers should use the `ortb2` method of setting [First Party Data](/features/firstPartyData.html).
The following fields are supported:
@@ -40,7 +40,7 @@ The following fields are supported:
* ortb2.user.ext.data.*
* ortb2.user.data[]
-### Test Parameters
+## Test Parameters
```javascript
var adUnits = [
diff --git a/dev-docs/bidders/seedtag.md b/dev-docs/bidders/seedtag.md
index e697f112ea..4790d3f333 100644
--- a/dev-docs/bidders/seedtag.md
+++ b/dev-docs/bidders/seedtag.md
@@ -15,7 +15,7 @@ ortb_blocking_supported: partial
sidebarType: 1
gpp_supported: true
pbs: true
-pbs_app_supported: false
+pbs_app_supported: true
floors_supported: true
---
diff --git a/dev-docs/bidders/ssp_geniee.md b/dev-docs/bidders/ssp_geniee.md
index 0e13b3c5aa..45617a3e3a 100644
--- a/dev-docs/bidders/ssp_geniee.md
+++ b/dev-docs/bidders/ssp_geniee.md
@@ -25,19 +25,19 @@ multiformat_supported: will-bid-on-one
ortb_blocking_supported: partial
privacy_sandbox: no
---
-### Note
+## Note
This is [Geniee](https://geniee.co.jp) Bidder Adapter for Prebid.js.
{: .alert.alert-info :}
-This is Geniee *SSP* Bidder Adapter. The another adapter named "Geniee Bid Adapter" is Geniee *DSP* Bidder Adapter.
+This is the Geniee *SSP* Bidder Adapter. Geniee maintains two other adapters: "Geniee" (`dsp_geniee`) is the Geniee *DSP* Bidder Adapter, and "Geniee Exchange" (`ex_geniee`) is the Geniee *Exchange* Bidder Adapter.
Please contact us before using the adapter.
-### Bid Params
+## Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|--------------|----------|-------------------------------------------------|-----------|-----------|
-| `zoneId` | required | Zone ID | `1573195` | `integer` |
-| `currency` | Optional | Currency setting (`'JPY'`(Default) or `'USD'`) | `'JPY'` | `string` |
+| Name | Scope | Description | Example | Type |
+|------------|----------|------------------------------------------------|-----------|-----------|
+| `zoneId` | required | Zone ID | `1573195` | `integer` |
+| `currency` | Optional | Currency setting (`'JPY'`(Default) or `'USD'`) | `'JPY'` | `string` |
diff --git a/dev-docs/bidders/stackadapt.md b/dev-docs/bidders/stackadapt.md
index 08c57e01fa..c4973a48dc 100644
--- a/dev-docs/bidders/stackadapt.md
+++ b/dev-docs/bidders/stackadapt.md
@@ -4,12 +4,12 @@ title: StackAdapt
description: StackAdapt Prebid Bidder Adapter
biddercode: stackadapt
pbjs: true
-pbs: false
+pbs: true
gvl_id: 238
tcfeu_supported: true
usp_supported: true
userId: all
-media_types: banner, video
+media_types: banner, video, native, audio
coppa_supported: true
gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp
gpp_supported: true
@@ -25,15 +25,22 @@ prebid_member: false
sidebarType: 1
---
-### Bid Params
+## Note
+
+- Prebid.js supports `banner` and `video` format only.
+- Prebid Server supports `banner`, `video`, `native`, and `audio` formats.
+- `supplyId` is required for Prebid Server only. It identifies the supply source and is provided by StackAdapt.
+
+## Bid Params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|-----------------------------|--------------------|----------|
-| `publisherId` | required | StackAdapt provided id | `'4cd53a92ra91'` | `string` |
-| `placementId` | optional | StackAdapt provided id | `'e95365f397a7'` | `string` |
-| `banner` | optional | banner supporting expdir | `{expdir: [1, 3]}` | `object` |
-| `bidfloor` | optional | bid floor price | `1.01` | `float` |
+| Name | Scope | Description | Example | Type |
+|---------------|--------------------|-------------------------------------------|--------------------|----------|
+| `publisherId` | required | StackAdapt provided id | `'4cd53a92ra91'` | `string` |
+| `supplyId` | required (PBS only)| Supply source ID, provided by StackAdapt | `'ssp-1'` | `string` |
+| `placementId` | optional | StackAdapt provided id | `'e95365f397a7'` | `string` |
+| `banner` | optional | banner supporting expdir | `{expdir: [1, 3]}` | `object` |
+| `bidfloor` | optional | bid floor price | `1.01` | `float` |
The following banner parameters are supported:
@@ -42,9 +49,9 @@ The following banner parameters are supported:
|----------|----------|-----------------------------------|----------|------------------|
| `expdir` | optional | Directions the banner may expand. | `[1, 3]` | `Array[integer]` |
-### Banner
+## Banner
-#### `mediaTypes.banner` Parameters
+### `mediaTypes.banner` Parameters
The StackAdapt bid adapter requires `sizes` to be defined in valid format.
See [mediaTypes.banner](https://docs.prebid.org/dev-docs/adunit-reference.html#adUnit.mediaTypes.banner) for defining mediaTypes parameters.
@@ -65,6 +72,7 @@ Below are banner ad unit examples with required and optional parameters:
bidder: 'stackadapt',
params: {
publisherId: '4cd53a92ra91',
+ supplyId: '9891',
}
}]
},
@@ -81,6 +89,7 @@ Below are banner ad unit examples with required and optional parameters:
bidder: 'stackadapt',
params: {
publisherId: '4cd53a92ra91',
+ supplyId: '9891',
placementId: 'e95365f397a7',
bidfloor: 1.01,
banner: {
@@ -92,9 +101,9 @@ Below are banner ad unit examples with required and optional parameters:
];
```
-### Video
+## Video
-#### `mediaTypes.video` Parameters
+### `mediaTypes.video` Parameters
The StackAdapt bid adapter requires `mimes`, `protocols`, `maxduration`, `api`, and `plcmt` to be defined in valid format.
See [mediaTypes.video](https://docs.prebid.org/dev-docs/adunit-reference.html#adUnit.mediaTypes.video) for defining mediaTypes parameters.
@@ -119,6 +128,7 @@ Below are video ad unit examples with required and optional parameters:
bidder: 'stackadapt',
params: {
publisherId: '4cd53a92ra91',
+ supplyId: '9891',
}
}]
},
@@ -148,6 +158,151 @@ Below are video ad unit examples with required and optional parameters:
bidder: 'stackadapt',
params: {
publisherId: '4cd53a92ra91',
+ supplyId: '9891',
+ placementId: 'e95365f397a7',
+ bidfloor: 1.01,
+ }
+ }]
+ }
+ ];
+```
+
+## Native
+
+### `mediaTypes.native` Parameters
+
+The StackAdapt bid adapter requires `request` to be defined with a valid native request payload containing `assets`.
+The `request` field is a JSON-encoded string following the [OpenRTB Native Ads Specification](https://www.iab.com/wp-content/uploads/2018/03/OpenRTB-Native-Ads-Specification-Final-1.2.pdf). Each asset in the request must include at least one image (type 3 for main image) or video asset.
+See [mediaTypes.native](https://docs.prebid.org/dev-docs/adunit-reference.html#adUnit.mediaTypes.native) for defining mediaTypes parameters.
+
+Below are native ad unit examples with required and optional parameters:
+
+```js
+ var adUnits = [
+ // Native adUnit - required parameters
+ {
+ code: 'div-test-ad-5',
+ mediaTypes: {
+ native: {
+ ortb: {
+ ver: '1.1',
+ assets: [
+ {
+ id: 1,
+ required: 1,
+ img: {
+ type: 3,
+ w: 1200,
+ h: 627
+ }
+ }
+ ]
+ }
+ }
+ },
+ bids: [{
+ bidder: 'stackadapt',
+ params: {
+ publisherId: '4cd53a92ra91',
+ supplyId: '9891',
+ }
+ }]
+ },
+ // Native adUnit - including optional parameters
+ {
+ code: 'div-test-ad-6',
+ mediaTypes: {
+ native: {
+ ortb: {
+ ver: '1.1',
+ assets: [
+ {
+ id: 1,
+ required: 1,
+ title: {
+ len: 90
+ }
+ },
+ {
+ id: 2,
+ required: 0,
+ data: {
+ type: 2,
+ len: 140
+ }
+ },
+ {
+ id: 3,
+ required: 1,
+ img: {
+ type: 3,
+ w: 1200,
+ h: 627
+ }
+ }
+ ]
+ }
+ }
+ },
+ bids: [{
+ bidder: 'stackadapt',
+ params: {
+ publisherId: '4cd53a92ra91',
+ supplyId: '9891',
+ placementId: 'e95365f397a7',
+ bidfloor: 1.01,
+ }
+ }]
+ }
+ ];
+```
+
+## Audio
+
+### `mediaTypes.audio` Parameters
+
+The StackAdapt bid adapter requires `mimes` and `protocols` to be defined in valid format.
+See [mediaTypes.audio](https://docs.prebid.org/dev-docs/adunit-reference.html#adUnit.mediaTypes.audio) for defining mediaTypes parameters.
+
+Below are audio ad unit examples with required and optional parameters:
+
+```js
+ var adUnits = [
+ // Audio adUnit - required parameters
+ {
+ code: 'div-test-ad-7',
+ mediaTypes: {
+ audio: {
+ mimes: ['audio/mp4', 'audio/mpeg'],
+ protocols: [2, 3, 5, 6]
+ }
+ },
+ bids: [{
+ bidder: 'stackadapt',
+ params: {
+ publisherId: '4cd53a92ra91',
+ supplyId: '9891',
+ }
+ }]
+ },
+ // Audio adUnit - including optional parameters
+ {
+ code: 'div-test-ad-8',
+ mediaTypes: {
+ audio: {
+ mimes: ['audio/mp4', 'audio/mpeg', 'audio/ogg'],
+ protocols: [2, 3, 5, 6, 7, 8],
+ minduration: 5,
+ maxduration: 30,
+ startdelay: 0,
+ api: [1, 2]
+ }
+ },
+ bids: [{
+ bidder: 'stackadapt',
+ params: {
+ publisherId: '4cd53a92ra91',
+ supplyId: '9891',
placementId: 'e95365f397a7',
bidfloor: 1.01,
}
diff --git a/dev-docs/bidders/superedge.md b/dev-docs/bidders/superedge.md
new file mode 100644
index 0000000000..42e37fd98d
--- /dev/null
+++ b/dev-docs/bidders/superedge.md
@@ -0,0 +1,160 @@
+---
+layout: bidder
+title: SuperEdge
+description: SuperEdge Prebid Bidder Adapter
+biddercode: superedge
+media_types: banner,native
+userIds: all (with commercial activation)
+tcfeu_supported: true
+coppa_supported: true
+gvl_id: 1554
+usp_supported: true
+pbjs: true
+pbs: false
+floors_supported: true
+schain_supported: false
+dchain_supported: false
+deals_supported: false
+fpd_supported: true
+multiformat_supported: will-bid-on-any
+ortb_blocking_supported: false
+sidebarType: 1
+---
+
+
+## Modules
+
+SharedID: We need you to include SharedID module, which is used to get prebid user commonid. It can better differentiating users to bid on ads.
+
+## Note
+
+The SuperEdge Bidding adapter requires setup before beginning. Please contact us at
+
+## Bid Params
+
+### Prebid.js Bid Params
+
+{: .table .table-bordered .table-striped }
+|-------------|-------------|-------------------------------------------------------------------------------------------------|--------------|-----------|
+| Name | Scope | Description | Example | Type |
+| `sk` | required | Publisher token, communicated by SuperEdge. | `'12341235'` | `string` |
+| `publisher` | required | Publisher ID, communicated by SuperEdge. | `'abcdefg'` | `string` |
+| `region` | recommended | Server region: `US`, `EU` or `APAC`. Default is `US`. | `'US'` | `string` |
+| `test` | recommended | 0 (default): production mode.
1: dev mode, no charge, higher bid frequency for easier debug. | `1` / `0` | `integer` |
+| `bidfloor` | recommended | Sets a floor price for the bid. | `0.05` | `float` |
+
+### Prebid Server Bid Params
+
+{: .table .table-bordered .table-striped }
+|----------|-------------|-------------------------------------------------------|--------------|----------|
+| Name | Scope | Description | Example | Type |
+| `sk` | required | Publisher token, communicated by SuperEdge. | `'12341235'` | `string` |
+| `region` | recommended | Server region: `US`, `EU` or `APAC`. Default is `US`. | `'US'` | `string` |
+
+## Banner
+
+```javascript
+var adUnits = [{
+ code: 'test-div',
+ mediaTypes: {
+ banner: {
+ sizes: [
+ [300, 250],
+ [300, 600]
+ ]
+ }
+ },
+ bids: [{
+ bidder: 'superedge',
+ params: {
+ sk: '12341235', // required
+ publisher: 'abcdefg', // required
+ region: 'US', // recommended - US, EU, or APAC
+ test: 0, // recommended - 0: production, 1: dev
+ bidfloor: 0.05 // recommended
+ }
+ }]
+}];
+```
+
+## Native
+
+```javascript
+var adUnits = [{
+ code: 'test-div-native',
+ mediaTypes: {
+ native: {
+ ortb: {
+ assets: [{
+ id: 1,
+ required: 1,
+ img: {
+ type: 3,
+ w: 150,
+ h: 50
+ }
+ },
+ {
+ id: 2,
+ required: 1,
+ title: {
+ len: 80
+ }
+ },
+ {
+ id: 3,
+ required: 1,
+ data: {
+ type: 1
+ }
+ },
+ {
+ id: 4,
+ required: 1,
+ data: {
+ type: 2
+ }
+ }]
+ }
+ }
+ },
+ bids: [{
+ bidder: 'superedge',
+ params: {
+ sk: '12341235', // required
+ publisher: 'abcdefg', // required
+ region: 'US', // recommended - US, EU, or APAC
+ test: 0, // recommended - 0: production, 1: dev
+ bidfloor: 0.05 // recommended
+ }
+ }]
+}];
+```
+
+## Prebid Server Test Request
+
+The following test parameters can be used to verify that Prebid Server is working properly with the
+server-side SuperEdge adapter.
+
+```json
+{
+ "imp": [{
+ "id": "some-impression-id",
+ "banner": {
+ "format": [{
+ "w": 300,
+ "h": 250
+ }, {
+ "w": 300,
+ "h": 600
+ }]
+ },
+ "ext": {
+ "bidder": {
+ "sk": "12341235",
+ "region": "US"
+ }
+ }
+ }]
+}
+```
diff --git a/dev-docs/bidders/synapsehx.md b/dev-docs/bidders/synapsehx.md
index 99bd11a539..68bd66153d 100644
--- a/dev-docs/bidders/synapsehx.md
+++ b/dev-docs/bidders/synapsehx.md
@@ -12,7 +12,7 @@ multiformat_supported: will-bid-on-any
safeframes_ok: false
schain_supported: false
usp_supported: true
-pbjs: false
+pbjs: true
pbs: true
prebid_member: false
fpd_supported: false
diff --git a/dev-docs/bidders/unicorn.md b/dev-docs/bidders/unicorn.md
index 91360b76cc..f3028816bb 100644
--- a/dev-docs/bidders/unicorn.md
+++ b/dev-docs/bidders/unicorn.md
@@ -10,15 +10,37 @@ biddercode: unicorn
sidebarType: 1
---
-### bid params
+## bid params
{: .table .table-bordered .table-striped }
-| Name | Scope | Description | Example | Type |
-|---------------|----------|-------------------------------------------|------------|-----------|
-| `placementId` | optional | Your placement ID | `'rectangle-ad-1'` | `string` |
-| `accountId` | required | Account ID for charge request (provided by UNICORN) | `12345` | `integer` |
-| `publisherId` | optional | Account specific publisher id. | `'67890'` | `string` |
-| `mediaId` | optional | Publisher specific media id. | `'example'` | `string` |
-| `bcat` | optional for Prebid.js | Blocked IAB categories | `['IAB-1', 'IAB-2']` | `[string]` |
+| Name | Scope | Description | Example | Type |
+| ------------- | ---------------------- | --------------------------------------------------- | -------------------- | ---------- |
+| `placementId` | optional | Your placement ID | `'rectangle-ad-1'` | `string` |
+| `accountId` | required | Account ID for charge request (provided by UNICORN) | `12345` | `integer` |
+| `publisherId` | optional | Account specific publisher id. | `'67890'` | `string` |
+| `mediaId` | optional | Publisher specific media id. | `'example'` | `string` |
+| `bcat` | optional for Prebid.js | Blocked IAB categories | `['IAB-1', 'IAB-2']` | `[string]` |
`publisherId` as `integer` is also supported on Prebid.js
+
+## Ad slot position signals
+
+For each bid request the adapter measures the ad slot's on-screen position,
+geometry and viewability, and sends it in the OpenRTB request it builds. This is
+scoped to the UNICORN request only — nothing is written to shared First Party
+Data, so no other bidder is affected. No configuration is required.
+
+- `imp.banner.pos` — OpenRTB AdPosition (`1` = above the fold, `3` = below the
+ fold). A publisher-declared `ortb2Imp.banner.pos`, if present, is used instead
+ of the measured value.
+- `imp.ext.adslot` — `{ ver, ratio, fixed, sticky, w, h, x, y }`: `ratio` is the
+ visible-area ratio (0–1), `fixed`/`sticky` flag a fixed/sticky ancestor, and
+ `x`/`y`/`w`/`h` are the slot's document-relative position and rendered size in
+ CSS pixels.
+- `imp.ext.gpid` — the Global Placement ID, forwarded from `ortb2Imp.ext.gpid`
+ (set by the `gpid` / `gptPreAuction` module) when present.
+
+The slot element is resolved in this order: `ortb2Imp.ext.data.divId` → the GPT
+slot mapping (`getSlotElementId()`) → the ad unit code. Set
+`ortb2Imp.ext.data.divId` when the ad unit code is not the div id and GPT is not
+defined at auction time.
diff --git a/dev-docs/bidders/yaleo.md b/dev-docs/bidders/yaleo.md
index cd45bbb8e7..841cd0e091 100644
--- a/dev-docs/bidders/yaleo.md
+++ b/dev-docs/bidders/yaleo.md
@@ -13,11 +13,11 @@ pbs: false
sidebarType: 1
---
-### Note
+## Note
The Yaleo Bidding adapter requires setup before beginning. Please contact us at [hola@yaleo.com](mailto:hola@yaleo.com).
-### Bid Params
+## Bid Params
{: .table .table-bordered .table-striped }
@@ -26,3 +26,15 @@ The Yaleo Bidding adapter requires setup before beginning. Please contact us at
| `placementId` | required | Yaleo placement identifier. |`460a301d-a9f7-4104-b55f-2a3d4674a973`|`string`|
| `memberId` | optional | Member identifier. |`12345`. |`number`|
| `maxCpm` | optional | Maximum CPM value. Bids with a CPM higher than the specified value will be rejected. |`2.5` |`number`|
+
+## Configuration
+
+The bidder endpoint can be overridden via global configuration for testing against a non-production environment. Only the approved HTTPS Yaleo endpoints are accepted (`https://bidder.yaleo.com/prebid` and `https://dev-bidder.yaleo.com/prebid`); any other value is ignored and the production endpoint is used.
+
+```javascript
+pbjs.setConfig({
+ yaleo: {
+ endpoint: 'https://dev-bidder.yaleo.com/prebid'
+ }
+});
+```
diff --git a/dev-docs/modules/51DegreesRtdProvider.md b/dev-docs/modules/51DegreesRtdProvider.md
index a8f0dc5b1d..dec129daa6 100644
--- a/dev-docs/modules/51DegreesRtdProvider.md
+++ b/dev-docs/modules/51DegreesRtdProvider.md
@@ -25,22 +25,37 @@ The Cloud API is **free** to integrate and use. To increase limits please check
## Description
-51Degrees module enriches an OpenRTB request with [51Degrees Device Data](https://51degrees.com/documentation/index.html) and (optionally) IP-derived geo plus a 51Did (51Degrees identifier) entry in `user.eids`.
+51Degrees module enriches an OpenRTB request with [51Degrees Device Data](https://51degrees.com/documentation/index.html) and (optionally) IP-derived geo plus 51Did (51Degrees identifier) entries in `user.eids`.
51Degrees module sets the following fields of the device object: `devicetype`, `make`, `model`, `hwv`, `os`, `osv`, `h`, `w`, `ppi`, `pxratio`. Interested bidder adapters may use these fields as needed.
-The module also adds a `device.ext.fod` extension object (fod == fifty one degrees) and sets `device.ext.fod.deviceId` to a permanent device ID, which can be rapidly looked up in on-premise data, exposing over 250 properties, including device age, chipset, codec support, price, operating system and app/browser versions, age, and embedded features.
+The module also adds a `device.ext.fod` extension object (fod == fifty one degrees) and sets `device.ext.fod.deviceId` to the 51Degrees device identifier. That value names the combination of hardware, platform and browser profiles detected, so every device of the same model and configuration carries the same value and it identifies no individual device or person. It can be rapidly looked up in on-premise data, exposing over 250 properties, including device age, chipset, codec support, price, operating system and app/browser versions, age, and embedded features.
It also sets `device.ext.fod.tpc` to a binary value to indicate whether third-party cookies are enabled in the browser (1 if enabled, 0 if disabled).
When 51Degrees IPI is available in the cloud response, the module sets `device.ip` and `device.ipv6`, and (if the location confidence is `high` or `medium`) populates `device.geo.{lat,lon,country,zip,utcoffset,accuracy,type,ipservice}` per OpenRTB 2.6 and AdCOM 1.0.
-[51Did](https://51degrees.com/documentation/4.5/_identifiers_51_did.html) is a 51Degrees privacy-safe identifier derived from device signals. Its production requires a marketing usage preference (`id.usage`). The recommended way to collect and store that preference is the [51Degrees Preference Management Platform (PMP)](https://51degrees.com/documentation/4.5/_identifiers__p_m_p.html) — a lightweight consent widget that writes the user's choice to `localStorage`. When PMP is present on the page the module picks up that preference automatically. When PMP is absent the module falls back to inferring the preference from the publisher's existing TCF or GPP consent string (see below).
+[51Did](https://51degrees.com/documentation/4.5/_identifiers_51_did.html) is a 51Degrees identifier derived from device signals. It carries a match key, being the stable alphanumeric string two recipients compare to decide they have seen the same browser, together with the user's marketing preference, the creator domain, a timestamp and a cryptographic signature.
-When 51Did is available, the module appends an entry to `user.eids` with `source = "51d.es"`, `inserter = "51degrees.com"`, `mm = 5` (inference), and `uids` carrying `idproblic` and `idprobglobal`. The `ext.tdl` URL inside the entry comes from the `params.tdlUrl` module config.
+51Did is not anonymous. What protects the user is the contract every party is bound by, rather than anything about the string itself. A 51Did is sent and received under the [Model Terms for Marketing](https://m4ow.uk/mtm), published by the Movement for an Open Web, whose full text is at [m4ow.uk/mtm/2.txt](https://m4ow.uk/mtm/2.txt). Under those terms a receiver may use the data only for a closed list of purposes and only as the user's preference allows, must not modify it or store its parts separately, must not combine it with special category data or profile on such data, and must not attempt to identify the user from it. Only the operator, being the party running the interface where the user gave the preference, may link the identifier to a user. Each party warrants that it has no means reasonably likely to be used to identify anyone from the data, which is what puts the data outside personal data for that transaction where data protection law applies, and that warranty is a promise about the receiver rather than a fact about the string.
+
+A 51Did is produced only where the user has given a usage preference (`id.usage`). On the cloud request this module makes, that preference is either standard marketing or personalized marketing as those are described to the user in Appendix 1 of the [Model Terms](https://m4ow.uk/mtm/2.txt). Standard marketing means content unrelated to browsing history, such as content chosen by time, region and the page in view. Personalized marketing means content related to browsing history or interactions. Where no preference has been given, no 51Did is produced. Where the page already carries its own 51Degrees integration, the module uses that response as it finds it, so the preference is whichever one that integration was loaded with (see [On-page integration](#on-page-integration)). The recommended way to collect and store that preference is the [51Degrees Preference Management Platform (PMP)](https://51degrees.com/documentation/4.5/_identifiers__p_m_p.html) — a lightweight consent widget that writes the user's choice to `localStorage`. When PMP is present on the page the module picks up that preference automatically. When PMP is absent the module falls back to inferring the preference from the publisher's existing TCF or GPP consent string (see below).
+
+When 51Did is available, the module appends one `user.eids` entry per identifier type returned by the cloud, each with `source = "51d.es"` and `inserter = "51degrees.com"`. The match method (`mm`) is an eid-level field, so a type cannot share an entry with another type:
+
+{: .table .table-bordered .table-striped }
+| Type | `mm` | `atype` |
+| :--- | :--- | :--- |
+| Probabilistic | 5 (inference) | 1 (browser or device tied) |
+| Random | 0 (unknown) | 1 (browser or device tied) |
+| Hashed Email | 3 (authenticated) | 3 (person based) |
+
+A type's license and global values share its entry as `uids`, license value first. Every entry carries `ext.tdl`, an array of terms documents naming the legal basis the identifier is shared under. The [Model Terms for Marketing](https://m4ow.uk/mtm/2.txt) are always first, because every party sending or receiving a 51Did is bound by them. The publisher's own Terms Document Locator follows when `params.tdlUrl` is configured. Random and Hashed Email appear only when the resource key includes those properties, and Hashed Email additionally requires evidence supplied to the 51Degrees integration itself (see [On-page integration](#on-page-integration)).
The module forwards the publisher's consent strings to the cloud as evidence when present. The TCF consent string (from Prebid's GDPR consent) is sent as `tcstring` and the GPP string (from Prebid's GPP consent) is sent as `gppstring`; the cloud can infer the marketing usage preference from either when PMP is not present, so 51Did works for publishers running any TCF or GPP CMP. These come from Prebid's consent data, not module params.
+When the consent evidence changes mid-session, the module reloads its script so the new strings reach the cloud, and removes the `fod` entry the 51Degrees script keeps in session storage. That entry is the script's cached cloud response and is keyed on nothing but the script's object name, so leaving it in place would let the reloaded script replay the response the previous consent produced. The module writes nothing to session storage and removes only that one key, only on a consent change; where session storage is not permitted the removal is skipped.
+
The module supports on premise and cloud device detection services with free options for both.
A free resource key for use with 51Degrees cloud service can be obtained from [51Degrees cloud configuration](https://configure.51degrees.com/Q5cD1H9W?utm_source=Prebid&utm_medium=Documentation). This is the simplest approach to trial the module.
@@ -148,6 +163,37 @@ pbjs.setConfig({
});
```
+### On-page integration
+
+When the page already runs its own 51Degrees integration, the module detects it automatically (the integration's `window.fod` object) and consumes its result instead of loading a second copy of the script. No module params are needed in this mode:
+
+```javascript
+pbjs.setConfig({
+ realTimeData: {
+ auctionDelay: 250,
+ dataProviders: [
+ {
+ name: '51Degrees',
+ waitForIt: true,
+ },
+ ],
+ },
+});
+```
+
+The module converts the integration's payload and enriches the ORTB2 request exactly as it does with its own script, and `tdlUrl` is still honoured. It sends nothing to the cloud itself, so the integration's script URL must carry the same parameters the module would send: `id.usage` (or the `tcstring` / `gppstring` consent strings) and any client-hint parameters. When an integration is present on the page the module uses it even if `resourceKey` is configured.
+
+Publisher requirements:
+
+* Load the 51Degrees script **synchronously**, before Prebid runs the auction. Do not use `async` or `defer` on the script tag, and do not inject it from a later-running script. Detection is a point-in-time check for `window.fod` at auction time: if the integration has not executed by then, the module does not see it and falls back to its configured behaviour, which with `resourceKey` set means loading a second copy of the script.
+* Keep the default object name (`fod`); the module reads `window.fod`, so an integration publishing under a different object name is not detected.
+* Identifiers that require additional evidence, such as Hashed Email, are configured on the 51Degrees integration itself. See the [51Degrees documentation](https://51degrees.com/documentation/index.html).
+
+Two limitations follow from consuming the page integration directly:
+
+* A consent change during the session does not re-run the page integration. Its payload reflects the consent state it was loaded under, and the new preference takes effect from the next page load.
+* If the integration never completes, the module never calls back and the auction proceeds only after the configured `auctionDelay`. The module does not fall back to loading its own script while `window.fod` is present, because two integrations on one page would conflict.
+
### Parameters
> Note that `resourceKey` and `onPremiseJSUrl` are mutually exclusive parameters. Use strictly one of them: either a `resourceKey` for cloud integration and `onPremiseJSUrl` for the on-premise self-hosted integration.
@@ -160,7 +206,7 @@ pbjs.setConfig({
| params | Object | | |
| params.resourceKey | String | Your 51Degrees Cloud Resource Key | |
| params.onPremiseJSUrl | String | Direct URL to your self-hosted on-premise JS file (e.g. `https://your.domain/51Degrees.core.js`) | |
-| params.tdlUrl | String | URL of your Terms Document Locator (TDL) — a machine-readable document declaring the data usage terms under which the identifier is shared, per the [data-labels proposal](https://github.com/jwrosewell/data-labels/tree/main) and its [OpenRTB extension](https://github.com/jwrosewell/data-labels/blob/main/OpenRTB.md). The URL is placed in the `ext.tdl` array of the `51d.es` eids entry. Omit if you do not publish a TDL; the module will log a warning and emit the eids entry without `ext.tdl`. | |
+| params.tdlUrl | String | URL of your Terms Document Locator (TDL), a document declaring the data usage terms under which the identifier is shared, per the [data-labels proposal](https://github.com/jwrosewell/data-labels/tree/main) and its [OpenRTB extension](https://github.com/jwrosewell/data-labels/blob/main/OpenRTB.md). The URL is added to the `ext.tdl` array of the `51d.es` eids entry, after the [Model Terms for Marketing](https://m4ow.uk/mtm/2.txt), which are always present. Omit if you do not publish a TDL; the module logs a warning and the entry names the Model Terms alone. | |
## Example
@@ -177,8 +223,13 @@ and then open the following URL in your browser:
`http://localhost:9999/integrationExamples/gpt/51DegreesRtdProvider_example.html`
+A second example shows the on-page integration mode:\
+`http://localhost:9999/integrationExamples/gpt/51DegreesRtdProvider_pageIntegration_example.html`
+
Open the browser console to see the logs.
## Customer Notices
When using the 51Degrees cloud service publishers need to reference the 51Degrees [client services privacy policy](https://51degrees.com/terms/client-services-privacy-policy) in their customer notices.
+
+Where a publisher sends or receives a 51Did under the [Model Terms for Marketing](https://m4ow.uk/mtm), the terms carry their own notice obligation. Each party bound by them must publish a notice on its own site saying that it is bound by them, linking the version it is bound by, saying which of the data it handles is covered by them and which is not, and explaining what the match key is and why the party cannot identify anyone from it. The notice can sit inside an existing policy as long as that policy says these things and stays publicly reachable. See clause 7.4 of the [full text](https://m4ow.uk/mtm/2.txt).
diff --git a/dev-docs/modules/encypherRtdProvider.md b/dev-docs/modules/encypherRtdProvider.md
index c766915d55..e2c40597d3 100644
--- a/dev-docs/modules/encypherRtdProvider.md
+++ b/dev-docs/modules/encypherRtdProvider.md
@@ -2,7 +2,7 @@
layout: page_v2
title: Encypher Real Time Data Provider
display_name: Encypher C2PA Content Provenance
-description: Injects C2PA content provenance signals into OpenRTB bid requests
+description: Injects verified C2PA provenance references into OpenRTB impressions
page_type: module
module_type: rtd
module_code: encypherRtdProvider
@@ -19,25 +19,21 @@ sidebarType: 1
## Description
-The Encypher RTD provider injects [C2PA](https://c2pa.org/) content provenance signals into OpenRTB bid requests at `site.ext.data.c2pa`. This gives DSPs a cryptographic content-integrity signal they can use for brand safety and inventory quality decisioning.
+The Encypher RTD provider performs a credentialless lookup for the canonical page, verifies the returned compact ES256 attestation, and adds the verified provenance reference to each OpenRTB impression at `imp.ext.c2pa`.
-The module detects whether article content already carries embedded provenance markers (from a CMS plugin, CDN worker, or direct API integration) and verifies them server-side. If no existing provenance is found, it signs the content via the Encypher public API. In both cases the result is injected into the bid request.
-
-No external JavaScript is loaded. The module uses only Prebid.js core imports. Every code path calls `callback()`. The module never blocks an auction.
+The module does not extract or upload article text, fetch page manifests, sign content in the browser, use cookies or localStorage, or load external JavaScript.
Contact [engineering@encypher.com](mailto:engineering@encypher.com) for more information.
## Integration
-Compile the Encypher RTD module into your Prebid build:
+Compile the provider with the RTD core module:
```bash
-gulp build -modules=rtdModule,encypherRtdProvider
+gulp build --modules=rtdModule,encypherRtdProvider
```
-## Configuration
-
-Add the Encypher RTD provider to your Prebid config:
+Configure one Encypher data provider. `auctionDelay` must be at least as large as the provider timeout.
```javascript
pbjs.setConfig({
@@ -47,7 +43,7 @@ pbjs.setConfig({
name: 'encypher',
waitForIt: true,
params: {
- // All optional. Free tier works with zero config.
+ timeout: 300
}
}]
}
@@ -58,97 +54,91 @@ pbjs.setConfig({
{: .table .table-bordered .table-striped }
-| Name | Scope | Type | Description |
-| - | - | - | - |
-| `name` | Required | String | Must be `'encypher'` |
-| `waitForIt` | Optional | Boolean | Set to `true` to delay the auction until provenance data is available. Default: `false` |
-| `params` | Optional | Object | Configuration parameters (see below) |
-| `params.apiBase` | Optional | String | Override the API base URL (default: `https://api.encypher.com`). Useful for staging or development environments. |
-| `params.manifestUrl` | Optional | String | Manual manifest URL. When set, the module fetches this URL directly instead of calling the signing API. |
-
-## How It Works
+| Name | Scope | Type | Default | Description |
+| - | - | - | - | - |
+| `name` | Required | String | | Must be `'encypher'` |
+| `waitForIt` | Required for asynchronous lookup | Boolean | `false` | Set to `true` so RTD core waits up to `auctionDelay` for the result |
+| `params.timeout` | Optional | Number | `300` | Total provider deadline in milliseconds for URL hashing, signal lookup, JWKS retrieval, and verification. The effective budget is the smaller of this value and `auctionDelay` |
+| `params.telemetry` | Optional | Boolean | `false` | Emit privacy-minimized diagnostic delivery events after the auction callback |
+| `params.adoptionReporting` | Optional | Boolean | `true` | Permit domain-level adoption observations on consent-allowed lookups. Set exactly `false` to opt out |
-The module runs once per page load through three paths in strict priority:
+The signal origin is fixed at `https://signals.encypher.com`. Publishers cannot configure a mirror, alternate subdomain, or path-prefix override.
-### Path A: Manifest Shortcut
+## How it works
-If a `` tag or `params.manifestUrl` is present, the module fetches the manifest directly without calling the signing API.
+For each auction, the provider first checks consent. When transmission is allowed, it:
-### Path B: Cache
+1. Selects the page's canonical URL, removes its fragment, normalizes percent encoding, and sorts query parameters.
+2. Computes the SHA-256 URL digest with browser WebCrypto.
+3. Requests the current decision from `https://signals.encypher.com/v1/attestations/{url_hash}`.
+4. Requires an exact JSON decision with `v`, `status`, `dataset_version`, and `record`.
+5. For a `ready` decision, verifies the compact JWS against the pinned issuer and JWKS at `https://api.encypher.com/api/v1/public/provenance/jwks.json`.
+6. Adds the verified four-field carrier to auction-local copies of each ad unit.
-If provenance data for the current page exists in localStorage (30-day TTL, keyed by canonical URL hash), it is served immediately with no network call.
+`miss`, `revoked`, `stale`, malformed, oversized, unavailable, invalid, and timed-out results leave the auction unchanged.
-### Path C: API Signing and Verification
+## Data injected
-The module extracts article text from the DOM and sends it to the Encypher API. The API detects whether the content already contains embedded C2PA provenance markers:
+The provider adds one compact object at `imp.ext.c2pa`:
-- **If markers are present:** The API verifies them and returns the existing provenance data, including the original signer tier. No signing quota is consumed.
-- **If no markers are found:** The API signs the content fresh and returns a new manifest.
+```json
+{
+ "v": 1,
+ "id": "epa_01J...",
+ "ref": "https://api.encypher.com/api/v1/proof/bNv0YOZMqiDPmlW0hf0im_AkYKJ53GZxuJIsodyhMRg",
+ "att": "eyJhbGciOiJFUzI1NiIs..."
+}
+```
-The result is cached in localStorage and injected into the bid request.
+{: .table .table-bordered .table-striped }
-## Content Extraction
+| Field | Type | Description |
+| - | - | - |
+| `v` | Integer | Protocol version, exactly `1` |
+| `id` | String | Stable provenance record identifier |
+| `ref` | HTTPS URL | Content-addressed public evidence URL derived from the signed manifest SHA-256 digest |
+| `att` | Compact JWS | ES256 attestation binding the record to the canonical URL digest, publisher domain, manifest digest, policy version, revision, and expiration |
-Article text is extracted from the DOM in this priority order:
+The serialized extension is limited to 1 KiB. Existing impression fields, including GPID, remain unchanged. Supply-chain data remains separate.
-1. **JSON-LD structured data:** `application/ld+json` scripts containing schema.org `Article`, `NewsArticle`, `BlogPosting`, or `Report` types.
-2. **`` element:** `textContent` of the first `` element.
-3. **`[role="main"]` element:** `textContent` of the first element with `role="main"`.
+## Validation and freshness
-Content shorter than 50 characters is skipped. Content longer than 50,000 characters is truncated.
+The provider requires:
-## Data Injected
+- A fixed `https://signals.encypher.com` decision with status `ready`, `miss`, `revoked`, or `stale`.
+- `record` to be the exact compact carrier for `ready` and `null` for every other status.
+- An ES256 signature from the selected P-256 key in the pinned JWKS.
+- Exact issuer, subject, publisher domain, canonical URL digest, manifest digest, validation result, declaration, policy version, signed revision, and lifetime claims.
+- Exact equality between `ref` and `https://api.encypher.com/api/v1/proof/` followed by the signed `manifest_digest`, encoded as canonical unpadded base64url for 32 bytes. The browser does not fetch the evidence.
+- At most 4 KiB of decoded decision JSON and 64 KiB of decoded JWKS JSON.
-The following object is placed at `ortb2Fragments.global.site.ext.data.c2pa`:
+Signal and JWKS requests omit credentials and referrers, reject redirects, and bypass HTTP caches. A ready decision may be reused in page memory for at most 30 seconds, but its JWS and signed expiration are checked before every injection. JWKS entries expire after 30 seconds.
-```json
-{
- "manifest_url": "https://api.encypher.com/api/v1/public/prebid/manifest/abc123",
- "verified": true,
- "signer_tier": "connected",
- "signed_at": "2026-04-01T10:00:00Z",
- "content_hash": "a1b2c3d4e5f6",
- "source": "auto",
- "extraction_method": "json-ld"
-}
-```
+Page-lifetime dataset, status, and signed-revision watermarks prevent older or delayed responses from replacing newer decisions. `miss`, `revoked`, and `stale` decisions block equal or older ready responses. The provider also isolates carrier writes to the current auction, so a successful result cannot persist on reusable publisher ad-unit objects.
-{: .table .table-bordered .table-striped }
+## Trust model
-| Field | Type | Description |
-| - | - | - |
-| `manifest_url` | String | URL to retrieve the C2PA manifest |
-| `verified` | Boolean | `true` if provenance was successfully verified or signed |
-| `signer_tier` | String | Signing identity tier (see table below) |
-| `signed_at` | String | ISO 8601 timestamp of signing |
-| `content_hash` | String | SHA-256 hash of article text |
-| `source` | String | How provenance was obtained: `cms`, `cache`, or `auto` |
-| `extraction_method` | String | DOM extraction method: `json-ld`, `article-element`, or `role-main` |
+The record JWS authenticates the carrier and its signed claims. The pinned `https://api.encypher.com` JWKS origin supplies verification keys. The exact `https://signals.encypher.com` origin is the online authority for current ready, miss, revoked, or stale status and dataset version.
-## Signer Tiers
+Current status is not separately signed for the browser. Compromise of the signal authority, its Cloudflare account or route, or its TLS control plane can replay a still-unexpired issuer-signed record. Compromise of the pinned JWKS origin can substitute verification keys. These authority compromises are outside the browser protocol's protection.
-The `signer_tier` field tells DSPs how the content was authenticated:
+The evidence URL is cryptographically bound to the signed manifest digest. Substituting another syntactically valid evidence URL without changing the signed attestation causes rejection. Evidence retrieval still depends on the proof endpoint's availability and access controls; the browser does not treat a valid signature as proof of current availability.
-{: .table .table-bordered .table-striped }
+## Privacy and diagnostics
-| Tier | Meaning |
-| - | - |
-| `byok` | Publisher signed with their own key (strongest identity) |
-| `connected` | Publisher authenticated with Encypher and signed at publish time |
-| `encypher_free` | Content was auto-signed by Encypher at first pageview (no publisher authentication) |
-| `local` | Manifest fetched from a local or self-hosted endpoint |
+The provider skips all work when COPPA applies, the US Privacy string records a sale opt-out, or GDPR applicability is true or unresolved. Encypher has no registered GVL ID, so a consent string or another vendor's consent cannot authorize transmission to Encypher. When GDPR consent management is enabled but supplies no data, the provider also skips the lookup. Builds without consent modules can perform the lookup.
-DSPs can use this field for differential bidding. Content signed by authenticated publishers carries stronger brand-safety guarantees than content attested by a third party at pageview time.
+GPP consent is checked independently of the legacy US Privacy string. Applicable US national and state sections 7-12 block transmission on sale, sharing, targeted-advertising opt-outs, or GPC. Object and segmented section representations are supported. Unknown applicable sections, missing or malformed consent fields, and unresolved configured GPP consent fail closed. Only applicable sections are inspected; an exact `[-1]` applicable-section list means no GPP section applies. Other privacy gates still apply.
-## Free Tier
+Blocked calls complete the RTD callback without URL hashing, signal or JWKS requests, cached-signal injection, diagnostics, or adoption reporting. Ordinary auctions continue. Consent is checked again for every auction, including auctions that could otherwise reuse a cached signal.
-The free tier provides 1,000 unique content signatures per publisher domain per month. Re-requests for the same content (deduped by content hash) do not count against quota. Verification of already-signed content does not count against quota. When the quota is exceeded, the module continues without injecting provenance data (fail-open).
+Allowed lookup requests disclose the canonical URL digest, canonical publisher hostname, and module version to the fixed signal authority. They do not upload the raw URL, page content, manifest, cookies, bids, prices, deals, or creatives. Requests omit browser credentials and referrers. The URL digest is not an anonymization guarantee; canonical URLs can contain visitor-specific query values.
-## Privacy
+When consent permits transmission and `params.telemetry` is `true`, the module sends one post-callback diagnostic event through Prebid's fetch wrapper. It contains only protocol and module versions, outcome, impression count, duration, and optional dataset version. Non-injected outcomes report an impression count of zero. Telemetry failure cannot affect the auction.
-The module uses Prebid's `getStorageManager` for localStorage access, which enforces GDPR/TCF consent. If consent is denied, caching is disabled and Path C (auto-sign) is skipped entirely, so no page content leaves the browser. When consent is granted but caching is unavailable, the module falls back to API calls on each page load. Article text sent to the Encypher API for signing is not stored on Encypher's servers. Only content hashes and metadata are persisted. A 2-second timeout ensures the module never blocks the auction.
+When adoption reporting is enabled, the edge records an observation only when the browser Origin hostname exactly matches the requested publisher hostname. Retained fields are limited to the publisher FQDN, first and last seen times, module version, aggregate lookup/hit/miss counts, and dataset version. `params.adoptionReporting: false` adds the opt-out to the existing lookup and creates no second request.
-## Further Reading
+## Further reading
- [C2PA Specification](https://c2pa.org/specifications/)
-- [Encypher Documentation](https://encypher.com/docs)
+- [Prebid Real-Time Data modules](/dev-docs/add-rtd-submodule.html)
diff --git a/dev-docs/modules/geoedgeRtdProvider.md b/dev-docs/modules/geoedgeRtdProvider.md
index 6f734d926c..45bd0468df 100644
--- a/dev-docs/modules/geoedgeRtdProvider.md
+++ b/dev-docs/modules/geoedgeRtdProvider.md
@@ -59,13 +59,47 @@ pbjs.setConfig({
Parameters details:
{: .table .table-bordered .table-striped }
-|Name |Type |Description |Notes |
-| :------------ | :------------ | :------------ |:------------ |
-|name | String | Real time data module name |Required, always 'geoedge' |
-|params | Object | | |
-|params.key | String | Customer key |Required, contact Geoedge to get your key |
-|params.bidders | Object | Bidders to monitor |Optional, list of bidder to include / exclude from monitoring. Omitting this will monitor bids from all bidders. |
-|params.wap |Boolean |Wrap after preload |Optional, defaults to `false`. Set to `true` if you want to monitor only after the module has preloaded the monitoring client. |
+| Name | Type | Description | Notes |
+| :------------ | :------------ | :------------ | :------------ |
+| name | String | Real time data module name | Required, always 'geoedge' |
+| params | Object | | |
+| params.key | String | Customer key | Required, contact Geoedge to get your key |
+| params.bidders | Object | Bidders to monitor | Optional, list of bidder to include / exclude from monitoring. Omitting this will monitor bids from all bidders. |
+| params.wap | Boolean | Wrap after client load | Optional, defaults to `false`. Set to `true` if you want to monitor only after the module has loaded the monitoring client. |
+| params.outstream | Boolean | Monitor outstream video | Optional, defaults to `false`. Set to `true` to extend monitoring to outstream video bids. See [Outstream video](#outstream-video) below. |
+| params.display | Boolean | Monitor display | Optional, defaults to `true`. Set to `false` to opt out of display monitoring, leaving display bids unwrapped. |
+
+## Outstream video
+
+Video creatives are VAST rather than HTML, so they cannot be wrapped the way display creatives are.
+With `outstream: true` the module instead wraps the bid's own `renderer.render` and asks the
+monitoring client whether the creative may run:
+
+```javascript
+pbjs.setConfig({
+ realTimeData: {
+ dataProviders: [{
+ name: 'geoedge',
+ params: {
+ key: '123123',
+ outstream: true
+ }
+ }]
+ }
+});
+```
+
+Behavior worth knowing before enabling it:
+
+* **Render timing.** The monitoring client is loaded when the module initializes, so by the time a
+ bid renders it has normally already answered and rendering proceeds immediately. Only a render that
+ happens before the client is ready waits for the answer, and that wait is capped by a short
+ deadline.
+* **It fails open.** If the client does not load within that deadline, or loads without a verdict for
+ the bid, the creative renders unmonitored. An ad is never lost because monitoring was unavailable.
+* **It only affects bids Prebid renders through the bid's renderer.** Bids carrying a `safeRenderer`,
+ and bids whose VAST reaches a player straight from targeting or Prebid Cache, are left untouched.
+* **Display monitoring is unchanged.** A bid handled by the outstream path is not also HTML-wrapped.
## Example
diff --git a/dev-docs/modules/mileRtdProvider.md b/dev-docs/modules/mileRtdProvider.md
new file mode 100644
index 0000000000..4ac6a265b9
--- /dev/null
+++ b/dev-docs/modules/mileRtdProvider.md
@@ -0,0 +1,89 @@
+---
+layout: page_v2
+title: Mile RTD Module
+display_name: Mile RTD Module
+description: The Mile RTD module computes per-slot targeting values through a runtime engine and sets GPT slot targeting used by GAM unified Pricing rules.
+page_type: module
+module_type: rtd
+module_code : mileRtdProvider
+enable_download : true
+vendor_specific: true
+sidebarType : 1
+---
+
+# Mile RTD Provider
+
+## Overview
+
+The `mile` RTD provider computes per-slot targeting values through a runtime engine and sets GPT slot targeting used by GAM unified Pricing rules.
+
+It sets a single targeting key:
+
+- `mile_rtd`
+
+The value is provider-specific and is returned by `window[params.runtimeGlobalName].getMileTargetingByAdUnit(...)`
+
+{% include dev-docs/loads-external-javascript.md %}
+
+## Installation
+
+Build the Mile RTD module into your Prebid.js package with:
+
+```bash
+gulp build --modules=rtdModule,mileRtdProvider,...
+```
+
+## When targeting is applied
+
+Targeting is applied during:
+
+- `onAuctionInitEvent`
+- `onBidResponseEvent`
+
+## Key-value mapping
+
+The runtime engine returns a map keyed by ad unit identifier (slot element ID or ad unit path), and each resolved slot gets:
+
+- key: `mile_rtd`
+- value: `targetingByAdUnit[slotElementId]` or `targetingByAdUnit[adUnitPath]`
+
+Example runtime response:
+
+```js
+{
+ "div-gpt-ad-123": "segA_floorHigh",
+ "/1234567/homepage/top": "segB_floorMid"
+}
+```
+
+Resulting GPT slot targeting:
+
+```js
+slot.setTargeting("mile_rtd", "segA_floorHigh");
+```
+
+## Configuration
+
+Use the RTD module with provider name `mile`:
+
+```js
+pbjs.setConfig({
+ realTimeData: {
+ dataProviders: [
+ {
+ name: "mile",
+ waitForIt: false,
+ params: {
+ runtimeScriptUrl: "https://cdn.example.com/mile-rtd-runtime.js",
+ runtimeGlobalName: "mileRtdRuntime", // optional, default shown
+ },
+ },
+ ],
+ },
+});
+```
+
+### Params
+
+- `runtimeScriptUrl` (optional): URL of runtime script to load.
+- `runtimeGlobalName` (optional): global object name exposing `getMileTargetingByAdUnit`; defaults to `mileRtdRuntime`.
diff --git a/dev-docs/modules/userid-submodules/anonymised.md b/dev-docs/modules/userid-submodules/anonymised.md
new file mode 100644
index 0000000000..ddd4b5478e
--- /dev/null
+++ b/dev-docs/modules/userid-submodules/anonymised.md
@@ -0,0 +1,79 @@
+---
+layout: userid
+title: Anonymised ID
+description: Anonymised ID User ID sub-module
+useridmodule: anonymisedIdSystem
+bidRequestUserId: anonymisedId
+eidsource: anonymised.io
+example: '"01f6a483-86fa-406b-a7c2-45f6d4a89469"'
+---
+
+
+Anonymised is a data anonymization technology for privacy-preserving advertising.
+
+The Anonymised User ID sub-module exposes the identifier that the [Anonymised Marketing Tag](https://support.anonymised.io/integrate/marketing-tag?t=LPukVCXzSIcRoal5jggyeg) assigns when a user signs in, and passes it to the bid stream as an OpenRTB Extended ID under the source `anonymised.io`.
+
+The sub-module makes no network request and loads no script. It reads the identifier the Marketing Tag has already stored on the publisher's own domain, in `localStorage` under the key `anon-cuid`. When the Marketing Tag is not present, or the user is not signed in, no ID is read and no EID is added — which is the expected state for most traffic, not an error.
+
+## Prerequisite
+
+The Anonymised Marketing Tag must be installed on the page. This sub-module does not load it. The tag can be installed [natively](https://support.anonymised.io/integrate/install-the-anonymised-tag-natively?t=LPukVCXzSIcRoal5jggyeg), or through the [Anonymised RTD Provider](/dev-docs/modules/anonymisedRtdProvider.html) using its `tagConfig` parameter.
+
+Please contact an [Anonymised representative](mailto:support@anonymised.io) to get started.
+
+Add the Anonymised ID to your Prebid.js package with:
+
+```bash
+gulp build --modules=userId,anonymisedIdSystem
+```
+
+## Anonymised ID Configuration
+
+{: .table .table-bordered .table-striped }
+
+| Param under userSync.userIds[] | Scope | Type | Description | Example |
+| --- | --- | --- | --- | --- |
+| name | Required | String | The name of this module | `"anonymisedId"` |
+
+This sub-module takes no `params`.
+
+### Do not configure `storage`
+
+This sub-module manages the identifier itself and must be configured **without** a `storage` object.
+
+The Marketing Tag is the single source of truth for the identifier: it writes the value when the user signs in, and removes it on sign-out and on consent withdrawal. If Prebid.js kept its own copy, that copy would outlive the removal and the sub-module would keep sending a stale identifier to bidders until Prebid's own expiry elapsed. Reading the value on every initialization keeps the Marketing Tag's removal authoritative.
+
+### Do not set `userSync.ppid` to `anonymised.io`
+
+The Marketing Tag sets the Google Ad Manager Publisher Provided ID itself. Setting `userSync.ppid` to `anonymised.io` makes Prebid.js set the PPID as well, which produces two problems:
+
+* Prebid.js strips non-alphanumeric characters from an ID before setting it as the PPID, while the Marketing Tag sends the identifier unmodified. The same user is then represented by two different PPIDs depending on which code path ran, splitting Google Ad Manager audiences and reporting.
+* The Marketing Tag applies its own logic when deciding whether a PPID should be set at all. Prebid.js is not aware of that logic and would bypass it.
+
+The Marketing Tag owns the identifier sent to Google Ad Manager; this sub-module owns the identifier sent to bidders.
+
+### Single-page applications
+
+`getId` is called when the User ID module initializes and is not re-run for subsequent auctions. If a user signs in after that point, call `pbjs.refreshUserIds({ submoduleNames: ['anonymisedId'] })` to pick up the new identifier.
+
+Always pass `submoduleNames`. An unscoped refresh re-initializes every configured ID sub-module, including those that make network requests.
+
+### Subdomains
+
+The identifier is read from `localStorage`, which is scoped to a single origin. For a publisher serving the same user from more than one subdomain, the identifier is available on each subdomain only after the Marketing Tag has run there.
+
+### Data deletion
+
+Deletion requests are handled by the Anonymised Marketing Tag, which owns the user's session and every identifier derived from it. This sub-module stores nothing of its own and therefore implements no `onDataDeletionRequest` callback.
+
+## Anonymised ID Example
+
+```javascript
+pbjs.setConfig({
+ userSync: {
+ userIds: [{
+ name: 'anonymisedId'
+ }]
+ }
+});
+```
diff --git a/prebid-mobile/modules/rendering/combined-ad-experience-controls.md b/prebid-mobile/modules/rendering/combined-ad-experience-controls.md
index 87da78a7f8..8c10923885 100644
--- a/prebid-mobile/modules/rendering/combined-ad-experience-controls.md
+++ b/prebid-mobile/modules/rendering/combined-ad-experience-controls.md
@@ -236,6 +236,32 @@ This setting determines the number of seconds after the start of playback before
{% include code/mobile-sdk.html id="skip-delay" kotlin=android swift=ios %}
+### Auto-Close on Video Completion
+
+This setting controls whether a non-rewarded fullscreen video ad without a companion ad closes automatically when video playback completes. Disable it to keep the interstitial open with a **Watch Again** button until the user closes the ad.
+
+Rewarded ads do not use this setting. Configure their post-reward behavior with [`rwdd.close.action`](/prebid-mobile/modules/rendering/combined-ui-ux-policy.html#rewarded-ad), using either `autoclose` or `closebutton`.
+
+{% capture android %}
+ {: .table .table-bordered .table-striped }
+
+ |**API Object** | *not supported*|
+ |**Ad Unit Property** | *not supported*|
+ |**Server Property** | *not supported*|
+{% endcapture %}
+
+{% capture ios %}
+ {: .table .table-bordered .table-striped }
+
+ |**API Object** |`InterstitialRenderingAdUnit`, `MediationInterstitialAdUnit`|
+ |**Ad Unit Property** |`adUnit.isAutoCloseOnCompletionEnabled`|
+ |**Server Property** |`isautocloseoncompletionenabled`|
+ |**Allowed Values** |`true`, `false`|
+ |**Default Value** |`true`|
+{% endcapture %}
+
+{% include code/mobile-sdk.html id="auto-close-on-video-completion" kotlin=android swift=ios %}
+
### Sound Button
This option switches on or off the visibility of the sound/mute button for users.
@@ -310,6 +336,7 @@ Here is how you can implement all the API's to customize your ad.
interstitialController?.skipButtonArea = 0.1
interstitialController?.skipButtonPosition = .topRight
interstitialController?.closeButtonPosition = .topRight
+ interstitialController?.isAutoCloseOnCompletionEnabled = false
```
{% endcapture %}
diff --git a/prebid-mobile/pbm-api/android/pbm-targeting-android.md b/prebid-mobile/pbm-api/android/pbm-targeting-android.md
index e37ef44c9c..d472400a61 100755
--- a/prebid-mobile/pbm-api/android/pbm-targeting-android.md
+++ b/prebid-mobile/pbm-api/android/pbm-targeting-android.md
@@ -810,7 +810,7 @@ Parameters:
{: .table .table-bordered .table-striped }
| Parameter | Scope | Type | Description | Example |
| --- | --- | --- | --- | --- |
-| precision | optional | integer | Number of decimal places to keep, or null for no limit. Values outside the 0-6 range will be clamped to valid range. Default is `null`| 2 |
+| precision | optional | integer | Number of decimal places to keep, or null for no limit. Values outside the 0-6 range will be clamped to valid range. Default is `null` | 2 |
Related function: getLocationDecimalPrecision().
@@ -846,6 +846,14 @@ TargetingParams.setGlobalOrtbConfig("")
The `TargetingParams.setGlobalOrtbConfig()` also allows to **add** impression objects to the request. All objects in the `$.imp[]` array will be added to the request. Note that Ad Unit's `imp` object won't be changed using Global Config. To change the `imp` config, use the `setImpORTBConfig()` method of a particular Ad Unit. See the Ad Unit documentation for the details.
+The global config is also the way to set OpenRTB fields that have no dedicated `TargetingParams` method. For instance, to pass the URL of the content displayed alongside the ad in `$.app.content.url`:
+
+``` kotlin
+TargetingParams.setGlobalOrtbConfig("{\"app\":{\"content\":{\"url\":\"https://example.com/articles/123\"}}}")
+```
+
+Each call replaces the previously set global config, so put all global-level fields in a single JSON object.
+
Pay attention that there are certain protected fields such as `regs`, `device`, `geo`, `ext.gdpr`, `ext.us_privacy`, and `ext.consent` which cannot be changed using the `setGlobalOrtbConfig()` method.
- App and User first party data should use the [functions defined for those purposes](/prebid-mobile/pbm-api/ios/pbm-targeting-ios.html#first-party-data)
diff --git a/prebid-mobile/pbm-api/ios/pbm-targeting-ios.md b/prebid-mobile/pbm-api/ios/pbm-targeting-ios.md
index 451267fa11..6fa6cf930e 100644
--- a/prebid-mobile/pbm-api/ios/pbm-targeting-ios.md
+++ b/prebid-mobile/pbm-api/ios/pbm-targeting-ios.md
@@ -146,7 +146,7 @@ The `Log` class is designed to handle logging functionality for the SDK. It allo
| Property | Type | Description |
|--------------|-----------|-----------------------------------------------------------------------------------------------------------|
-| `logLevel` | `LogLevel`| The current logging level. Only messages at this level or higher will be logged. Default: `.debug` |
+| `logLevel` | `LogLevel`| The current logging level. Only messages at this level or higher will be logged. Default: `.debug` |
| `logToFile` | `Bool` | Indicates whether logs should also be saved to a file. Default: `false` |
### `Log` Class Methods
@@ -527,7 +527,7 @@ Note that several of the properties noted here are also mentioned above for othe
| Parameter | Scope | Type | Platform | Description | Example |
| --- | --- | --- | --- | --- | --- |
| storeURL | recommended | string | both | App store URL for an installed app; for Inventory Quality Guidelines 2.1 compliance. Translates to OpenRTB app.storeurl | `https://apps.apple.com/app/id111111111` |
-| contentUrl | recommended | string | both | This is the deep-link URL for the app screen that is displaying the ad. This can be an iOS universal link. | |
+| contentUrl | deprecated | string | both | Deprecated, will be removed in PrebidMobile 4.0. The SDK does not send this value in the bid request. Set `app.content.url` with [`setGlobalORTBConfig()`](/prebid-mobile/pbm-api/ios/pbm-targeting-ios#arbitrary-openrtb) instead. | |
| publisherName | recommended | string | both | OpenRTB app.publisher.name | "Example, Co." |
| itunesID | recommended | string | both | Translates to OpenRTB app.bundle | "11111111" |
| coppa | optional | integer | objC | Defines whether this content is meant for children. 0=false, 1=true. Defaults to false. | 1 |
@@ -537,7 +537,7 @@ Note that several of the properties noted here are also mentioned above for othe
| omidPartnerName | optional | string | both | The [IAB OMSDK compliant partner name](https://complianceomsdkapi.iabtechlab.com/compliance/latest) responsible for integrating with the OMSDK spec. | "Google" |
| omidPartnerVersion | optional | string | both | The OMSDK version number for the integration partner. | "1.0" |
| userGender | optional | enum | both | "M" = male, "F" = female, "O" = known to be other (i.e., omitted is unknown) | "F" |
-| userExt | optional | array of key-value pairs | both | This is a dictionary of key-value pairs that forms the user.ext object. Prebid requires user-first party data in user.ext.data, so this should be a dictionary that contains a 'data' key whose value is another dictionary. | { data: { key1: val1, key2: val2 }}|
+| userExt | optional | array of key-value pairs | both | This is a dictionary of key-value pairs that forms the user.ext object. Prebid requires user-first party data in user.ext.data, so this should be a dictionary that contains a 'data' key whose value is another dictionary. | { data: { key1: val1, key2: val2 }} |
| subjectToGDPR | discouraged | boolean | ? | Defines whether this request is in-scope for European privacy regulations. See [above](/prebid-mobile/pbm-api/ios/pbm-targeting-ios#gdpr--tcf-eu) for more information. | `true` |
| gdprConsentString | discouraged | string | both | See the [GDPR settings](/prebid-mobile/pbm-api/ios/pbm-targeting-ios#gdpr--tcf-eu) section above. | |
| purposeConsents | discouraged | string | both | See the [GDPR settings](/prebid-mobile/pbm-api/ios/pbm-targeting-ios#gdpr--tcf-eu) section above. | |
@@ -581,11 +581,39 @@ Targeting.shared.setGlobalORTBConfig("")
The `Targeting.shared.setGlobalORTBConfig()` also allows to **add** impression objects to the request. All objects in the `$.imp[]` array will be added to the request. Note that Ad Unit's `imp` object won't be changed using Global Config. To change the `imp` config, use the `setImpORTBConfig()` method of a particular Ad Unit. See the Ad Unit documentation for the details.
+The global config is also the way to set OpenRTB fields that have no dedicated `Targeting` property. For instance, to pass the URL of the content displayed alongside the ad in `$.app.content.url`:
+
+``` swift
+Targeting.shared.setGlobalORTBConfig("{\"app\":{\"content\":{\"url\":\"https://example.com/articles/123\"}}}")
+```
+
+Each call replaces the previously set global config, so put all global-level fields in a single JSON object.
+
Pay attention that there are certain protected fields such as `regs`, `device`, `geo`, `ext.gdpr`, `ext.us_privacy`, and `ext.consent` which cannot be changed using the `setGlobalORTBConfig()` method.
- App and User first party data should use the [functions defined for those purposes](/prebid-mobile/pbm-api/ios/pbm-targeting-ios.html#first-party-data)
- See the [Prebid Server auction endpoint](/prebid-server/endpoints/openrtb2/pbs-endpoint-auction.html#prebid-server-ortb2-extension-summary) reference for more information about how it will process incoming fields.
+## ORTB Response Customization
+
+Prebid SDK allows customizing the parsing of the types used to represent the ORTB response. Use `CustomModelObjects.registerCustomType(_:)` to specify the custom types to use and override the `init(jsonDictionary:)` with custom parsing logic.
+
+```swift
+class MyCustomORTBBidResponse: ORTBBidResponse {
+
+ var myCustomField: String?
+
+ required init(jsonDictionary: [String : Any]) {
+ myCustomField = jsonDictionary["customString"] as? String
+ super.init(jsonDictionary: jsonDictionary)
+ }
+}
+
+CustomModelObjects.registerCustomType(MyCustomORTBBidResponse.self)
+```
+
+You can use this to access custom or unsupported fields from the prebid response, or to modify the response at your own risk.
+
## Further Reading
- [Prebid Mobile Overview](/prebid-mobile/prebid-mobile.html)