Scan Reports APIs
This section describes the APIs used by the App flow. These endpoints allow clients to: Check the processing status of one or more scans. Fetch on-demand analytical reports for a given scan.
1. Fetch Scan Statuses
Endpoint
POST /mobilesdkapi/facing/scan-statusesDescription
Returns the current processing status and metadata for one or more scans. This is typically used to show whether a scan is still in progress, completed, or failed, and to expose basic capture metadata.
Authentication
This endpoint requires a valid access token.
Headers:
x-pensa-access-token: <access_token>
X-Cognito-Username: <app_username>Request
Request body
{
"scan_ids": [1234, 5678]
}scan_ids(array, required): List of scan IDs whose status you want to query.
Response
Success response (200)
{
"data": [
{
"capture_type": "IMAGE",
"created": "2025-10-07T09:09:31.650788",
"fast_status": "IN_PROGRESS",
"frame_height": 1080,
"frame_width": 1920,
"has_out_of_service_segment": false,
"id": 1234,
"image_capture_quality": "UNIFORM",
"publish": true,
"scan_area_id": 9876,
"scan_metadata": {
"application_id": null,
"device_network_name": null,
"device_network_type": null,
"focal_length": null,
"frame_capture_rate": 1.5,
"guid": "n8s2-9c0b-4ef8-bb6d-6bb9bd380a22",
"ignore_late_upload": false,
"image_height": null,
"image_width": null,
"lens_distortion": null,
"lens_intrinsic_calibration": null,
"mobile_capture_completed": null,
"odr_status": null,
"pause_list": null,
"pipeline_name": null,
"sensor_physical_width_height": null,
"server_upload_started": "2025-10-07T09:09:31.543316"
},
"scan_timestamp": "2025-10-04T11:16:36",
"scanner_id": 3,
"shelf_scan_period_id": 24380,
"status": "IN_PROGRESS"
},
{
"capture_type": "IMAGE",
"created": "2025-10-09T11:20:49.901847",
"fast_status": "IN_PROGRESS",
"frame_height": 1080,
"frame_width": 1920,
"has_out_of_service_segment": false,
"id": 5678,
"image_capture_quality": "UNIFORM",
"publish": true,
"scan_area_id": 5432
"scan_metadata": {
"application_id": null,
"device_network_name": null,
"device_network_type": null,
"focal_length": null,
"frame_capture_rate": 1.5,
"guid": "846ebc9-9c0b-4ef8-bb6d-6bb9bd380a22",
"ignore_late_upload": false,
"image_height": null,
"image_width": null,
"lens_distortion": null,
"lens_intrinsic_calibration": null,
"mobile_capture_completed": null,
"odr_status": null,
"pause_list": null,
"pipeline_name": null,
"sensor_physical_width_height": null,
"server_upload_started": "2025-10-09T11:20:49.886430"
},
"scan_timestamp": "2025-10-04T11:16:36",
"scanner_id": 3,
"shelf_scan_period_id": 25723,
"status": "IN_PROGRESS"
}
]
}Field reference
Top-level
data(array): List of scan status items.
ScanStatusItem fields
id(int): Scan ID.scan_area_id(int): ID of the scan area associated with this scan.status(string): Current status of the scan (for example,IN_PROGRESS,COMPLETE).fast_status(string): Overall processing status of the scan (for example, IN_PROGRESS, COMPLETE) after all pipeline steps are considered.scan_timestamp(string): Timestamp when the scan was captured.created(string): Timestamp when the record was created.capture_type(string): Capture type (for example,IMAGE).frame_height(int): Frame height in pixels.frame_width(int): Frame width in pixels.has_out_of_service_segment(boolean): Indicates if the scan has an out-of-service segment.image_capture_quality(string): Capture quality classification.publish(boolean)scanner_id(int): Identifier of the scanner device.shelf_scan_period_id(int): Identifier of the shelf scan period.scan_metadata(object): Additional capture metadata (see below).
ScanMetadata fields
application_id(string)device_network_name(string)device_network_type(string)focal_length(number)frame_capture_rate(number)guid(string)ignore_late_upload(boolean)image_height(int)image_width(int)lens_distortion(array)lens_intrinsic_calibration(array)mobile_capture_completed(string)odr_status(string)pause_list(array)pipeline_name(string)sensor_physical_width_height(array)server_upload_started(string)
2. Fetch On-Demand Reports
Endpoint
POST /mobilesdkapi/facing/reports-on-demandDescription
Returns on-demand analytical reports for a given scan.
Authentication
This endpoint also requires a valid access token.
Headers:
x-pensa-access-token: <access_token>
X-Cognito-Username: <app_username>Request
Request body
{
"scan_id": 1234,
"report_types": ["ITEMS_SEEN", "OOS"]
}scan_id(int, required): ID of the scan you want to fetch reports for.report_types(array, required): List of report types to return."ITEM_SEEN""OOS"
Response
Success response (200)
A simplified example response:
{
"data": {
"ITEMS_SEEN": {
"project_report_name": "SF Item seen report",
"project_report_id": 456,
"project_name": "Sample Project",
"project_id": 999,
"scan_id": 1234,
"report": {
"product_list": [
{
"brand": "Brand A",
"brand_id": 10,
"category": "Beverages",
"category_id": 20,
"manufacturer": "Manufacturer X",
"manufacturer_id": 30,
"product": "Product A 1L",
"product_id": 1001,
"upc": "1234567890123"
},
{
"brand": "Brand B",
"brand_id": 19,
"category": "Snacks",
"category_id": 29,
"manufacturer": "Manufacturer Y",
"manufacturer_id": 39,
"product": "Product B Chips",
"product_id": 1002,
"upc": "2345678901234"
}
]
}
}
}
}Field reference
Top-level
data(object): Map of report type
Report wrapper
project_report_name(string): Readable report name.project_report_id(int): Internal identifier of the report definition.project_name(string): Name of the project associated with the scan.project_id(int): Project identifier.scan_id(int): Scan identifier the report belongs to.report(object): Report payload.
report.product_list[] items
Each element describes a product observed in the scan.
brand(string)brand_id(int)category(string)category_id(int)manufacturer(string)manufacturer_id(int)product(string)product_id(int)upc(string)
Last updated
Was this helpful?