Test Runs
Raw lab measurement data for every test we run.
GET/test_runs
/test_runsReturns raw lab measurement data. Each test run is a single execution of a specific test on a device, potentially with different variants (lens, lighting, display mode, etc.).
Parameters
Standard PostgREST filtering. Common filters:
| Filter | Effect |
|---|---|
?device_id=eq.apple_iphone_17_pro_max | All tests for a device |
?definition_id=eq.camera_sharpness | All sharpness tests across devices |
?device_id=eq.apple_iphone_17_pro_max&definition_id=eq.camera_dynamic_range | DR tests for one device |
?variant=eq.Main Auto | Filter by variant |
Response Fields
| Field | Type | Description |
|---|---|---|
test_id | string | Unique test run identifier |
device_id | string | Device identifier |
brand | string | Manufacturer |
model | string | Device model |
definition_id | string | Test type (see list below) |
variant | string | Test variant (e.g., "Main Bright Auto", "Inner", "1x Mid Raw") |
params | object | Test parameters (lighting, distance, etc.) |
metrics | object | All measured values — structure varies by test type |
Available Test Types
Valid definition_id values, grouped by category:
Battery
battery_web_browsing_drainbattery_video_playback_200_nitsbattery_video_playback_max_brightnessbattery_gaming_drainbattery_standby_drainCamera
camera_sharpnesscamera_colorcamera_dynamic_rangecamera_video_stabilizationDisplay
display_brightnessdisplay_hdr_brightnessdisplay_sustained_brightnessdisplay_hdr_tone_mappingdisplay_color_accuracydisplay_touch_latencyPerformance
performance_geekbench_6performance_speedometerperformance_wild_life_extremeperformance_solar_bayperformance_aiSpeaker
speaker_frequency_rangespeaker_distortionspeaker_max_volumeCharging
charging_wiredcharging_wirelessOther
microphone_frequency_rangeconnectivity_transfer_speedbiometrics_fingerprintbiometrics_facial_recognitionImportant Note on metrics
The metrics object structure varies by test type. Refer to the Data Dictionary for the complete field reference for each test type. Some metrics contain deeply nested data — for example, camera_sharpness has a per-patch array, camera_dynamic_range has 41 per-step objects, and charging_wired has a per-percent time series.
Example: Get Camera Sharpness for a Device
Terminal
curl "https://api.bandicootlab.com/rest/v1/test_runs?device_id=eq.apple_iphone_17_pro_max&definition_id=eq.camera_sharpness&limit=3" \
-H "apikey: YOUR_API_KEY" \
-H "Accept-Profile: api"Example Response
Response — 200 (truncated)
[
{
"test_id": "tr_a1b2c3d4",
"device_id": "apple_iphone_17_pro_max",
"brand": "Apple",
"model": "iPhone 17 Pro Max",
"definition_id": "camera_sharpness",
"variant": "Main Bright Auto",
"params": {
"lighting": "bright",
"mode": "auto",
"zoom": "1x"
},
"metrics": {
"overall_score_lwph": 2847,
"adjusted_score_lwph": 2614,
"sharpness_center_lwph": 3102,
"sharpness_mid_lwph": 2791,
"sharpness_corner_lwph": 2248,
"chromatic_aberration": 0.42,
"all_patches": [
{
"patch_id": 1,
"region": "center",
"mtf50_lwph": 3156,
"mtf30_lwph": 3412
},
{
"patch_id": 2,
"region": "center",
"mtf50_lwph": 3048,
"mtf30_lwph": 3301
}
// ... 173 more patches
]
}
},
{
"test_id": "tr_e5f6g7h8",
"device_id": "apple_iphone_17_pro_max",
"brand": "Apple",
"model": "iPhone 17 Pro Max",
"definition_id": "camera_sharpness",
"variant": "Main Mid Auto",
"params": {
"lighting": "mid",
"mode": "auto",
"zoom": "1x"
},
"metrics": {
"overall_score_lwph": 2203,
"adjusted_score_lwph": 1987,
"sharpness_center_lwph": 2456,
"sharpness_mid_lwph": 2148,
"sharpness_corner_lwph": 1804,
"chromatic_aberration": 0.58,
"all_patches": [
// ... 175 patches
]
}
}
]The full metrics structure for each test type is documented in the Data Dictionary.