Impression object
An AppLovin RTB bid request always carries a single impression (this differs from the OpenRTB schema).
Each request has one impression object (imp).
If the request includes a banner object in the impression object, the impression is eligible for HTML and MRAID ads.
If the request includes a video object, the impression is eligible for VAST ads.
The impression object may include a banner object, a video sub-object, or both.
| Attribute | Description | Always passed? |
|---|
banner | A Banner object (see Banner object). This is required if this impression is a banner ad opportunity. | only for banner impressions |
bidfloor | CPM minimum bid amount. Bid price must be greater than the bid floor to participate in the auction. Default currency is USD. | no |
displaymanager | “applovin” when the SDK is present. | no |
displaymanagerver | AppLovin SDK version passed from the SDK, otherwise not passed. | no |
exp | Advisory about the number of seconds that may elapse between the auction and the actual impression. Fixed value of 14400 = 4 hours × 3600 seconds/hour. | yes |
ext | Placeholder for exchange-specific extensions to OpenRTB. | no |
ext.skadn | Support for Apple’s SKAdNetwork. See the OpenRTB SKAdNetwork extension for more details. | no, only sent to DSP bidders |
ext.skadn.skadnetids | A subset of SKAdNetworkItem entries in the publisher app’s Info.plist that are relevant to the DSP. | yes (if ext.skadn is passed) |
ext.skadn.skadnetlist.max | IABTL list containing the maximum entry ID of SKAdNetwork ID. | |
ext.skadn.skadnetlist.excl | Comma-separated list of integer IABTL registration IDs to exclude from IABTL shared list. | |
ext.skadn.sourceapp | ID of publisher app in Apple’s App Store. Matches app.bundle. | yes (if ext.skadn is passed) |
ext.skadn.version | Version of SKAdNetwork supported. Always "2.0" or higher. Dependent on both the OS version and the SDK version. Note: With the release of SKAdNetwork 2.1, this field is deprecated in favor of BidRequest.imp.ext.skadn.versions which supports an array of version numbers. | yes (if ext.skadn is passed) |
ext.skadn.versions | Array of strings containing the supported SKAdNetwork versions. Always "2.0" or higher. Dependent on both the OS version and the SDK version. | yes (if ext.skadn is passed) |
ext.skadnetids | IDs associated with Advanced Bidders only. | no |
id | A unique identifier for the impression in the bid request. Typically the value starts with 1, then increments up to «n» for «n» impressions. | yes |
instl | Indicates if impression is an interstitial opportunity. Set to 1 for full screen (interstitial), or 0 if interstitial is not available. | yes |
metric | An array of Metric objects (see Metric object). | no, only sent to DSP bidders |
native | A Native object (see Native object)—required if this impression a native ad opportunity. | only for native impressions |
rwdd | Indicates whether the user receives a reward for viewing the ad, where 0 = no, 1 = yes. | yes |
secure | Flag that indicates if the impression requires secure HTTPS URL creative assets and markup, where 0 = Non-secure, 1 = secure. If omitted, the secure state is unknown, but non-secure HTTP support can be assumed. For iOS auctions, this will always be 1 = secure. | yes |
tagid | Identifier for the specific ad placement or ad tag that was used to initiate the auction. For SDK bidders, the network placement ID for this impression. | yes |
video | A Video object (see Video object)—required if this impression is video ad opportunity. | only for video impressions |
Metric object
| Attribute | Type | Description |
|---|
type | string | Type of metric presented, using exchange-curated string names. Session duration (session_duration) is the total time a user has spent in a specific app, in seconds. Session depth (session_depth) is the total number of ads a user has seen in a given app session. A session ends after a user closes the app. Both session depth and session depth per ad format are present in the bid request. The following represent the total number of ads per format a user saw in the app session:session_depth_bannersession_depth_fullsession_depth_medium_rectanglesession_depth_nativesession_depth_rewarded
|
value | float | Number representing the value of the metric. Not present for Viewability type. Session Depth: Set to 0.0 if the user has not yet seen an ad in their current app session, or if the user has been inactive for 30 minutes. |
vendor | string | Source of the value using exchange-curated string names. If the exchange itself is the source (as opposed to a third party), EXCHANGE is always used unless specified otherwise. Viewability: Set to ias for Integral Ad Science (IAS); set to moat for Moat. Dependent on the partners that the publisher supports. If only one is supported, only one is passed. If both are supported, both are passed. Does not apply to Open Measurement Viewability. |
Video object
| Attribute | Description | Always passed? |
|---|
api | List of supported API frameworks for this impression. See OpenRTB Spec 2.5 Table 5.6 for details. If an API is not explicitly listed, it is assumed not to be supported. | no |
battr | Blocked creative attributes. See OpenRTB Spec 2.5 Table 5.3 for details. | yes |
companiontype | Supported VAST ad companion types. See OpenRTB Spec 2.5 Table 5.14 for details. Some inventory supports all companion types and others static only. | yes, only sent to DSP bidders |
ext.videotype | "rewarded" if it’s a rewarded request | no |
h | Height of the player in pixels. | yes |
linearity | Indicates whether the impression must be linear. This is 1 for all requests. | yes |
maxbitrate | Maximum bitrate in Kbps. | no |
maxduration | Maximum video ad duration in seconds. | yes |
mimes | Content MIME types supported. video/mp4 is supported. | yes |
minbitrate | Minimum bitrate in Kbps. | no |
minduration | Minimum video ad duration in seconds. | yes |
placement | Placement type for the impression. See OpenRTB Spec 2.5 Table 5.9 for details. | yes |
playbackmethod | Allowed playback methods. If none specified, assume all are allowed. See OpenRTB Spec 2.5 Table 5.10 for details. | yes |
plcmt | Video placement subtype for the impression. See List: Plcmt Subtypes — Video in AdCOM Specification 1.0. | yes, only sent to DSP bidders |
pos | Ad position on screen. See OpenRTB Spec 2.5 Table 5.4 for details. | no |
protocols | Array of supported video bid response protocols. VAST 2, VAST 3, and VAST 4 are supported. Protocols reflect what the specific inventory source supports as some inventory only supports 2.0, others both 2.0 and 3.0. See OpenRTB Spec 2.5 Table 5.8 for details. | yes, only sent to DSP bidders |
skipafter | Number of seconds a video must play before skipping is enabled. This is only applicable if the ad is skippable | yes |
skipmin | Videos of total duration greater than this number of seconds can be skippable. This is only applicable if the ad is skippable. | yes |
startdelay | Indicates the start delay in seconds for pre-roll, mid-roll, or post-roll ad placements. See OpenRTB Spec 2.5 Table 5.12 for details. | yes |
w | Width of the player in pixels. | yes |
Banner object
| Attribute | Description | Always passed? |
|---|
api | List of supported API frameworks for this impression. See OpenRTB Spec 2.5 Table 5.6 for details. If an API is not explicitly listed, it is assumed not to be supported. | no |
battr | Blocked creative attributes for banner. See OpenRTB Spec 2.5 Table 5.3 for details. | yes |
btype | An array of integers indicating blocked types of banners. See OpenRTB Spec 2.5 Table 5.2 for details. | yes |
ext.bannertype | "rewarded" if it’s a rewarded request | no |
format | Array of format objects representing the banner sizes permitted. Height (h) and width (w) available to pass. If none are specified, AppLovin recommends that you use the Bidrequest.imp.banner.h and Bidrequest.imp.banner.w attributes. | no |
h | Height of the impression in pixels. | yes |
id | A unique identifier for this object. Values usually start at 1 and increase with each object; should be unique in an impression. | no |
pos | Ad position on screen. See OpenRTB Spec 2.5 Table 5.4 for details. AppLovin RTB will always pass 1 = Above the Fold. | yes |
w | Width of the impression in pixels. | yes |
Native object
AppLovin native ads use OpenRTB Dynamic Native Ads API Specification Version 1.2.
The impression object contains the native object.
The native object contains the request field with the JSON string representation of the native request.
AppLovin does not support video assets.
| Attribute | Description | Always passed? |
|---|
api | List of supported API frameworks for this impression. See OpenRTB Spec 2.5 Table 5.6 for details. If an API is not explicitly listed, it is assumed not to be supported. | no |
battr | Blocked creative attributes for the native ad. See OpenRTB Spec 2.5 Table 5.3 for details. | yes |
eventtrackers | Array of tracking objects to run with the ad, in response to the declared supported methods in the request. Replaces imptrackers and jstracker, which are deprecated. See OpenRTB Spec 1.2 section 4.7: Event Trackers Request Object. | no |
request | Request payload complying with the Native Ad Specification. Note that this is a string. | yes |
request.assets | An array of Asset Objects. Any bid must comply with the array of elements expressed by the Exchange. | yes |
request.assets[«n»].data | Data object for ratings, prices, etc. | yes |
request.assets[«n»].id | Unique asset ID, assigned by exchange. | yes |
request.assets[«n»].img.hmin | The minimum requested height of the image, in pixels. Use this option for any rescaling of images by the client. Either h or hmin should be included. If only h is included, it should be considered an exact requirement. Set for icon image with a value of 80—require 1:1 aspect ratio. Set for main image with a value of 417—require 1.91:1 aspect ratio (1200×627, 1200×628, and 800×418 recommended). | no |
request.assets[«n»].img.type | Type ID of the image element supported by the publisher. The publisher can display this information in an appropriate format. See OpenRTB Native spec 1.2 Table 7.4 and 7.5 for details. | yes |
request.assets[«n»].img.wmin | The minimum requested width of the image, in pixels. Use this option for any rescaling of images by the client. Either w or wmin should be included. If only w is included, it should be considered an exact requirement. Set for icon image with a value of 80—require 1:1 aspect ratio. Set for main image with a value of 800—require 1.91:1 aspect ratio (1200×627, 1200×628, and 800×418 recommended). | no |
request.assets[«n»].required | Set to 1 if asset is required (exchange will not accept a bid without it). | yes |
request.context | The context in which the ad appears. Not used and always set to 1501. | no |
request.privacy | Set to 1 when the native ad supports buyer-specific privacy notice. Field is absent when the native ad doesn’t support custom privacy links or if support is unknown. | no |
request.seq | (see the layout types). 0 for the first ad, 1 for the second ad, and so on. This is not the sequence number of the content in the stream. | no |
ver | Version of the Native Ad Specification to which the request complies; set to 1.2. | yes |
Example bid request
{
"app": {
"bundle": "com.example.game",
"cat": ["IAB9-30"],
"id": "188e1f4c72744d3da3134a25",
"name": "Example Game",
"publisher": {
"id": "41c8cd761e099946e85842c11debfb4d"
},
"storeurl": "https://play.google.com/store/apps/details?id=com.example.game"
},
"at": 1,
"bcat": ["IAB8-5","IAB8-18","IAB11-4","IAB25","IAB26"],
"device": {
"carrier": "telekomde",
"connectiontype": 3,
"devicetype": 4,
"dnt": 0,
"geo": {
"city": "Barrington",
"country": "USA",
"metro": "",
"type": 2,
"zip": ""
},
"h": 1280,
"hwv": "hllte",
"ifa": "e1020eb8-fc74-454d-b420-a9763d8bc556",
"ip": "203.0.113.12",
"js": 1,
"language": "de",
"lmt": 0,
"make": "samsung",
"model": "SM-N7505",
"os": "Android",
"osv": "5.1.1",
"ua": "Mozilla/5.0 (Linux; Android 4.3; SM-N7505 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.89 Mobile Safari/537.36",
"w": 720
},
"id": "94dedeadbeefc4b8fcba406639bbf15912766bdc",
"imp": [
{
"banner": {
"api": [
3,
5
],
"battr": [
1,
2,
5,
8,
9,
14,
17
],
"btype": [
1,
4
],
"h": 480,
"pos": 1,
"w": 320
},
"displaymanager": "applovin",
"displaymanagerver": "6.1.4",
"id": "1",
"instl": 1,
"secure": 0,
"tagid": "0652dbc39a23edfd",
"video": {
"battr": [
1,
2,
3,
7,
8,
9,
14,
13
],
"companiontype": [
1,
2,
3
],
"h": 480,
"linearity": 1,
"mimes": [
"video/mp4"
],
"protocols": [
2,
3
],
"w": 320
}
}
]
}
Example native bid request
{
"app": {
"bundle": "com.example.game",
"cat": [
"IAB24"
],
"id": "81a292321de8ed119cb833e0a80c4231",
"name": "Example Game",
"publisher": {
"id": "41c8cd761e099946e85842c11debfb4d"
},
"storeurl": "https://play.google.com/store/apps/details?id=com.example.game"
},
"at": 1,
"badv": [
],
"device": {
"carrier": "verizon",
"connectiontype": 2,
"devicetype": 4,
"dnt": 0,
"geo": {
"city": "Redwood City",
"country": "USA",
"metro": "",
"type": 2
},
"h": 0,
"hwv": "",
"ifa": "12341234-1234-1234-1234-123412341234",
"ip": "255.255.255.255",
"ipv6": "2a00:79e1:abc:6b01:d516:20e2:582d:339a",
"js": 1,
"language": "en",
"lmt": 0,
"make": "",
"model": "",
"os": "Android",
"osv": "8.0.0",
"ua": "Mozilla/5.0 (Linux; Android 8.0.0; en_US; Moto Z (2) Build/ODXS27.000-00-00) AppleWebKit/000.00 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/000.00",
"w": 0
},
"id": "d628d2709c061c14ea4a2e17a52da1778534d1f5",
"imp": [
{
"displaymanager": "applovin",
"displaymanagerver": "6.0.0",
"ext": { },
"id": "1",
"native": {
"api": [],
"battr": [
1,
2,
5,
8,
9,
14,
17,
3,
4,
13
],
"request": "{\"native\":{\"assets\":[{\"id\":1,\"required\":1,\"title\":{\"len\":140}},{\"id\":2,\"img\":{\"hmin\":800,\"type\":3,\"wmin\":417},\"required\":1},{\"id\":3,\"img\":{\"hmin\":50,\"type\":1,\"wmin\":50},\"required\":1},{\"data\":{\"len\":140,\"type\":2},\"id\":4,\"required\":0},{\"data\":{\"len\":15,\"type\":12},\"id\":5,\"required\":1},\"context\":1501,\"plcmtcnt\":1,\"plcmttype\":1,\"ver\":\"1.2\"}}",
"ver": "1.2"
},
"secure": 0,
"tagid": "5ba489fc7ec59a27:NOTIFYCLEAN"
}
]
}
Example CTV bid request
{
"id": "eb3ebe82eb5223c2525d46bd3bef213649466b0a",
"at": 1,
"bcat": [
"IAB11-4",
"IAB8-5",
"test1",
"IAB8-18",
"IAB25-7",
"IAB25-1",
"IAB25-5",
"IAB25-2",
"IAB25-3",
"IAB26-1",
"IAB25-4",
"IAB26-4",
"IAB26-2",
"IAB26-3",
"IAB25-6",
"test2"
],
"tmax": 500,
"badv": [
"test2",
"test1"
],
"app": {
"name": "APPINT",
"bundle": "com.applovin.appint",
"cat": [],
"id": "a9dad9c29f02533c9462db5555561e79",
"publisher": {
"id": "61310",
"ext": {}
},
"content": {
"contentrating": "TV-PG",
"genre": "Documentary,Science",
"episode": 2,
"season": "7",
"ext": {
"channel": "AppLovin Test"
}
},
"storeurl": "https://channelstore.roku.com/details/196460",
"ext": {}
},
"device": {
"ifa": "66dcd4a1-a0ed-b2b8-7e1a-3d2ea2ecc889",
"ip": "204.14.60.221",
"language": "en",
"devicetype": 3,
"js": 0,
"geo": {
"type": 2,
"ipservice": 3,
"city": "Sidney Center",
"country": "USA",
"region": "ny",
"dma": "502",
"metro": "502",
"zip": "13839",
"ext": {
"org": "DTC Cable",
"isp": "DTC Cable"
}
},
"ext": {},
"make": "Roku",
"model": "DVP",
"os": "Roku OS",
"dnt": 0,
"lmt": 0
},
"imp": [
{
"id": "1",
"displaymanager": "applovin",
"instl": 0,
"secure": 1,
"tagid": "2f850a687d1acfdb:",
"bidfloor": 22.58823529411765,
"bidfloorcur": "USD",
"exp": 14400,
"video": {
"w": 1920,
"h": 1080,
"battr": [
1,
2,
5,
8,
9,
14,
17,
3,
4,
13
],
"mimes": [
"video/mp4",
"video/ogg",
"video/webm"
],
"placement": 1,
"pos": 1,
"minduration": 5,
"maxduration": 60,
"startdelay": -1,
"minbitrate": 1,
"maxbitrate": 280000,
"linearity": 1,
"sequence": 1,
"protocols": [
1,
2,
3,
4,
5,
6
],
"podid": "pod_1",
"podseq": 0,
"slotinpod": 0,
"ext": {
"maxsequence": 1
}
},
"rwdd": 0,
"ext": {}
}
],
"user": {
"ext": {
"gdpr": 0
},
"id": "66dcd4a1-a0ed-b2b8-7e1a-3d2ea2ecc889"
},
"regs": {
"ext": {
"ccpa": 0,
"gdpr": 0
}
},
"source": {
"ext": {
"schain": {
"ver": "1.0",
"complete": 1,
"nodes": [
{
"asi": "applovin.com",
"sid": "61310",
"rid": "eb3ebe82eb5223c2525d46bd3bef213649466b0a",
"hp": 1
}
]
}
}
}
}