Open RTB v2.5
Documentation for Bidders
Magnite Technical Operations
26 October 2021 – v2.5.9
1. Introduction
This document describes the current implementation of Magnite CTV Open RTB exchange. The reader may see how the selection of objects and fields supported is reflective of Magnite CTV’s goal of strict and rich IAB Open RTB v2. 5 specification compliance: All IAB-required objects and fields are present and populated per the IAB specification. Additionally, this document enumerates which of the recommended and optional fields Magnite CTV supports. For these Magnite CTV-supported recommended and optional fields, each the bid request includes a field when the data-specific supply ad call use case allows.
If an object or field is enumerated below, Magnite CTV supports it as best may be in each bid request, based on available supply-side policies, exchange policies, and/or data availability. Please use this document as an adjunct to the IAB standard when implementing your bidder against the Magnite CTV implementation. Bidders typically see bid requests with a rich complement of IAB-recommended and optional fields for those objects and fields enumerated here as Magnite CTV supported. This is especially the case for IAB-recommended fields.
A key point is that for all non-required IAB fields, bidders should be tolerant of such a field’s presence, or lack thereof, in any one particular bid request.
Pro tip: 14 September 2017: As the Magnite CTV platform now supports Open RTB versions 2,2, 2,3, 2.4 and 2.5, this document details the v2.5 objects and fields supported. If your bidder is compatible with an earlier version and would have problems with either OpenRTB v2.5 HTTP headers or actual objects or fields in v2.5, please let us know and we will configure the TLRA VMP to be version compliant. |
2. Bid Request
2.1 Bid Request Details
Magnite CTV’s RTB Exchange offers Desktop Web, Mobile Web, In-App and CTV supply both in
- Open Auction (”OA”) marketplace type, and
- Private Marketplaces (“PMP”). As of November 2014, Magnite CTV fully supports the following PMP marketplace types:
- Unreserved Fixed Rate (“UFR”)
- Invitation-Only Auctions (“IOA”)
- Automated Guaranteed (“AG”)
This section provides the full list of IAB Open RTB API Specification Version 2.5-compliant objects that the Magnite CTV Exchange supports, a brief description of each field as well as the format type and an example. RTB Bid Request examples are also included in the end of the document.
2.1.1 RTB Bid Request Objects List
Object | Online | Mobile Web | In App | CTV |
Bid Object | x | x | x | x |
Impression Object | x | x | x | x |
Video Object | x | x | x | x |
Site Object | x | x | ||
App Object | x | x | ||
Content Object | x | x | x | x |
Publisher Object | x | x | x | x |
Device Object | x | x | x | x |
Geo Object | x | x | x | x |
User Object | x | x | ||
Regulations Object | x | x | x | x |
PMP Object | x | x | x | x |
Direct Deals Object | x | x | x | x |
Source | x | x | x | x |
2.1.2 Bid Request Object
Field Name | IAB Open RTB Description | Type | Sample Value | Notes |
id | Unique ID of the bid request, provided by the exchange. | String | "3074b60c-0464-4125-a752-136f78c4d00b" | IAB required. |
imp | See Impressions Object below | IAB required. Magnite CTV exchange: Always present. | ||
site | See Site Object below | IAB recommended for websites. Magnite CTV exchange: Always present for web browser supply. Supply which is being accessed by a mobile device web browser is represented with a Site object. | ||
app | See App Object below | IAB recommended for in application supply. Magnite CTV exchange: Always present for application supply | ||
device | See Device object below | IAB required. Magnite CTV exchange: Always present. | ||
user | See User object below | IAB recommended. | ||
at | Auction type, where 1 = First Price, 2 = Second Price. | Integer | 2 | Magnite CTV exchange: Always present. |
tmax | Maximum time in milliseconds the exchange allows for bids to be received including Internet latency to avoid timeout. | Integer | 250 | Magnite CTV exchange: Currently conducts 250 millisecond auctions (June 2015). Some very small percentage of supply may be offered with tmax as low as 150-160 msecs (June 2019). |
wseat | White list of buyer seats (e.g., advertisers, agencies) allowed to bid on this impression. IDs of seats and knowledge of the buyer’s customers to which they refer must be coordinated between bidders and the exchange a priori. At most, only one of wseat and bseat should be used in the same request. Omission of both implies no seat restrictions. | Array of strings | ["test", "DspCo-GP", "testUFRseat"] or ["DspCo-GP"] | |
cur | Array of allowed currencies for bids on this bid request using ISO-4217 alpha codes. Recommended only if the exchange accepts multiple currencies. | Array of strings | ["USD"] | IAB required. Magnite CTV exchange: Always present. |
bcat | Blocked advertiser categories using the IAB content categories. | Array of strings | ["IAB1-1", "IAB1-2"] | Magnite CTV exchange: Uses IAB categories |
badv | Block list of advertisers by their domains | Array of strings | ["iloveny.com", "sprite.com"] | |
regs | See Regulations object below | Magnite CTV exchange: Always present. |
2.1.3 Impression Object
Field Name | IAB Open RTB Description | Type | Sample Value | Notes |
id | Impression identifier: A unique identifier for this impression within the context of the bid request | String | "1" | IAB required. Magnite CTV exchange: Always present. June 2014: Magnite CTV currently follows the IAB suggestion that "… [this] value starts with 1, and increments up to n for n impressions…" |
video | See Video object below | IAB required for video impressions Magnite CTV exchange: Always present. | ||
displaymanager | Name of ad mediation partner, SDK technology, or native player responsible for rendering ad (typically video or mobile). Used by some ad servers to customize ad code by partner. | String | "testDisplayManager" or "acudeo" | IAB recommended |
displaymanagerver | Version of ad mediation partner, SDK technology, or native player responsible for rendering ad (typically video or mobile). Used by some ad servers to customize ad code by partner | String | "2.1.04" | IAB recommended |
bidfloor | Minimum bid for this impression expressed in CPM | Float | 9.38 | |
bidfloorcur | Currency specified using ISO-4217 alpha codes. This may be different from bid currency returned by bidder if this is allowed by the exchange. | String | "USD" | |
instl | Interstitial flag: 1 if the ad is interstitial or full screen; else 0 (i.e., no). | Integer | 0 | Magnite CTV exchange: Always present |
tagid | Identifier for specific ad placement or ad tag that was used to initiate the auction. This can be useful for debugging operational issues, or for optimization by the buyer. | String | Magnite CTV exchange: Always present | |
secure | Secure creatives required flag: Flag to indicate if the impression requires secure HTTPS URL creative assets and markup, where 0 = non-secure, 1 = secure. | Integer | 0 | Magnite CTV exchange: Always present If omitted, the secure state is unknown, but non-secure HTTP support can be assumed. |
exp | Impression Expiration: Advisory as to the number of seconds that may elapse between the auction and the actual impression. | Integer | 1800 | Magnite CTV exchange: For publishers who cache their creatives and associated pixels for later use, the Magnite CTV VMP provides the ability to extend the impression pixel wait time before the pixel expires. Via this field, the bidder is alerted to the fact that the publisher-specific and declared impression pixel expiration time setting within the Magnite CTV console, for the inventory being made available, allowing DSPs to set their pixels with the same value to avoid reporting discrepancies. |
ext.viewabilityvendors | Field indicating which viewability vendors’ SDK/tools are integrated with the supply partner for the specific piece of supply offered in the bid request, allowing buyers to include appropriate elements to leverage in the VAST documents returned. | Array of strings | ["doubleverify.com ", comscore.com”] | Available options and string values:
|
ext.ssai | SSAI type - Indicates if server-side ad insertion server-side ad insertion (e.g., stitching an ad into an audio or video stream) is in use and the impact of this on asset and tracker retrieval, where
| Integer | 2 | Adopted from OpenRTB v3.0 definition. |
pmp | See Private Marketplace Object below | Magnite CTV exchange: Present only if the bid request is an offering under any of the three IAB defined Private Market Plac types:Automated Guaranteed, Unreserved Fixed Rate, or Invitation-Only Auction. |
2.1.4 Video Object
Field Name | IAB Open RTB Description | Type | Sample Value | Notes |
mimes | Content MIME types supported. | Array of strings | ["application/x-shockwave-flash", "video/x-flv"] | IAB required. |
minduration | Minimum video ad duration in seconds | Integer | 0 | IAB recommended. Magnite CTV exchange: Always present. |
maxduration | Maximum video ad duration in seconds | Integer | 30 | IAB recommended. Magnite CTV exchange: Always present. |
protocols | Array of supported video protocols. | Array of integers | [2,5] | IAB recommended.
|
w | Width of the video player in device independent pixels (DIPS). | Integer | 720 | IAB recommended. Magnite CTV exchange: Almost always present. The exchange requires publishers/suppliers to provide this value. |
h | Height of the video player in device independent pixels (DIPS). | Integer | 480 | IAB recommended. Magnite CTV exchange: Almost always present. The exchange requires publishers/suppliers to provide this value. |
startdelay | Indicates the start delay in seconds for preroll, midroll, or postroll ad placement. | Integer | 0 | IAB recommended |
linearity | Indicates if the impression must be linear, nonlinear, etc. If none specified, assume all are allowed. | Integer | 1 | “In-stream” or “linear” (value = 1) video refers to pre-roll, post-roll, or mid-roll video ads where the user is forced to watch ad in order to see the video content. “Overlay” or “non-linear” (value = 2) refers to ads that are shown on top of the video content. |
placement | Placement type for the impression. | Integer | 1 | 1 In-Stream |
skip | Skippable Video: Indicates if the player will allow the video to be skipped, where 0 = no, 1 = yes. If a bidder sends markup/creative that is itself skippable, the Bid object should include the attr array with an element of 16 indicating skippable video. | Integer | 0 | Magnite CTV exchange: Always present. |
skipmin | Skippable video minimum duration: Videos of total duration greater than this number of seconds can be skippable; only applicable if the ad is skippable. | Integer | 15 | Magnite CTV exchange: Always present if skip = 1. |
skipafter | Number of seconds a video must play before skipping is enabled; only applicable if the ad is skippable. | Integer | 7 | Magnite CTV exchange: Always present if skip = 1. |
battr | Blocked creative attributes | Array of integers | ||
maxextended | Maximum extended ad duration if extension is allowed. | Integer | 10 | |
minbitrate | Integer | 15000 | ||
maxbitrate | Maximum bit rate in Kbps. | Integer | 20000 | |
boxingallowed | Indicates if letter-boxing of 4:3 content into a 16:9 window is allowed, where 0 = no, 1 = yes. | Integer | 1 | |
playbackmethod | Playback methods that may be in use. If none are specified, any method may be used. Only one method is typically used in practice. As a result, this array may be converted to an integer in a future version of the specification. It is strongly advised to use only the first element of this array in preparation for this change. | Array of integers | [1,2] | |
delivery | Supported delivery methods (e.g., streaming, progressive). If none specified, assume all are supported. | Array of integers | ||
pos | Ad position on screen | Integer | 1 | |
api | List of supported API frameworks for this impression. If an API is not explicitly listed, it is assumed not to be supported | Array of integers | 1 | Magnite CTV exchange: Supported APIs are: |
2.1.5 Site Object
Field Name | IAB Open RTB Description | Type | Sample Value | Notes |
id | Exchange-specific site ID. | String | "bbea2e39-ad5a- 4211-bfd6-906b4b2ec0e0" | IAB recommended |
name | Site name (may be aliased at the publisher’s request). | String | "Magnite CTV TEST SUPPLY site" | |
domain | Domain of the site (e.g., “mysite.foo.com”). | String | "Magnite CTV.com" | |
cat | Array of IAB content categories of the site | Array of strings | ["IAB1-1", "IAB1-2"] | Magnite CTV exchange: Uses IAB categories. See the Content Categories list section of the IAB OpenRTB specification for acceptable values. |
page | URL of the page where the impression will be shown. | String | ||
ref | Referrer URL that caused navigation to the current page. | String | ||
privacypolicy | Indicates if the site has a privacy policy, where 0 = no, 1 = yes. | Integer | 1 | |
publisher | See Publisher Object below | |||
content | See Content Object below |
2.1.6 App Object
Field Name | IAB Open RTB Description | Type | Sample Value | Notes |
id | Application ID: Exchange-specific app ID. | String | " h3vde-ed4sh " | IAB recommended. Magnite CTV exchange: Always present. |
name | App name | String | " MusicBox - Audiocaster Radio Music " | May be aliased or masked at the publisher’s request |
bundle | A platform-specific application identifier intended to be unique to the app and independent of the exchange. On Android, this should be a bundle or package name (e.g., com.foo.mygame). On iOS, it is typically a numeric ID. | String | "com.Magnite CTV.sample" | Magnite CTV exchange: For iOS, a DSP may ask Magnite CTV to send either the iTunes numeric TrackId string or the package name. Please work with Magnite CTV Technical Operations team at magnite-rtb@magnite.com to make your selection. |
domain | Domain of the application. | String | "foo.com" | |
storeurl | App store URL for an installed app; for IQG 2.1 compliance. | String | "https://play.google.com/store/apps/details?id=XXXXXXXXX" | |
cat | Array of IAB content categories of the app. | Array of strings | ["IAB1-1", "IAB1-2"] | |
ver | Application version | string | "1.0.0" | |
privacypolicy | Indicates if the app has a privacy policy, where 0 = no, 1 = yes. | Integer | 1 | |
paid | 0 = app free, 1 = version. | Integer | 1 | |
publisher | See Publisher Object | |||
content | See Content Object |
2.1.7 Content Object
Field Name | IAB Open RTB Description | Type | Sample Value | Notes | |||||
Id | ID uniquely identifying the content | String | "e31f206a239be5379d639c7fa75183ab" | ||||||
episode | Episode number. | Integer | 6 | ||||||
title | Content title. | String | Video Examples: “Search Committee” (television), “A New Hope” (movie) | ||||||
series | Content series | String | Video Examples: “The Office” (television), “Star Wars” (movie) | ||||||
season | Content season | String | "Season 3" | ||||||
genre | Content genre | String | Genre that best describes the content. Example: “drama” | ||||||
ext.network | Content network | String | "BigSportsNetwork" | Extension object to support content network.
| |||||
ext.channel | Content channel | String | "BigSportsNetNews"
| Extension object to support content channel.
| |||||
url | URL of the content, for buy-side contextualization or review. | String | |||||||
cat | Array of IAB content categories for the content. See Table 6.1 Content Categories. | Array of strings | ["IAB1-1", "IAB1-2"] | ||||||
prodq | Production quality | Integer | In ORTB v2.5, replaces videoquality | ||||||
videoquality | Video quality per the IAB’s classification. See Table 6.14 Video Quality. | Integer | 1 | In ORTB v2.5, videoquality deprecated in favor of prodq. | |||||
keywords | Comma separated list of keywords describing the content. | String | |||||||
contentrating | Content rating (e.g., MPAA). | String | |||||||
userrating | User rating of the content (e.g., number of stars, likes, etc.). | String | "4star" | ||||||
context | Type of content (game, video, text, etc.). | String | 1 | ||||||
sourcerelationship | 0 = indirect, 1 = direct. | Integer | 1 | ||||||
livestream | 0 = not live, 1 = content is live (e.g., stream, live blog). | Integer | 0 | ||||||
Len | Length of content in seconds; appropriate for video or audio. | Integer | 15 | ||||||
embeddable | Indicator of whether or not the content is embeddable (e.g., an embeddable video player), where 0 = no, 1 = yes. | Integer | 0 | ||||||
Id | ID uniquely identifying the content | string | "e31f206a239be5379d639c7fa75183ab" | ||||||
episode | Episode number. | integer | 6 | ||||||
title | Content title. | string | Video Examples: “Search Committee” (television), “A New Hope” (movie) | ||||||
series | Content series | string | Video Examples: “The Office” (television), “Star Wars” (movie) | ||||||
season | Content season | string | "Season 3" | ||||||
genre | Content genre | string | Genre that best describes the content. Example: “drama” | ||||||
ext.network | Content network | string | BigSportsNetwork | Extension object to support content network. | |||||
ext.channel | Content channel | string | BigSportsNetNews | Extension object to support content channel. | |||||
url | URL of the content, for buy-side contextualization or review. | string | |||||||
cat | Array of IAB content categories for the content. See Table 6.1 Content Categories. | Array of strings | ["IAB1-1", "IAB1-2"] | ||||||
prodq | Production quality | integer | In ORTB v2.5, replaces videoquality | ||||||
videoquality | Video quality per the IAB’s classification. See Table 6.14 Video Quality. | integer | 1 | In ORTB v2.5, videoquality deprecated in favor of prodq. | |||||
keywords | Comma separated list of keywords describing the content. | string | |||||||
contentrating | Content rating (e.g., MPAA). | string | |||||||
userrating | User rating of the content (e.g., number of stars, likes, etc.). | string | "4star" | ||||||
context | Type of content (game, video, text, etc.). | string | 1 | ||||||
sourcerelationship | 0 = indirect, 1 = direct. | integer | 1 | ||||||
livestream | 0 = not live, 1 = content is live (e.g., stream, live blog). | integer | 0 | ||||||
Len | Length of content in seconds; appropriate for video or audio. | integer | 15 | ||||||
embeddable | Indicator of whether or not the content is embeddable (e.g., an embeddable video player), where 0 = no, 1 = yes. | integer | |||||||
2.1.8 Publisher Object
Field Name | IAB Open RTB Description | Type | Sample Value | Notes |
id | Exchange-specific publisher ID. | String | "TestPublisher" | |
name | Publisher name (may be aliased at the publisher’s request). | String | "Magnite CTV Test Publisher" | |
cat | Array of IAB content categories that describe the publisher. | Array of strings | ["IAB1-1", "IAB1-2"] | |
domain | Highest level domain of the publisher | String | "Magnite CTV.com" |
2.1.9 Device Object
Field Name | IAB Open RTB Description | Type | Sample Value | Notes | |||||
ua | Browser user agent string. | String | "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:30.0) Gecko/20100101 Firefox/30.0" | IAB recommended | |||||
geo | See Geo Object below | IAB recommended | |||||||
dnt | Do not track: If “0”, then do not track Is set to false, if “1”, then do no track is set to true in browser. | Integer | IAB recommended | ||||||
lmt | “Limit Ad Tracking” signal commercially endorsed (e.g., iOS, Android), where 0 = tracking is unrestricted, 1 = tracking must be limited per commercial guidelines. | Integer | IAB recommended | ||||||
ip | IPv4 address closest to device. | String | "64.208.202.10" | IAB recommended. Magnite CTV exchange: All bid requests contain either this field or the ipv6 field. | |||||
ipv6 | IPv6 address closest to device | String | “2001:0db8:85a3:0000:0000:8a2e:0370:7334” | Magnite CTV exchange: All bid requests contain either this field or the ip field. | |||||
make | Device make (e.g., “Apple”). | String | “Apple” | ||||||
model | Device model (e.g., “iPhone”). | String | “iPhone” | ||||||
os | Device operating system | String | "Windows" | ||||||
osv | Device operating system | String | "3.1.2" | ||||||
h | Physical height of the screen in pixels. | Integer | |||||||
w | Physical width of the screen in pixels. | Integer | |||||||
flashver | Version of Flash supported by the browser. | String | |||||||
language | Browser language using ISO-639-1-alpha-2. | String | “en” | ||||||
connectiontype | Network connection type. | Integer | |||||||
dpidsha1 | Platform device ID (e.g., Android ID); hashed via SHA1. | String | "017823bd574b2d39265d12237aad30875a7cf75c" | ||||||
macsha1 | MAC address of the device; hashed via SHA1. | String | |||||||
ifa | ID sanctioned for advertiser use in the clear (i.e., not hashed). | String | " BE269CA1-B1F3-479D-B655-CAE6012AB299” | Magnite CTV exchange: As of September 2017, for CTV supply, this may not always be in the form of the iOS or Android syntax- see second example.
| |||||
ext.ifa_type | IFA Type: An extension based on the iAB document adoption in December 2018. The following values may be seen: | String | “sspid” | ||||||
devicetype | The general type of device | Integer | 2 | Magnite CTV exchange: The supported values:
| |||||
2.1.10 Geo Object
Field Name | IAB Open RTB Description | Type | Sample Value | Notes |
lat | Latitude from -90.0 to +90.0, where negative is south. | Float | 39.8967 | |
lon | Longitude from -180.0 to +180.0, where negative is west. | Float | -143.8956 | |
type | Source of location data; recommended when passing lat/lon. | Integer | 2 | IAB recommended |
ipservice | Service or provider used to determine geolocation from IP address if applicable (i.e., type = 2). | Integer | 3 | |
county | Country using ISO-3166-1 Alpha-3. | String | "USA" | |
region | Region code using ISO-3166-2; 2-letter state code if USA. | String | "CA" | |
metro | Google metro code; similar to but not exactly Nielsen DMAs. | String | "828" | |
city | City using United Nations Code for Trade and Transport Locations | String | "US SRU" | http://www.unece.org/cefact/locode/service/location |
zip | Zip/Postal Code | String | "95060" |
2.1.11 User Object
Field Name | IAB Open RTB Description | Type | Sample Value | Notes |
id | Unique consumer ID of this user on the exchange. | String | "e6f5a0b3181a40 36bcb1178d99428f43" | IAB recommended. |
buyeruid | Buyer-specific ID for the user as mapped by the exchange for the buyer. At least one of buyeruid or id is recommended. | String | "57839052-49023" | IAB recommended |
ext.gdpr_consent | Extension used for GDPR consent string: Conveys user consent when GDPR regulations are in effect, containing the data structure developed by the GDPR Consent Working Group under the auspices of IAB Europe. | String | “BOQfmh_OQfmiAAKACBENBQ-AAAAdt7_______9______9uz_ Gv_v_f__33e8__9v_h_7_-___u_-33d4-_1vX99yPk1-7fNr1tp3c6uWsSJB” | IAB recommended for EEA supply, as if the request is subject to GDPR regulations (i.e., Regs.ext.gdpr = 1). The default sense of consent under GDPR is “opt-out” and as such, an omitted consent string in a request subject to GDPR would need to be interpreted as equivalent to the user fully opting out of all defined purposes for data use by all parties. |
2.1.12 User Object – ID extension
Magnite CTV has added an extension to the User object to support the rise of “universal” user buyeruid (aka “synced user ids”). Currently, there is support for the following id services, with more in the planning stages:
- adserver.org, which has theTradeDesk support.
If a DSP would like to receive this extension, please contact magnite-rtb@magnite.com and request that this extension be enabled.
Field Name | IAB Open RTB Description | Type | Sample Value | Notes |
eids | Extended Ids: Array of universal / shared ID values | Array | Magnite CTV exchange: IMPORTANT - If a DSP would like to receive this extension, please contact magnite-rtb@magnite.com | |
eids.source | Source organization: Domain of organization managing the shared id | String | “adserver.org” | |
eids.uids | Universal IDs: Array of id values for the user | Array | ||
eids.uids.id | Id for the user | String | “43f888e1-2941-4b9f-8dc9-1ffb631b7786” | |
eids.uids. ext.rtiPartner | Real time ID partner code: Partner code for specific user id ‘family’ | String | “TDID" |
Here’s is a complete example of the User Object with an ID Extension:
"user": { "id": "W13bZtHM5KUAAEQRVFsAAAAL", "ext": { "eids": [{ "source": "adserver.org", "uids": [{ "id": "43f888e1-2941-4b9f-8dc9-1ffb631b7786", "ext": { "rtiPartner": "TDID" } }] }] } }
Here's an example of an inbound Liveramp RTB example:
"user": { "ext": { "eids": [{ "source": "liveramp.com", "uids": [{ "id": "XY1000bIVBVah9ium-sZ3ykhPiXQbEcUpn4GjCtxrrw2BRDGM" }] }] } }
2.1.13 Regulations Object
Field Name | Description | Type | Sample Value | Notes |
coppa | US FTC COPPA flag: Flag indicating if this request is subject to the COPPA regulations established by the USA FTC, where 0 = no, 1 = yes. | Integer | 1 | Magnite CTV exchange: When set to true (=1), the following information is suppressed: |
ext.gdpr | Extension used for GDPR consent | Integer | "gdpr": 0 | In an extension object: Signals whether the request is subject to GDPR regulations. |
ext.us_privacy | California Consumer Protection Act (“CCPA”) CCPA flags, as passed by publisher to Magnite CTV | String | “1YNY” | Magnite CTV exchange: In an extension object: Passed the CCPA string data supplied by a publisher. |
2.1.14 PMP Object
Field Name | IAB Open RTB Description | Type | Sample Value | Notes |
private_auction | Private transaction flag: Indicator of auction eligibility to seats named in the Direct Deals object, where 0 = all bids are accepted, 1 = bids are restricted to the deals specified | Integer | 1 | The private_auction field is present and set to 1 for all three IAB PMP marketplace types, indicating that this supply offering is not exposed to all bidders. |
deals | See Direct Deals Object below | Array of objects |
2.1.15 Direct Deals Object
Field Name | IAB Open RTB Description | Type | Sample Value | Notes |
id | Deal ID: A unique identifier for the direct deal. | String | "20140527-FL7483-WK-RB-24702" | IAB required |
bidfloor | Deal floor / strike price: Minimum bid for this impression expressed in CPM. | Float | 22.8 | |
bidfloorcur | Currency specified using ISO-4217 alpha codes. | String | "USD" | This may be different from bid currency returned by bidder if this is allowed by the exchange. |
at | Auction type: Optional override of the overall auction type of the bid request, where 1 = First Price, 2 = Second Price Plus, 3 = the value passed in bidfloor is the agreed upon deal price. Additional auction types can be defined by the exchange. | Integer | 1 | Magnite CTV supports no additional auction types beyond the IAB defined types. |
wseat | Buyer seats allowed: Whitelist of buyer seats (e.g., advertisers, agencies) allowed to bid on this deal. IDs of seats and the buyer’s customers to which they refer must be coordinated between bidders and the exchange a priori. Omission implies no seat restrictions. | Array of strings | ["400000000012-TradingDeskY”, "80000000014-AgencyA”] | |
wadomain | Advertiser domains allowed: Array of advertiser domains (e.g., advertiser.com) allowed to bid on this deal. Omission implies no advertiser restrictions. | Array of strings | ["iloveny.com", "sprite.com", “advertiser1.com”] | |
ext.guaranteed | PMP Automated Guaranteed (“AG”)marketplace type flag: Extension, which indicates that the PMP being offered in the Deal object is PMP Automated Guaranteed marketplace type, in contrast to a PMP Unreserved Fixed Rate (“UFR”). | Integer | 1 | Magnite CTV exchange: |
2.1.16 Source Object
Field Name | IAB Open RTB Description | Type | Sample Value | Notes |
complete | Complete flag: Flag indicating whether the chain contains all nodes involved in the transaction leading back to the owner of the site, app or other medium of the inventory, where 0 = no, 1 = yes. | Integer | 1 | iAB required. |
nodes | Supply Chain Nodes: Array of SupplyChainNode objects in the order of the chain. In a complete supply chain, the first node represents the initial advertising system and seller ID involved in the transaction, i.e. the owner of the site, app, or other medium. In an incomplete supply chain, it represents the first known node. The last node represents the entity sending this bid request. | Array | See examples below | iAB required. |
ver | Version of the supply chain specification in use, in the format of “major.minor”. For example, for version 1.0 of the spec, use the string “1.0”. | String | 1 | iAB required. Magnite CTV exchange: Magnite CTV supports version 1.0. |
pchain | Payment ID chain string containing embedded syntax described in the TAG Payment ID Protocol v1.0. | String | 1a4e959a1b50034a:7klg6gdmx0 | In ORTB v2.5, pchain is under the source object. For ORTB 2.2, 2.3, 2.4 integrations, pchain is under an extension in the bid object |
fd | Final Decision: Entity responsible for the final impression sale decision, where 0 = exchange, 1 = upstream source. | Integer | 0 | iAB required. |
ext.schain | Extension: Supply Chain: For full details, please see https://github.com/InteractiveAdvertisingBureau /openrtb/blob/master/supplychainobject.md | JSON object | See next section | iAB recommended. |
Field Name | IAB Open RTB Description | Type | Sample Value | Notes |
complete | Complete flag: Flag indicating whether the chain contains all nodes involved in the transaction leading back to the owner of the site, app or other medium of the inventory, where 0 = no, 1 = yes. | Integer | 1 | iAB required. |
nodes | Supply Chain Nodes: Array of SupplyChainNode objects in the order of the chain. In a complete supply chain, the first node represents the initial advertising system and seller ID involved in the transaction, i.e. the owner of the site, app, or other medium. In an incomplete supply chain, it represents the first known node. The last node represents the entity sending this bid request. | Array | See examples below | iAB required. |
ver | Version of the supply chain specification in use, in the format of “major.minor”. For example, for version 1.0 of the spec, use the string “1.0”. | String | 1 | iAB required. Magnite CTV exchange: Magnite CTV supports version 1.0. |
2.1.17 Source Object – schain extension: Supply Chain Node
Field Name | IAB Open RTB Description | Type | Sample Value | Notes |
asi | Ad System Id: The canonical domain name of the SSP, Exchange, Header Wrapper, etc. system that bidders connect to. This may be the operational domain of the system, if that is different than the parent corporate domain, to facilitate WHOIS and reverse IP lookups to establish clear ownership of the delegate system. This should be the same value as used to identify sellers in an ads.txt file if one exists. | String | 1 | iAB required. |
sid | Seller Id: The identifier associated with the seller or reseller account within the advertising system. This must contain the same value used in transactions (i.e. OpenRTB bid requests) in the field specified by the SSP/exchange. Typically, in OpenRTB, this is publisher.id. | String | iAB required. | |
rid | Request Id: The OpenRTB Request Id of the request as issued by this seller. | String | 1 | iAB optional. |
name | Seller Name: The name of the company (the legal entity) that is paid for inventory transacted under the given seller_id. This value is optional and should NOT be included if it exists in the advertising system’s sellers.json file. | String | iAB optional. | |
domain | Seller Business Domain: The business domain name of the entity represented by this node. This value is optional and should NOT be included if it exists in the advertising system’s sellers.json file. | String | iAB optional. | |
hp | Handles Payments: Indicates whether this node will be involved in the flow of payment for the inventory. When set to 1, the advertising system in the asi field pays the seller in the sid field, who is responsible for paying the previous node in the chain. When set to 0, this node is not involved in the flow of payment for the inventory. For version 1.0 of SupplyChain, this property should always be 1. It is explicitly required to be included as it is expected that future versions of the specification will introduce non-payment handling nodes. Implementers should ensure that they support this field and propagate it onwards when constructing SupplyChain objects in bid requests sent to a downstream advertising system. | Integer | 1 | iAB required. |
Here’s is a complete example of the Source Object with an ID Extension:
"bidrequest" : { "id": "BidRequest1", "app": { "publisher": { "id": "00001" } } "source": { "ext": { "schain": { "ver":"1.0", "complete": 1, "nodes": [ { "asi":"directseller.com", "sid":"00001", "rid":"BidRequest1", "hp":1 } ] } } } } "bidrequest" : { "id": "BidRequest2", "app": { "publisher": { "id": "aaaaa" } } "source": { "ext": { "schain": { "ver":"1.0", "complete": 1, "nodes": [ { "asi":"directseller.com", "sid":"00001" "rid":"BidRequest1", "hp":1 }, { "asi":"reseller.com", "sid":"aaaaa", "rid":"BidRequest2", "hp":1 } ] } } } }
2.1 BID RESPONSE DETAILS
- Bid responses must include all IAB required fields.
- Bid responses must include the following IAB recommended/optional fields: Bid object fields adomain and crid.
- Bid responses must include seat for responses made to PMP bid requests where wseat is specified.
- Additionally, bidders are strongly encouraged to include the Bid object fields cid, iurl and attr, as these may be used as the IAB describes in section 4.4.3 of the OpenRTB v2.2 specification.
- Magnite CTV Exchange currently conducts 250 millisecond auctions.
- For “no bid” responses, Magnite CTV supports all the iAB-defined “no bid” signaling methods. From the iAB OpenRTB specification:
- HTTP 204 “No Content” from the bidder (most economical in terms of bandwidth).
- An empty JSON object: {}
- A well-formed no bid response: {"id": "1234567890", "seatbid": []}
- A well-formed no bid response with a reason code: {"id": "1234567890", "seatbid": [], "nbr": 2}
2.2.1 Bid Response Object
Field Name | IAB Open RTB Description | Type | Sample Value | Notes |
id | Bid request identifier: ID of the bid request to which this is a response. | String | "3074b60c-0464-4125-a752-136f78c4d00b" | IAB required. |
seatbid | Array of seatbid objects; 1or more required if a bid is to be made. | Array of objects | IAB required. | |
bidid | Bidder generated response ID to assist with logging/tracking. | String | ||
cur | Bid currency using ISO-4217 alphabetic codes | String | “USD” | Magnite CTV exchange: Required. |
nbr | Reason for not bidding | Integer | Use reason codes in the IAB specification |
2.1.18 Seat Bid Object
Field Name | IAB Open RTB Description | Type | Sample Value | Notes |
bid | Array of 1 or more Bid objects (Section 4.2.3) each related to an impression. Multiple bids can relate to the same impression. | Array of objects | IAB required. | |
seat | ID of the bidder seat on whose behalf this bid is made. | String | Magnite CTV exchange: Strongly encourages bidders to include this field in all bid responses. This data is helpful to the Magnite CTV operations team when working with a bidder in investigation of creative and/or other issues. |
2.2.2 Bid Object
Field Name | IAB Open RTB Description | Type | Sample Value | Notes |
id | Bidder generated bid ID to assist with logging/tracking. | String | IAB required. | |
impid | ID of the Imp object in the related bid request. | String | IAB required. | |
price | Bid price expressed as CPM although the actual transaction is for a single unit impression only. Note that while the type indicates float, integer math is highly recommended when handling currencies (e.g., BigDecimal in Java). | Float | IAB required. | |
nurl | Win notice URL called by the exchange if the bid wins (not necessarily indicative of a delivered, viewed, or billable ad); optional means of serving ad markup. Substitution macros may be included in both the URL and optionally returned markup. | String | Magnite CTV exchange: Check WINNER NOTIFICATION section below for details | |
adm | Optional means of conveying ad markup in case the bid wins; supersedes the win notice if markup is included in both. Substitution macros (Section 4.4) may be included. | String | ||
adid | ID of a preloaded ad to be served if the bid wins. | String | ||
adomain | Advertiser domain for block list checking (e.g., “ford.com”). This can be an array of for the case of rotating creatives. Exchanges can mandate that only one domain is allowed. | Array of stings | Magnite CTV exchange: As of 25 April 2016, this field is required in all bid responses. Please note that the value should be reflective of the actual advertiser, which may not be the domain of the click-thru URL. | |
Iurl | URL without cache-busting to an image that is representative of the content of the campaign for ad quality/safety checking. | String | Magnite CTV exchange: Strongly encourages bidders to include this field in all bid responses. | |
cid | Campaign ID to assist with ad quality checking; the collection of creatives for which iurl should be representative. | String | Magnite CTV exchange: Strongly encourages bidders to include this field in all bid responses. | |
crid | Creative ID to assist with ad quality checking. | String | Magnite CTV exchange: As of 25 April 2016, this field is required in all bid responses. | |
attr | Set of attributes describing the creative. | Array of integers | Magnite CTV exchange: Strongly encourages bidders to include this field in all bid responses. | |
dealid | Reference to the deal.id from the bid request if this bid pertains to a private marketplace direct deal. | String | Magnite CTV exchange: For PMP responses, the Bid object dealid must be included, as is required in this case by the IAB. |
Discussion of crid, adomain, cid, iurl, attr fields
crid and adomain
As of 25 April 2016, these fields are required in all bid responses. Magnite CTV actively enforces the return of an accurate adomain in the bid response.
cid, iurl and attr
Bidders are strongly encouraged to include in the Bid object the fields, cid, iurl and attr, as these may be used as the IAB describes in section 4.3.3 of the OpenRTB v2.2 specification. Your inclusion of these fields helps us work with you to maintain an efficient exchange. From the IAB specification, section 4.3.3 Bid Object
The “adomain” attribute can be used to check advertiser block list compliance. The “iurl” attribute can provide a link to an image that is representative of the campaign’s content (irrespective of whether the campaign may have multiple creatives). This enables human review for spotting inappropriate content. The “cid” attribute can be used to block ads that were previously identified as inappropriate; essentially a safety net beyond the block lists. The “crid” attribute can be helpful in reporting creative issues back to bidders. Finally, the “attr” array indicates the creative attributes that describe the ad to be served.
Discussion of compressed bid requests and bid responses
The Magnite CTV platform allows GZIP-ed bid responses from all DSP bidders. All bid requests indicate this by including the Accept-Encoding:gzip in the HTTP headers.
If you would like Magnite CTV to send bid requests that are GZIP encoded, please let us know via email to magnite-RTB@magnite.com and Magnite CTV Technical Operations will enable that for your bidder.
3. Winner Determination
Magnite CTV Open Auctions are first or second price auctions.
Magnite CTV PMP Invitation-Only Auctions (“IOA”) are either first or second-price auctions. The 'at' field is useful to detect this.
For PMP Deals, the Magnite CTV exchange expects the agreed deal price returned in the PMP bid responses under the price field. Magnite CTV sees the return of the agreed to strike price in the bid response as an” acknowledgement” of the strike price, which was presented in the bid request in the bidfloor field in the Deal object. This is a check against human or machine error.
4. AD Markup Delivery
Magnite CTV supports delivery of markup via either the adm or nurl methods, following the details specified in IAB OpenRTB spec v2.5, section 4.3 Ad Serving Options.
5. Winner Notification
Magnite CTV supports the provision of a nurl in the bid response both:
- To support the bidder’s ad markup served on the win notice per the IAB OpenRTB spec v2.5, section 4.3.1, and
- For the simple reception of a win notification signal, with any bidder supplied macros expanded, with the markup previously supplied in the bid response, per IAB OpenRTB spec v2.5, section 4.3.2.
After determining the winning bidder, and in case the nurl field is included in the winning bidder’s response, Magnite CTV sends a Win Notice. This serves as a record of when a Bidder won an auction, thereby helping bidders achieve a better accounting of the wins, separate from impressions.
The Win Notice is a HTTP GET request, sent to Win Notice URL, supplied in the bid response. It is important for a bidder to note that when a nurl is supplied in a bid response, for either of these purposes, markup delivery and/or simple win notification (with markup delivered in the adm with the bid response), the Magnite CTV exchange makes the HTTP call from the Magnite CTV exchange server. Thus, the HTTP call is decorated with headers, IP address, etc., which are reflective of the server in the exchange – NOT the original client user equipment / browser, which made the original supply side ad call to the exchange. In other words, the nurl, if supplied, is called as a server-to-server call. This is a highly reliable call, which is in no way dependent on the actual delivery and/or rendering of the creative markup on the supply.
If the Ad Markup is not supplied under the adm field in the Bid Response, Magnite CTV expects the raw ad markup in the response body of the win notice call. Magnite CTV’s Exchange sends win notifications to winning bidders but does not guarantee the delivery for these notifications.
If an error occurs during the transmission of a Win Notice, the exchange does not retransmit the Win Notice to that winning bidder. In this error case, the winning bidder may not receive the Win Notice.
Appendix
2.1.19 User ID / Cookie Sync
Magnite CTV’s platform supports the synchronization of Magnite CTV’s internal user IDs with demand partner-assigned user ID strings. The Magnite CTV system does this via a HTTP call which is separate from the auction process, for those users which do not already have a demand partners ID stored in a cookie on the user equipment (“new users for demand partner”). Upon receipt of this HTTP call, the demand partner may then assign a user ID string of its choosing and return that to the Magnite CTV platform. This demand partner-assigned user ID will then be presented to the demand partner in all future auctions for supply from this user.
Magnite CTV provides this synchronization opportunity to RTB demand partners for all supply ad calls regardless of whether the demand partner bids on and/or wins an auction for an impression opportunity from a “new user”.
For EEA supply that is subject to GDPR, the Magnite CTV platform only user ID syncs on supply for which Magnite CTV has received GDPR consent.
2.1.20 Macro Substitution
Magnite CTV’s RTB platform supports the substitutions of all the following macros:
Macro | Description |
${AUCTION_ID} | ID of the bid request; from BidRequest.id attribute. |
${AUCTION_BID_ID} | ID of the bid; from BidResponse.bidid attribute. |
${AUCTION_IMP_ID} | ID of the impression just won; from imp.id attribute. |
${AUCTION_SEAT_ID} | ID of the bidder seat for whom the bid was made. |
${AUCTION_AD_ID} | ID of the ad markup the bidder wishes to serve; from bid.adid attribute. |
${AUCTION_PRICE} | Clearing price using the same currency and units as the bid. |
${AUCTION_CURRENCY} | The currency used in the bid (explicit or implied); for confirmation only. |
A. GDPR
On GDPR effective date of 25 May 2018, Magnite CTV’s SSP provided DSPs with the following alternatives:
- The Magnite CTV platform continues to send all EEA supply, with the addition of support in the Magnite CTV SSP for Regs.ext.gdpr and User.ext.consent in OpenRTB bid requests, as detailed in the IAB “OpenRTB Advisory – GDPR” (https://iabtechlab.com/wp-content/uploads/2018/02/OpenRTB_Advisory_GDPR_2018-02.pdf), and thus allowing a DSP to read, interpret and action on these parameters, or
- The Magnite CTV platform blocks EEA supply completely from the DSP.
B. RTB 2.5 Bid Request Examples
Open Auction Browser Bid Request
{ "cur": [ "USD" ], "site": { "privacypolicy": 1, "ref": "https://www.referredURL.com/", "domain": "domain.com", "name": "site name", "publisher": { "domain": "publisher.com", "name": "Publisher name", "id": "111wm" }, "id": "11111-x8k98", "page": "https://www.page.com", "content": { "prodq": 0, "title": "content title", "url": "//videourl.com/vid/filename.mp4", "livestream": 0 } }, "at": 1, "tmax": 250, "bcat": [ "IAB11-4" ], "regs": { "ext": { "us_privacy": "1---" }, "coppa": 0 }, "id": "1869446b-865c-4c70-b054-0906c30c5b07", "source": { "ext": { "schain": { "complete": 0, "nodes": [ { "asi": "telaria.com", "sid": "111wm", "hp": 1 } ], "ver": "1.0" } }, "pchain": "1111159a1b50034a:gklfs5h375", "fd": 1 }, "imp": [ { "tagid": "11111-5h375", "id": "1", "video": { "boxingallowed": 1, "maxextended": 0, "linearity": 1, "h": 393, "skip": 0, "playbackmethod": [ 2 ], "minduration": 5, "mimes": [ "video/mp4", "application/javascript" ], "maxduration": 60, "pos": 1, "w": 700, "startdelay": 0, "api": [ 2 ], "placement": 4, "protocols": [ 2, 3, 7, 5, 6, 8 ] }, "secure": 1, "exp": 300, "instl": 0 } ], "device": { "geo": { "zip": "04011", "country": "USA", "metro": "500", "ipservice": 3, "utcoffset": -300, "lon": -69.9817, "region": "ME", "type": 2, "lat": 43.8971 }, "osv": "10.15", "os": "os x", "ip": "169.244.94.222", "language": "en", "dnt": 0, "ua": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36", "devicetype": 2 }, "user": { "ext": { "eids": [ { "uids": [ { "ext": { "rtiPartner": "extuserid" }, "id": "11111111-3722-4f11-b42d-163541836349" } ], "source": "source.org" } ] }, "buyeruid": "1111111111997840e9a79c79fb8d807820", "id": "1111111111119450eb5c2b7018dea16f4" } }
PMP CTV Bid Request
{ "app": { "privacypolicy": 1, "domain": “domain.com ", "name": "app name", "paid": 0, "publisher": { "domain": "domain.com", "name": "pub", "id": "pubpu" }, "id": "11111-pvq8u", "bundle": "bundleiDexample.ott", "content": { "prodq": 1, "livestream": 0 } }, "cur": [ "USD" ], "at": 2, "tmax": 250, "bcat": [ "IAB7-3", "IAB23", "IAB26-1", "IAB7-28", "IAB7-39" ], "regs": { "ext": {}, "coppa": 0 }, "id": "11111111-e4e6-4fc0-bdda-77c31d745362", "source": { "ext": { "schain": { "complete": 1, "nodes": [ { "asi": "telaria.com", "rid": "11111111-e4e6-4fc0-bdda-77c31d745362", "sid": "pubpu", "hp": 1 } ], "ver": "1.0" } }, "pchain": "111111111b50034a:s7kc92fexu", "fd": 0 }, "imp": [ { "ext": { "ssai": 3 }, "pmp": { "deals": [ { "at": 2, "bidfloor": 11.1, "bidfloorcur": "USD", "id": "IOA-test-dealID" }, { "at": 3, "bidfloor": 15., "bidfloorcur": "USD", "id": "UFR-test-dealID" } ], "private_auction": 1 }, "tagid": "11111-2fexu", "displaymanager": "mobiletag", "displaymanagerver": "1.0", "id": "1", "video": { "boxingallowed": 1, "battr": [ 11, 16 ], "maxextended": 0, "linearity": 1, "minbitrate": 0, "h": 450, "skip": 0, "playbackmethod": [ 3 ], "minduration": 5, "mimes": [ "video/mp4" ], "maxbitrate": 2500, "maxduration": 31, "w": 800, "startdelay": -1, "placement": 1, "protocols": [ 2, 3, 5, 6 ] }, "secure": 1, "exp": 7200, "instl": 0 } ], "device": { "ext": { "ifa_type": "sspid" }, "os": "tizen", "ifa": "11111111-5885-4d70-ba25-6424c12b52cc", "ip": "55.555.555.230", "language": "en", "dnt": 0, "ua": "Mozilla/5.0 (SMART-TV; LINUX; Tizen 3.0) AppleWebKit/538.1 (KHTML, like Gecko) Version/3.0 TV Safari/538.1,gzip(gfe),gzip(gfe)", "devicetype": 3, "geo": { "zip": "3088", "country": "AUS", "metro": "0", "ipservice": 3, "utcoffset": 600, "lon": 145.1231, "region": "VIC", "type": 2, "lat": -37.7041 }, "lmt": 0, "osv": "3.0", "model": "Tizen TV", "make": "Samsung", "dpidsha1": "111111c54c5c701d15c998741ac78d1f69fad613" }, "wseat": [], "badv": [ "blockedadomain.au", "blockedadomain2.com" ] }
2.1.21 RTB Bid Response Examples
ADM Bid Response
{ "id": "4696e8f5-3253-4120-aa66-9ea7ff3cefaa", "seatbid": [ { "bid": [ { "id": "1", "impid": "1", "price": 38.4, "adid": "111119NUSA", "adm": "<VAST version=\"2.0\">\n <Ad id………………………………..\n</VAST>", "adomain": [ "adomain.com" ], "cid": "11111Uk5aj", "crid": "111119NUSA", "cat": [ "IAB7" ], "dealid": "IOA-testdealID" } ], "seat": "111119yqeh", "group": 0 } ], "bidid": "TFWeZvDLEB", "cur": "USD" }
ADM & NURL Bid Response
{ "id": "b38326ce-e4e6-4fc0-bdda-77c31d745362", "seatbid": [ { "bid": [ { "id": "1", "impid": "1", "price": 43.484722, "adm": "<VAST version='3.0'><Ad id=……………………………</VAST>", "nurl": "https://testnurl.com", "cid": "j483f60", "crid": "pes4f88d", "adomain": [ "adomain.com" ], "dealid": "UFR-testdealID", "cat": [ "IAB20", "IAB20-4" ] } ], "seat": "1111" } ], "cur": "USD" }
Copyrights
This documentation and related technology is the sole and exclusive property of Magnite CTV, Inc.("Magnite CTV"). Unless otherwise agreed to in writing by Magnite CTV, no part of this documentation or related technology may be used, reproduced, displayed, distributed, disclosed, stored or transmitted in any form or by any means. The information contained in this documentation is confidential
Disclaimer
The information provided in this documentation is subject to change at any time. Magnite CTV does not warrant, guarantee or make any representations concerning the contents of this documentation or its applicability for any purpose. This documentation does not create any legally enforceable obligations on the part of Magnite CTV.