Endpoint | Description | Method | Frequency |
{ServerIPOrDomainName}/api/action/GetSettingPiBySerial?serial={serial} | Device will call this endpoint to synchronize the configuration data between server and device | POST | Hourly |
{ServerIPOrDomainName}/api/action/HeartbeatLite?serial={serial} | Device will call this API to send a ping to the server to indicate that it's still able to contact |
Topic | Description | Frequency |
healthchecklog | Device will send health check payload to this topic for near real time health check monitoring | Every 5 seconds |
ffc-eventrawdata | Device will send counting data payload to this topic whenever detected moving object | Event triggered |
Data payload that device will push to server websocket topic
ProWave Data Retrieval API
Authentication
Endpoint: v1/auth/
-
Method: POST
-
Description: Authenticates the user and returns a token
-
Headers:
-
Content-Type: application/json
-
-
Request Body:
{
"username": "string",
"password": "string"
}
-
Response:
-
Success: 200 OK
-
Failure: 401 Unauthorized
-
{
"token": "string"
}
Sensor Data Retrieval
Endpoint: v1/data/occupancyraw
-
Method: GET
-
Description: Get occupancy data, i.e. total number of people in the tracking zone
-
Headers:
-
Content-Type: application/json
-
Authorization: "TokenString"
-
-
Response:
-
Success: 200 OK
-
Occupancy Data:
{
"RoiId": 1,
"CombineObjectTypeId": 1,
"ObjectCount": 5, #Number of people in tracking zone
"Timestamp": 1672889540, #UTCtime
"LocalTime": "2024-01-05 11:32:20",
"UTCTime": "2024-01-05 03:32:20",
"OccupancyTypeId": 1,
"ObjectCountUnit": 1
}
-
- Failure: 401 Unauthorized
Endpoint: v1/data/eventraw
-
Method: GET
-
Description: Get raw data for various footfall events, including In, Out, Heat Dwell,
Serve Time, Wait Time, etc. -
Headers:
-
Content-Type: application/json
-
Authorization: "TokenString"
-
- Params:
Parameter | Description | Value | Sample |
Date Start | Start date of the data | yyyymmdd | date_start=20241001 |
Date End | End date of the data | yyyymmdd | date_end=20241002 |
Time Start | Start time of the data | HHMMSS | time_start=090000 |
Time End | End time of the data | HHMMSS | time_end=180000 |
-
Response:
-
Success: 200 OK
-
{
"RoiId": 1, #Unique for each ROI defined
"MetricId": 3, #3 for Heat Dwell
"PeopleTypeId": 1,
"CombineObjectTypeId": 11,
"PeopleId": 1,
"EventEndLocalTime": "2024-11-25 04:47:59",
"EventEndTime": 1672889550,
"EventEndUTCTime": "2024-11-25 04:47:59",
"EventStartLocalTime": "2024-11-25 04:47:49",
"EventStartTime": 1672889540,
"EventStartUTCTime": "2024-11-25 04:47:49"
}
-
-
Failure: 401 Unauthorized
-
Endpoint: v1/prowave/data/heatmap
-
Method: GET
-
Description: Get 15min aggregated heatmap data
-
Headers:
-
Content-Type: application/json
-
Authorization: "TokenString"
-
- Params:
Parameter | Description | Sample |
Start Timestamp | Start date of the data | starttime=1732508403 |
End Timestamp | End date of the data | endtime=1732513804 |
*Heatmap data from the last 15min will be returned if no param is specified.
-
Response:
-
Success: 200 OK
-
{
"data": [ #multiple JSON objects will be returned
based on the start and end time range
{
"AggregationInterval": 900, #in seconds
"CombineObjectTypeId": 1,
"Data": [
{
"PasserBy": [],
"PeopleOccHeat": 0,
"PixelOccHeat": 0,
"x": 9, #in pixel
"y": 22 #in pixel
},
{
...
},
...
],
"FloorPlanId": 276,
"HeatmapHeight": 50, #in pixel
"HeatmapTypeId": 2, #for FFC data pipeline use
"HeatmapWidth": 50, #in pixel
"LocalTime": "2024-11-26 17:15:00",
"RoiId": 1,
"Timestamp": 1732612500,
"UTCTime": "2024-11-26 09:15:00"
},
...
],
"status": "ok"
}
*Note: ProWave heatmap is segmented into a 50 x 50 pixels matrix,
representing a 100m² coverage area.
-
-
PixelOccHeat is the EFFECTIVE duration a pixel get occupied, i.e. if there are >2 people in the same pixel as the same time, only consider once
-
PeopleOccHeat is the TOTAL duration a pixel get occupied, i.e. if there are >2 people in the same pixel at the same time, it is sum of all people
-
-
Failure: 401 Unauthorized
-
Not Found 404 : No heatmap data found for the specified time range
Endpoint: v1/prowave/data/pointcloud
-
Method: GET
-
Description: Get aggregated point cloud data in per frame resolution
-
Headers:
-
Content-Type: application/json
-
Authorization: "TokenString"
-
- Params:
Parameter | Description | Sample |
Start Timestamp | Start date of the data | starttime=1732508403 |
End Timestamp | End date of the data | endtime=1732513804 |
-
Response:
-
Success: 200 OK
-
{
"data": [ #multiple JSON objects will be returned based on the start and end time range
{
"timestamp": "2024-11-23 15:30:00",
"frame_id": 102,
"azimuth": [
-0.14999999105930328,
-0.14000000059604645,
-0.14000000059604645
],
"elevation": [
-1.0,
-0.9599999785423279,
-0.9300000071525574
],
"range": [
1.6967500448226929,
1.6967500448226929,
1.6967500448226929
],
"doppler": [
-0.05628000199794769,
0.7887600064277649,
-0.28168001770973206
],
"snr": [
5.639999866485596,
10.0,
45.36000061035156
],
"tid": [
0,
1
],
"posX": [
-0.912135660648346,
-0.24295669794082642
],
"posY": [
1.9702520370483398,
1.8161014318466187
],
"posZ": [
-1.8553844690322876,
0.503157377243042
]
},
...
],
"frame_rate": 5,
"status": "ok"
}
*Note: Individual points in the point cloud data are provided in polar coordinates formats, represented as the distance and angles relative to the sensor, along with the doppler (velocity of the point) and the snr (signal-to-noise ratio) of the reflected signal. "tid" field indicates the number of tracked objects in the current frame, and "posX", "posY" and "posZ" indicate the spatial location of the tracked object's centroid point in 3D space.
-
-
Failure: 401 Unauthorized
-
Not Found 404 : No point cloud data found for the specified time range
-