Skip to content

Bid Requests

AppLovin RTB bid requests always carry a single impression (this differs from the OpenRTB schema). Each request has exactly one impression object (imp).

Seats

The AppLovin RTB Exchange does not support multiple seats per bidder. It ignores the seat whitelist wseat array.

Bid Request Object

AttributeDescriptionAlways Passed?
appDetails about the publisher’s app, via an App object (see App Object).yes
atAuction type. If 1 then first-price auction; if 2 then second-price auction. Always 1 for AppLovin.yes
bappBlock list of applications by their platform-specific, exchange-independent application identifiers. On Android, these are bundle or package names (such as “com.foo.mygame”); on iOS, these are numeric IDs. Note: This field is sent on an opt-in basis. Contact your account manager if you want to be enabled for this field. A maximum of 30 bundles are passed. Bids containing other bundle IDs blocked by publishers are invalidated and do not participate in the auction.no
badvBlock list of advertisers by their top-level domains (for example, “ford.com”). A maximum of 30 domains are passed. Bids containing other domains blocked by publishers are invalidated and do not participate in the auction.no
bcatBlocked IAB categories for this impression. See Blocked Categories for a list.no
deviceDetails about the user’s device to which the impression is delivered, via a Device object (see Device Object).yes
extPlaceholder for exchange-specific extensions to OpenRTB.yes
idUnique ID of the bid requestyes
impArray of Impression objects representing the impressions offered (see Impression Object). Only one impression object is passed.yes
regsAn object that specifies any industry, legal, or governmental regulations in force for this request.no
regs.ext.ccpaFlag indicating if this request is subject to the CCPA regulations, where 0 = no, 1 = yes.yes, if regs is passed
regs.ext.consentFlag indicating if a user has granted consent, where 0 = no, 1 = yes.no
regs.ext.gdprFlag indicating if this request is subject to the GDPR regulations, where 0 = no, 1 = yes.yes, if regs is passed
regs.ext.us_privacySee OpenRTB Extension for US Privacyno
sourceAn object that provides data about the inventory source and which entity makes the final decision.no
source.extPlaceholder for exchange-specific extensions to OpenRTB. AppLovin passes schain in the extension with subobject ver, complete, and nodes. Refer to IAB’s spec.yes, if source is passed
tmaxMaximum time, in milliseconds, to submit a bid to avoid timeout. Default is 500ms.yes
userDetails about the human user of the device: the advertising audience.no
user.dataContains the name, id, and segment objects.no
user.data.nameIf applicable, contains data specific to the ad unit, entered by the publisher in the MAX Dashboard.no
user.data.segmentContains the signal field which contains any custom data the SDK bidder collects and passes to MAX SDK via the adapter (e.g. identity token required by the network so that networks or bidders can respond to a bid request).no
user.extPlaceholder for exchange-specific extensions to OpenRTB.no
user.ext.consent0 if the user did not grant consent; 1 if the user granted consent.no
user.ext.gdpr0 if the user is not subject to GDPR; 1 if the user is subject to GDPR.no
user.idAppLovin-specific device ID for each user within each app.no

App Object

AttributeDescriptionAlways Passed?
bundleApplication iTunes ID or package name. On Android, this is the package name, for example com.example.app. On iOS, this is the iTunes ID, for example 628677149.no
catIAB content categories for the Application. See OpenRTB Spec 2.5 List 5.1 for details.yes
contentObject that describes the content where the impression will appear for certain requests, including CTV inventory. Aligns to OpenRTB Specification 3.2.16.no
content.extPlaceholder for exchange-specific extensions to OpenRTB, including CTV inventory.no
content.urlURL of the content, for buy-side contextualization or review.no
extPlaceholder for exchange-specific extensions to OpenRTB.no
ext.orientation_lockIndicates device orientation: portrait or landscape.no
idApplication ID on AppLovin RTByes
nameApplication name on AppLovin RTBno
publisherDetails about the publisher of the app.yes
publisher.extExtension object containing additional publisher information. This contains the installed_sdk object which has fields id, and subobject SDK_version with SDK bidder name and version details. For DSP bidders, id will always be "APPLOVIN_EXCHANGE".no
publisher.idThe publisher’s AppLovin ID. Publishers should add this value to their app-ads.txt file.yes
publisher.nameThe publisher’s name.yes
storeurlThe URL for the app in the App Store or Google Play Store. Used for app-ads.txt compliance.yes
verApplication version, passed when available.no

Device Object

AttributeDescriptionAlways Passed?
carrier (optional)Carrier of device on a cellular network, or ISP of device on WiFi.no
connectiontypeType of connection as per Table 5.22 of the OpenRTB 2.5 spec
  • 0 unknown — always pass 0 if the SDK signal is not present.
  • 1 Ethernet — if device is connected via Ethernet (Android only)
  • 2 Wifi — if device is connected via WiFi (Android / iOS)
  • 3 Cellular — if device is connected through EDGE, 3G, LTE, etc. (Android / iOS)
no
devicetypeThe general type of device. Set to 1 for mobile and tablets. See OpenRTB Spec 2.5 Table 5.21 for details.no
dntSpecifies whether the “Do Not Track” feature is enabled in the device. If 0, then DNT is set to false. If 1, then DNT is set to true. This parameter is omitted if DNT is not passed by the SDK or on iOS 5 or lower.no
extPlaceholder for exchange-specific extensions to OpenRTB.no
ext.atts(iOS Only) An integer passed to represent the app’s app tracking authorization status:
  • 0 = not determined
  • 1 = restricted
  • 2 = denied
  • 3 = authorized
no
ext.ifvIDFV of device in that publisher. Only passed when IDFA is unavailable or all zeros.no
geoLocation of the device, assumed to be the user’s current location, defined by a Geo object.yes
hHeight of the screen in physical pixels. This may be dependent on the device orientation. Note: This can differ from banner.h.no
hwvHardware version of the deviceno
ifa (optional)Apple IFA or Google Advertising ID. Google Advertising ID (Android) is lowercase by default; IFA (iOS) is uppercase by default. If raw is not available then this is not passed. Not passed in requests from countries subject to GDPR if the user does not give consent.no
ipIPv4 address of the device. Not passed in requests from countries subject to GDPR if the user does not give consent.yes
ipv6 (optional)IPv6 address of the device. When ipv6 is present, ip is 255.255.255.255 by default. Not passed in requests from countries subject to GDPR if the user does not give consent.no
js1 if the device supports JavaScript; otherwise 0. (Always 1.)yes
languageBrowser language, using ISO-639-1-alpha-2.no
lmt“Limit Ad Tracking” signal commercially endorsed (for example by iOS, Android), where 0 = tracking is unrestricted, 1 = tracking must be limited per commercial guidelinesno
makeDevice make (for example, "Apple")no
mccmncMobile Country code and Mobile Network Code concatenated by a dash (e.g. 310-005). See the list of Mobile Country Codes for more details.no
modelModel of the device (for example, "iPhone"). iOS will show the full device model name, for example "iPhone 10,1", if known, or just for example "iPhone" if not. Android will have detailed model information such as "SAMSUNG-SM-G900A".no
osOperating system of the device, either "iOS" or "Android".no
osvOperating system version of the device, for example "3.1.2".no
pxratioThe ratio of physical pixels to device-independent pixels. A float value from 0.74 through 4.0.yes
uaUnprocessed User-Agent string from HTTP headersno
wWidth of the screen in physical pixels. This may be dependent on the device orientation. Note: This can differ from banner.w.no

Geo Object

AttributeDescriptionAlways Passed?
cityCity of the device. Based on the IP address & Maxmind database.no
countryCountry of the device. Based on the IP address & Maxmind database. Passed as country code using ISO-3166-1-alpha-3.no
dmaNielsen DMA code based on IP address.no
extPlaceholder for exchange-specific extensions to OpenRTB.no
ext.ispInternet Service Provider name.no
ext.orgInternet Service Provider name.no
ipserviceService or provider used to determine geolocation from IP address if applicable (that is, type = 2). Refer to List 5.23 in the OpenRTB Spec 2.5 for more details.no
localeLanguage and country of the device. Example us_en signifies English as language and the United States as the country.no
metroZip code of the device. Based on the IP address & Maxmind database.no
regionRegion code using ISO-3166-2; two-letter state code if USA. Always derived from IP address, never a reverse geocode from lat / lon.no
typeSource of location data; recommended when passing lat / lon. Refer to List 5.20 in the OpenRTB Spec 2.5 for more details.no
zip (optional)Zip code of the user. Always derived, never a reverse geocode from lat / lon.no

Impression Object

An AppLovin RTB bid request always carries a single impression (this differs from the OpenRTB schema). Each request has exactly 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 either include only a banner or video sub-object, or it may include both such objects.

AttributeDescriptionAlways Passed?
bannerA Banner object (see Banner Object). This is required if this impression is offered as a banner ad opportunity.only for banner impressions
bidfloorCPM minimum bid amount. Default currency is USD.no
displaymanager“applovin” when the SDK is present.no
displaymanagerserverAppLovin SDK version passed from the SDK, otherwise not passed.no
expAdvisory as to the number of seconds that may elapse between the auction and the actual impression. Fixed value of 14400 = 4 hours × 3600 seconds/hour.yes
extPlaceholder for exchange-specific extensions to OpenRTB.no
ext.skadnSupport for Apple’s SKAdNetwork. See the OpenRTB SKAdNetwork extension for additional details.no
ext.skadn.skadnetidsA 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.maxIABTL list containing the max entry ID of SKAdNetwork ID. 
ext.skadn.skadnetlist.exclComma-separated list of integer IABTL registration IDs to exclude from IABTL shared list. 
ext.skadn.sourceappID of publisher app in Apple’s App Store. Matches app.bundle.yes (if ext.skadn is passed)
ext.skadn.versionVersion 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.versionsArray 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.skadnetidsIDs associated with Advanced Bidders only.no
idA unique identifier for the impression within the bid request. Typically the value starts with 1, then increments up to «n» for «n» impressions.yes
instlIndicates if impression is offered as an interstitial opportunity. Set to 1 for full screen (interstitial), or 0 if interstitial is not available.yes
metricAn array of Metric objects (see Metric Object).yes
nativeA Native object (see Native Object)—required if this impression is offered as a native ad opportunity.only for native impressions
rwddIndicates whether the user receives a reward for viewing the ad, where 0 = no, 1 = yes.yes
secureFlag 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
tagidIdentifier 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
videoA Video object (see Video Object)—required if this impression is offered as a video ad opportunity.only for video impressions

Metric Object

AttributeTypeDescription
typestringType 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_banner
  • session_depth_full
  • session_depth_medium_rectangle
  • session_depth_native
  • session_depth_rewarded
valuefloatNumber 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 within their current app session, or if the user has been inactive for 30 minutes.
vendorstringSource 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

AttributeDescriptionAlways Passed?
apiList 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
battrBlocked creative attributes. See OpenRTB Spec 2.5 Table 5.3 for details.yes
companiontypeSupported 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
ext.videotype"rewarded" if it’s a rewarded requestno
hHeight of the player in pixels.yes
linearityIndicates whether the impression must be linear. This is set to 1 for all requests.yes
maxbitrateMaximum bitrate in Kbps.yes
maxdurationMaximum video ad duration in seconds.yes
mimesContent MIME types supported. video/mp4 is supported.yes
minbitrateMinimum bitrate in Kbps.yes
mindurationMinimum video ad duration in seconds.yes
placementPlacement type for the impression. See OpenRTB Spec 2.5 Table 5.9 for details.yes
playbackmethodAllowed playback methods. If none specified, assume all are allowed. See OpenRTB Spec 2.5 Table 5.10 for details.yes
plcmtVideo placement subtype for the impression. See List: Plcmt Subtypes — Video in AdCOM Specification 1.0.yes
posAd position on screen. See OpenRTB Spec 2.5 Table 5.4 for details.no
protocolsArray 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/3.0. See OpenRTB Spec 2.5 Table 5.8 for details.yes
skipafterNumber of seconds a video must play before skipping is enabled. This is only applicable if the ad is skippableyes
skipminVideos of total duration greater than this number of seconds can be skippable. This is only applicable if the ad is skippable.yes
startdelayIndicates 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
wWidth of the player in pixels.yes
AttributeDescriptionAlways Passed?
apiList 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
battrBlocked creative attributes for banner. See OpenRTB Spec 2.5 Table 5.3 for details.yes
btypeAn 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 requestno
formatArray of format objects representing the banner sizes permitted. Height (h) and width (w) available to pass. If none are specified, then AppLovin recommends that you use the Bidrequest.imp.banner.h and Bidrequest.imp.w attributes.no
hHeight of the impression in pixels.yes
idA unique identifier for this object. Values usually start at 1 and increase with each object; should be unique within an impression.no
posAd position on screen. See OpenRTB Spec 2.5 Table 5.4 for details. AppLovin RTB will always pass 1 = Above the Fold.yes
wWidth 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.

AttributeDescriptionAlways Passed?
apiList 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
battrBlocked creative attributes for the native ad. See OpenRTB Spec 2.5 Table 5.3 for details.yes
eventtrackersArray 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
requestRequest payload complying with the Native Ad Specification. Note that this is a string.yes
request.assetsAn array of Asset Objects. Any bid must comply with the array of elements expressed by the Exchange.yes
request.assets[«n»].dataData object for ratings, prices, etc.yes
request.assets[«n»].idUnique asset ID, assigned by exchange.yes
request.assets[«n»].img.hminThe 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 transmitted. 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.typeType 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.wminThe 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 transmitted. 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»].requiredSet to 1 if asset is required (exchange will not accept a bid without it).yes
request.contextThe context in which the ad appears; set to 1501.yes
request.privacySet 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
verVersion 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": 2,
"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": 2,
"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": 1000,
  "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": 1,
        "maxduration": 120,
        "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": {
    "coppa": 0,
    "ext": {
      "ccpa": 0,
      "gdpr": 0
    }
  },
  "source": {
    "ext": {
      "schain": {
        "ver": "1.0",
        "complete": 1,
        "nodes": [
          {
            "asi": "applovin.com",
            "sid": "61310",
            "rid": "eb3ebe82eb5223c2525d46bd3bef213649466b0a",
            "hp": 1
          }
        ]
      }
    }
  }
}