Real-time device quality evaluation for programmatic advertising. Assess device signals before bidding to maximize ROI and filter fraudulent traffic.
Core Formula
Dynamically adjust bid price based on device quality assessment
The Device Quality API evaluates device signals in real-time before bidding, enabling intelligent bid decisions that maximize advertising ROI
Ad Exchange sends bid request with device & placement info
Parse OpenRTB fields and map to internal semantic structure
AI model evaluates device quality and calculates quality_score
Calculate final bid price: bid_floor × quality_score
Return BID or SKIP decision with risk level and reason codes
High-end device, stable network, good viewability metrics. Worth bidding higher to win the impression.
Moderate device quality, some risk signals detected. Bid conservatively below floor price.
Fraudulent signals detected — emulator, bot, or invalid traffic. Skip this impression entirely.
Our API evaluates device quality across multiple signal dimensions, providing comprehensive and accurate quality assessment
Evaluate device hardware characteristics including brand, model, and device type to identify premium vs low-quality devices.
Analyze operating system family and version to detect outdated or suspicious OS configurations.
Verify geographic location data including coordinates and country code to detect location spoofing.
Assess network conditions including carrier and connection type to evaluate traffic quality and user context.
Validate screen dimensions to detect emulators and ensure ad creative renders properly on the device.
Evaluate ad placement characteristics including size, position, interstitial flag, and viewability metrics.
Seamless translation from standard OpenRTB bid request fields to our semantic Device Quality API structure
| OpenRTB Field | Device Quality API Field | Description | |
|---|---|---|---|
| device.ua | → | device_profile.user_agent | User agent string |
| device.geo.lat | → | geo_profile.latitude | Latitude |
| device.geo.lon | → | geo_profile.longitude | Longitude |
| device.geo.country | → | geo_profile.country_code | Country code (ISO 3166-1) |
| device.carrier | → | network_profile.carrier_code | Carrier / ISP code |
| device.connectiontype | → | network_profile.connection_type | Connection type (WiFi, 4G, 5G...) |
| device.language | → | locale_profile.language | Device language |
| device.make | → | hardware_profile.brand | Device manufacturer |
| device.model | → | hardware_profile.model | Device model |
| device.devicetype | → | hardware_profile.device_type | Device type (phone, tablet...) |
| device.os | → | os_profile.os_family | OS family (android, ios...) |
| device.osv | → | os_profile.os_version | OS version |
| device.ifa | → | device_id_profile.advertising_id | Advertising ID (GAID/IDFA) |
| device.w | → | screen_profile.screen_width | Screen width in pixels |
| device.h | → | screen_profile.screen_height | Screen height in pixels |
| OpenRTB Field | Device Quality API Field | Description | |
|---|---|---|---|
| app.name | → | application_profile.app_name | Application name |
| app.ver | → | application_profile.app_version | Application version |
| app.bundle | → | application_profile.app_bundle | App bundle ID (e.g. com.app.name) |
| app.publisher.id | → | publisher_profile.publisher_id | Publisher identifier |
| OpenRTB Field | Device Quality API Field | Description | |
|---|---|---|---|
| imp[i].banner.w | → | placement_profile.placement_width | Ad placement width |
| imp[i].banner.h | → | placement_profile.placement_height | Ad placement height |
| imp[i].banner.pos | → | placement_profile.placement_position | Ad position on page |
| imp[i].tagid | → | placement_profile.tag_id | Placement tag identifier |
| imp[i].instl | → | placement_profile.is_interstitial | Is interstitial ad |
| imp[i].bidfloor | → | delivery_profile.bid_floor | Minimum bid price |
| imp[i].clickbrowser | → | delivery_profile.open_in_browser_on_click | Open in browser on click |
| imp[i].displaymanager | → | rendering_profile.display_manager | Display manager name |
| imp[i].displaymanagerver | → | rendering_profile.display_manager_version | Display manager version |
| imp[i].secure | → | security_profile.is_secure | Requires HTTPS |
| imp[i].metric[j].type | → | quality_metrics.metric_type | Metric type (e.g. viewability) |
| imp[i].metric[j].value | → | quality_metrics.metric_value | Metric value (0-1) |
| imp[i].metric[j].vendor | → | quality_metrics.metric_vendor | Metric vendor |
Complete request and response examples for the Device Quality evaluation endpoint
/v1/device-quality/evaluate
{
"context": {
"request_id": "req-001",
"request_source": "sdk",
"timestamp_ms": 1775606400123
},
"device_profile": {
"user_agent": "Mozilla/5.0...",
"geo_profile": {
"latitude": 25.14,
"longitude": 75.86,
"country_code": "IND"
},
"network_profile": {
"carrier_code": "70227",
"connection_type": 6
},
"locale_profile": {
"language": "en"
},
"hardware_profile": {
"brand": "Vivo",
"model": "V2356",
"device_type": 4
},
"os_profile": {
"os_family": "android",
"os_version": "15"
},
"device_id_profile": {
"advertising_id": "xxx"
},
"screen_profile": {
"screen_width": 384,
"screen_height": 860
}
},
"application_profile": {
"app_name": "FreeReels",
"app_version": "2.2.30",
"app_bundle": "com.freereels.app",
"publisher_profile": {
"publisher_id": "pub-xxx"
}
},
"exposure_signals": [
{
"placement_profile": {
"placement_width": 384,
"placement_height": 785,
"placement_position": 7,
"tag_id": "tag-1",
"is_interstitial": true
},
"delivery_profile": {
"bid_floor": 10.0,
"open_in_browser_on_click": true
},
"rendering_profile": {
"display_manager": "GoogleMobileAds",
"display_manager_version": "24.8.0"
},
"security_profile": {
"is_secure": true
},
"quality_metrics": [
{
"metric_type": "viewability",
"metric_value": 0.97,
"metric_vendor": "EXCHANGE"
}
]
}
]
}
{
"request_id": "req-001",
"results": [
{
"tag_id": "tag-1",
"bid_floor": 10.0,
"quality_score": 1.2,
"bid_price": 12.0,
"risk_level": "LOW",
"reason_codes": ["GOOD_DEVICE"],
"recommended_to_bid": true,
"decision": "BID",
"model_version": "v2.1.0"
}
],
"summary": {
"total_exposure_count": 1,
"eligible_exposure_count": 1,
"trace_id": "trace-abc-123"
}
}
quality_score
Core quality coefficient (X). Multiplied by bid_floor to get final bid price. >1.0 = premium, <1.0 = discount, 0 = skip.
bid_price
Final recommended bid price = bid_floor × quality_score.
risk_level
Risk assessment: LOW (safe), MEDIUM (caution), HIGH (likely fraud).
reason_codes
Array of rule codes explaining the quality assessment (e.g. GOOD_DEVICE, EMULATOR_DETECTED).
decision
Final recommendation: BID (participate in auction) or SKIP (abandon this impression).
The API request is organized into three major signal groups, each containing structured sub-profiles for comprehensive device evaluation
Who is the user? What device are they on? Where are they?
Which app is the user in? Who published it?
What's the ad opportunity? How much is it worth?
Integrate the Device Quality API to start making smarter bidding decisions, reduce wasted ad spend, and maximize your advertising ROI.