diff --git a/dev-docs/bidders/peak226.md b/dev-docs/bidders/peak226.md index 55871bea93..1d49059245 100644 --- a/dev-docs/bidders/peak226.md +++ b/dev-docs/bidders/peak226.md @@ -1,15 +1,154 @@ --- layout: bidder title: Peak226 -description: Prebid Peak Bidder Adaptor -pbjs: true +description: Prebid Peak226 Bidder Adapter biddercode: peak226 sidebarType: 1 +pbjs: true +pbs: true +pbs_app_supported: true +prebid_member: false +media_types: banner, video, native +multiformat_supported: will-bid-on-any +gvl_id: 1202 +tcfeu_supported: true +usp_supported: true +gpp_supported: true +gpp_sids: tcfeu, tcfca, usnat, usstate_all, usp +coppa_supported: true +schain_supported: true +floors_supported: true +fpd_supported: true +deals_supported: true +dchain_supported: false +ortb_blocking_supported: true +userIds: all --- -### Bid Params +## Overview + +```text +Maintainer: support@edge226.com +``` + +## Description + +The Peak226 adapter connects Prebid.js and Prebid Server to the Peak226 SSP (Edge226 Ltd) for +**banner**, **video** and **native** demand. It speaks OpenRTB 2.6 and forwards standard +signals — first-party data, price floors, `user.eids`, supply chain (`schain`), deals +(`imp.pmp`), blocking (`bcat`, `badv`, `bapp`, `battr`) and consent (TCF EU, US Privacy, GPP, +COPPA) — from the incoming request with no extra configuration. + +Requests are routed to a per-data-center endpoint (US, EU or JP). Bids are net revenue in USD. + +## Bid Params {: .table .table-bordered .table-striped } -| Name | Scope | Description | Example | Type | -|-------|----------|---------------------|----------|-----------| -| `uid` | required | The ID from Peak226 | 76221035 | `integer` | +| Name | Scope | Description | Example | Type | +|---------------|-----------|-----------------------------------------------------------------------------------|-------------|----------| +| `publisherId` | required* | Your Peak226 publisher/account ID. | `'hb-test'` | `string` | +| `placementId` | required* | Placement ID for this ad unit / impression. Sent as `imp.tagid`. | `'hb-test'` | `string` | +| `region` | optional | Data center to send the request to: `'us'`, `'eu'` or `'jp'`. Defaults to `'us'`. | `'eu'` | `string` | + +\* In Prebid.js both IDs may instead come from standard ORTB first party data — +`ortb2.{site|app|dooh}.publisher.id` and `ortb2Imp.tagid` or `ortb2Imp.ext.gpid` — in which +case the bid params are not needed; when both are present the bid params win, so they act as +per-ad-unit overrides. `ortb2Imp.ext.gpid` is forwarded either way and counts as a valid +placement ID. A bid is rejected only if neither the params nor ortb2/ortb2Imp supply a publisher +ID or a placement ID. On Prebid Server both params are required. + +An unknown `region` value falls back to `'us'` in Prebid.js, while Prebid Server rejects it. + +## Prebid.js + +### Ad unit examples + +```javascript +var adUnits = [ + { + code: 'banner-div', + mediaTypes: { + banner: { sizes: [[300, 250], [728, 90]] } + }, + bids: [{ + bidder: 'peak226', + params: { publisherId: 'hb-test', placementId: 'hb-test' } + }] + }, + { + code: 'video-div', + mediaTypes: { + video: { + context: 'instream', + playerSize: [[640, 480]], + mimes: ['video/mp4'], + protocols: [2, 3, 5, 6], + api: [2], + plcmt: 1 + } + }, + bids: [{ + bidder: 'peak226', + params: { publisherId: 'hb-test', placementId: 'hb-test' } + }] + }, + { + code: 'native-div', + mediaTypes: { + native: { + ortb: { + assets: [ + { id: 1, required: 1, title: { len: 80 } }, + { id: 2, required: 1, img: { type: 3, w: 300, h: 250 } } + ] + } + } + }, + bids: [{ + bidder: 'peak226', + params: { publisherId: 'hb-test', placementId: 'hb-test', region: 'eu' } + }] + } +]; +``` + +### Prebid.js notes + +- **Video** bids are returned as VAST XML. Instream requires a Prebid Cache configuration + (`pbjs.setConfig({ cache: { url: '...' } })`). Outstream requires a publisher-supplied renderer + on the ad unit (`mediaTypes.video.renderer` or `renderer`); Peak226 does not host a renderer. +- **Requests are split per region and publisher.** Bids that differ in `region` or + `publisherId` are sent as separate requests. +- **`${AUCTION_PRICE}`** in creative markup, `nurl` and `burl` is expanded by the adapter with + the bid price. +- **Native** bids may carry their markup in a non-standard `adm_native` field instead of `adm`. + When `adm` is empty the adapter uses `adm_native` as the markup, and `${AUCTION_PRICE}` is + expanded everywhere inside it, including nested tracker URLs. +- **No user sync.** The adapter does not implement `getUserSyncs`; see the note below. + +## Prebid Server notes + +- **Requests are split per region and publisher.** Impressions that differ in `region` or + `publisherId` are sent as separate requests. +- **`${AUCTION_PRICE}` is expanded by the adapter.** Peak226 returns the OpenRTB + `${AUCTION_PRICE}` macro in `adm` (and `nurl`, `burl`) as its counting mechanism and relies on + the demand-side adapter to substitute the clearing price. The adapter resolves it before the + bid is returned, so no host configuration is needed. +- **Non-bidder impression signals are preserved.** Only the `bidder` key is removed from + `imp.ext`; signals such as `gpid`, `data` and `tid` are forwarded untouched. +- **Zero-value `device.ifa` is cleared.** When the OS reports the all-zero sentinel IFA + (`00000000-0000-0000-0000-000000000000`, e.g. after an iOS ATT opt-out) the adapter clears it + rather than forwarding it as though it were a real device ID. +- **Native `adm_native` is supported.** When a native bid has an empty `adm` and the markup is in + the non-standard `adm_native` field, the adapter uses it as `adm` (with `${AUCTION_PRICE}` + expanded). +- **GPP is passed through, not decoded.** The adapter does not declare `gpp-supported`, so Prebid + Server forwards `regs.gpp` / `regs.gpp_sid` as received without decoding or enforcing them. +- Bid floors in a currency other than USD are converted before the request is sent. + +## Privacy + +- **No cookie sync.** Neither adapter declares a user-sync endpoint. GVL 1202 is registered + as "Edge226 Ltd" but declares `usesCookies: false` and does not include Purpose 1 ("store + and/or access information on a device"), so a TCF-compliant CMP has no basis to authorize a + cookie drop. Bidding is unaffected — Purpose 2 (basic ads) is declared.