Skip to content

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 (currently 6.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, including node.id, node.name, and optional node.metadata.
  • stream: nested object describing the video or sensor stream on the node, including stream.id, stream.name, and optional geoLocation [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.class and optional crossingLineEvent.subClass: detected object category (for example, person, car, truck) based on the Object Classes taxonomy.
  • crossingLineEvent.direction plus optional crossingLineEvent.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, including regionOfInterestEvent.objects[].class/subClass that follow the Object Classes reference, regionOfInterestEvent.objects[].trackId, and regionOfInterestEvent.objects[].dwellTime in seconds.
  • regionOfInterestEvent.roiId, regionOfInterestEvent.roiName: configured ROI identifier and name.
  • regionOfInterestEvent.state: occupied when at least one object is inside the ROI; otherwise vacant.
  • regionOfInterestEvent.triggerType: indicates why the event fired (time or change).
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"
}