layout | title | description | top_nav_section | nav_section | pid | sidebarType |
---|---|---|---|---|---|---|
page_v2 |
Publisher API Reference |
Publisher API Reference for Prebid.js Header Bidding |
dev_docs |
reference |
10 |
1 |
This page has documentation for the public API methods of Prebid.js.
{: .alert.alert-danger :} Note: Versions of Prebid.js prior to 1.0 are no longer supported.
-
- .getAdserverTargeting()
- .getAdserverTargetingForAdUnitCode([adUnitCode])
- .getBidResponses()
- .getBidResponsesForAdUnitCode(adUnitCode)
- .getHighestCpmBids([adUnitCode])
- .getAllWinningBids()
- .getAllPrebidWinningBids()
- .getNoBids()
- .setTargetingForGPTAsync([codeArr])
- .setTargetingForAst()
- .renderAd(doc, id)
- .removeAdUnit(adUnitCode)
- .requestBids(requestObj)
- .addAdUnits(Array|Object)
- .bidderSettings
- .onEvent(event, handler, id)
- .offEvent(event, handler, id)
- .enableAnalytics(config)
- .aliasBidder(adapterName, aliasedName)
- .setConfig(options)
- debugging
- bidderTimeout
- maxRequestsPerOrigin
- disableAjaxTimeout
- timeoutBuffer
- bidderOrder
- enableSendAllBids
- useBidCache
- publisherDomain
- priceGranularity
- mediaTypePriceGranularity
- s2sConfig (server-to-server config)
- userSync
- sizeConfig and labels (responsive ads)
- Generic Configuration
- Troubleshooting your config
- .getConfig([string])
- .adServers.dfp.buildVideoUrl(options)
- .markWinningBidAsUsed(markBidRequest)
Returns all ad server targeting for all ad units. Note that some bidder's response may not have been received if you call this function too quickly after the requests are sent.
The targeting keys can be configured in ad server targeting.
When deals are enabled, the object returned by this method may include a field hb_deal_BIDDERCODE
, where BIDDERCODE
is replaced by the name of the bidder, e.g., AppNexus, Rubicon, etc.
Kind: static method of pbjs
Returns: object
- Map of adUnitCodes and targeting values []
Returned Object Example:
{% highlight js %} { "/9968336/header-bid-tag-0": { "hb_bidder": "rubicon", "hb_adid": "13f44b0d3c", "hb_pb": "1.50" }, "/9968336/header-bid-tag-1": { "hb_bidder": "openx", "hb_adid": "147ac541a", "hb_pb": "1.00" }, "/9968336/header-bid-tag-2": { "hb_bidder": "appnexus", "hb_adid": "147ac541a", "hb_pb": "2.50", "hb_deal_appnexus": "ABC_123" } } {% endhighlight %}
This function returns the query string targeting parameters available at this moment for a given ad unit. For full documentation see function pbjs.getAdserverTargeting().
Kind: static method of pbjs
Returns: object
- returnObj return bids
Request Params:
{: .table .table-bordered .table-striped }
Param | Type | Description |
---|---|---|
[adunitCode] | string |
adUnitCode to get the bid responses for |
Returned Object Example:
{% highlight js %} { "hb_bidder": "rubicon", "hb_adid": "13f44b0d3c", "hb_pb": "0.50" } {% endhighlight %}
This function returns the bid responses at the given moment.
Kind: static method of pbjs.
Returns: object
- map | object that contains the bidResponses.
Returned Object Params:
{: .table .table-bordered .table-striped }
| Param | Type | Description | |
|---------------------+---------+---------------------------------------------------------------------------------------------------------------------------------+-----------------------------------------------------------|
| bidder
| String | The bidder code. Used by ad server's line items to identify bidders | rubicon
|
| adId
| String | The unique identifier of a bid creative. It's used by the line item's creative as in this example. | 123
|
| width
| Integer | The width of the returned creative size. | 300 |
| height
| Integer | The height of the returned creative size. | 250 |
| size
| String | The width x height of the returned creative size. | "300x250" |
| cpm
| Float | The exact bid price from the bidder | 1.59 |
| pbLg
,pbMg
,pbHg
,pbAg
,pbDg
,pbCg
| String | CPM quantized to a granularity: Low (pbLg), Medium (pbMg), High (pbHg), Auto (pbAg), Dense (pbDg), and Custom (pbCg). | "5.00" |
| currency
| String | Currency of the bid CPM | "USD"
|
| netRevenue
| Boolean | True if bid is Net, False if Gross | true
|
| requestTimestamp
| Integer | The time stamp when the bid request is sent out in milliseconds | 1444844944106 |
| responseTimestamp
| Integer | The time stamp when the bid response is received in milliseconds | 1444844944185 |
| timeToRespond
| Integer | The amount of time for the bidder to respond with the bid | 79 |
| adUnitCode
| String | adUnitCode to get the bid responses for | "/9968336/header-bid-tag-0" |
| creativeId
| Integer | Bidder-specific creative ID | 12345678 |
| mediaType
| String | One of: banner, native, video | banner
|
| dealId
| String | (Optional) If the bid is associated with a Deal, this field contains the deal ID. | "ABC_123" |
| adserverTargeting
| Object | Contains all the adserver targeting parameters | { "hb_bidder": "appnexus", "hb_adid": "7a53a9d3" }
|
| native
| Object | Contains native key value pairs. | { "title": "", "body": "" }
|
| status
| String | Status of the bid. Possible values: targetingSet, rendered | "targetingSet"
|
| statusMessage
| String | The bid's status message | "Bid returned empty or error response" or "Bid available" |
| ttl
| Integer | How long (in seconds) this bid is considered valid. See this FAQ entry for more info. | 300
|
> Response Object Example
</h4>
</div>
<div id="collapseThree" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingThree">
<div class="panel-body" markdown="1">
</h4>
</div>
<div id="collapseThree" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingThree">
<div class="panel-body" markdown="1">
{% highlight bash %} { "/9968336/header-bid-tag-0": { "bids": [ { "bidderCode": "appnexus", "width": 300, "height": 250, "statusMessage": "Bid available", "adId": "7a53a9d3", "creative_id": 29681110, "cpm": 0.5, "adUrl": "http://nym1.ib.adnxs.com/ab?e=wqT_3QLzBKBqAgAAAgDWAAUIkav6sAUQucfc0v-nzQcYj…r=http%3A%2F%2Flocal%3A4000%2Fexamples%2Fpbjs_partial_refresh_example.html", "requestTimestamp": 1444844944095, "responseTimestamp": 1444844944180, "timeToRespond": 85, "adUnitCode": "/19968336/header-bid-tag-0", "bidder": "appnexus", "usesGenericKeys": true, "size": "300x250", "adserverTargeting": { "hb_bidder": "appnexus", "hb_adid": "7a53a9d3", "hb_pb": "0.50" } },{ "bidderCode": "pubmatic", "width": "300", "height": "250", "statusMessage": "Bid available", "adId": "1139e34e14", "adSlot": "39620189@300x250", "cpm": 1, "ad": "<span class="PubAPIAd"><script src='http://ad.turn.com/server/ads.js?pub=5757398&cch=36757096&code=37127675&l=3…tcGlkPUVERkNGMDY5LTA2ODctNDAxQy04NkMwLTIzQjNFNzI1MzdGNiZwYXNzYmFjaz0w_url='></script> ", "adUrl": "http://aktrack.pubmatic.com/AdServer/AdDisplayTrackerServlet?operId=1&pubId…local%3A4000%2Fexamples%2Fpbjs_partial_refresh_example.html&lpu=hotels.com", "dealId": "", "requestTimestamp": 1444844944105, "responseTimestamp": 1444844944354, "timeToRespond": 249, "adUnitCode": "/19968336/header-bid-tag-0", "bidder": "pubmatic", "usesGenericKeys": true, "size": "300x250", "adserverTargeting": { "hb_bidder": "pubmatic", "hb_adid": "1139e34e14", "hb_pb": "1.00" } }, { "bidderCode": "rubicon", "width": "300", "height": "250", "statusMessage": "Bid available", "adId": "130d3b0d9b", "cpm": 0.795995, "ad": "<scri...pt>", "ad_id": "3161645", "sizeId": "15", "requestTimestamp": 1444844944116, "responseTimestamp": 1444844944396, "timeToRespond": 280, "adUnitCode": "/19968336/header-bid-tag-0", "bidder": "rubicon", "usesGenericKeys": true, "size": "300x250", "adserverTargeting": { "hb_bidder": "rubicon", "hb_adid": "130d3b0d9b", "hb_pb": "0.50" } } ] }, "/9968336/header-bid-tag1": { "bids": [ { "bidderCode": "casale", "width": 0, "height": 0, "statusMessage": "Bid returned empty or error response", "adId": "108c0ba49d", "requestTimestamp": 1444844944130, "responseTimestamp": 1444844944223, "timeToRespond": 93, "cpm": 0, "adUnitCode": "/19968336/header-bid-tag1", "bidder": "casale" }, { "bidderCode": "openx", "width": "728", "height": "90", "statusMessage": "Bid available", "adId": "14d7f9208f", "ad_id": "537161420", "cpm": 1.717, "ad": "<iframe src=...tame>", "requestTimestamp": 1444844944130, "responseTimestamp": 1444844944490, "timeToRespond": 360, "adUnitCode": "/19968336/header-bid-tag1", "bidder": "openx", "usesGenericKeys": true, "size": "728x90", "adserverTargeting": { "hb_bidder": "openx", "hb_adid": "14d7f9208f", "hb_pb": "1.50" } } ] } } {% endhighlight %}
> Response Object Example - Native
</h4>
</div>
<div id="response-example-2" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading-response-example-2">
<div class="panel-body" markdown="1">
</h4>
</div>
<div id="response-example-2" class="panel-collapse collapse" role="tabpanel" aria-labelledby="heading-response-example-2">
<div class="panel-body" markdown="1">
{% highlight bash %} { "div-banner-outstream-native" : { "bids" : [ { "pbMg" : "10.00", "pbLg" : "5.00", "width" : 0, "requestTimestamp" : 1516315716062, "creativeId" : 81589325, "pbCg" : "", "adUnitCode" : "div-banner-outstream-native", "size" : "0x0", "bidder" : "appnexus", "pbAg" : "10.00", "adId" : "473965c9df19d2", "adserverTargeting" : { "hb_native_icon" : "http://vcdn.adnxs.com/p/creative-image/d4/06/e2/33/d406e233-a5f9-44a6-a3e0-8a714bf0e980.png", "hb_native_title" : "This is a Prebid Native Multi-Format Creative", "hb_native_brand" : "Prebid.org", "hb_adid" : "473965c9df19d2", "hb_pb" : "10.00", "hb_source" : "client", "hb_bidder" : "appnexus", "hb_native_image" : "http://vcdn.adnxs.com/p/creative-image/9e/26/5f/b2/9e265fb2-50c8-43f0-88ef-a5a48a9d0dcf.jpg", "hb_size" : "0x0", "hb_mediatype" : "native", "hb_native_body" : "This is a Prebid Native Creative. There are many like it, but this one is mine.", "hb_native_linkurl" : "http://prebid.org/dev-docs/show-native-ads.html" }, "native" : { "icon" : { "url" : "http://vcdn.adnxs.com/p/creative-image/d4/06/e2/33/d406e233-a5f9-44a6-a3e0-8a714bf0e980.png", "height" : 75, "width" : 75 }, "body" : "This is a Prebid Native Creative. There are many like it, but this one is mine.", "image" : { "url" : "http://vcdn.adnxs.com/p/creative-image/9e/26/5f/b2/9e265fb2-50c8-43f0-88ef-a5a48a9d0dcf.jpg", "height" : 2250, "width" : 3000 }, "clickUrl" : "http://prebid.org/dev-docs/show-native-ads.html", "clickTrackers" : [ "..." ], "title" : "This is a Prebid Native Multi-Format Creative", "impressionTrackers" : [ "..." ], "sponsoredBy" : "Prebid.org" }, "timeToRespond" : 143, "mediaType" : "native", "bidderCode" : "appnexus", "source" : "client", "auctionId" : "1338a6fb-e514-48fc-8db6-872ddf3babdb", "responseTimestamp" : 1516315716205, "netRevenue" : true, "pbDg" : "10.00", "pbHg" : "10.00", "ttl" : 300, "status" : "targetingSet", "height" : 0, "statusMessage" : "Bid available", "cpm" : 10, "currency" : "USD" } ] } } {% endhighlight %}
Returns bidResponses for the specified adUnitCode. See full documentation at pbjs.getBidResponses().
Kind: static method of pbjs
Returns: Object
- bidResponse object
{: .table .table-bordered .table-striped }
Param | Scope | Type | Description |
---|---|---|---|
adUnitCode | Required | String |
adUnitCode |
Use this method to retrieve an array of winning bids.
pbjs.getHighestCpmBids()
: with no argument, returns an array of winning bid objects for each ad unit on pagepbjs.getHighestCpmBids(adUnitCode)
: when passed an ad unit code, returns an array with the winning bid object for that ad unit
Use this method to get all of the bids that have won their respective auctions and also rendered on the page. Useful for troubleshooting your integration.
pbjs.getAllWinningBids()
: returns an array of bid objects that have won their respective auctions and also rendered on the page.
Use this method to get all of the bids that have won their respective auctions but not rendered on the page. Useful for troubleshooting your integration.
pbjs.getAllPrebidWinningBids()
: returns an array of bid objects that have won their respective auctions but not rendered on the page.
Use this method to get all of the bid requests that resulted in a NO_BID. These are bid requests that were sent to a bidder but, for whatever reason, the bidder decided not to bid on. Used by debugging snippet in Tips for Troubleshooting.
pbjs.getNoBids()
: returns an array of bid request objects that were deliberately not bid on by a bidder.
Set query string targeting on all GPT ad units. The logic for deciding query strings is described in the section Configure AdServer Targeting. Note that this function has to be called after all ad units on page are defined.
Kind: static method of pbjs
{: .table .table-bordered .table-striped }
Param | Scope | Type | Description |
---|---|---|---|
[codeArr] | Optional | array |
an array of adUnitCodes to set targeting for. |
Set query string targeting on all AST (AppNexus Seller Tag) ad units. Note that this function has to be called after all ad units on page are defined. For working example code, see Using Prebid.js with AppNexus Publisher Ad Server.
Kind: static method of pbjs
This function will render the ad (based on params) in the given iframe document passed through. Note that doc SHOULD NOT be the parent document page as we can't doc.write() asynchronously. This function is usually used in the ad server's creative.
Kind: static method of pbjs
{: .table .table-bordered .table-striped }
Param | Scope | Type | Description |
---|---|---|---|
doc | Required | object |
document |
id | Required | string |
bid id to locate the ad |
Remove adUnit from the pbjs configuration
Kind: static method of pbjs
{: .table .table-bordered .table-striped }
Param | Scope | Type | Description |
---|---|---|---|
adUnitCode | Required | String |
the adUnitCode to remove |
Request bids. When adUnits
or adUnitCodes
are not specified, request bids for all ad units added.
Kind: static method of pbjs
{: .table .table-bordered .table-striped }
Param | Scope | Type | Description |
---|---|---|---|
requestObj | Optional | Object |
|
requestObj.adUnitCodes | Optional | Array of strings |
adUnit codes to request. Use this or requestObj.adUnits . Default to all adUnitCodes if empty. |
requestObj.adUnits | Optional | Array of objects |
AdUnitObjects to request. Use this or requestObj.adUnitCodes . Default to all adUnits if empty. |
requestObj.timeout | Optional | Integer |
Timeout for requesting the bids specified in milliseconds |
requestObj.bidsBackHandler | Optional | function |
Callback to execute when all the bid responses are back or the timeout hits. Callback will be passed two parameters, the bids themselves and timedOut , which will be true if any bidders timed out. |
requestObj.labels | Optional | Array of strings |
Defines labels that may be matched on ad unit targeting conditions. |
Takes one ad unit object or an array of ad unit objects and adds them to the Prebid auction. For usage examples, see Examples below and the Getting Started page.
See the table below for the list of properties on the ad unit. For example ad units, see the Examples below.
{: .table .table-bordered .table-striped }
| Name | Scope | Type | Description |
|--------------+----------+---------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| code
| Required | String | Unique identifier that you create and assign to this ad unit. Used to set query string targeting on the ad. If using GPT, we recommend setting this to slot element ID. |
| sizes
| Required | Array[Number] or Array[Array[Number]] | All the sizes that this ad unit can accept. Examples: [400, 600]
, [[300, 250], [300, 600]]
. For 1.0 and later, prefer mediaTypes.banner.sizes
. |
| bids
| Required | Array[Object] | Each bid represents a request to a bidder. For a list of properties, see Bids below. |
| mediaTypes
| Optional | Object | Defines one or multiple media types the ad unit supports. For a list of properties, see Media Types below. |
| labelAny
| optional | array | An array of string labels, used for showing responsive ads. With the labelAny
operator, just one label has to match for the condition to be true. Works with the sizeConfig
object passed in to pbjs.setConfig. |
| labelAll
| optional | array | An array of string labels, used for showing responsive and conditional ads. With the labelAll
conditional, every element of the target array must match an element of the label array in order for the condition to be true. Works with the sizeConfig
object passed in to pbjs.setConfig. |
See the table below for the list of properties in the bids
array of the ad unit. For example ad units, see the Examples below.
{: .table .table-bordered .table-striped }
| Name | Scope | Type | Description |
|----------+----------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| bidder
| Required | String | Bidder code. Find the complete reference for all supported bidders here. |
| params
| Required | Object | Bidder's preferred way of identifying a bid request. Find the complete reference for all supported bidders here. |
| labelAny
| optional | array | An array of string labels, used for showing responsive ads. With the labelAny
operator, just one label has to match for the condition to be true. Works with the sizeConfig
object passed in to pbjs.setConfig. |
| labelAll
| optional | array | An array of string labels, used for showing responsive and conditional ads. With the labelAll
conditional, every element of the target array must match an element of the label array in order for the condition to be true. Works with the sizeConfig
object passed in to pbjs.setConfig. |
See the table below for the list of properties in the mediaTypes
object of the ad unit. For example ad units showing the different media types, see the Examples below.
{: .table .table-bordered .table-striped }
| Name | Scope | Type | Description |
|----------+--------------------------------------------------------------+--------+--------------------------------------------------------------------------------------------------------------------|
| banner
| optional. If no other properties are specified, this is the default | Object | Defines properties of a banner ad. For examples, see the banner example below. |
| native
| optional | Object | Defines properties of a native ad. For an example native ad unit, see the native example below. |
| video
| optional | Object | Defines properties of a video ad. For examples, see the video examples below. |
For an example of a native ad unit, see below. For more detailed instructions, see Show Native Ads.
pbjs.addAdUnits({
code: slot.code,
mediaTypes: {
native: {
image: {
required: true,
sizes: [150, 50]
},
title: {
required: true,
len: 80
},
sponsoredBy: {
required: true
},
clickUrl: {
required: true
},
body: {
required: true
},
icon: {
required: true,
sizes: [50, 50]
}
}
},
bids: [
{
bidder: 'appnexus',
params: {
placementId: 13232354
}
}
]
});
{% include dev-docs/native-image-asset-sizes.md %}
For an example of an instream video ad unit, see below. For more detailed instructions, see Show Video Ads.
pbjs.addAdUnits({
code: slot.code,
mediaTypes: {
video: {
context: 'instream',
playerSize: [640, 480]
},
},
bids: [{
bidder: 'appnexus',
params: {
placementId: 13232361,
video: {
skippable: true,
playback_methods: ['auto_play_sound_off']
}
}
}]
});
For an example of an outstream video ad unit, see below. For more detailed instructions, see Show Outstream Video Ads.
pbjs.addAdUnit({
code: slot.code,
mediaTypes: {
video: {
context: 'outstream',
playerSize: [640, 480]
}
},
renderer: {
url: 'http://cdn.adnxs.com/renderer/video/ANOutstreamVideo.js',
render: function(bid) {
ANOutstreamVideo.renderAd({
targetId: bid.adUnitCode,
adResponse: bid.adResponse,
});
}
},
...
})
For an example of a banner ad unit, see below. For more detailed instructions, see Getting Started.
pbjs.addAdUnits({
code: slot.code,
mediaTypes: {
banner: {
sizes: [[300, 250]]
}
},
bids: [
{
bidder: 'appnexus',
params: {
placementId: 13144370
}
}
]
})
Multiple media formats may be declared on a single ad unit, allowing any bidder that supports at least one of those media formats to participate in the auction. Any bidder that isn't compatible with the specified mediaTypes
will be dropped from the ad unit. If mediaTypes
is not specified on an ad unit, banner
is the assumed format and any banner bidder is eligible for inclusion.
For examples of a multi-format ad units and behavior, see below.
// each bidder supports at least one of the formats, so all will participate
pbjs.addAdUnits({
code: 'div-banner-outstream-native',
mediaTypes: {
banner: { sizes: [[300, 250], [300, 600]] },
native: {
title: {required: true},
image: {required: true},
body: {required: false},
},
video: {
context: 'outstream',
playerSize: [400, 600],
},
},
bids: [
{
bidder: 'bannerBidder',
params: {placementId: '481'}
},
{
bidder: 'nativeBidder',
params: {titleAsset: '516'}
},
{
bidder: 'videoBidder',
params: {vidId: '234'}
},
]
});
// only nativeBidder and videoBidder will participate
pbjs.addAdUnits({
code: 'div-native-outstream',
mediaTypes: {
native: { type: 'image' },
video: { context: 'outstream', playerSize: [400, 600] },
},
bids: [
{
bidder: 'bannerBidder',
params: {placementId: '481'}
},
{
bidder: 'nativeBidder',
params: {titleAsset: '516'}
},
{
bidder: 'videoBidder',
params: {vidId: '234'}
},
]
});
The bidderSettings object provides a way to define some behaviors for the platform and specific adapters. The basic structure is a 'standard' section with defaults for all adapters, and then one or more adapter-specific sections that override behavior for that bidder:
{% highlight js %}
pbjs.bidderSettings = { standard: { [...] }, ix: { [...] }, rubicon: { [...] }, }
{% endhighlight %}
Defining bidderSettings is optional; the platform has default values for all of the options. Adapters may specify their own default settings, though this isn't common. Some sample scenarios where publishers may wish to alter the default settings:
- using bidder-specific ad server targeting instead of Prebid-standard targeting
- passing additional information to the ad server
- adjusting the bid CPM sent to the ad server
{: .table .table-bordered .table-striped }
Attribute | Scope | Version | Default | Description |
---|---|---|---|---|
adserverTargeting | standard or adapter-specific | all | see below | Define which key/value pairs are sent to the ad server. |
bidCpmAdjustment | standard or adapter-specific | all | n/a | Could, for example, adjust a bidder's gross-price bid to net price. |
sendStandardTargeting | adapter-specific | 0.13.0 | true | If adapter-specific targeting is specified, can be used to suppress the standard targeting for that adapter. |
suppressEmptyKeys | standard or adapter-specific | 0.13.0 | false | If custom adserverTargeting functions are specified that may generate empty keys, this can be used to suppress them. |
As described in the AdOps documentation, Prebid has a recommended standard set of ad server targeting that works across bidders. This standard targeting approach is defined in the adserverTargeting attribute in the 'standard' section, but can be overridden per adapter as needed. Both scenarios are described below.
{: .alert.alert-warning :}
Note that once standard.adserverTargeting
is specified,
you'll need to fully manage the targeting -- the default hb_
targeting variables will not be added.
Keyword targeting for all bidders
The below code snippet is the default setting for ad server targeting. For each bidder's bid,
Prebid.js will set 6 keys (hb_bidder
, hb_adid
, hb_pb
, hb_size
, hb_source
, hb_format
) with their corresponding values.
In addition, video will receive two additional keys: hb_cache_id
and hb_uuid
.
The key value pair targeting is applied to the bid's corresponding ad unit. Your ad ops team will have the ad server's line items and creatives to utilize these keys.
If you'd like to customize the key value pairs, you can overwrite the settings as the below example shows. Note that once you updated the settings, let your ad ops team know about the change, so they can update the line item targeting accordingly. See the Ad Ops documentation for more information.
There's no need to include the following code if you choose to use the below default setting.
{% highlight js %}
pbjs.bidderSettings = { standard: { adserverTargeting: [{ key: "hb_bidder", val: function(bidResponse) { return bidResponse.bidderCode; } }, { key: "hb_adid", val: function(bidResponse) { return bidResponse.adId; } }, { key: "hb_pb", val: function(bidResponse) { return bidResponse.pbMg; } }, { key: 'hb_size', val: function (bidResponse) { return bidResponse.size; } }, { key: 'hb_source', val: function (bidResponse) { return bidResponse.source; } }, { key: 'hb_format', val: function (bidResponse) { return bidResponse.mediaType; } }, { key: 'hb_cache_id', val: function (bidResponse) { return bidResponse.videoCacheKey; } }, { key: 'hb_uuid', val: function (bidResponse) { return bidResponse.videoCacheKey; } }] } }
{% endhighlight %}
Keyword targeting for a specific bidder
Let’s say the bidder prefers a separate set of line items. You can overwrite the bidder settings as the below example for AppNexus shows.
Note that the line item setup has to match the targeting change
{% highlight js %} pbjs.bidderSettings = { appnexus: { sendStandardTargeting: false, adserverTargeting: [ { key: "apn_pbMg", val: function(bidResponse) { return bidResponse.pbMg; } }, { key: "apn_adId", val: function(bidResponse) { return bidResponse.adId; } } ] } } {% endhighlight %}
In other words, the above config sends 2 pairs of key/value strings targeting for every AppNexus bid and for every ad unit. The 1st pair would be apn_pbMg
=> the value of bidResponse.pbMg
. The 2nd pair would be apn_adId
=> the value of bidResponse.adId
. You can find the documentation of bidResponse object here.
Note that sendStandardTargeting is set to false so that the standard Prebid targeting (hb_bidder, etc.) aren't also sent to the ad server.
Price Buckets
Now let's say you would like to define you own price bucket function rather than use the ones available by default in prebid.js. You can overwrite the bidder settings as the below example shows:
Note: this will only impact the price bucket sent to the ad server for targeting. It won't actually impact the cpm value used for ordering the bids.
{% highlight js %}
pbjs.bidderSettings = { standard: { [...] { key: "hb_pb", val: function(bidResponse) { // define your own function to assign price bucket if (cpm < 2) return "pb1"; // all bids less than $2 are assigned to price bucket 'pb1' if (cpm < 3) return "pb2"; // all bids less than $3 are assigned to price bucket 'pb2' if (cpm < 4) return "pb3"; // all bids less than $4 are assigned to price bucket 'pb3' if (cpm < 5) return "pb4"; // all bids less than $5 are assigned to price bucket 'pb4' if (cpm < 6) return "pb5"; // all bids less than $6 are assigned to price bucket 'pb5' return "pb6"; // all bids $6 and above are assigned to price bucket 'pb6' } } [...] } }
{% endhighlight %}
Some bidders return gross prices instead of the net prices (what the publisher will actually get paid). For example, a publisher's net price might be 15% below the returned gross price. In this case, the publisher may want to adjust the bidder's returned price to run a true header bidding auction. Otherwise, this bidder's gross price will unfairly win over your other demand sources who report the real price.
{% highlight js %}
pbjs.bidderSettings = { standard: { ... } aol: { bidCpmAdjustment : function(bidCpm, bid){ // adjust the bid in real time before the auction takes place console.log('Bidder is: ' + bid.bidderCode); return bidCpm * .85; } } };
{% endhighlight %}
In the above example, the AOL bidder will inherit from "standard" adserverTargeting keys, so that you don't have to define the targeting keywords again.
This boolean flag minimizes key/value pairs sent to the ad server when adapter-specific targeting is specified. By default, the platform will send both adapter-specific adServerTargeting as well as the standard adServerTargeting.
While sending extra targeting the ad server may not matter, this flag can be used to suppress the standard targeting for adapters that define their own.
See the example above for example usage.
If a custom adServerTargeting function can return an empty value, this boolean flag can be used to avoid sending those empty values to the ad server.
The methods onEvent
and offEvent
are provided for you to register
a callback to handle a Prebid.js event.
The optional id
parameter provides more finely-grained event
callback registration. This makes it possible to register callback
events for a specific item in the event context.
For example, bidWon
events will accept an id
for ad unit code.
bidWon
callbacks registered with an ad unit code id will be called
when a bid for that ad unit code wins the auction. Without an id
this method registers the callback for every bidWon
event.
{: .alert.alert-info :}
Currently, bidWon
is the only event that accepts the id
parameter.
Additional data may also be passed to the handler that you have defined
{: .alert.alert-info :}
Currently, bidRequest
, bidResponse
, and bidWon
, are the only events that pass additional data to the handler
The available events are:
{: .table .table-bordered .table-striped } | Event | Description | |---------------+-----------------------------------------| | auctionInit | The auction has started | | auctionEnd | The auction has ended | | bidAdjustment | A bid was adjusted | | bidTimeout | A bid timed out | | bidRequested | A bid was requested | | bidResponse | A bid response has arrived | | bidWon | A bid has won | | setTargeting | Targeting has been set | | requestBids | Bids have been requested from adapters | | addAdUnits | Ad units have been added to the auction | | adRenderFailed| Ad rendering failed (added in v1.7) | | bidderDone | A bidder has signaled they are done responding (added in v1.8)|
The examples below show how these methods can be used:
{% highlight js %}
/* Log when ad units are added to Prebid */
pbjs.onEvent('addAdUnits', function() {
console.log('Ad units were added to Prebid.')
console.log(pbjs.adUnits);
});
/* Log when Prebid wins the ad server auction */
pbjs.onEvent('bidWon', function(data) {
console.log(data.bidderCode+ ' won the ad server auction for ad unit ' +data.adUnitCode+ ' at ' +data.cpm+ ' CPM');
});
{% endhighlight %}
{% highlight js %}
/* Define your event handler callbacks */
var allSlotsBidWon = function allSlotsBidWon() {
console.log('allSlotsBidWon called');
};
/* In this event handler callback we use the `pbjs.offEvent`
method to remove the handler once it has been called */
var rightSlotBidWon = function rightSlotBidWon() {
console.log('rightSlotBidWon: ', arguments);
pbjs.offEvent('bidWon', rightSlotBidWon, rightSlotCode);
};
googletag.cmd.push(function () {
/* Ad slots need to be defined before trying to register
callbacks on their events */
var rightSlot =
googletag.defineSlot(rightSlotCode, rightSlotSizes, rightSlotElementId).addService(googletag.pubads());
var topSlot =
googletag.defineSlot(topSlotCode, topSlotSizes, topSlotElementId).setTargeting().addService(googletag.pubads());
pbjs.que.push(function () {
/* Register a callback for every `bidWon` event */
pbjs.onEvent('bidWon', allSlotsBidWon);
/* Register a callback for just the rightSlot `bidWon`
event */
pbjs.onEvent('bidWon', rightSlotBidWon, rightSlotCode);
pbjs.setTargetingForGPTAsync();
...
{% endhighlight %}
Enable sending analytics data to the analytics provider of your choice.
For usage, see Integrate with the Prebid Analytics API.
For a list of analytics adapters, see Analytics for Prebid.
To define an alias for a bidder adapter, call this method at runtime:
{% highlight js %}
pbjs.aliasBidder('appnexus', 'newAlias');
{% endhighlight %}
Defining an alias can help avoid user confusion since it's possible to send parameters to the same adapter but in different contexts (e.g, The publisher uses "appnexus"
for demand and also uses "newAlias"
which is an SSP partner that uses the "appnexus"
adapter to serve their own unique demand).
It's not technically necessary to define an alias, since each copy of an adapter with the same name gets a different ID in the internal bidder registry so Prebid.js can still tell them apart.
If you define an alias and are using pbjs.sendAllBids
, you must also set up additional line items in the ad server with keyword targeting that matches the name of the alias. For example:
hb_pb_newalias
hb_adid_newalias
hb_size_newalias
hb_deal_newalias
setConfig
supports a number of advanced configuration options:
See below for usage examples.
Core config:
- Debugging
- Bidder Timeouts
- Max Requests Per Origin
- Disable Ajax Timeout
- Set Timeout Buffer
- Turn on send all bids mode
- Bid cache
- Set the order in which bidders are called
- Set the publisher's domain
- Set a delay before requesting cookie sync
- Set price granularity
- Configure server-to-server header bidding
- Configure user syncing
- Configure responsive ad units with
sizeConfig
andlabels
- Generic Configuration
- Troubleshooting your configuration
Module config: these options to setConfig()
are available if the relevant module is included in the Prebid.js build.
{: .alert.alert-warning :}
The options
param object to setConfig()
must be JSON - no JavaScript functions are allowed.
Turn on debugging:
{% highlight js %} pbjs.setConfig({ debug: true }); {% endhighlight %}
Set a global bidder timeout:
{% highlight js %} pbjs.setConfig({ bidderTimeout: 3000 }); {% endhighlight %}
{: .alert.alert-warning :}
Bid Timeouts and JavaScript Timers
Note that it's possible for the timeout to be triggered later than expected, leading to a bid participating in the auction later than expected. This is due to how setTimeout
works in JS: it queues the callback in the event loop in an approximate location that should execute after this time but it is not guaranteed.
With a busy page load, bids can be included in the auction even if the time to respond is greater than the timeout set by Prebid.js. However, we do close the auction immediately if the threshold is greater than 200ms, so you should see a drop off after that period.
For more information about the asynchronous event loop and setTimeout
, see How JavaScript Timers Work.
Since browsers have a limit of how many requests they will allow to a specific domain before they block, Prebid.js
will queue auctions that would cause requests to a specific origin to exceed that limit. The limit is different
for each browser. Prebid.js defaults to a max of 4
requests per origin. That value can be configured with
maxRequestsPerOrigin
.
{% highlight js %}
// most browsers allow at least 6 requests, but your results may vary for your user base. Sometimes using all
// 6
requests can impact performance negatively for users with poor internet connections.
pbjs.setConfig({ maxRequestsPerOrigin: 6 });
// to emulate pre 1-x behavior and have all auctions queue (no concurrent auctions), you can set it to 1
.
pbjs.setConfig({ maxRequestsPerOrigin: 1 });
{% endhighlight %}
Prebid core adds a timeout on XMLHttpRequest request to terminate the request once auction is timedout. Since Prebid is ignoring all the bids after timeout it does not make sense to continue the request after timeout. However, you have the option to disable this by using disableAjaxTimeout
.
{% highlight js %} pbjs.setConfig({ disableAjaxTimeout: true }); {% endhighlight %}
Prebid core adds a timeout buffer to extend the time that bidders have to return a bid after the auction closes. This buffer is used to offset the "time slippage" of the setTimeout behavior in browsers. Prebid.js sets the default value to 400ms. You can change this value by setting timeoutBuffer
to the amount of time you want to use. The following example sets the buffer to 300ms.
{% highlight js %} pbjs.setConfig({ timeoutBuffer: 300 }); {% endhighlight %}
Sending all bids is the default, but should you wish to turn it off:
{% highlight js %} pbjs.setConfig({ enableSendAllBids: false }) {% endhighlight %}
When sendAllBids mode is on, your page will send keywords for all bidders to your ad server. The ad server will then make the decision on which will win. Some ad servers, such as DFP, can then generate reporting on historical bid prices from all bidders.
Note that this config must be set before pbjs.setTargetingForGPTAsync()
or pbjs.getAdserverTargeting()
.
After this method is called, pbjs.getAdserverTargeting()
will give you the below JSON (example). pbjs.setTargetingForGPTAsync()
will apply the below keywords in the JSON to GPT (example below)
{% include send-all-bids-keyword-targeting.md %}
{% highlight bash %} { "hb_adid_audienceNetw": "1663076dadb443d", "hb_pb_audienceNetwor": "9.00", "hb_size_audienceNetw": "300x250", "hb_adid_appnexus": "191f4aca0c0be8", "hb_pb_appnexus": "10.00", "hb_size_appnexus": "300x250", // also sends the highest bid in the these variables: "hb_bidder": "appnexus", "hb_adid": "191f4aca0c0be8", "hb_pb": "10.00", "hb_size": "300x250", } {% endhighlight %}
Prebid.js currently allows for caching and reusing bids in a very narrowly defined scope. However, if you'd like, you can disable this feature and prevent Prebid.js from using anything but the latest bids for a given auction.
{: .alert.alert-warning :} This option is scheduled to become false-by-default within a couple of releases, meaning the limited bid caching will be active only when turned on.
{% highlight js %} pbjs.setConfig({ useBidCache: false }) {% endhighlight %}
Set the order in which bidders are called:
{% highlight js %} pbjs.setConfig({ bidderSequence: "fixed" }) /* default is "random" */ {% endhighlight %}
Set the publisher's domain where Prebid is running, for cross-domain iframe communication:
{% highlight js %} pbjs.setConfig({ publisherDomain: "https://www.theverge.com" ) {% endhighlight %}
This configuration defines the price bucket granularity setting that will be used for the hb_pb
keyword.
{% highlight js %} pbjs.setConfig({ priceGranularity: "medium" }) {% endhighlight %}
Standard values:
"low"
: $0.50 increments, capped at $5 CPM"medium"
: $0.10 increments, capped at $20 CPM (the default)"high"
: $0.01 increments, capped at $20 CPM"auto"
: Applies a sliding scale to determine granularity as shown in the Auto Granularity table below."dense"
: Like"auto"
, but the bid price granularity uses smaller increments, especially at lower CPMs. For details, see the Dense Granularity table below.customConfigObject
: If you pass in a custom config object (as shown in the Custom CPM Bucket Sizing example below), you can have much finer control over CPM bucket sizes, precision, and caps.
{: .table .table-bordered .table-striped } | CPM | Granularity | Example | |---------------------+----------------------------------+--------| | CPM <= $5 | $0.05 increments | $1.87 floored to $1.85 | | CPM <= $10 and > $5 | $0.10 increments | $5.09 floored to $5.00 | | CPM <= $20 and > $10 | $0.50 increments | $14.26 floored to $14.00 | | CPM > $20 | Caps the price bucket at $20 | $24.82 floored to $20.00 |
{: .table .table-bordered .table-striped } | CPM | Granularity | Example | |------------+-------------------------------+---------| | CPM <= $3 | $0.01 increments | $1.87 floored to $1.87 | | CPM <= $8 and >$3 | $0.05 increments | $5.09 floored to $5.05 | | CPM <= $20 and >$8 | $0.50 increments | $14.26 floored to $14.00 | | CPM > $20 | Caps the price bucket at $20 | $24.82 floored to $20.00 |
To set up your own custom CPM buckets, create an object like the following, and pass it into setConfig
:
const customConfigObject = {
"buckets" : [{
"precision": 2, //default is 2 if omitted - means 2.1234 rounded to 2 decimal places = 2.12
"min" : 0,
"max" : 5,
"increment" : 0.01 // from $0 to $5, 1-cent increments
},
{
"precision": 2,
"min" : 5,
"max" : 8,
"increment" : 0.05 // from $5 to $8, round down to the previous 5-cent increment
},
{
"precision": 2,
"min" : 8,
"max" : 40,
"increment" : 0.5 // from $8 to $40, round down to the previous 50-cent increment
}]
};
//set custom config object
pbjs.setConfig({
priceGranularity: customConfigObject
})
The default Prebid price granularities cap out at $20, which isn't always convenient for video ads, which can command more than $20. One solution is to just set up a
custom price
granularity as described above. As of PBJS 1.12, another approach is that the
mediaTypePriceGranularity
config may be set to define granularities for each of the three media types:
banner, video, and native. e.g.
{% highlight js %} const customPriceGranularity = { 'buckets': [ { 'precision': 2, 'min': 0, 'max': 5, 'increment': 0.25 }, { 'precision': 2, 'min': 6, 'max': 20, 'increment': 0.5 }, { 'precision': 2, 'min': 21, 'max': 100, 'increment': 1 } ] };
pbjs.setConfig({'mediaTypePriceGranularity': { 'video': customPriceGranularity, 'banner': 'medium', 'native': 'medium' } }); {% endhighlight %}
Any mediaTypePriceGranularity
setting takes precedence over priceGranularity
.
Example config for server-to-server header bidding:
{% highlight js %} pbjs.setConfig({ s2sConfig: { accountId: '1', bidders: ['appnexus', 'pubmatic'], defaultVendor: 'appnexus', enabled: true, timeout: 1000, adapter: 'prebidServer', endpoint: 'https://prebid.adnxs.com/pbs/v1/openrtb2/auction', syncEndpoint: 'https://prebid.adnxs.com/pbs/v1/cookie_sync', adapterOptions: { rubicon: { key: 'value' }, appnexus: { key: 'value' } } } }) {% endhighlight %}
Additional information of these properties:
{: .table .table-bordered .table-striped }
| Attribute | Scope | Type | Description |
|------------+---------+---------+---------------------------------------------------------------|
| accountId
| Required | String | Your Prebid Server account ID |
| bidders
| Required | Array of Strings | Which bidders support auctions on the server side |
| defaultVendor
| Optional | String | Automatically includes all following options in the config with vendor's default values. Individual properties can be overridden by including them in the config along with this setting. See the Additional Notes below for more information. |
| enabled
| Optional | Boolean | Enables S2S - defaults to false
|
| timeout
| Required | Integer | Number of milliseconds allowed for the server-side auctions. This should be approximately 200ms-300ms less than your Prebid.js timeout to allow for all bids to be returned in a timely manner. See the Additional Notes below for more information. |
| adapter
| Required | String | Adapter code for S2S. Defaults to 'prebidServer' |
| endpoint
| Required | URL | Defines the auction endpoint for the Prebid Server cluster |
| syncEndpoint
| Required | URL | Defines the cookie_sync endpoint for the Prebid Server cluster |
| userSyncLimit
| Optional | Integer | Max number of userSync URLs that can be executed by Prebid Server cookie_sync per request. If not defined, PBS will execute all userSync URLs included in the request. |
| adapterOptions
| Optional | Object | Arguments will be added to resulting OpenRTB payload to Prebid Server. |
Additional Notes on s2sConfig properties
- Currently supported vendors are: appnexus & rubicon
- When using
defaultVendor
option,accountId
andbidders
properties still need to be defined. - If the
s2sConfig
timeout is greater than the Prebid.js timeout, thes2sConfig
timeout will be automatically adjusted to 75% of the Prebid.js timeout in order to fit within the auction process.
Additional options for s2sConfig
may be enabled by including the Server-to-Server testing module.
The user sync configuration options described in this section give publishers control over how adapters behave with respect to dropping pixels or scripts to cookie users with IDs. This practice is called "user syncing" because the aim is to let the bidders match IDs between their cookie space and the DSP's cookie space. There's a good reason for bidders to be doing this -- DSPs are more likely to bid on impressions where they know something about the history of the user. However, there are also good reasons why publishers may want to control the use of these practices:
- Page performance: Publishers may wish to move ad-related cookie work to much later in the page load after ads and content have loaded.
- User privacy: Some publishers may want to opt out of these practices even though it limits their users' values on the open market.
- Security: Publishers may want to control which bidders are trusted to inject images and JavaScript into their pages.
{: .alert.alert-info :} User syncing default behavior If you don't tweak any of the settings described in this section, the default behavior of Prebid.js is to wait 3 seconds after the auction ends, and then allow every adapter to drop up to 5 image-based user syncs.
For more information, see the sections below.
For descriptions of all the properties that control user syncs, see the table below.
{: .table .table-bordered .table-striped }
| Attribute | Type | Description |
|------------------+---------+---------------------------------------------------------------------------------------------------------|
| syncEnabled
| Boolean | Enable/disable the user syncing feature. Default: true
. |
| filterSettings
| Object | Configure lists of adapters to include or exclude their user syncing based on the pixel type (image/iframe). |
| syncsPerBidder
| Integer | Number of registered syncs allowed per adapter. Default: 5
. To allow all, set to 0
. |
| syncDelay
| Integer | Delay in milliseconds for syncing after the auction ends. Default: 3000
. |
| enableOverride
| Boolean | Enable/disable publisher to trigger user syncs by calling pbjs.triggerUserSyncs()
. Default: false
. |
For examples of configurations that will change the default behavior, see below.
Push the user syncs to later in the page load:
{% highlight js %} pbjs.setConfig({ userSync: { syncDelay: 5000 // write image pixels 5 seconds after the auction } }); {% endhighlight %}
Turn off user syncing entirely:
{% highlight js %} pbjs.setConfig({ userSync: { syncEnabled: false } }); {% endhighlight %}
Allow iframe-based syncs (the presence of a valid filterSettings.iframe
object automatically enables iframe type user-syncing):
{% highlight js %}
pbjs.setConfig({
userSync: {
filterSettings: {
iframe: {
bidders: '', // '' means all bidders
filter: 'include'
}
}
}
});
{% endhighlight %}
Note - iframe-based syncing is disabled by default. Image-based syncing is enabled by default; it can be disabled by excluding all/certain bidders via the filterSettings
object.
Only certain bidders are allowed to sync and only certain types of sync pixels:
{% highlight js %} pbjs.setConfig({ userSync: { filterSettings: { iframe: { bidders: ['def'], // only this bidder is excluded from syncing iframe pixels, all other bidders are allowed filter: 'exclude' }, image: { bidders: ['abc', 'def', 'xyz'], //only these 3 bidders are allowed to sync image pixels filter: 'include' } }, syncsPerBidder: 3, // and no more than 3 syncs at a time syncDelay: 6000, // 6 seconds after the auction } }); {% endhighlight %}
If you want to apply the same bidder inclusion/exlusion rules for both types of sync pixels, you can use the all
object instead specifying both image
and iframe
objects like so:
{% highlight js %} pbjs.setConfig({ userSync: { /* only these bidders are allowed to sync. Both iframe and image pixels are permitted. */ filterSettings: { all: { bidders: ['abc', 'def', 'xyz'], filter: 'include' } }, syncsPerBidder: 3, // and no more than 3 syncs at a time syncDelay: 6000, // 6 seconds after the auction } }); {% endhighlight %}
Note - the all
field is mutually exclusive and cannot be combined with the iframe
/image
fields in the userSync
config. This restriction is to promote clear logic as to how bidders will operate in regards to their userSync
pixels. If the fields are used together, this will be considered an invalid config and Prebid will instead use the default userSync
logic (all image pixels permitted and all iframe pixels are blocked).
The same bidders can drop sync pixels, but the timing will be controlled by the page:
{% highlight js %}
pbjs.setConfig({
userSync: {
/* only these bidders are allowed to sync, and only image pixels */
filterSettings: {
image: {
bidders: ['abc', 'def', 'xyz'],
filter: 'include'
}
},
enableOverride: true // publisher will call pbjs.triggerUserSyncs()
}
});
{% endhighlight %}
As noted, there's a function available to give the page control of when registered user syncs are added.
{% highlight js %} pbjs.triggerUserSyncs(); {% endhighlight %}
The userSync.registerSync() function called by the adapter keeps a queue of valid userSync requests. It prevents unwanted sync entries from being placed on the queue:
- Removes undesired sync types. (i.e. blocks iframe pixels if
filterSettings.iframe
wasn't declared) - Removes undesired adapter registrations. (i.e. enforces the configured filtering logic from the
filterSettings
object) - Makes sure there's not too many queue entries from a given adapter. (i.e. enforces syncsPerBidder)
When user syncs are run, regardless of whether they are invoked by the platform or by the page calling pbjs.triggerUserSyncs(), the queue entries are randomized and appended to the bottom of the HTML tag.
The sizeConfig
object passed to pbjs.setConfig
provides a powerful way to describe types of devices and screens using CSS media queries. See below for an explanation of the feature and examples showing how to use it.
- Before
requestBids
sends bid requests to adapters, it will evaluate and pick the appropriate label(s) based on thesizeConfig.mediaQuery
and device properties and then filter theadUnit.bids
array based on thelabels
defined. Ad units that don't match the label definition are dropped. - The required
sizeConfig.mediaQuery
property allows CSS media queries. The queries are tested using thewindow.matchMedia
API. - If a label conditional (e.g.
labelAny
) doesn't exist on an ad unit, it is automatically included in all requests for bids. - If multiple rules match, the sizes will be filtered to the intersection of all matching rules'
sizeConfig.sizesSupported
arrays. - The
adUnit.mediaTypes.banner.sizes
selected will be filtered based on thesizesSupported
of the matchedsizeConfig
. So theadUnit.mediaTypes.banner.sizes
is a subset of the sizes defined from the resulting intersection ofsizesSupported
sizes andadUnit.mediaTypes.banner.sizes
. (Note: size config will also operate onadUnit.sizes
, howeveradUnit.sizes
is deprecated in favor ofadUnit.mediaTypes
)
To set size configuration rules, pass in sizeConfig
as follows:
{% highlight js %}
pbjs.setConfig({ sizeConfig: [{ 'mediaQuery': '(min-width: 1600px)', 'sizesSupported': [ [1000, 300], [970, 90], [728, 90], [300, 250] ], 'labels': ['desktop-hd'] }, { 'mediaQuery': '(min-width: 1200px)', 'sizesSupported': [ [970, 90], [728, 90], [300, 250] ], 'labels': ['desktop'] }, { 'mediaQuery': '(min-width: 768px) and (max-width: 1199px)', 'sizesSupported': [ [728, 90], [300, 250] ], 'labels': ['tablet'] }, { 'mediaQuery': '(min-width: 0px)', 'sizesSupported': [ [300, 250], [300, 100] ], 'labels': ['phone'] }] });
{% endhighlight %}
There are two parts to defining responsive and conditional ad units with labels:
- Defining the labels
- Defining the conditional ad unit targeting for the labels
Labels may be defined in two ways:
- Through
sizeConfig
- As an argument to
pbjs.requestBids
{% highlight js %} pbjs.requestBids({labels: []}); {% endhighlight %}
Labels may be targeted in the AdUnit structure by two conditional operators: labelAny
and labelAll
.
With the labelAny
operator, just one label has to match for the condition to be true. In the example below, either A or B can be defined in the label array to activate the bid or ad unit:
{% highlight bash %}
labelAny: ["A", "B"]
{% endhighlight %}
With the labelAll
conditional, every element of the target array must match an element of the label array in
order for the condition to be true. In the example below, both A and B must be defined in the label array to activate the bid or ad unit:
{% highlight bash %}
labelAll: ["A", "B"]
{% endhighlight %}
{: .alert.alert-warning :}
Only one conditional may be specified on a given AdUnit or bid -- if both labelAny
and labelAll
are specified, only the first one will be utilized and an error will be logged to the console. It is allowable for an AdUnit to have one condition and a bid to have another.
{: .alert.alert-warning :}
If either labeAny
or labelAll
values is an empty array, it evaluates to true
.
{: .alert.alert-warning :}
It is important to note that labels do not act as filters for sizeConfig. In the example above, using a screen of 1600px wide and labelAll:["desktop"]
will not filter out sizes defined in the desktop-hd
sizeConfig. Labels in sizeConfig are only used for selecting or de-selecting AdUnits and AdUnit.bids.
Label targeting on the ad unit looks like the following:
{% highlight js %}
pbjs.addAdUnits([{ code: "ad-slot-1", mediaTypes: { banner: { sizes: [ [970, 90], [728, 90], [300, 250], [300, 100] ] } }, labelAny: ["visitor-uk"] /* The full set of bids, not all of which are relevant on all devices / bids: [{ bidder: "pulsepoint", / Labels flag this bid as relevant only on these screen sizes. */ labelAny: ["desktop", "tablet"], params: { "cf": "728X90", "cp": 123456, "ct": 123456 } }, { bidder: "pulsepoint", labelAny: ["desktop", "phone"], params: { "cf": "300x250", "cp": 123456, "ct": 123456 } }, { bidder: "sovrn", labelAny: ["desktop", "tablet"], params: { "tagid": "123456" } }, { bidder: "sovrn", labelAny: ["phone"], params: { "tagid": "111111" } } ] }]);
{% endhighlight %}
See Conditional Ad Units for additional use cases around labels.
Some adapters may support other options, as defined in their documentation. To set arbitrary configuration values:
pbjs.setConfig({ <key>: <value> });
If you call pbjs.setConfig
without an object, e.g.,
{% highlight js %} pbjs.setConfig('debug', 'true')) {% endhighlight %}
then Prebid.js will print an error to the console that says:
ERROR: setConfig options must be an object
If you don't see that message, you can assume the config object is valid.
The getConfig
function is for retrieving the current configuration object or subscribing to configuration updates. When called with no parameters, the entire config object is returned. When called with a string parameter, a single configuration property matching that parameter is returned.
{% highlight js %} /* Get config object */ config.getConfig()
/* Get debug config */ config.getConfig('debug') {% endhighlight %}
The getConfig
function also contains a 'subscribe' ability that adds a callback function to a set of listeners that are invoked whenever setConfig
is called. The subscribed function will be passed the options object that was used in the setConfig
call. Individual topics can be subscribed to by passing a string as the first parameter and a callback function as the second. For example:
{% highlight js %}
/* Subscribe to all configuration changes */ getConfig((config) => console.log('config set:', config));
/* Subscribe to only 'logging' changes */ getConfig('logging', (config) => console.log('logging set:', config));
/* Unsubscribe */ const unsubscribe = getConfig(...); unsubscribe(); // no longer listening
{% endhighlight %}
{: .alert.alert-info :}
The DFP implementation of this function requires including the dfpAdServerVideo
module in your Prebid.js build.
This method combines publisher-provided parameters with Prebid.js targeting parameters to build a DFP video ad tag URL that can be used by a video player.
{: .table .table-bordered .table-striped }
| Field | Type | Description |
|----------+--------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| adUnit
| object | Required. The Prebid ad unit to which the returned URL will map. |
| params
| object | Optional. Querystring parameters that will be used to construct the DFP video ad tag URL. Publisher-supplied values will override values set by Prebid.js. See below for fields. |
| url
| string | Optional. The video ad server URL. When given alongside params, the parsed URL will be overwritten with any matching components of params. |
| bid
| object | Optional. The Prebid bid for which targeting will be set. If this is not defined, Prebid will use the bid with the highest CPM for the adUnit. |
{: .alert.alert-warning :} One or both of options.params and options.url is required. In other words, you may pass in one, the other, or both, but not neither.
{: .table .table-bordered .table-striped }
| Field | Type | Description | Example |
|-------------------+--------+-----------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------|
| iu
| string | Required. DFP ad unit ID. | /19968336/prebid_cache_video_adunit
|
| cust_params
| object | Optional. Key-value pairs merged with Prebid's targeting values and sent to DFP on the video ad tag URL. | {section: "blog", anotherKey: "anotherValue"}
|
| description_url
| string | Optional. Describes the video. Required for Ad Exchange. Prebid.js will build this for you unless you pass it explicitly. | http://www.example.com
|
For more information on any of these params, see the DFP video tag documentation.
There are several different ways to build up your video URL, as shown in the examples below:
Using options.params
only:
pbjs.requestBids({
bidsBackHandler: function(bids) {
var videoUrl = pbjs.adServers.dfp.buildVideoUrl({
adUnit: videoAdUnit,
params: {
iu: '/19968336/prebid_cache_video_adunit',
cust_params: {
section: "blog",
anotherKey: "anotherValue"
},
hl: "en",
output: "xml_vast2",
url: "http://www.example.com",
}
});
invokeVideoPlayer(videoUrl);
}
});
Using options.url
only:
var adserverTag = 'https://pubads.g.doubleclick.net/gampad/ads?'
+ 'sz=640x480&iu=/19968336/prebid_cache_video_adunit&impl=s&gdfp_req=1'
+ '&env=vp&output=xml_vast2&unviewed_position_start=1&hl=en&url=http://www.example.com'
+ '&cust_params=section%3Dblog%26anotherKey%3DanotherValue';
var videoUrl = pbjs.adServers.dfp.buildVideoUrl({
adUnit: videoAdUnit,
url: adserverTag
});
{: .alert.alert-warning :}
In the event of collisions, querystring values passed via options.params
take precedence over those passed via options.url
.
This function can be used to mark the winning bid as used. This is useful when running multiple video advertisements on the page, since these are not automatically marked as “rendered”. If you know the adId, then be specific, otherwise Prebid will retrieve the winning bid for the adUnitCode and mark it accordingly.
{: .table .table-bordered .table-striped }
Param | Type | Description |
---|---|---|
adUnitCode | string |
(Optional) The ad unit code |
adId | string |
(Optional) The id representing the ad we want to mark |