Skip to content

New Bid Adapter - Adswag - #6702

Open
westerschmal wants to merge 1 commit into
prebid:masterfrom
adswag:add-adswag-bidder
Open

New Bid Adapter - Adswag#6702
westerschmal wants to merge 1 commit into
prebid:masterfrom
adswag:add-adswag-bidder

Conversation

@westerschmal

@westerschmal westerschmal commented Aug 13, 2026

Copy link
Copy Markdown

🏷 Type of documentation

  • new bid adapter

📋 Checklist

Bidder page for Adswag (dev-docs/bidders/adswag.md): banner, video, audio; gvl_id: 1417; tcfeu_supported: true; pbjs: true and pbs: 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.

@netlify

netlify Bot commented Aug 13, 2026

Copy link
Copy Markdown

Deploy Preview for prebid-docs-preview ready!

Name Link
🔨 Latest commit f38401d
🔍 Latest deploy log https://app.netlify.com/projects/prebid-docs-preview/deploys/6a830c7512a97000085726e3
😎 Deploy Preview https://deploy-preview-6702--prebid-docs-preview.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

Documentation page for the Adswag bid adapter (banner, video, audio; GVL vendor 1417; EU-hosted, TCF-first). Companion to the Prebid.js adapter PR.
Comment on lines +185 to +201
## 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.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This contains a lot of redundant information. AI agents love bullet points and repeat themselves.
The two interesting facts here are

  1. You serve consentless traffic
  2. user sync is recommended for users

Comment on lines +97 to +114
## 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`.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## 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

Comment on lines +92 to +95
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.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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.

Comment on lines +34 to +80
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.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants