OpenRTB bidRequest API
We offer our publishers an OpenRTB 2.5 bidRequest API so that integrating with BlueStack
What do you need to get integrated?
- You need to send HTTP POST requests with a JSON ad request body with OpenRTB 2.5 bidRequest API format
- You should be able to interpret HTTP status codes for the response (200, 204 and 400)
- You should already have a [BlueStack] account with an inventory set up.
- You should use the inventory PLACEMENT_CODE as part of the request URL, which is described below
How should an RTB Bid Request look like?
HTTP request headers
Key | Value | Required? |
---|---|---|
Content-Type | application/json | Yes |
x-openrtb-version | 2.5 | Yes |
Send your RTB Bid Request to this URL
https://mobile.mng-ads.com/bidrequest/[REPLACE_WITH_YOUR_PLACEMENT_CODE]
Example of RTB Bid Requests
Banner Ad
{
"id": "1582022328X56X11279X1982X17029X5961X896X50942X0X48X2X2X3012874X0X1X0X2178074X3017382X2968815X2988507X0X0X0H34dfd1fa0f38f8fb1d9d9e4d041cd471f0f9b530",
"tmax": 500,
"at": 2,
"cur": ["EUR"],
"regs": {
"ext": {
"gdpr": 1
}
},
"user": {
"buyeruid": "89a68102-a116-49f1-be4a-658b2480c3d7",
"keywords": "inall=18;inall_hr=10;",
"ext": {
"consent": "BOs832ZOs832ZAsAZBFRC3-HAAAqkAOQRZiKRoAC0NYBwAADAK4AAAQAAAAALQgAQAYCAEAiAAgAAAAAAAAAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAQ"
}
},
"app": {
"id": "2178074",
"bundle": "com.madvertise.bluestack",
"name": "FR_BlueStack_App_Android_MNG",
"storeurl": "https:\/\/play.google.com\/store\/apps\/details?id=com.madvertise.bluestack",
"cat": ["IAB6", "IAB7", "IAB9", "IAB10", "IAB12", "IAB14"]
},
"device": {
"ip": "84.14.10.74",
"ua": "Mozilla\/5.0 (Linux; U; Android 9; fr-fr; SM-J600FN Build\/PPR1.180610.011) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
"dnt": 0,
"lmt": 0,
"ifa": "89a68102-a116-49f1-be4a-658b2480c3d7",
"make": "Samsung",
"model": "SM-J600FN",
"os": "Android",
"osv": "9.0",
"devicetype": 4,
"connectiontype": 2,
"js": 1,
"carrier": "EE",
"geo": {
"lat": 51.5126912,
"lon": -0.1081602,
"type": 1,
"country": "FRA",
"region": "IDF",
"city": "Paris",
"zip": "75001"
}
},
"imp": [{
"id": "1",
"secure": 1,
"tagid": "32266",
"bidfloor": 0.5,
"bidfloorcur": "EUR",
"instl": 0,
"banner": {
"pos": 4,
"w": 320,
"h": 50,
"api": [5, 1001]
}
}]
}
VAST Video Ad
{
"id": "1582021936X56X12510X1982X18517X5961X5702X51056X8524X48X13X2XX0X1X0X9561622X3017382XXX0X0X0H5944bb9df2ac09617ad13d9effc3c6621942b1e6",
"tmax": 500,
"at": 2,
"cur": ["EUR"],
"regs": {
"ext": {
"gdpr": 1
}
},
"user": {
"buyeruid": "b879a967-37e7-4564-ab8a-6cc259846116",
"ext": {
"consent": "BOUA7l2OrUK1-AsAWBFRCxABAAAqkAOQRZiKRoAC0NYBwAADAK4AAAQAAAAALQgAQAYCAEAiAAgAAAAAAAAAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAA"
}
},
"app": {
"id": "9561622",
"bundle": "com.madvertise.bluestack",
"name": "FR_BlueStack_App_Android_MNG",
"storeurl": "https:\/\/play.google.com\/store\/apps\/details?id=com.madvertise.bluestack",
"cat": ["IAB6", "IAB9", "IAB10", "IAB12", "IAB14", "IAB20"]
},
"device": {
"ip": "37.166.247.145",
"ua": "Mozilla\/5.0 (Linux; U; Android 9; fr-; G8441 Build\/47.2.A.11.228) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
"dnt": 0,
"lmt": 0,
"ifa": "b879a967-37e7-4564-ab8a-6cc259846116",
"make": "Sony",
"model": "G8441",
"os": "Android",
"osv": "9.0",
"devicetype": 4,
"connectiontype": 6,
"js": 1,
"carrier": "Free",
"geo": {
"type": 2,
"country": "FRA"
}
},
"imp": [{
"id": "1",
"secure": 1,
"tagid": "31377",
"bidfloor": 3,
"bidfloorcur": "EUR",
"instl": 0,
"video": {
"mimes": ["video\/mp4", "video\/3gpp", "application\/javascript"],
"w": 320,
"h": 480,
"minduration": 2,
"maxduration": 30,
"playbackmethod": [1, 3],
"boxingallowed": 0,
"protocols": [1, 2, 3, 4, 5, 6],
"placement": 4
}
}]
}
Native Ad
For more info see RTB Native Ad Request Spec 1.2
{
"id": "1582022531X56X12509X1982X18516X6166X8773X51703X0X48X2X2X2951839X0X1X0X2787907X2921044XX2867714X0X0X0Hbafce55893fc8d49686be4852717c3fd5870fc0c",
"tmax": 500,
"at": 2,
"cur": ["USD"],
"regs": {
"ext": {
"gdpr": 1
}
},
"user": {
"buyeruid": "c3d3ea59-0d24-4156-9555-712e12f0cbd7",
"keywords": "inall=42;inall_hr=10;page=program",
"ext": {
"consent": null
}
},
"app": {
"id": "2787907",
"bundle": "com.madvertise.bluestack",
"name": "DE_BlueStack_app_Android_Phone_",
"storeurl": "https:\/\/play.google.com\/store\/apps\/details?id=com.madvertise.bluestack"
},
"device": {
"ip": "89.204.135.74",
"ua": "Mozilla\/5.0 (Linux; U; Android 6.0.1; de-de; SM-A300FU Build\/MMB29M) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
"dnt": 0,
"lmt": 0,
"ifa": "c3d3ea59-0d24-4156-9555-712e12f0cbd7",
"make": "Samsung",
"model": "SM-A300FU",
"os": "Android",
"osv": "6.0.1",
"devicetype": 4,
"connectiontype": 6,
"js": 1,
"carrier": "Tchibo",
"geo": {
"type": 2,
"country": "DEU"
}
},
"imp": [{
"id": "1",
"secure": 1,
"tagid": "34656",
"bidfloor": 0.3250764,
"bidfloorcur": "USD",
"native": {
"request": "{\"layout\":6,\"vers\":\"1.0\",\"assets\":[{\"id\":1,\"img\":{\"type\":3,\"w\":1200,\"h\":627}},{\"id\":2,\"img\":{\"type\":1,\"w\":50,\"h\":50}},{\"id\":3,\"title\":{\"len\":50}},{\"id\":4,\"data\":{\"type\":2,\"len\":150}},{\"id\":5,\"data\":{\"type\":12,\"len\":12}}]}"
}
}]
}
What known limitations exist?
- Only one "imp" object per Bid Request.
- Only in-app Bid Requests. We support only bid requests with the parameter "app", which target applications.
- We are using Prebid for web traffic from "site" inventory, see [Header Bidding With Prebid.js For Mobile Web]
How does an RTB Bid Response look like?
No Bid Response
We send an HTTP status code 204 (no-content) response when the bid request is valid but BlueStack has "no bid" for it.
Bid Response
Invalid Bid Request
We respond on any bid request error with the HTTP status code 400. The HTTP status code 500 is reserved for BlueStack internal server errors. The error details are communicated on x-bluestack-message HTTP header key
HTTP/1.1 400 Bad Request
Server: nginx/1.14.2
Date: Tue, 14 Apr 2020 06:48:26 GMT
Content-Type: text/html; charset=UTF-8
Connection: close
x-bluestack-message: missing raw body
Valid Bid Request
For now, our Bill notification is included on adm attribute (Ad markup containing)
{
"id": "1582022328X56X11279X1982X17029X5961X896X50942X0X48X2X2X3012874X0X1X0X2178074X3017382X2968815X2988507X0X0X0H34dfd1fa0f38f8fb1d9d9e4d041cd471f0f9b530",
"bidid": "1587043131X56X37141X10X52700X7697X7849X53919X0X3X2X2X3012874X0X1X0X6030037X3017382X2968815X2988507X0X0X0H76aeb1562c5278c5595034ec87640ce25b649d9b",
"cur": "EUR",
"seatbid": [{
"bid": [{
"id": "d343d064a31cfd1b1f4e5563f7a71a8d10736df0",
"impid": "2",
"price": 0.33936,
"adm": "<!DOCTYPE html><html><head><meta name=\"viewport\" content=\"width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0\">...",
"cid": "10",
"crid": "37141",
"adomain": ["madvertise.com"],
"attr": [],
"w": 640,
"h": 960
}],
"seat": "madvertise"
}]
}
Banner Ad
adm attribute contains HTML only.
VAST Video Ad
adm attribute contains inline VAST document. We support following protocol:
- 1 VAST 1.0
- 2 VAST 2.0
- 3 VAST 3.0
- 4 VAST 1.0 Wrapper
- 5 VAST 2.0 Wrapper
- 6 VAST 3.0 Wrapper
- 7 VAST 4.0
- 8 VAST 4.0 Wrapper
Impression contains all tracking url (that include Billing notice URL). However, we can manage burl openRTB attribute too.
Native Ad
We support RTB Native Ad Request Spec 1.2
{
"native": {
"link": {
"url": "http://madvertise.com"
},
"assets": [
{
"id": 1,
"required": 1,
"title": {
"text": "title of nativead"
}
},
{
"id": 2,
"required": 1,
"img": {
"url": "https://creative.mng-ads.com/10/5379-8078.jpg"
}
},
{
"id": 3,
"required": 1,
"img": {
"url": "https://creative.mng-ads.com/10/5379-8079.jpg"
}
},
{
"id": 4,
"required": 1,
"data": {
"value": "CTA"
}
},
{
"id": 5,
"required": 1,
"data": {
"value": "description of nativead."
}
}
]
}
}