Appearance
Asset purity capturing image metadata, planogram compliance, stock status, recognition outputs, and device-related information used for evaluating asset performance and stocking behavior.
GET /Controllers/AssetPurity.ashx?action=list&dateFrom=2026-10-01&dateTo=2026-10-30&start=0&limit=50&asArray=0Required capture date range
Every list request must supply an effective range on PurityDateTime spanning at most 30 days from its start date to its end date: for example, dateFrom=2026-09-10&dateTo=2026-10-10 is accepted and 2026-09-09 to 2026-10-10 is not. This applies to direct API calls, integrations, grids, exports, aggregates and grouped lists, for every list type: Default, BackOffice, ImageLog and Vision. Supplying an asset, outlet, device or client ID does not remove this requirement. The server does not insert a default range or silently shorten the range you request.
The simplest form is the pair dateFrom=yyyy-MM-dd&dateTo=yyyy-MM-dd. When named parameters supply the range, both are required if either is supplied. dateFrom includes midnight at the beginning of that date; dateTo includes the entire end date. Both constrain the image capture column, PurityDateTime. Older dates are allowed: request longer histories in separate windows of up to 30 days each.
Existing UI date filters and multilevel JSON date filters can also establish the range. The server uses their effective bounds, including date equality and supported relative periods. A bound on CreatedOn or ModifiedOn, an upper bound alone, a lower bound alone, a not-equal/null/empty check, or quick search alone does not establish the required capture range. AND constraints narrow the range; every OR branch must be bounded, or be constrained by an outer capture range. The overall effective window must fit the limit even when separate OR branches select disjoint dates.
Filter precedence: Existing UI or multilevel date filters on PurityDateTime take precedence over dateFrom/dateTo. When such filters are present, the named parameters are ignored and no extra named date predicates are appended. The existing filters must themselves establish a valid bounded capture range within the limit; incomplete, malformed or oversized filters are rejected even if named dates would be valid. Date filters on other columns do not suppress the capture-range requirement or the named fallback.
For forAlerts=true, the alert's capture timestamps also constrain the effective range. The same maximum applies; supply an explicit narrower range when an alert spans more than 30 days.
Missing, invalid and oversized ranges return HTTP 400 Bad Request before image list/count/export queries execute. Correct the request before retrying. Example error response:
json
{
"success": false,
"code": "DATE_RANGE_REQUIRED",
"info": "Provide both start and end bounds on PurityDateTime, using dateFrom/dateTo (yyyy-MM-dd) or date filters.",
"maxRangeDays": 30
}| Code | Meaning |
|---|---|
DATE_RANGE_REQUIRED | The effective capture range lacks a start or end bound. |
INVALID_DATE_RANGE | Dates, a range/period expression, or named parameters are malformed; or the effective start follows the end. |
DATE_RANGE_TOO_WIDE | The effective capture range spans more than the allowed number of days from its start date to its end date. |
Read maxRangeDays from validation errors rather than assuming the limit will always remain 30. Successful list responses retain their existing shape. The UI's visible default range is chosen by the UI and submitted explicitly; direct API consumers must choose their own range.
🧩 AssetPurity List API(Response)
| Field Name | Type | Description |
|---|---|---|
| AssetPurityId | Integer | Unique identifier of the purity event |
| AssetId | Integer | ID of the asset analyzed |
| PurityDateTime | String | Timestamp when purity image was captured |
| EventTime | String | Timestamp of the related event |
| DoorOpen | String | Timestamp when the door was opened |
| DoorClose | String | Timestamp when the door was closed |
| PurityStatus | String | Comma-separated product detection results |
| TotalStock | Integer | Total stock count detected |
| ForeignProduct | Integer | Count of foreign (non-compliant) products |
| Priority | Integer | Processing priority |
| StatusId | Integer | Purity event status ID |
| ImageName | String | Filename of the processed image |
| SerialNumber | String | Serial number of the asset |
| Location | String | Name of the location |
| LocationId | Integer | Location ID |
| AssetPurityLocationId | Integer | Location ID tied to the purity event |
| PlanogramId | Integer | Planogram ID |
| PlanogramValue | String | Planogram name or code |
| PlanogramFacings | Integer | Total facings as per planogram |
| CompliantFacings | Integer | Number of facings that matched the planogram |
| EmptyFacings | Integer | Number of empty facings |
| TotalFacings | Integer | Total facings detected |
| StockPercentage | Float | Percentage of stocked facings |
| PurityPercentage | Float | Planogram compliance percentage |
| OOSPercentage | Float | Out-of-stock percentage |
| PlanogramCompliance | Float | Percentage compliance with planogram |
| ImageStatus | String | Status of the image (e.g., Unprovisioned, Processed) |
| LightIntensity | Integer | Light level recorded |
| Temperature | Float | Temperature inside the cooler |
| DoorCount | Integer | Number of doors on the asset |
| Competition | Boolean | True if competitive products detected |
| IsPrimePosition | Boolean | Indicates premium cooler position |
| LightStatus | String | Light condition in image |
| IsLightOn | Boolean | Whether light was detected |
| IsImageProcessingNotRequired | Boolean | Indicates if image processing was skipped |
| ImageCount | Integer | Number of images captured |
| SmartDeviceId | Integer | ID of the smart device |
| GatewayId | Integer | ID of the associated gateway |
| AssetType | String | Description of asset type |
| Code | String | Unique internal code |
| DoorHandleLocation | Integer | Door handle location enum value |
| Shelves | Integer | Number of shelves |
| CabinetHeight | Float | Height of cabinet |
| CabinetWidth | Float | Width of cabinet |
| ValidationStatus | String | Status of validation (e.g., Validated, Not Validated) |
| InitialRecognitionQuality | String | Initial quality rating of recognition |
| FileCreatedOn | String | Timestamp when image file was created |
| StitchedImageCropCords | String | Coordinates of crop applied on stitched image |
| StitchImageValue | String | Stitching status of the image |
| RawFileName | String | Original raw image file name |
| IsStitched | Integer | 1 if image is stitched, 0 if not |
| IsEnableCropSetting | Boolean | Whether cropping is enabled |
| SmartDeviceTypeId | Integer | Smart device type ID |
| AutomationModelId | Integer | ID of the model used for recognition |
| AutomationModelName | String | Name of the AI model |
| AutomationSettings | String | JSON config for automation settings |
| ReplenishModelId | Integer | Replenish model ID |
| POSAutomationModelId | Integer | ID of POS automation model |
| POSAutomationModelName | String | Name of the POS automation model |
| IsNovelty | Boolean | Indicates novelty item presence |
| IsUseStockPercentage | Boolean | Flag to determine if stock % should be used for ordering |
| SceneTypeId | Integer | Scene classification ID |
| SceneType | String | Scene label |
| BackOfficeUITypeId | Integer | UI configuration ID for back-office screens |
| KPI1 to KPI20 | Float | Custom KPI values for reporting |
| TotalWeight | Float | Total weight of product in image (if available) |
| ImageBodyPartResult | String | AI detection result for body parts (if enabled) |
| Image2size | Integer | Size of second image in bytes |
| Image1size | Integer | Size of first image in bytes |
| IsImageFromSurvey | Boolean | Indicates if image was collected from a survey |
| ImageReceivedFrom | Integer | Source ID of image (e.g., App, StoreAware) |
| ImageReceivedFromStr | String | Human-readable source of image |
| BeforeAfterImage | Integer | Indicates before-after image flag (0 = none) |
| IsParentAsset | Boolean | Flag indicating if the asset is parent type |
| ParentAssetId | Integer | ID of the parent asset |
| ValidationStatusId | Integer | Status ID for image validation |
| RejectReason | Integer | Code for why image was rejected |
| APIRejectReason | Integer | Code for API-based rejection |
| RejectReasonValue | String | Textual reason for rejection |
| APIRejectReasonValue | String | API-based rejection message |
| BeforeAfterImageValue | String | Description of before-after status |