New Bid Adapter - Adswag - #6702
Conversation
✅ Deploy Preview for prebid-docs-preview ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
5282d5e to
39a6bf5
Compare
Documentation page for the Adswag bid adapter (banner, video, audio; GVL vendor 1417; EU-hosted, TCF-first). Companion to the Prebid.js adapter PR.
39a6bf5 to
f38401d
Compare
| ## Privacy / consent / identity | ||
|
|
||
| - **TCF v2.2**: the adapter forwards `gdprConsent.consentString` and | ||
| `gdprConsent.gdprApplies`. Ensure your CMP includes Adswag (vendor 1417). | ||
| - **GPP**: `gppConsent` is forwarded unparsed. | ||
| - **User IDs**: with consent (vendor 1417), the adapter forwards eids from | ||
| Prebid userId modules and publisher first-party data (`ortb2`), and | ||
| maintains an Adswag first-party id (`adswag_uuid`, eid source | ||
| `adswag.ai`) through Prebid's StorageManager — respecting `deviceAccess` | ||
| and TCF purpose-1 enforcement. Storage use is declared in the IAB GVL | ||
| device-storage disclosure for vendor 1417. | ||
| - **User syncs**: registered via `getUserSyncs` only (one iframe or image | ||
| sync per auction, on `ev.adswag.ai`), honoring your `userSync` | ||
| configuration and GDPR/GPP/USP consent. No sync is registered for | ||
| consentless traffic. | ||
| - **Consentless traffic** is served contextually: no identifiers are read, | ||
| written, or forwarded. |
There was a problem hiding this comment.
This contains a lot of redundant information. AI agents love bullet points and repeat themselves.
The two interesting facts here are
- You serve consentless traffic
- user sync is recommended for users
| ## Video params | ||
|
|
||
| Video parameters are read from `mediaTypes.video` on the ad unit; | ||
| `params.video` on the bid overrides them. `mimes` is **required** for a video | ||
| bid. The adapter reads the standard Prebid video params (`mimes`, | ||
| `minduration`, `maxduration`, `protocols`, `startdelay`, `placement`, | ||
| `plcmt`, `skip`, `skipafter`, `minbitrate`, `maxbitrate`, `delivery`, | ||
| `playbackmethod`, `api`, `linearity`, `playerSize`, `context`) and forwards | ||
| the subset the Adswag platform consumes (`mimes`, `minduration`, | ||
| `maxduration`, `protocols`, `playerSize` → `w`/`h`, `plcmt` — derived from | ||
| `context` when not set explicitly — `linearity`, `skip`, `skipafter`). | ||
|
|
||
| ## Audio params | ||
|
|
||
| Audio parameters are read from `mediaTypes.audio` (or `ortb2Imp.audio`). | ||
| `mimes` is **required** for an audio bid; the platform additionally consumes | ||
| `minduration`, `maxduration`, `minbitrate`, `maxbitrate`, `protocols` and | ||
| `feed`. |
There was a problem hiding this comment.
| ## Video params | |
| Video parameters are read from `mediaTypes.video` on the ad unit; | |
| `params.video` on the bid overrides them. `mimes` is **required** for a video | |
| bid. The adapter reads the standard Prebid video params (`mimes`, | |
| `minduration`, `maxduration`, `protocols`, `startdelay`, `placement`, | |
| `plcmt`, `skip`, `skipafter`, `minbitrate`, `maxbitrate`, `delivery`, | |
| `playbackmethod`, `api`, `linearity`, `playerSize`, `context`) and forwards | |
| the subset the Adswag platform consumes (`mimes`, `minduration`, | |
| `maxduration`, `protocols`, `playerSize` → `w`/`h`, `plcmt` — derived from | |
| `context` when not set explicitly — `linearity`, `skip`, `skipafter`). | |
| ## Audio params | |
| Audio parameters are read from `mediaTypes.audio` (or `ortb2Imp.audio`). | |
| `mimes` is **required** for an audio bid; the platform additionally consumes | |
| `minduration`, `maxduration`, `minbitrate`, `maxbitrate`, `protocols` and | |
| `feed`. |
contains no information. This OpenRTB standard spit out by AI here
| Placement identity on prebid paths is **publisher-id-only** by design: supply | ||
| the standardized GPID (`ortb2Imp.ext.gpid`) via the GPID module (or rely on the | ||
| `adUnitCode`) and Adswag discovers and curates the placement. Hand-maintained | ||
| placement ids are not required. |
There was a problem hiding this comment.
| Placement identity on prebid paths is **publisher-id-only** by design: supply | |
| the standardized GPID (`ortb2Imp.ext.gpid`) via the GPID module (or rely on the | |
| `adUnitCode`) and Adswag discovers and curates the placement. Hand-maintained | |
| placement ids are not required. |
already provided as a description in the table above.
| The Adswag bid adapter connects a Prebid.js or Prebid Server auction to the | ||
| Adswag bid endpoint. It is available **client-side** (Prebid.js) and | ||
| **server-side** (Prebid Server, Go and Java), supporting **banner, video** | ||
| (instream and outstream) and **audio** media types, including mixed-format ad | ||
| units (the adapter bids on any valid media type in the unit); server-side, | ||
| both site and app requests are supported. TCF (IAB | ||
| Europe vendor **1417**) and GPP consent strings are forwarded to the | ||
| endpoint; the platform parses consent once at the edge. Consentless traffic | ||
| is served contextually — no identifier is read, written, or forwarded | ||
| without consent. | ||
|
|
||
| Publisher-side, the adapter is **fail-open**: any error results in a clean | ||
| no-bid and never blocks the page or the auction. | ||
|
|
||
| **Outstream note:** ad units with `mediaTypes.video.context: "outstream"` get | ||
| an Adswag renderer attached automatically — nothing is downloaded unless an | ||
| Adswag outstream bid wins. It plays the VAST in the ad unit's div, starts | ||
| muted with click-to-unmute, and collapses the slot when the ad finishes, | ||
| errors, or no ad is available. Supplying your own `renderer` on the ad unit | ||
| or on `mediaTypes.video` overrides it (a `backupOnly: true` renderer keeps | ||
| ours, per Prebid convention). Instream video returns standard | ||
| `vastXml`/`vastUrl` for your video player / ad server integration. | ||
|
|
||
| **Audio note:** audio units are supported via `mediaTypes.audio` | ||
| (`FEATURES.AUDIO` build flag; `mimes` required) or, for setups whose ad | ||
| server needs a video-typed unit, via `ortb2Imp.audio`. Prebid has no | ||
| built-in audio renderer: hand the returned VAST to your audio player. | ||
|
|
||
| **Currency note:** Adswag bids in **EUR** (`currency: "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). | ||
|
|
||
| **First-party data:** publisher FPD set via `setConfig({ ortb2 })` is read | ||
| from the bid request — the `site` (page/domain/content), `device` and `regs` | ||
| objects are forwarded to the endpoint, as are `ortb2Imp.ext.gpid`, | ||
| `ortb2Imp.ext.tid` and `ortb2Imp.ext.data.pbadslot` per impression. | ||
|
|
||
| From `ortb2.user`, **only extended identifiers are forwarded** (`user.eids` / | ||
| `user.ext.eids`, merged with the `userId` modules' `userIdAsEids` and gated on | ||
| consent). Other `user` FPD — `user.data`, `user.keywords`, `user.yob`, | ||
| `user.gender` and the like — is deliberately **not** sent: Adswag does not | ||
| consume audience data attached to the user object, and forwarding it would | ||
| move publisher audience signal across a consent boundary for fields the | ||
| endpoint never reads. Contextual and inventory-level audience signal belongs | ||
| on `site` / `ortb2Imp` instead, both of which are forwarded in full. | ||
|
|
||
| No OpenRTB blocking parameters (`bcat`/`badv`/`battr`/`bapp`) are consumed. |
There was a problem hiding this comment.
Please condense this paragraph to the information that is not already present in the meta data, is OpenRTB or prebid standard.
Claude/Codex have nicely summarized the code, but for publishers there are very few relevant information: like "we are bidding in EUR" . This work noting.
🏷 Type of documentation
📋 Checklist
Bidder page for Adswag (
dev-docs/bidders/adswag.md): banner, video, audio;gvl_id: 1417;tcfeu_supported: true;pbjs: trueandpbs: true/pbs_app_supported: true(client-side plus Prebid Server Go and Java); maintainer prebid@adswag.ai; consent-gated user syncs on ev.adswag.ai. No native, no DOOH. Documented test params verified against production (2026-08-13): display/video/audio each bid €2.50 EUR.This PR is writeable by maintainers.