-
Notifications
You must be signed in to change notification settings - Fork 2
Nimbus S2S Documentation
The Nimbus ad server is Open Real-Time Bidding (ORTB) version 2.5 compliant, however please review below as the spec has been optimized for communication performance around the Nimbus specific hybrid auctions.
Endpoint: https://[ask_solutions_engineer].adsbynimbus.com/rta/v1 Method: POST
The following headers are required with the request:
- Content-Type: application/json
- x-openrtb-version: 2.5
It is also suggested that the following headers are also sent along with the request
- Content-Encoding: gzip
Note: Nimbus is http/2 compatible and it is also recommend to use http/2 if possible
Atribute | Type | Description |
---|---|---|
imp | object array; required | Currently only an array of size 1 is supported, see section 3.2.4 |
app | object; optional | See ORTB 2.5 section 3.2.14 |
device | object; required | See ORTB 2.5 section 3.2.18 |
user | object; recommended | See ORTB 2.5 section 3.2.20 |
test | integer; default 0 | When set to one auctions are not billable and a Nimbus test creative will be served, where 0 = live mode, 1 = test mode |
wseat | string array; | See ORTB section 3.2.1 |
bseat | string array; | See ORTB section 3.2.1 |
wlang | string array; | See ORTB section 3.2.1 |
bcat | string array; | See ORTB section 3.2.1 |
badv | string array; | See ORTB section 3.2.1 |
bapp | string array; | See ORTB section 3.2.1 |
source | object; | Source object is needed if using the OM SDK |
regs | object; recommended | See ORTB 2.5 section 3.2.1 |
ext | object; required | Nimbus specific extension needed for authentication validation and session identifiers |
Atribute | Type | Description |
---|---|---|
api_key | string; required | Needed to validate the request to Nimbus, please ask your ad manager for this key |
session_id | string; required | Needed for tracing and client side rate limiting, this id should be passed for each ad request, for the entire user session and be the same for the apps life cycle |
Atribute | Type | Description |
---|---|---|
coppa | integer | See ORTB 2.5 section 3.2.3 |
ext | object; recommended | See ORTB 2.5 section 3.2.3, to be GDPR compliant, the consent value is passed in this extension |
Atribute | Type | Description |
---|---|---|
gdpr | integer; default 0 | See section gdpr compliance documentation |
us_privacy | string | See section ccpa compliance documentation) |
The impression object has been modified from the ORTB specification. Nimbus allows for both the Banner object and Video object to be present in the same Imp object. This allows for hybrid auctions to be run on the Nimbus ad server, where both static demand and video demand are part of the same auction for the same inventory. This removes the need to make two separate calls to Nimbus and unifies the competition. note: While both the banner object and video object are optional, at least 1 must be present in the request
Atribute | Type | Description |
---|---|---|
banner | object; optional | See ORTB 2.5 section 3.2.6 |
video | object; optional | See ORTB 2.5 section 3.2.7 |
instl | integer; default 0 | See ORTB 2.5 section 3.2.4 required if using Banner Adsizes 320x480 or 480x320 |
bidfloor | float; default 1.00 | This deviates from ORTB 2.5, this is the base auction floor or the minimum accepted bid value you'll allow for the auction. This is useful for demand that continue to use line items over header bidding or RTB |
secure | integer; default 1 | See ORTB 2.5 section 3.2.4 |
ext | object; required | Used to pass in the optional APS and Facebook data as well as the required position data |
Atribute | Type | Description |
---|---|---|
position | string; required | Adds meta about the placement of the impression. It allows publishers to track performance of placements, naming nomenclature is left up to the publisher. Be mindful that this affects the ability to break out reports by placements on the Nimbus dashboard. This should not be an auto incremented id, instead it should be a static string that represents the actual placement of the ad |
facebook_app_id | string; optional | Needed if integrated with facebook demand and to run them in the auction, this is equal your facebook app id |
aps | APS object array; optional | Needed if integrated with amazon's APS demand |
skadn | skadn object; optional | See IAB Spec for more details |
note: The height and width in the banner object is extremely important and it is not equal to the height and width of the device. Take special care as it effects the types of ads returned
Acceptable ad sizes for Banner.h
and Banner.w
Canonical Name | Size (WxH) |
---|---|
Banner300x50 | 300x50 |
Banner320x50 | 320x50 |
Interstitial Portrait | 320x480 |
Interstitial Landscape | 480x320 |
HalfScreen | 300x600 |
LetterBox | 300x250 |
LeaderBoard | 728x90 |
The Interstitial ad size type is special. If Interstitial Portrait or Interstitial Landscape landscape sizes are submitted in the Banner request, the Banner.Format
array will be used to allow for additional ad sizes to fill the full screen placement. This is a great way to increase fill, by allowing additional demand for the same placement.
If any other size from the above table is submitted Nimbus will ensure ONLY that ad size is returned in the response.
Atribute | Type | Description |
---|---|---|
bidfloor | float; default 2.00 | This deviates from ORTB 2.5. This floor for dictates the minimum bid value RTB demand sources are allowed to pass Nimbus for a static asset. The floor defaults to 2.00 if not set explicitly by the caller. Meaning that if you wish the floor to be 0.00, them 0.00 must be submitted |
battr | integer array; | Blocked creative attributes. Refer to ORTB 2.5 List 5.3 |
format | object array; recommended | See ORTB 2.5 section 3.2.6, is an array of supported ad sizes for the placement and is only valid given the request for a an interstitial placement, see the example bid request for an example |
w | integer | See ORTB 2.5 section 3.2.6, this is equal to a single supported ad size. For example for interstitial ads set to 320, rectangle banners set to 300, and for small banners set to 728 |
h | integer | See ORTB 2.5 section 3.2.6 this is equal to a single supported ad size. For example for interstitial ads set to 420, rectangle banners set to 250, and for small banners set to 90 |
api | integer array | See ORTB 2.5 section 3.2.6, if using the Nimbus Render SDK it is recommended that values 5 and 6 be sent as they enable MRAID, see list 5.6 |
pos | integer; recommended | See ORTB 2.5 section 3.2.6 |
vcm | integer; | See ORTB 2.5 section 3.2.6 |
Atribute | Type | Description |
---|---|---|
bidfloor | float; default 3.00 | This deviates from ORTB 2.5. This floor for dictates the minimum bid value RTB demand sources are allowed to pass Nimbus for a video asset. The floor defaults to 3.00 if not set explicitly by the caller. Meaning that if you wish the floor to be 0.00, them 0.00 must be submitted |
companionad | banner object array | See ORTB 2.5 section 3.2.7 |
companiontype | interger array | See ORTB 2.5 section 3.2.7 |
battr | integer array | Blocked creative attributes. Refer to ORTB 2.5 List 5.3 |
mimes | string array; required | See ORTB 2.5 section 3.2.7, example [video/mp4] |
minduration | integer; recommended; defaults 0 | See ORTB 2.5 section 3.2.7 |
maxduration | integer; recommended; defaults 60 | See ORTB 2.5 section 3.2.7 |
protocols | integer array; recommended | See ORTB 2.5 section section 5.8 If using the Nimbus Render SDK the suggested values are [2,3,5,6] |
w | integer | See ORTB 2.5 section 3.2.7, this is equal to the devices width |
h | integer | See ORTB 2.5 section 3.2.7, this is equal to the devices height |
startdelay | integer; default 0 | See ORTB 2.5 section 3.2.7 |
placement | integer; default 0 | Placement type for the impression. Refer to ORTB List 5.9 |
linearity | integer; default 0 | Indicates if the impression must be linear, nonlinear, etc. Refer to ORTB List 5.7 |
playbackmethod | integer array; recommended; default 2 | See ORTB 2.5 section 5.10 |
skip | integer; default 0 | See ORTB 2.5 section 3.2.7 |
delivery | integer array; | Supported delivery methods (e.g., streaming, progressive). Refer to ORTB List 5.15 |
pos | integer; recommended | See ORTB 2.5 section 3.2.7 |
api | integer array; | List of supported API frameworks for this impression. Refer to ORTB List 5.6. If an API is not explicitly listed, it is assumed not to be supported |
minbitrate | integer; recommended; default 0 | See ORTB 2.5 section 3.2.7 |
maxbitrate | integer; recommended; default 20000 | See ORTB 2.5 section 3.2.7 |
maxbitrate | integer; recommended; default 20000 | See ORTB 2.5 section 3.2.7 |
This is object normally is found with the imp[0].banner, however Nimbus requires that this object also be passed at the request level. bidrequest.format
, this is to support SSPs and DSPs that use legacy (non RTB) integrations on Nimbus. This is equal the device's height and width
Atribute | Type | Description |
---|---|---|
w | int; required | See ORTB 2.5 section 3.2.10 |
h | int; required | See ORTB 2.5 section 3.2.10 |
Information like the name, bundle, domain, and storeurl are constructed using the Nimbus databases. Therefore this is not information that is required to be sent. However, it is highly recommended to send all other metadata about your application for buyers
Atribute | Type | Description |
---|---|---|
name | string; recommended | See ORTB 2.5 section 3.2.14 |
bundle | string; recommended | See ORTB 2.5 section 3.2.14 |
domain | string; recommended | See ORTB 2.5 section 3.2.14 |
storeurl | string; recommended | See ORTB 2.5 section 3.2.14 |
cat | string array; recommended | See ORTB 2.5 section 3.2.14 |
sectioncat | string array; | See ORTB 2.5 section 3.2.14 |
pagecat | string array; | See ORTB 2.5 section 3.2.14 |
ver | string; recommended | See ORTB 2.5 section 3.2.14 |
privacypolicy | int; recommended; default 0 | See ORTB 2.5 section 3.2.14 |
paid | int; recommended; default 0 | See ORTB 2.5 section 3.2.14 |
The APS data structure is gotten from a proper invocation of the APS SDK. This information is passed to Nimbus so that it can include APS in an agnostic fair auction. Nimbus will return the APS markup in the bid response if APS wins the auction. Note the APS SDK does not send normalized data between video and static demand. The response is also different between app platforms. For Publishers using the Nimbus Request SDK this is handled for you. For Publishers making a server call to Nimbus, simply take the information your client sends you as is and pass it Nimbus. Nimbus will normalize the Data types to []string.
Atribute | Type | Description |
---|---|---|
amzn_b | any type (string or string array); required | Data from the Response from the APS SDK |
amzn_h | any type (string or string array); required | Data from the Response from the APS SDK |
amzn_vid | any type (string or string array); required | Data from the Response from the APS SDK |
amznp | any type (string or string array); required | Data from the Response from the APS SDK |
amznrdr | any type (string or string array); required | Data from the Response from the APS SDK |
amznslots | any type (string or string array); required | Data from the Response from the APS SDK |
dc | any type (string or string array); required | Data from the Response from the APS SDK |
Atribute | Type | Description |
---|---|---|
ua | string; required | See ORTB 2.5 section 3.2.18, this must be a valid webview based user-agent, not a constructed one otherwise traffic will be flagged as fraud |
geo | object; recommended | See ORTB 2.5 section 3.2.18 |
dnt | int; recommended | See ORTB 2.5 section 3.2.18 |
lmt | int; recommended | See ORTB 2.5 section 3.2.18 |
ip | string; required | See ORTB 2.5 section 3.2.18, this must be the ip on the handheld device not a server ip, if is missing the X-Forwarded-For header will be looked for the ip. If the body and header are missing the IP the request will fail |
devicetype | integer; required | See ORTB 2.5 section 3.2.18 |
make | string; required | See ORTB 2.5 section 3.2.18, if os is ios the make should be apple ; if the os is android the make should be android
|
model | string; required | See ORTB 2.5 section 3.2.18, The model of the device e.g. iPhone 11 or Pixel 3 |
os | string; required | See ORTB 2.5 section 3.2.18, this is a Nimbus + DSP requirement. os is either android or ios
|
osv | string; recommended | See ORTB 2.5 section 3.2.18, if this field is missing certain DSP buyers will not buy your inventory |
w | int; | See ORTB 2.5 section 3.2.18 |
h | int; | See ORTB 2.5 section 3.2.18 |
connectiontype | integer; | See ORTB 2.5 section 5.22 |
ifa | string; required | See ORTB 2.5 section 3.2.18, this is also known as the advertising id |
If the Geo object is missing from the Device object, the geolocation will be determined using the ip of the device and a Geo object will be constructed from that
Atribute | Type | Description |
---|---|---|
lat | float; required | See ORTB 2.5 section 3.2.19 |
lon | float; required | See ORTB 2.5 section 3.2.19 |
type | int; required | See ORTB 2.5 section 3.2.19 |
ipservice | int; recommended | See ORTB 2.5 section 3.2.19 |
country | string; required | See ORTB 2.5 section 3.2.19 |
city | string; recommended | See ORTB 2.5 section 3.2.19 |
metro | string; recommended | See ORTB 2.5 section 3.2.19 |
city | string; recommended | See ORTB 2.5 section 3.2.19 |
If the Geo object is missing from the Device object, the geolocation will be determined using the ip of the device and a Geo object will be constructed from that
Atribute | Type | Description |
---|---|---|
age | int; recommended | Nimbus specific it provides an alternative to yob
|
buyeruid | string; recommended | See ORTB 2.5 section 3.2.20, it is used to incorporate facebook into the auction and is equal to the Facebook bidder token given by the Facebook SDK |
yob | int; recommended | See ORTB 2.5 section 3.2.20 |
gender | string; recommended | See ORTB 2.5 section 3.2.20 |
keywords | string; recommended | See ORTB 2.5 section 3.2.20 |
Atribute | Type | Description |
---|---|---|
consent | string; optional | Nimbus specific, this is the IAB consent string, this string can be created by Nimbus under certain conditions, for more details ask your ad manager |
did_consent | integer; default 0 | Nimbus specific, the value can either be 0 or 1. It indicates that a user consented to GDPR/Your apps privacy and data policies for advertising |
Atribute | Type | Description |
---|---|---|
ext | object; required | Needed to pass OM SDK information |
Atribute | Type | Description |
---|---|---|
omidpn | string; required | identifier of the OM SDK integration, this is the same as the "name" parameter of the OMID Partner object |
Omidpv | string; optional | version of the OM SDK version |
{
"app": {
"bundle": "foo_bundle",
"cat": [
"IAB1"
],
"domain": "https://www.foo_app.com",
"name": "foo_app",
"paid": 0,
"privacypolicy": 1,
"publisher": {
"cat": [
"IAB1",
"IAB17",
"IAB12",
"IAB14",
"IAB9",
"IAB20",
"IAB16",
"IAB18"
],
"domain": "https://foo_app.com",
"name": "foo_app"
},
"storeurl": "https://apps.apple.com/app/foo_bundle",
"ver": "0.0.1"
},
"badv": [
"foobar.com"
],
"bapp": [
"com.foo.bar"
],
"bcat": [
"IAB_FOOBAR"
],
"device": {
"carrier": "O2",
"connectiontype": 6,
"devicetype": 1,
"dnt": 1,
"geo": {
"country": "GBR",
"ipservice": 3,
"lat": 51.4964,
"lon": -0.1224,
"metro": "0",
"type": 2
},
"ifa": "cf3af75c-a938-4326-8697-d1a629cda086",
"ip": "1.0.0.0",
"language": "en",
"lmt": 1,
"make": "Apple",
"model": "iPhone13,4",
"os": "ios",
"osv": "14.7.1",
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"
},
"ext": {
"session_id": "4a74616f-7f0e-4b03-8c4a-2035f12f6178"
},
"imp": [
{
"banner": {
"api": [
3,
5
],
"battr": [
0
],
"bidfloor": 3,
"format": [
{
"h": 480,
"w": 320
},
{
"h": 250,
"w": 300
},
{
"h": 1920,
"w": 1080
}
],
"h": 480,
"pos": 7,
"w": 320
},
"bidfloor": 3,
"clickbrowser": 0,
"displaymanagerver": "1.10.3",
"ext": {
"position": "5",
"skadn": {
"skadnetids": [
"foobar.skadnetwork"
],
"sourceapp": "foo_app_bundle",
"version": "2.0"
}
},
"instl": 1,
"secure": 1
}
],
"regs": {
"coppa": 0,
"ext": {
"gdpr": 1,
"us_privacy": "1---"
}
},
"user": {
"age": 27,
"gender": "female",
"yob": 1993
}
}
{
"app": {
"bundle": "foo_bundle",
"cat": [
"IAB1"
],
"domain": "https://www.foo_app.com",
"name": "foo_app",
"paid": 0,
"privacypolicy": 1,
"publisher": {
"cat": [
"IAB1",
"IAB17",
"IAB12",
"IAB14",
"IAB9",
"IAB20",
"IAB16",
"IAB18"
],
"domain": "https://foo_app.com",
"name": "foo_app"
},
"storeurl": "https://apps.apple.com/app/foo_bundle",
"ver": "0.0.1"
},
"badv": [
"foobar.com"
],
"bapp": [
"com.foo.bar"
],
"bcat": [
"IAB_FOOBAR"
],
"device": {
"carrier": "O2",
"connectiontype": 6,
"devicetype": 1,
"dnt": 1,
"geo": {
"country": "GBR",
"ipservice": 3,
"lat": 51.4964,
"lon": -0.1224,
"metro": "0",
"type": 2
},
"ifa": "cf3af75c-a938-4326-8697-d1a629cda086",
"ip": "1.0.0.0",
"language": "en",
"lmt": 1,
"make": "Apple",
"model": "iPhone13,4",
"os": "ios",
"osv": "14.7.1",
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"
},
"ext": {
"session_id": "4a74616f-7f0e-4b03-8c4a-2035f12f6178"
},
"imp": [
{
"bidfloor": 3,
"clickbrowser": 0,
"displaymanagerver": "1.10.3",
"ext": {
"position": "5",
"skadn": {
"skadnetids": [
"foobar.skadnetwork"
],
"sourceapp": "foo_app_bundle",
"version": "2.0"
}
},
"instl": 1,
"secure": 1,
"video": {
"bidfloor": 3,
"companionad": [
{
"h": 50,
"w": 320
}
],
"h": 926,
"linearity": 1,
"maxbitrate": 20000,
"maxduration": 60,
"mimes": [
"application/x-mpegurl",
"video/3gpp",
"video/mp4"
],
"minbitrate": 1,
"minduration": 0,
"playbackmethod": [
2
],
"protocols": [
3,
2,
6,
5
],
"skip": 0,
"startdelay": 0,
"w": 428
}
}
],
"regs": {
"coppa": 0,
"ext": {
"gdpr": 1,
"us_privacy": "1---"
}
},
"user": {
"age": 27,
"gender": "female",
"yob": 1993
}
}
This is a Nimbus specific example. ORTB does not allow for more than one creative object to be present in the Imp object. However, this would mean as a publisher that you would have to construct two separate request, which would yield two very different auction. To static allow inventory and video inventory to compete in a fair auction, we allow for one than one creative object to be submitted for a single impression. In this case we currently allow for both the Banner object
and Video Object
to coexist in the Imp Object
{
"app": {
"bundle": "foo_bundle",
"cat": [
"IAB1"
],
"domain": "https://www.foo_app.com",
"name": "foo_app",
"paid": 0,
"privacypolicy": 1,
"publisher": {
"cat": [
"IAB1",
"IAB17",
"IAB12",
"IAB14",
"IAB9",
"IAB20",
"IAB16",
"IAB18"
],
"domain": "https://foo_app.com",
"name": "foo_app"
},
"storeurl": "https://apps.apple.com/app/foo_bundle",
"ver": "0.0.1"
},
"badv": [
"foobar.com"
],
"bapp": [
"com.foo.bar"
],
"bcat": [
"IAB_FOOBAR"
],
"device": {
"carrier": "O2",
"connectiontype": 6,
"devicetype": 1,
"dnt": 1,
"geo": {
"country": "GBR",
"ipservice": 3,
"lat": 51.4964,
"lon": -0.1224,
"metro": "0",
"type": 2
},
"ifa": "cf3af75c-a938-4326-8697-d1a629cda086",
"ip": "1.0.0.0",
"language": "en",
"lmt": 1,
"make": "Apple",
"model": "iPhone13,4",
"os": "ios",
"osv": "14.7.1",
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 14_7_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148"
},
"ext": {
"session_id": "4a74616f-7f0e-4b03-8c4a-2035f12f6178"
},
"imp": [
{
"banner": {
"api": [
3,
5
],
"battr": [
0
],
"bidfloor": 2,
"format": [
{
"h": 480,
"w": 320
},
{
"h": 250,
"w": 300
},
{
"h": 1920,
"w": 1080
}
],
"h": 480,
"pos": 7,
"w": 320
},
"bidfloor": 3,
"clickbrowser": 0,
"displaymanagerver": "1.10.3",
"ext": {
"position": "5",
"skadn": {
"skadnetids": [
"foobar.skadnetwork"
],
"sourceapp": "foo_app_bundle",
"version": "2.0"
}
},
"instl": 1,
"secure": 1,
"video": {
"bidfloor": 3,
"companionad": [
{
"h": 50,
"w": 320
}
],
"h": 926,
"linearity": 1,
"maxbitrate": 20000,
"maxduration": 60,
"mimes": [
"application/x-mpegurl",
"video/3gpp",
"video/mp4"
],
"minbitrate": 1,
"minduration": 0,
"playbackmethod": [
2
],
"protocols": [
3,
2,
6,
5
],
"skip": 0,
"startdelay": 0,
"w": 428
}
}
],
"regs": {
"coppa": 0,
"ext": {
"gdpr": 1,
"us_privacy": "1---"
}
},
"user": {
"age": 27,
"gender": "female",
"yob": 1993
}
}
Atribute | Type | Description |
---|---|---|
type | string; required | allows a publisher to quickly know if this is VAST video, HTML banner, or Native |
auction_id | string; required | is a Nimbus trace id |
adomain | string array; optional | ads reported buyer domains |
bid_in_cents | int; required | the winning bid value in cents to avoid float math loss |
bid_raw | float; required | the winning bid value unrounded |
content_type | string; optional | meta data about the ad markup |
crid | string; optional | creative id reported by the buyer |
height | int; optional | height meta data about the asset |
width | int; optional | width meta data about the asset |
is_interstitial | int; | either 0 or 1 and determines if the ad size is 320x480 (interstitial) |
is_mraid | int; | either 0 or 1 and indicates is mraid.js was found in the HTML markup |
markup | string; required | markup containing the asset to render |
network | string; required | winning demand source |
trackers | Trackers (object); required | provides additional trackers that must be handled by the client, used for Native display such as Facebook |
placement_id | string; required | provides additional information about the network's winning line item. Used with legacy demand sources |
ext | ext object; optional | Additional metadata |
Atribute | Type | Description |
---|---|---|
impression_trackers | string array; optional | provides a list of trackers that the Nimbus Render SDK has to fire as a callback event to rendering the ad successfully, manually firing the tracker will fail |
click_trackers | string array; required | provides a list of click trackers that the Nimbus Render SDK has to fire as a response to a user click event, manually firing the tracker will fail |
Atribute | Type | Description |
---|---|---|
skadn | skadn object; optional | See IAB Spec for more details |
This response structure deviates from the ORTB response structure and is more publisher friendly. Because of the Nature of the dual auction, auction return types are needed so that the client knows how to handle rendering
{
"adomain": [
"foo.com",
"bar.com"
],
"auction_id": "f6bf21ae-a923-4d7f-9944-af220ff789f6",
"bid_in_cents": 100,
"bid_raw": 1.00,
"content_type": "text/html; charset=utf-8",
"crid": "foobar",
"height": 480,
"is_interstitial": 1,
"is_mraid": 1,
"markup": "<HTML>...</HTML>",
"network": "test_demand",
"placement_id": "foo_placement",
"trackers": {
"click_trackers": [
"https://dev.adsbynimbus.com/impression_tracker/bHEyNl8xMHZGU2RUTX6nKs1xDYGt0LspHN22KlZAD2DbeF002MMW2lY2gFkdW8tB91X-2MjKc7valkCGwaYlnJRaP_h6ngrJAI2gDWLJAhhw6bgYrp_-HGGwMvt2wW6eqSXRu4flNA-mZKpldTv6O7Q7QHVh6qwLzXSS5U2Ie0EVRTVixxKY77q8wGA1fRMw_0vnUvpW3Wfm8oJb4bDK4RANmrPKB0t1aZgQ0zxnCsirFb3FwnxM-CMLrXpCOXBOBU9EptcNz2D6C2sMN7EShZt1J-6KP8YLDAJze2HO9lnonh-qc_ZZ3AoHRfz9XnVbWNTwg71uUXYqQ6EsJnPiGZqm7_8JxZCRy8uVh_H7KhpnRu-icu6AJan3CdObcLX453VkGtFIIB8egQ0JJN5Lxxho1jiovynn6xbwqY_BOSMg4pnq9jpGJ7b4zTGnVfLynGXBl1ROTZdvASkBPvaB-lrJNBOPUNLeGUrhLxvv5IHFKXl19Voah7RLn8csMiDl6NyqogjWZM8v4oJWv-jKJJ2a0ZNmE2QtATcm0u5SlnkUpaK6RuGimoe_6SwrNLAJC87NQQGQp5PYQK94Pa4Dq5dVf54gFnaVsuVzak3n9YWrdBFvtaGY5W_t8wqc_f8-E1QvPI1zUTEgh-PDt-MzhbOKN2hPgbMw1Lj8iygd5RLEbtZGHqJ0V-dR467mnAE1CFXuvyrKbB3mxFTgp1a5jHl4-dqilu2XASwqi1BPPadkgeBm_IWCBIGpq3WTZdR7ZDosqqYQpg7WJicWCiBCJR8_F5nToqCLETCqLJlTA0ygz8t7yW3m3fIz5qzhC3GLeCvtqwN_9tW4aVIY1eRUSBb96d8twt9bdcT1x_thMiN3-ZWxSPuUkLqEygcrAZiBEby4Xq9nvvfsVRcTE4bpLVNAaKr35EfQIGVcJIYGyg0I4nC1Wk4VLd2bypAiWsjzqvhPVFsMnIGNMcYIIQqF0-oPd2p3Fq8S8kSY67OvoBlq3dxIV-Em8-QdPaw_gIPeNVR-S5t6SPgFW8L4xuQyGgGMHiRu1PKu1xVEJxhUcFMEE4Sd9SUAWiriKwFFm9d4JH9jQKiMEfxaGhG1t3w1Ipxpp-W_yTkrW7Jrt8qilSruf7fD8_IJ-vTkLhP83-xafFT_87lIPHxU9uy16KslJBEKROF7jRI0LRuIuck6qiNdb96R0C5BUKRPvauoGiXxFbiY15yB9MqSXBHPRK6_8NrPAWYsHpZQhNwOxVDjEpfbX0ghsQwczGTxEcjezVun0viICD4sYWq9vG_25qWw0GuhQKrSEtPCSUFEnTykP2fOwYx8QejRKZ2q-NuYHWUF53e_prcVg5vq3"
],
"impression_trackers": [
"https://dev.adsbynimbus.com/impression_tracker/OTVBZ1Fxdy1LclR5PYbemr27sca0vxLUcB4qpILD6LYcBniyWMPDXNCGubAZHxF4j3uNAzYyvU39vgdfYT1KRIyVsm5se-qR15JoJCvEkfFDIl11w7q-0gxAxuAivR8C25v3lJJoyBnbCeA5D0eZBsX36yk4ajHA5D-X9yEeYN6BTqHC-CF571SccCFUAwLs1YVT4Qadgl_ZQtiwA_haP8wyd9U6M-QFULPxnNb824_l-uWzKn5yLpKvliMP_15nL7RYdZMFh8dfzSBDQ1rQ5lX5gQkaDDR3ZZ-cGAg-Sq-z_IBLz-j6-pxXBSvQehL7xKC16dgG5Lzr8mLP0Gualns49T56240OSmikICmNNBpadV_9UtCwmDpcuzCbjS-ANNlr6jHrNzfqmaxHqIAMZ1gr97U3lXDlHqEwDUi9YTsnDpTkmlYarcsA_HGgf22Wm6QhIsh9nGjQCbDJFFIg4BKzGqFrGBDivBJzd0V4nl6wmW_jw_WWF93pnYr4zo_173FWVt8y68dstAxF6NR-2gLbmtl5o7LMUPne8zbkC6fR9XsEeIvmFvcU8i9xdj-K4ly7CT4DVHG_N-IzYYx2-GKLa5bPqISc8OLI7FMPegoMz25bZer3i3UDFs6R5unSHAAnT68iuNmJYyue86j7qmX9TiCwHG_AQkcNQugv5BnJ1vAkvVGwWQZl0AE9cPPJ5hxUDMPMCpXphRUM6gqvDYP8Tr5qJlbs6vJZPymMrIRFHGrqCjkXLilyVLlTSIkp4MF0KykxFcPhRaNUeWkW3jLveUbyn6YlfBGWKEEoPOC0-b4LR-6_7rnM2TWtvgcqTIdPBWb_T3vKJYAZ0VkD-7j4M8KT2o4rU2-oxa3whlFVK6hYuoQj74Ky4dw2WZfrq0yHKgTnaUacyUsELs9ZNiVcGN7QmF4QFv6HxXTkJUVStiDEvLoTBlHCZA_pdnnc0Q0fjY7euhByh-irBA_-EWo4bwsLgFT6PNEhJI28inTGlAeuiW6XBYcj-WSdDLJ-J_dZRY2mzuTvb32c-tZCEsMMXQM-HF-wVxI_KeC8wZrKvMMjqNmVxKEea6-07y-sTna4e4wCwSnTkVy0vCXrFdqcpy7Sj5omiZT4rRjEpnyZ6bOpecuL4L3zIqghDNxuFUUGJI7yn57VkLihUFHVPO0V9U0nD6noyAzG2CDOTrcYQJvXJsSOJibUXjGk1AfzNFTWth3nzk9SKvd0j7DLoky6FL1TThcKMch30r8epx6qlfzPuv54qeSUoxL8EJZsTJzwsvpxNXEzcphCil7MX6TQJq3WjMcZOoSKOw-Iim5gxXl8MmlguHuL0VRVIH3dOv3Ne"
]
},
"type": "static",
"width": 320
}
If Nimbus could not return an ad, you should expect a status code of 404 with a JSON body that looks like this
{
"id": "d6030ff8-5bd4-4f5d-b320-81bbd1110e0b",
"status_code": 404,
"nbr": 11,
"message": "No Bid"
}
Regarding underscores in property names: The OpenRTB spec itself is occasionally inconsistent when it comes to underscores. Nearly all properties in the spec are lowercase, no underscored. However, there’s an Anti-patterns section in the spec that references a private_auction
flag containing an underscore.
The api_key
, facebook_app_id
, and session_id
properties in our docs are both properties contained within Extension objects in the spec. As such, we include underscores in those properties as an anti-pattern to enable the reader to quickly distinguish custom fields from RTB specified fields.
We’ve seen some demand partners take this approach as well and we favored it ourselves.