Event Schema#
Our products (BMA, BCA, B101, B401, BMA TLC, BMA Mobile) publish structured MQTT events whenever a configured trigger fires, streaming them to your custom broker as configured under Control Center → Data transmission.
Event JSON Schema#
Download the canonical schema at events/schema/6.0/schema.json and treat it as the contract for generated models or validators. Paste payload and schema into any JSON Schema tool (for example, jsonschemavalidator.net) to confirm compatibility.
Common fields#
Every payload starts with a common envelope and then embeds one or more event-specific sections.
version,eventSchema: identify the schema release (currently6.0) and the canonical reference URL.uuid: globally unique identifier per event.tenantId: Control Center tenant that owns the device emitting the event.node: nested object describing the hardware node (device) that emitted the event, includingnode.id,node.name, and optionalnode.metadata.stream: nested object describing the video or sensor stream on the node, includingstream.id,stream.name, and optionalgeoLocation[lat, lon]coordinates that pin the stream location.
Crossing Line Event#
A Crossing Line trigger fires as soon as an object's center point crosses the configured line and emits a crossingLineEvent object with the following fields.
crossingLineEvent.classand optionalcrossingLineEvent.subClass: detected object category (for example,person,car,truck) based on the Object Classes taxonomy.crossingLineEvent.directionplus optionalcrossingLineEvent.directionName: normalized direction (in,out) and optional custom label from the trigger configuration.crossingLineEvent.lineId,crossingLineEvent.lineName: identifier and name of the configured crossing line.crossingLineEvent.timestamp: UTC timestamp of the crossing in ISO 8601 format.crossingLineEvent.trackId,crossingLineEvent.trackUuid: correlate the event with the underlying trajectory of the object.
Example: Crossing Line event
{
"crossingLineEvent":{
"class":"car",
"subClass":"van",
"direction":"in",
"lineId":"e8f82efd-82bf-499d-be17-b66371f16375",
"lineName":"cl0",
"timestamp":"2025-11-05T14:07:28.918328Z",
"trackId":1048578,
"trackUuid":"28e3681f-5398-4347-8c3d-ca64a3c25537"
},
"node":{
"id":"99031920-6239-471e-a3d7-f241b7753fd0",
"name":"BMA"
},
"stream":{
"id":"79031920-6239-471e-a3d7-f241b7753fd0",
"name":"Stream1"
},
"version": "6.0",
"eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
"uuid": "123456a7-dd2d-4016-b9ff-530ab24e5f98",
"tenantId": "e1df4def-6770-41bd-b3a8-9876549251e6"
}
Movement Path#
When Attach movement path to event is enabled, a path with absolute pixel coordinates of the object trajectory is included in the event. Up to 10 track points are sent; longer paths skip intermediate points.
Example: Crossing Line event with path
{
"crossingLineEvent":{
"class":"car",
"subClass":"van",
"direction":"in",
"lineId":"e8f82efd-82bf-499d-be17-b66371f16375",
"lineName":"cl0",
"timestamp":"2025-11-05T14:07:28.918328Z",
"trackId":1048578,
"trackUuid":"28e3681f-5398-4347-8c3d-ca64a3c25537",
"path":[
{
"h":311.0,
"timestamp":"2025-11-05T14:07:20.228986Z",
"w":325.0,
"x":1080.0,
"y":355.0
},
{
"h":348.0,
"timestamp":"2025-11-05T14:07:21.106134Z",
"w":376.0,
"x":1037.0,
"y":367.0
},
{
"h":454.0,
"timestamp":"2025-11-05T14:07:28.867676Z",
"w":536.0,
"x":826.0,
"y":447.0
}
]
},
"node":{
"id":"99031920-6239-471e-a3d7-f241b7753fd0",
"name":"BMA"
},
"stream":{
"id":"79031920-6239-471e-a3d7-f241b7753fd0",
"name":"Stream1"
},
"version": "6.0",
"eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
"uuid": "123456a7-dd2d-4016-b9ff-530ab24e5f98",
"tenantId": "e1df4def-6770-41bd-b3a8-9876549251e6"
}
Automatic Number Plate Recognition (ANPR)#
When the ANPR model or the option Parking Mode ANPR (available with the Traffic & Parking models — Standard or Accuracy+) is enabled for a camera stream, the following additional fields will be present.
crossingLineEvent.numberPlate: detected plate text.crossingLineEvent.numberPlateOrigin: country/region of the plate (ISO 3166-1 alpha-2).crossingLineEvent.numberPlateArea: regional area code of the plate text.crossingLineEvent.numberPlateLines: indicates one-line or two-line plate layouts.crossingLineEvent.numberPlateRect: bounding box of the plate.crossingLineEvent.vehicleRect: bounding box around the whole vehicle. Only available with Parking Mode ANPR.crossingLineEvent.numberPlateImage: JPEG image from the camera, base64-encoded and attached to the event. Only available when Attach image to event is enabled for an ANPR-enabled Crossing Line trigger and events are sent via a custom MQTT connection.
Info
With the ANPR model selected, only the numberplate class is emitted; vehicleRect is omitted. The position of the number plate in the image is expressed in absolute coordinates.
Example: Crossing Line event with Parking Mode ANPR
{
"crossingLineEvent": {
"class": "car",
"subClass": "van",
"direction": "in",
"lineId": "e8f82efd-82bf-499d-be17-b66371f16375",
"lineName": "ibktwi_cl0",
"timestamp": "2025-11-05T14:07:28.918328Z",
"trackId": 1048578,
"trackUuid": "28e3681f-5398-4347-8c3d-ca64a3c25537",
"numberPlate": "I1544AM",
"numberPlateOrigin": "AT",
"numberPlateArea": "I",
"numberPlateLines": 1,
"numberPlateRect": {
"h": 47,
"w": 150,
"x": 128,
"y": 344
},
"vehicleRect": {
"h": 445,
"w": 535,
"x": 836,
"y": 437
}
},
"node": {
"id": "99031920-6239-471e-a3d7-f241b7753fd0",
"name": "test"
},
"stream": {
"id": "79031920-6239-471e-a3d7-f241b7753fd0",
"name": "streamname"
},
"version": "6.0",
"eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
"uuid": "123456a7-dd2d-4016-b9ff-530ab24e5f98",
"tenantId": "e1df4def-6770-41bd-b3a8-9876549251e6"
}
Example: Crossing Line Event with ANPR model
{
"crossingLineEvent": {
"class": "numberplate",
"direction": "in",
"lineId": "e8f82efd-82bf-499d-be17-b66371f16375",
"lineName": "ibktwi_cl0",
"numberPlate": "I1544AM",
"numberPlateArea": "I",
"numberPlateLines": 1,
"numberPlateOrigin": "AT",
"numberPlateRect": {
"h": 36,
"w": 134,
"x": 1139,
"y": 661
},
"timestamp": "2025-11-05T12:48:09.175453Z",
"trackId": 493,
"trackUuid": "7854a1b7-c9d4-4519-b081-464a1b182cb7"
},
"node": {
"id": "99031920-6239-471e-a3d7-f241b7753fd0",
"name": "test"
},
"stream": {
"id": "79031920-6239-471e-a3d7-f241b7753fd0",
"name": "streamname"
},
"version": "6.0",
"eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
"uuid": "123456a7-dd2d-4016-b9ff-530ab24e5f98",
"tenantId": "e1df4def-6770-41bd-b3a8-9876549251e6"
}
Region of Interest Event#
A Region of Interest trigger emits a regionOfInterestEvent that lists tracked objects and dwell times.
regionOfInterestEvent.objects[]: current occupants, includingregionOfInterestEvent.objects[].class/subClassthat follow the Object Classes reference,regionOfInterestEvent.objects[].trackId, andregionOfInterestEvent.objects[].dwellTimein seconds.regionOfInterestEvent.roiId,regionOfInterestEvent.roiName: configured ROI identifier and name.regionOfInterestEvent.state:occupiedwhen at least one object is inside the ROI; otherwisevacant.regionOfInterestEvent.triggerType: indicates why the event fired (timeorchange).
Example: Region of Interest event
{
"eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
"node": {
"id": "c44d31c4-de0c-4933-b562-0d627c7db2b6",
"name": "2021110040"
},
"regionOfInterestEvent": {
"capacity": 1,
"objects": [
{
"class": "car",
"dwellTime": 0,
"trackId": 2,
"trackUuid": "e5c1606c-5b2e-41c4-a445-7a89fb3934b9"
}
],
"roiId": "cb2ed4b3-b200-4f0e-90b5-cd00aa999328",
"roiName": "roi links",
"state": "occupied",
"timestamp": "2025-12-03T16:39:07.809630Z",
"triggerType": "change"
},
"stream": {
"geoLocation": {
"coordinates": [
11.40,
47.26
]
},
"id": "f0b5f1dd-d1a5-47de-b1f7-ffe1704baf7c",
"name": "Stream1"
},
"tenantId": "3bb3ed7e-4c92-4db3-b317-1e06a4bc4995",
"uuid": "ed78e199-a306-4c13-828f-9d54b5555e44",
"version": "6.0"
}
Automatic Number Plate Recognition (ANPR)#
When the ANPR model or the option Parking Mode ANPR (available with the Traffic & Parking models — Standard or Accuracy+) is enabled for a camera stream, the following additional fields will be present on ROI objects.
regionOfInterestEvent.objects[].numberPlate: detected plate text.regionOfInterestEvent.objects[].numberPlateOrigin: country/region of the plate (ISO 3166-1 alpha-2).regionOfInterestEvent.objects[].numberPlateArea: regional area code of the plate text.regionOfInterestEvent.objects[].numberPlateLines: indicates one-line or two-line plate layouts.regionOfInterestEvent.objects[].numberPlateRect: bounding box of the plate.regionOfInterestEvent.objects[].vehicleRect: bounding box around the whole vehicle. Only available with Parking Mode ANPR.regionOfInterestEvent.objects[].numberPlateImage: JPEG image from the camera, base64-encoded and attached to the event. Only available when Attach image to event is enabled for an ANPR-enabled ROI trigger and events are sent via a custom MQTT connection.
Info
With the ANPR model selected, only the numberplate class is emitted; vehicleRect is omitted. The position of the number plate in the image is expressed in absolute coordinates.
Example: Region of Interest event with ANPR model
{
"eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
"node": {
"id": "c44d31c4-de0c-4933-b562-0d627c7db2b6",
"name": "2021110040"
},
"regionOfInterestEvent": {
"capacity": 1,
"objects": [
{
"class": "numberplate",
"dwellTime": 0,
"numberPlate": "ILXXXXX",
"numberPlateArea": "IL",
"numberPlateLines": 1,
"numberPlateOrigin": "AT",
"numberPlateRect": {
"h": 28,
"w": 85,
"x": 812,
"y": 517
},
"trackId": 180355079,
"trackUuid": "119ffff9-ffa7-4fb7-b865-e957aee9bfda"
}
],
"roiId": "cb2ed4b3-b200-4f0e-90b5-cd00aa999328",
"roiName": "roi links",
"state": "occupied",
"timestamp": "2025-12-03T15:05:59.378959Z",
"triggerType": "change"
},
"stream": {
"geoLocation": {
"coordinates": [
11.40,
47.26
]
},
"id": "f0b5f1dd-d1a5-47de-b1f7-ffe1704baf7c",
"name": "Stream1"
},
"tenantId": "3bb3ed7e-4c92-4db3-b317-1e06a4bc4995",
"uuid": "b5cb3844-3743-4cc5-ac39-36448bfd47f9",
"version": "6.0"
}
Example: Region of Interest event with Parking Mode ANPR
{
"eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
"node": {
"id": "c44d31c4-de0c-4933-b562-0d627c7db2b6",
"name": "2021110040"
},
"regionOfInterestEvent": {
"capacity": 1,
"objects": [
{
"class": "car",
"dwellTime": 0,
"numberPlateRect": {
"h": 18,
"w": 60,
"x": 124,
"y": 190
},
"trackId": 53477380,
"trackUuid": "7c3b0a5d-964f-4f1b-9d3c-e01b790be382",
"vehicleRect": {
"h": 222,
"w": 244,
"x": 694,
"y": 233
}
}
],
"roiId": "cb2ed4b3-b200-4f0e-90b5-cd00aa999328",
"roiName": "roi links",
"state": "occupied",
"timestamp": "2025-12-03T16:17:40.482253Z",
"triggerType": "change"
},
"stream": {
"geoLocation": {
"coordinates": [
11.40,
47.26
]
},
"id": "f0b5f1dd-d1a5-47de-b1f7-ffe1704baf7c",
"name": "Stream1"
},
"tenantId": "3bb3ed7e-4c92-4db3-b317-1e06a4bc4995",
"uuid": "3f245256-7092-417e-b488-f65dc0ba342f",
"version": "6.0"
}
Origin Destination Event#
An Origin Destination trigger emits an originDestinationEvent when an object's trajectory moves across at least two OD zones, using the first and last zones traversed for the event.
originDestinationEvent.entry.zone.zoneId,originDestinationEvent.entry.zone.name,originDestinationEvent.entry.timestamp: entry zone details and when the object entered.originDestinationEvent.exit.zone.zoneId,originDestinationEvent.exit.zone.name,originDestinationEvent.exit.timestamp: exit zone details and when the object left.originDestinationEvent.movementPath[]: object trajectory with absolute pixel coordinates.
Example: Origin Destination event
{
"version": "6.0",
"eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
"uuid": "123456a7-dd2d-4016-b9ff-530ab24e5f98",
"tenantId": "e1df4def-6770-41bd-b3a8-9876549251e6",
"node": {
"id": "99031920-6239-471e-a3d7-f241b7753fd0",
"name": "test"
},
"stream": {
"id": "79031920-6239-471e-a3d7-f241b7753fd0",
"name": "streamname"
},
"originDestinationEvent": {
"classification": "truck",
"subClass": "articulated-truck",
"entry": {
"zone": {
"zoneId": "56317209-9B83-43A6-A63E-58C9191A7869",
"name": "entryZoneName"
},
"timestamp": "2019-12-29T10:31:14.373202Z"
},
"exit": {
"zone": {
"zoneId": "c28ed4e8-bf1b-4c2e-9938-aeb28687f7aa",
"name": "exitZoneName"
},
"timestamp": "2019-12-29T10:31:20.373202Z"
},
"trackId": 23,
"trackUuid": "5609fb4b-cf2b-426d-8f75-0a639a932b90",
"movementPath": [
{
"timestamp": "2019-12-29T10:31:14.373202Z",
"h": 554.192138671875,
"w": 766.527587890625,
"x": 0.0,
"y": 525.807861328125
},
{
"timestamp": "2019-12-29T10:31:15.173212Z",
"h": 757.237060546875,
"w": 1013.7042236328125,
"x": 137.61514282226563,
"y": 161.38143920898438
},
{
"timestamp": "2019-12-29T10:31:16.229202Z",
"h": 757.23712158203125,
"w": 789.47369384765625,
"x": 249.73042297363281,
"y": 108.07360076904297
},
{
"timestamp": "2019-12-29T10:31:17.343202Z",
"h": 757.23712158203125,
"w": 1013.704345703125,
"x": 149.989990234375,
"y": 157.84721374511719
},
{
"timestamp": "2019-12-29T10:31:18.373202Z",
"h": 757.237060546875,
"w": 789.47369384765625,
"x": 184.40171813964844,
"y": 161.38143920898438
},
{
"timestamp": "2019-12-29T10:31:19.373202Z",
"w": 1013.7042236328125,
"h": 757.23712158203125,
"x": 131.88348388671875,
"y": 157.84721374511719
},
{
"timestamp": "2019-12-29T10:31:20.373202Z",
"h": 757.23712158203125,
"w": 1013.7042236328125,
"x": 131.88348388671875,
"y": 157.84721374511719
}
]
}
}
Raw Track Event#
The Raw Track Event trigger records the full trajectory of an object. It fires once the track is finished—for example, when the object leaves the camera view.
rawTrackEvent.class: detected object category following the Object Classes taxonomy.rawTrackEvent.trackId,rawTrackEvent.trackUuid: tie the event back to the originating trajectory.rawTrackEvent.path[]: object trajectory with absolute pixel coordinates.
Example: Raw Track event
{
"heatmapEvent": {
"class": "car",
"trackId": 23,
"trackUuid": "5609fb4b-cf2b-426d-8f75-0a639a932b90",
"path": [
{
"h": 554.192138671875,
"timestamp": "2019-12-29T10:31:14.373202Z",
"w": 766.527587890625,
"x": 0.0,
"y": 525.807861328125
},
{
"h": 757.237060546875,
"timestamp": "2019-12-29T10:31:14.373202Z",
"w": 1013.7042236328125,
"x": 137.61514282226563,
"y": 161.38143920898438
},
{
"h": 757.2371215820313,
"timestamp": "2019-12-29T10:31:14.373202Z",
"w": 789.4736938476563,
"x": 249.7304229736328,
"y": 108.07360076904297
},
{
"h": 757.2371215820313,
"timestamp": "2019-12-29T10:31:14.373202Z",
"w": 1013.704345703125,
"x": 149.989990234375,
"y": 157.8472137451172
},
{
"h": 757.237060546875,
"timestamp": "2019-12-29T10:31:14.373202Z",
"w": 789.4736938476563,
"x": 184.40171813964844,
"y": 161.38143920898438
},
{
"h": 757.2371215820313,
"timestamp": "2019-12-29T10:31:14.373202Z",
"w": 1013.7042236328125,
"x": 131.88348388671875,
"y": 157.8472137451172
},
{
"h": 757.2371215820313,
"timestamp": "2019-12-29T10:31:14.373202Z",
"w": 1013.7042236328125,
"x": 131.88348388671875,
"y": 157.8472137451172
}
]
},
"node": {
"id": "99031920-6239-471e-a3d7-f241b7753fd0",
"name": "test"
},
"stream": {
"id": "79031920-6239-471e-a3d7-f241b7753fd0",
"name": "streamname"
},
"version": "6.0",
"eventSchema": "https://docs.bernard-gruppe.com/events/schema/6.0",
"uuid": "123456a7-dd2d-4016-b9ff-530ab24e5f98",
"tenantId": "e1df4def-6770-41bd-b3a8-9876549251e6"
}