Hello,
I am trying to inject Analytics Events into Milestone XProtect via Milestone AI Bridge using the REST endpoint documented for
eventTopics
(AnalyticsEvent).
Environment
- XProtect VMS: 24 R2
- Milestone AI Bridge: 2.0 (Docker deployment on Windows host)
- Host OS: Windows (Docker Desktop)
- AI Bridge containers (short list):
ngc-aibridge-webservice-1 0.0.0.0:4000-4001->4000-4001/tcp
ngc-aibridge-connector-1
ngc-aibridge-streaming-1 0.0.0.0:8554-8555->8554-8555/tcp, 0.0.0.0:8000-8001->8000-8001/udp, 0.0.0.0:55500->55500/udp, 0.0.0.0:9898->9898/tcp
ngc-aibridge-proxy-1 0.0.0.0:8786-8787->8786-8787/tcp
ngc-aibridge-broker-1 0.0.0.0:8382-8383->8382-8383/tcp
ngc-aibridge-kafka-broker-1 0.0.0.0:9092->9092/tcp, 0.0.0.0:29092->29092/tcp
ngc-aibridge-init-1
ngc-aibridge-health-1 0.0.0.0:3500->3500/tcp
ngc-aibridge-kafka-zookeeper-1 2888/tcp, 0.0.0.0:2181->2181/tcp, 3888/tcp
ngc-aibridge-fuseki-1 0.0.0.0:3030->3030/tcp
- AI Bridge app, camera UUID and eventTopics are all retrieved via Yoga GraphQL (so IDs and URLs are not hard-coded).
What I am trying to do:
I want to send an AnalyticsEvent from an external IVA to AI Bridge via REST, using the
eventTopics.url exposed by AI Bridge/Yoga GraphQL.
From Yoga GraphQL I get an eventTopic with:
- name ; 19_Intrusion_Area_Start
- url : http://desktop-us48ssr:8382/event/b479dccc-2fba-4089-82ab-11b485677108/19_intrusion_area_start/analytics_event
- eventFormat : ANALYTICS_EVENT
The camera UUID used in the JSON payload is also taken from AI Bridge / VMS:
- Camera UUID : ab9a46df-fd91-4e91-b4dc-4316b45bfc57
REST call I am sending:
From the Windows host (same machine where Docker is running):
curl -v -X POST -H “Content-Type: application/json” --data-binary @evento.json http://localhost:8382/event/b479dccc-2fba-4089-82ab-11b485677108/19_intrusion_area_start/analytics_event
HTTP response:
> POST /event/b479dccc-2fba-4089-82ab-11b485677108/19_intrusion_area_start/analytics_event HTTP/1.1
> Host: localhost:8382
> Content-Type: application/json
> Content-Length: 802
< HTTP/1.1 200 OK
< Date: Thu, 27 Nov 2025 18:17:44 GMT
< Content-Length: 0
I also tried the same call on port 8383 (since the broker container exposes 8382–8383), but on 8383 I get an HTTP error (non-200). So 8382 seems to be the correct port for this REST endpoint.
JSON payload used (evento.json)
{
“@context”: “http://www.insights.data/2024/06/analytics-event.jsonld”,
“type”: “AnalyticsEvent”,
“name”: “19_intrusion_area_start”,
“timestamp”: “2025-11-27T18:32:36.639+01:00”,
“fromSource”: {
“type”: “Camera”,
“uuid”: “235b08a9-c0ee-4e8c-a2c8-bcdd25e0edd7”
},
“involvedObject”: [
{
“class”: “PERSON”,
“name”: “4 [target]”,
“confidence”: 0.78,
“hasOutline”: {
"closed": true,
"hasVertices": \[
{ "x": 543, "y": 299 },
{ "x": 585, "y": 299 },
{ "x": 585, "y": 395 },
{ "x": 543, "y": 395 }
\],
"type": "Polygon"
}
}
]
}
This JSON passes python -m json.tool (and standard JSON validators) and is built according to the AI Bridge AnalyticsEvent context.
(If needed, I can also provide a version without involvedObject , even more minimal, but the behavior is the same.)
What I observe
- The HTTP call returns 200 OK with an empty body.
- During the POST, I keep docker logs -f ngc-aibridge-broker-1 and docker logs -f ngc-aibridge-proxy-1 open in separate terminals. None of these containers log anything at the moment of the POST (no request log, no error, nothing).
- On the VMS side:
- The AI Bridge app is registered.
- The camera is registered and linked to the app/processing server.
- The eventTopic appears correctly in Management Client.
- However, no Analytics Event is received in XProtect for this POST, and no alarms/rules are triggered.
In short, it looks like:
- The AI Bridge broker is listening on 8382 (HTTP 200),
- but the incoming AnalyticsEvent is neither logged by the broker nor forwarded to proxy / VMS, as if it was accepted at HTTP level and then silently discarded.
What I have already tried :
- Validated JSON with python -m json.tool and online JSON validators.
- Tried both with and without the involvedObject block.
- Verified that the eventTopics.url and camera uuid used in the request match exactly what Yoga GraphQL reports.
- Confirmed the broker container exposes ports 8382-8383->8382-8383/tcp
- Tried calling both http://localhost:8382/… and http://localhost:8383/…:
- 8382 → HTTP 200, but no logs and no event in VMS.
- 8383 → HTTP error.
- Kept docker logs -f on:
- ngc-aibridge-broker-1
- ngc-aibridge-proxy-1
- and saw no change when sending the POST.
- Verified in Management Client that the AI Bridge app, the camera, and the event topic are visible and configured.
Questions
Could you please help me understand:
- Whether the /event/…/analytics_event REST endpoint on AI Bridge 2.0 (Docker deployment) is expected to accept Analytics Events directly as I am doing here.
- If the JSON payload above is correct for AI Bridge 2.0, or if there is any required field / structure that would cause the broker to silently drop the event.
- Whether there is any additional configuration or logging I should enable to see why these incoming Analytics Events are not being logged or forwarded to XProtect.
I am happy to provide additional logs, GraphQL queries, or configuration screenshots if needed.
Thank you in advance for your help.
Best regards,
Gianluca
