Skip to content

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=0

Required 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
}
CodeMeaning
DATE_RANGE_REQUIREDThe effective capture range lacks a start or end bound.
INVALID_DATE_RANGEDates, a range/period expression, or named parameters are malformed; or the effective start follows the end.
DATE_RANGE_TOO_WIDEThe 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 NameTypeDescription
AssetPurityIdIntegerUnique identifier of the purity event
AssetIdIntegerID of the asset analyzed
PurityDateTimeStringTimestamp when purity image was captured
EventTimeStringTimestamp of the related event
DoorOpenStringTimestamp when the door was opened
DoorCloseStringTimestamp when the door was closed
PurityStatusStringComma-separated product detection results
TotalStockIntegerTotal stock count detected
ForeignProductIntegerCount of foreign (non-compliant) products
PriorityIntegerProcessing priority
StatusIdIntegerPurity event status ID
ImageNameStringFilename of the processed image
SerialNumberStringSerial number of the asset
LocationStringName of the location
LocationIdIntegerLocation ID
AssetPurityLocationIdIntegerLocation ID tied to the purity event
PlanogramIdIntegerPlanogram ID
PlanogramValueStringPlanogram name or code
PlanogramFacingsIntegerTotal facings as per planogram
CompliantFacingsIntegerNumber of facings that matched the planogram
EmptyFacingsIntegerNumber of empty facings
TotalFacingsIntegerTotal facings detected
StockPercentageFloatPercentage of stocked facings
PurityPercentageFloatPlanogram compliance percentage
OOSPercentageFloatOut-of-stock percentage
PlanogramComplianceFloatPercentage compliance with planogram
ImageStatusStringStatus of the image (e.g., Unprovisioned, Processed)
LightIntensityIntegerLight level recorded
TemperatureFloatTemperature inside the cooler
DoorCountIntegerNumber of doors on the asset
CompetitionBooleanTrue if competitive products detected
IsPrimePositionBooleanIndicates premium cooler position
LightStatusStringLight condition in image
IsLightOnBooleanWhether light was detected
IsImageProcessingNotRequiredBooleanIndicates if image processing was skipped
ImageCountIntegerNumber of images captured
SmartDeviceIdIntegerID of the smart device
GatewayIdIntegerID of the associated gateway
AssetTypeStringDescription of asset type
CodeStringUnique internal code
DoorHandleLocationIntegerDoor handle location enum value
ShelvesIntegerNumber of shelves
CabinetHeightFloatHeight of cabinet
CabinetWidthFloatWidth of cabinet
ValidationStatusStringStatus of validation (e.g., Validated, Not Validated)
InitialRecognitionQualityStringInitial quality rating of recognition
FileCreatedOnStringTimestamp when image file was created
StitchedImageCropCordsStringCoordinates of crop applied on stitched image
StitchImageValueStringStitching status of the image
RawFileNameStringOriginal raw image file name
IsStitchedInteger1 if image is stitched, 0 if not
IsEnableCropSettingBooleanWhether cropping is enabled
SmartDeviceTypeIdIntegerSmart device type ID
AutomationModelIdIntegerID of the model used for recognition
AutomationModelNameStringName of the AI model
AutomationSettingsStringJSON config for automation settings
ReplenishModelIdIntegerReplenish model ID
POSAutomationModelIdIntegerID of POS automation model
POSAutomationModelNameStringName of the POS automation model
IsNoveltyBooleanIndicates novelty item presence
IsUseStockPercentageBooleanFlag to determine if stock % should be used for ordering
SceneTypeIdIntegerScene classification ID
SceneTypeStringScene label
BackOfficeUITypeIdIntegerUI configuration ID for back-office screens
KPI1 to KPI20FloatCustom KPI values for reporting
TotalWeightFloatTotal weight of product in image (if available)
ImageBodyPartResultStringAI detection result for body parts (if enabled)
Image2sizeIntegerSize of second image in bytes
Image1sizeIntegerSize of first image in bytes
IsImageFromSurveyBooleanIndicates if image was collected from a survey
ImageReceivedFromIntegerSource ID of image (e.g., App, StoreAware)
ImageReceivedFromStrStringHuman-readable source of image
BeforeAfterImageIntegerIndicates before-after image flag (0 = none)
IsParentAssetBooleanFlag indicating if the asset is parent type
ParentAssetIdIntegerID of the parent asset
ValidationStatusIdIntegerStatus ID for image validation
RejectReasonIntegerCode for why image was rejected
APIRejectReasonIntegerCode for API-based rejection
RejectReasonValueStringTextual reason for rejection
APIRejectReasonValueStringAPI-based rejection message
BeforeAfterImageValueStringDescription of before-after status