From 50ee17b829aaffc49223bfce5bea1cb774010e68 Mon Sep 17 00:00:00 2001 From: Priyesh Patel Date: Tue, 21 Apr 2026 18:08:44 -0400 Subject: [PATCH 1/8] =?UTF-8?q?Docs:=20New=20Bidder=20=E2=80=94=20PGAM=20D?= =?UTF-8?q?irect?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds the docs page for the new pgamdirect bidder adapter. Code PR: https://github.com/prebid/Prebid.js/pull/14763 GVL 1353. Related to existing pgamssp adapter; this doc explicitly calls out the relationship so publishers browsing the bidders list understand which adapter is which. --- dev-docs/bidders/pgamdirect.md | 138 +++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 dev-docs/bidders/pgamdirect.md diff --git a/dev-docs/bidders/pgamdirect.md b/dev-docs/bidders/pgamdirect.md new file mode 100644 index 0000000000..aa209096e5 --- /dev/null +++ b/dev-docs/bidders/pgamdirect.md @@ -0,0 +1,138 @@ +--- +layout: bidder +title: PGAM Direct +description: Server-to-server OpenRTB 2.6 adapter from PGAM Media (self-hosted). Dynamic floors, transparent margins, schain integrity. Related — pgamssp (legacy, TeqBlaze-hosted). +biddercode: pgamdirect +media_types: banner, video, native +gvl_id: 1353 +prebid_member: false +schain_supported: true +tcfeu_supported: true +gpp_sids: tcfeu, usnat, usstate_all +usp_supported: true +coppa_supported: true +pbjs: true +pbs: false +safeframes_ok: true +deals_supported: true +floors_supported: true +fpd_supported: true +userIds: all +multiformat_supported: will-bid-on-any +ortb_blocking_supported: partial +privacy_sandbox: paapi +sidebarType: 1 +--- + +### Note + +PGAM Direct is the self-hosted server-to-server OpenRTB adapter operated by PGAM Media LLC. For the legacy TeqBlaze-hosted integration, see [pgamssp](/dev-docs/bidders/pgamssp.html). We plan to migrate publishers from pgamssp to pgamdirect over 2026; both will coexist on the bidders list during that window. + +Key differences from pgamssp: + +- Canonical OpenRTB 2.5/2.6 (not a proprietary envelope) +- Dynamic rolling-quantile floor pricing on our bidder, published per `(dsp × placement × geo × device)` cell +- Transparent margin enforcement (5% hard floor, compile-time enforced, never zeroable from config) +- schain integrity — `pgamssp.com,1353` appears verified on every outbound request; complete=1 enforced +- HMAC-signed `burl` / `nurl` to defeat pixel replay +- Account onboarding via `orgId` issued by PGAM Media; reach out to your account manager for yours + +### Bid Params + +{: .table .table-bordered .table-striped } +| Name | Scope | Description | Example | Type | +|---------------|----------|--------------------------------------------------------------------------|----------------------------|-----------| +| `orgId` | required | Your publisher identifier at PGAM Media. Issued during onboarding. | `'pgam-acme-publisher'` | `string` | +| `placementId` | optional | Free-text placement identifier; mapped to `imp.tagid` on the bid request | `'leaderboard-728x90'` | `string` | +| `bidfloor` | optional | Per-placement USD bidfloor; bidder still enforces its own minimum | `1.25` | `number` | + +### Example — Banner + +```javascript +pbjs.addAdUnits([{ + code: 'ad-slot-1', + mediaTypes: { + banner: { sizes: [[300, 250], [728, 90]] } + }, + bids: [{ + bidder: 'pgamdirect', + params: { + orgId: 'pgam-acme-publisher', + placementId: 'leaderboard-728x90' + } + }] +}]); +``` + +### Example — Video (instream) + +```javascript +pbjs.addAdUnits([{ + code: 'video-adunit', + mediaTypes: { + video: { + playerSize: [[640, 480]], + mimes: ['video/mp4', 'application/javascript'], + protocols: [2, 3, 5, 6], + api: [1, 2], + minduration: 5, + maxduration: 30, + placement: 1, + plcmt: 1, + linearity: 1 + } + }, + bids: [{ + bidder: 'pgamdirect', + params: { + orgId: 'pgam-acme-publisher', + placementId: 'preroll-15s' + } + }] +}]); +``` + +### Example — Native + +```javascript +pbjs.addAdUnits([{ + code: 'native-adunit', + mediaTypes: { + native: { + image: { required: true, sizes: [150, 50] }, + title: { required: true, len: 80 }, + sponsoredBy: { required: true } + } + }, + bids: [{ + bidder: 'pgamdirect', + params: { orgId: 'pgam-acme-publisher' } + }] +}]); +``` + +### Privacy + +The adapter forwards only what Prebid.js supplies: + +- `source.ext.schain` — the publisher's supply-chain object, if set +- `user.ext.eids` — registered Prebid User-ID modules +- `regs.ext.gdpr` / `regs.ext.gdpr_consent` — TCF v2 if `consentManagement` is enabled +- `regs.ext.us_privacy` — CCPA if `consentManagementUSP` is enabled +- `regs.gpp` / `regs.gpp_sid` — GPP if configured +- `regs.coppa` — from `ortb2.regs.coppa` + +No cookies are set on the publisher's domain by this adapter. + +### Migrating from pgamssp + +Publishers already integrated via [pgamssp](/dev-docs/bidders/pgamssp.html) can run both adapters in parallel during the migration window: + +```javascript +bids: [ + { bidder: 'pgamssp', params: { placementId: 'your-placement' } }, + { bidder: 'pgamdirect', params: { orgId: 'pgam-your-slug', placementId: 'your-placement' } } +] +``` + +Prebid's auction picks the higher bid per impression, so you get the best of both while you evaluate. From 9c521de2f04eeb674994d18499299d9a7a8cd0ce Mon Sep 17 00:00:00 2001 From: Muki Seiler Date: Thu, 14 May 2026 19:58:24 +0200 Subject: [PATCH 2/8] Update dev-docs/bidders/pgamdirect.md --- dev-docs/bidders/pgamdirect.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/pgamdirect.md b/dev-docs/bidders/pgamdirect.md index aa209096e5..66d79f5911 100644 --- a/dev-docs/bidders/pgamdirect.md +++ b/dev-docs/bidders/pgamdirect.md @@ -24,7 +24,7 @@ privacy_sandbox: paapi sidebarType: 1 --- -### Note +## Note PGAM Direct is the self-hosted server-to-server OpenRTB adapter operated by PGAM Media LLC. For the legacy TeqBlaze-hosted integration, see [pgamssp](/dev-docs/bidders/pgamssp.html). We plan to migrate publishers from pgamssp to pgamdirect over 2026; both will coexist on the bidders list during that window. From c25551a25c865d904de1af84ead5ad5ef5895f8d Mon Sep 17 00:00:00 2001 From: Muki Seiler Date: Thu, 14 May 2026 19:58:30 +0200 Subject: [PATCH 3/8] Update dev-docs/bidders/pgamdirect.md --- dev-docs/bidders/pgamdirect.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/pgamdirect.md b/dev-docs/bidders/pgamdirect.md index 66d79f5911..caaf1b7c01 100644 --- a/dev-docs/bidders/pgamdirect.md +++ b/dev-docs/bidders/pgamdirect.md @@ -37,7 +37,7 @@ Key differences from pgamssp: - HMAC-signed `burl` / `nurl` to defeat pixel replay - Account onboarding via `orgId` issued by PGAM Media; reach out to your account manager for yours -### Bid Params +## Bid Params {: .table .table-bordered .table-striped } | Name | Scope | Description | Example | Type | From d6262c9d11931214f529db5939da308cb7152d98 Mon Sep 17 00:00:00 2001 From: Muki Seiler Date: Thu, 14 May 2026 19:58:37 +0200 Subject: [PATCH 4/8] Update dev-docs/bidders/pgamdirect.md --- dev-docs/bidders/pgamdirect.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/pgamdirect.md b/dev-docs/bidders/pgamdirect.md index caaf1b7c01..5c3b57fdbd 100644 --- a/dev-docs/bidders/pgamdirect.md +++ b/dev-docs/bidders/pgamdirect.md @@ -64,7 +64,7 @@ pbjs.addAdUnits([{ }]); ``` -### Example — Video (instream) +## Example — Video (instream) ```javascript pbjs.addAdUnits([{ From fd630f13304db19e34668df310479b9df23d6f83 Mon Sep 17 00:00:00 2001 From: Muki Seiler Date: Thu, 14 May 2026 19:58:44 +0200 Subject: [PATCH 5/8] Update dev-docs/bidders/pgamdirect.md --- dev-docs/bidders/pgamdirect.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/pgamdirect.md b/dev-docs/bidders/pgamdirect.md index 5c3b57fdbd..0e5893333a 100644 --- a/dev-docs/bidders/pgamdirect.md +++ b/dev-docs/bidders/pgamdirect.md @@ -46,7 +46,7 @@ Key differences from pgamssp: | `placementId` | optional | Free-text placement identifier; mapped to `imp.tagid` on the bid request | `'leaderboard-728x90'` | `string` | | `bidfloor` | optional | Per-placement USD bidfloor; bidder still enforces its own minimum | `1.25` | `number` | -### Example — Banner +## Example — Banner ```javascript pbjs.addAdUnits([{ From 899877f1a6f0a6e2731c09557c746d0776a26df3 Mon Sep 17 00:00:00 2001 From: Muki Seiler Date: Thu, 14 May 2026 19:58:50 +0200 Subject: [PATCH 6/8] Update dev-docs/bidders/pgamdirect.md --- dev-docs/bidders/pgamdirect.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/pgamdirect.md b/dev-docs/bidders/pgamdirect.md index 0e5893333a..22cef61394 100644 --- a/dev-docs/bidders/pgamdirect.md +++ b/dev-docs/bidders/pgamdirect.md @@ -92,7 +92,7 @@ pbjs.addAdUnits([{ }]); ``` -### Example — Native +## Example — Native ```javascript pbjs.addAdUnits([{ From 172cfed7ad958ff56285e7f102538eaa23392499 Mon Sep 17 00:00:00 2001 From: Muki Seiler Date: Thu, 14 May 2026 19:58:57 +0200 Subject: [PATCH 7/8] Update dev-docs/bidders/pgamdirect.md --- dev-docs/bidders/pgamdirect.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/pgamdirect.md b/dev-docs/bidders/pgamdirect.md index 22cef61394..6f6379a890 100644 --- a/dev-docs/bidders/pgamdirect.md +++ b/dev-docs/bidders/pgamdirect.md @@ -111,7 +111,7 @@ pbjs.addAdUnits([{ }]); ``` -### Privacy +## Privacy The adapter forwards only what Prebid.js supplies: From 9aed4d09ae053b8f30cb46aa851d354e7081cb48 Mon Sep 17 00:00:00 2001 From: Muki Seiler Date: Thu, 14 May 2026 19:59:07 +0200 Subject: [PATCH 8/8] Update dev-docs/bidders/pgamdirect.md --- dev-docs/bidders/pgamdirect.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/bidders/pgamdirect.md b/dev-docs/bidders/pgamdirect.md index 6f6379a890..6cae04f6f2 100644 --- a/dev-docs/bidders/pgamdirect.md +++ b/dev-docs/bidders/pgamdirect.md @@ -124,7 +124,7 @@ The adapter forwards only what Prebid.js supplies: No cookies are set on the publisher's domain by this adapter. -### Migrating from pgamssp +## Migrating from pgamssp Publishers already integrated via [pgamssp](/dev-docs/bidders/pgamssp.html) can run both adapters in parallel during the migration window: