RTBlintAlpha
OpenRTB native bid request example
A valid native impression showing the trickiest encoding in OpenRTB: the Native Markup Request as a JSON string encoded exactly once.
The payload
{
"id": "req-native-1",
"at": 1,
"tmax": 300,
"app": {
"id": "app-77",
"bundle": "com.example.newsreader",
"storeurl": "https://play.google.com/store/apps/details?id=com.example.newsreader",
"publisher": { "id": "pub-12" }
},
"device": {
"ua": "Mozilla/5.0 (Linux; Android 14)",
"devicetype": 4,
"os": "Android"
},
"imp": [
{
"id": "1",
"bidfloor": 1.5,
"native": {
"request": "{"ver":"1.2","context":1,"plcmttype":1,"plcmtcnt":1,"assets":[{"id":1,"required":1,"title":{"len":90}},{"id":2,"required":1,"img":{"type":3,"w":1200,"h":627}},{"id":3,"required":0,"data":{"type":2,"len":140}}],"eventtrackers":[{"event":1,"methods":[1]}]}",
"ver": "1.2"
}
}
]
}Open this payload in the tester to validate it live, change fields, and watch which rules fire.
What to notice
- imp.native.request is a string, not an object: the Native Ads 1.2 request is JSON-encoded once and embedded.
- The inner request declares title, main image, and data assets with required flags per asset.
- eventtrackers replaces the legacy imptrackers for impression tracking in Native 1.2.
- Double-encoding this string is the most common native bug; the validator flags it as openrtb.native.request.double_encoded.