Skip to content

Event Schema

Our products (BMA, BCA, B101, B401, BMA TLC, Mobile BMA) 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.

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.

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"
}