📄 AID

AID

The AID (automatic incident detection) app empowers your Integrator-AI system to automatically detect critical roadway events and conditions in real time — helping transportation engineers and operators identify hazards quickly, improve safety, and enhance overall efficiency. 

Designed with future growth in mind, AID is built to evolve: as new types of incidents become priorities, we can seamlessly add more detectors — ensuring the system never becomes obsolete and stays ahead of emerging safety needs.

Concepts

Incidents

An incident is a real-world traffic event that our system automatically detects and records because it matches specific conditional rules.

Example: A vehicle is traveling faster than the posted speed limit on a highway.

When this happens, the system creates a "speeding incident" — a complete snapshot that includes:

  • Which vehicle it was (unique object ID)
  • Its exact location and lane
  • The type of vehicle (car, truck, motorcycle, etc.)
  • The measured speed
  • Date, time, and other key details

It's like having an automatic, detailed incident report generated for every critical event — no manual observation required.

Incident Detector

Each Incident Detector acts as a smart, always-on watchdog that continuously scans camera feeds, LiDAR, radar, or other sensors for one specific type of behavior.

Currently supported detectors include:

  • Object : Wrong-way driver — Monitors ramps and mainlines to flag vehicles traveling against traffic flow
  • Object : High Speed — Compares vehicle speeds to posted limits
  • Object : Low Speed — Flags vehicles traveling too slowly on higher-speed roads (potential hazard or breakdown)
  • Object : Loitering — Detects objects that remain stationary in one place for an extended period
  • Object : In Zone — Alerts when objects appear in restricted areas (e.g., pedestrians on a highway)
  • Object : Path — Detects objects that move in a specific path
  • Object : Lane Change — Captures unsafe or prohibited lane changes in restricted zones
  • Object : Oversized — Detects vehicles exceeding height, width, or length limits
  • Object : Stopped — Identifies vehicles stopped in unsafe locations (e.g., highway shoulders or intersections)
  • Intersection : Near miss — Identifies dangerous close calls or conflicts between objects
  • Intersection : Red light running — Watches intersections and detects vehicles entering on red
  • Intersection : Split Failure — Monitors movements to detect if enough time was given to clear the demand
  • Intersection : Jaywalking — Captures pedestrians crossing against the signal or in unsafe ways
  • Intersection : Illegal movement — Flags vehicles executing prohibited maneuvers from their current lane
  • Intersection : Belated walker — Detects pedestrians who didn't have enough time to clear the crossing before the signal changes to don't-walk
  • Intersection : Impeded departure — Monitors vehicles delayed in departing an intersection due to downstream backups or blockages

When any detector's conditions are met, the system instantly creates a full incident record — complete with timestamps, object details, locations, and supporting data — enabling rapid response, detailed analysis, and proactive safety improvements. Some incidents track over time, those will be updated as conditions change. Each incident that is tracked over time will typically contain a log of its own with a history of how it changed over time.

Sinks

Sinks are secure, configurable delivery channels that automatically forward detected incidents to the systems or people who need them most.

Examples:

  • Send red light running incidents directly to a citation processing system
  • Forward wrong-way alerts to a traffic operations center or state DOT dashboard
  • Push critical incidents to email/SMS alerts for responders

Think of sinks as the "export" or "share" buttons — they get the right data to the right people or tools quickly.

Actions

Actions trigger immediate, automated responses the moment an incident is detected — helping prevent escalation, gather evidence, or alert responders.

Common transportation examples:

  • Near-miss at an intersection → Automatically save a short video clip from multiple angles so engineers can review what almost happened
  • Red light violation → Trigger a still image capture and log it for enforcement
  • Wrong-way driver → Activate dynamic message signs ("Wrong Way – Turn Around") or send instant alerts to highway patrol

In short: Actions are the "next steps" the system takes to help prevent crashes, collect evidence, or notify the right people.

User Interface

Status Page

  1. An incident detector
  2. Incidents detected for today (click on this number to open the Incident Detector Event Log)
  3. Type of incident detector
  4. Create a new incident detector
  5. Settings

Incident Detector Event Log

  1. Name of the incident detector for this log
  2. Date of events shown
  3. Incident detector type
  4. Incident detector settings
  5. Number of events recorded for that day
  6. Individual logged events

    1. The data in this table will vary by incident detector type
    2. Some events will contain GPS information. This will be the map icon on the right side of the event right. Clicking on it will open up Google Maps and drop a pin relevant to where that event happened
    3. Some events will contain recordings of it. This will be the play button on the right. Clicking on this button will open up our Echo View GIS app so that you can view that specific event. 
  7. Navigation

    1. Move to previous day
    2. Recall a specific day
    3. Move to the next day
    4. Goto today
    5. Manual data prune
    6. Reports
  8. Actions

    1. Edit incident detector
    2. Clone incident detector
    3. Delete incident detector
⚠️

While watching an event log live and a new event is generated, the play button may not show up because the event is still being recorded. When reocrding completes, you can re-open the event log and the play button will appear

Settings

  1. Enable/disable the app
  2. Max age for an incident before it's automatically deleted. A value of 0 disables automatic deletion

Data Structure

Object : High Speed

Information on a single object that was detected traveling at a high speed

detector
number
ID of the detector that generated this incident
id
array
ID of the incident
timestamp
number
Unix epoch timestamp, in milliseconds, of when the incident started
recording
number
ID of the Echo View GIS recording, if one was generated. 0 if no recording exists, or the recording is still being generated
type
string
Always: object.high-speed
zone
number
ID of the zone the incident detected in. You can query our  /api/zones  endpoint to get information on the zones.
object
Information about the object related to the incident
object.id[]
array[number]
ID of the object. A two part ID to  help maintain uniqueness local to the Integrator-AI that generated it
object.type
string
Type of the object

possible values: unclassified, vehicle, pedestrian, cyclist, animal, railcar, aircraft
object.classification
string

Classification of the object as reported by the sensing device (e.g. car, truck, bus, person, bicycle, etc.). This value is supplied by the sensor, so it does not have a known set of values. If you're sourcing objects from one sensor, then you can refer to that sensor's documentation to see what object classification's it provides as those will be what you find this value set to.

object.lwh[]
array[float,float,float]
An array that contains the size of the object, in meters. This value will be false if not available. The first value is length, then width, then height. For example:

"lwh":[5.25, 2.5, 1.9]: would indicate 5.25m for the length, 2.5m for the width, and 1.9m for the height
"lwh":false: indicates that size information is not available

object.description

Additional descriptive information about the object, if available. For example if it was a car then this may contain make, model, color, and license plate number

log[]
array
History of the incident, including the most recent state of it
log[].timestamp
number
Unix epoch timestamp, in milliseconds, of this entry
log[].position
array[lat,lng,alt]
The position of the object when this entry was created. This value will be null if not available.
log[].heading
float

Heading angle, in radians, of the object when this entry was created. 0.0 is north. null indicates unknown

log[].speed
float
Speed of the object, in meters per second, when this entry was created
log[].state
string
State of the incident, when this entry was created
active - the incident is currently active, or still present
clear - the incident has cleared and no longer present

Object : Low Speed

Information on a single object that was traveling at a low speed

detector
number
ID of the detector that generated this incident
id
array
ID of the incident
timestamp
number
Unix epoch timestamp, in milliseconds, of when the incident started
recording
number
ID of the Echo View GIS recording, if one was generated. 0 if no recording exists, or the recording is still being generated
type
string
Always: object.low-speed
zone
number
ID of the zone the incident detected in. You can query our  /api/zones  endpoint to get information on the zones.
object
Information about the object related to the incident
object.id[]
array[number]
ID of the object. A two part ID to  help maintain uniqueness local to the Integrator-AI that generated it
object.type
string
Type of the object

possible values: unclassified, vehicle, pedestrian, cyclist, animal, railcar, aircraft
object.classification
string

Classification of the object as reported by the sensing device (e.g. car, truck, bus, person, bicycle, etc.). This value is supplied by the sensor, so it does not have a known set of values. If you're sourcing objects from one sensor, then you can refer to that sensor's documentation to see what object classification's it provides as those will be what you find this value set to.

object.lwh[]
array[float,float,float]
An array that contains the size of the object, in meters. This value will be false if not available. The first value is length, then width, then height. For example:

"lwh":[5.25, 2.5, 1.9]: would indicate 5.25m for the length, 2.5m for the width, and 1.9m for the height
"lwh":false: indicates that size information is not available

object.description

Additional descriptive information about the object, if available. For example if it was a car then this may contain make, model, color, and license plate number

log[]
array
History of the incident, including the most recent state of it
log[].timestamp
number
Unix epoch timestamp, in milliseconds, of this entry
log[].position
array[lat,lng,alt]
The position of the object when this entry was created. This value will be null if not available.
log[].heading
float

Heading angle, in radians, of the object when this entry was created. 0.0 is north. null indicates unknown

log[].speed
float
Speed of the object, in meters per second, when this entry was created
log[].state
string
State of the incident, when this entry was created
active - the incident is currently active, or still present
clear - the incident has cleared and no longer present

Object : Loitering

Information on a single object that spent too much time in a zone

detector
number
ID of the detector that generated this incident
id
array
ID of the incident
timestamp
number
Unix epoch timestamp, in milliseconds, of when the incident started
recording
number
ID of the Echo View GIS recording, if one was generated. 0 if no recording exists, or the recording is still being generated
type
string
Always: object.loitering
zone
number
ID of the zone the incident detected in. You can query our  /api/zones  endpoint to get information on the zones.
object
Information about the object related to the incident
object.id[]
array[number]
ID of the object. A two part ID to  help maintain uniqueness local to the Integrator-AI that generated it
object.type
string
Type of the object

possible values: unclassified, vehicle, pedestrian, cyclist, animal, railcar, aircraft
object.classification
string

Classification of the object as reported by the sensing device (e.g. car, truck, bus, person, bicycle, etc.). This value is supplied by the sensor, so it does not have a known set of values. If you're sourcing objects from one sensor, then you can refer to that sensor's documentation to see what object classification's it provides as those will be what you find this value set to.

object.lwh[]
array[float,float,float]
An array that contains the size of the object, in meters. This value will be false if not available. The first value is length, then width, then height. For example:

"lwh":[5.25, 2.5, 1.9]: would indicate 5.25m for the length, 2.5m for the width, and 1.9m for the height
"lwh":false: indicates that size information is not available

object.description

Additional descriptive information about the object, if available. For example if it was a car then this may contain make, model, color, and license plate number

log[]
array
History of the incident, including the most recent state of it
log[].timestamp
number
Unix epoch timestamp, in milliseconds, of this entry
log[].position
array[lat,lng,alt]
The position of the object when this entry was created. This value will be null if not available.
log[].heading
float

Heading angle, in radians, of the object when this entry was created. 0.0 is north. null indicates unknown

log[].speed
float
Speed of the object, in meters per second, when this entry was created
log[].state
string
State of the incident, when this entry was created
active - the incident is currently active, or still present
clear - the incident has cleared and no longer present
log[].dwell
number
Total time occupying the zone up to the time of this entry

Object : Stopped

Information on a single object that stopped in a zone

detector
number
ID of the detector that generated this incident
id
array
ID of the incident
timestamp
number
Unix epoch timestamp, in milliseconds, of when the incident started
recording
number
ID of the Echo View GIS recording, if one was generated. 0 if no recording exists, or the recording is still being generated
type
string
Always: object.stopped
zone
number
ID of the zone the incident detected in. You can query our  /api/zones  endpoint to get information on the zones.
object
Information about the object related to the incident
object.id[]
array[number]
ID of the object. A two part ID to  help maintain uniqueness local to the Integrator-AI that generated it
object.type
string
Type of the object

possible values: unclassified, vehicle, pedestrian, cyclist, animal, railcar, aircraft
object.classification
string

Classification of the object as reported by the sensing device (e.g. car, truck, bus, person, bicycle, etc.). This value is supplied by the sensor, so it does not have a known set of values. If you're sourcing objects from one sensor, then you can refer to that sensor's documentation to see what object classification's it provides as those will be what you find this value set to.

object.lwh[]
array[float,float,float]
An array that contains the size of the object, in meters. This value will be false if not available. The first value is length, then width, then height. For example:

"lwh":[5.25, 2.5, 1.9]: would indicate 5.25m for the length, 2.5m for the width, and 1.9m for the height
"lwh":false: indicates that size information is not available

object.description

Additional descriptive information about the object, if available. For example if it was a car then this may contain make, model, color, and license plate number

log[]
array
History of the incident, including the most recent state of it
log[].timestamp
number
Unix epoch timestamp, in milliseconds, of this entry
log[].position
array[lat,lng,alt]
The position of the object when this entry was created. This value will be null if not available.
log[].heading
float

Heading angle, in radians, of the object when this entry was created. 0.0 is north. null indicates unknown

log[].speed
float
Speed of the object, in meters per second, when this entry was created
log[].state
string
State of the incident, when this entry was created
active - the incident is currently active, or still present
clear - the incident has cleared and no longer present

Object : Oversized

Information on a single object that is oversized and detected in a zone

detector
number
ID of the detector that generated this incident
id
array
ID of the incident
timestamp
number
Unix epoch timestamp, in milliseconds, of when the incident started
recording
number
ID of the Echo View GIS recording, if one was generated. 0 if no recording exists, or the recording is still being generated
type
string
Always: object.oversized
zone
number
ID of the zone the incident detected in. You can query our  /api/zones  endpoint to get information on the zones.
object
Information about the object related to the incident
object.id[]
array[number]
ID of the object. A two part ID to  help maintain uniqueness local to the Integrator-AI that generated it
object.type
string
Type of the object

possible values: unclassified, vehicle, pedestrian, cyclist, animal, railcar, aircraft
object.classification
string

Classification of the object as reported by the sensing device (e.g. car, truck, bus, person, bicycle, etc.). This value is supplied by the sensor, so it does not have a known set of values. If you're sourcing objects from one sensor, then you can refer to that sensor's documentation to see what object classification's it provides as those will be what you find this value set to.

object.lwh[]
array[float,float,float]
An array that contains the size of the object, in meters. This value will be false if not available. The first value is length, then width, then height. For example:

"lwh":[5.25, 2.5, 1.9]: would indicate 5.25m for the length, 2.5m for the width, and 1.9m for the height
"lwh":false: indicates that size information is not available

object.description

Additional descriptive information about the object, if available. For example if it was a car then this may contain make, model, color, and license plate number

log[]
array
History of the incident, including the most recent state of it
log[].timestamp
number
Unix epoch timestamp, in milliseconds, of this entry
log[].position
array[lat,lng,alt]
The position of the object when this entry was created. This value will be null if not available.
log[].heading
float

Heading angle, in radians, of the object when this entry was created. 0.0 is north. null indicates unknown

log[].speed
float
Speed of the object, in meters per second, when this entry was created
log[].state
string
State of the incident, when this entry was created
active - the incident is currently active, or still present
clear - the incident has cleared and no longer present

Object : In Zone

Information on a single object that is detected in a zone

detector
number
ID of the detector that generated this incident
id
array
ID of the incident
timestamp
number
Unix epoch timestamp, in milliseconds, of when the incident started
recording
number
ID of the Echo View GIS recording, if one was generated. 0 if no recording exists, or the recording is still being generated
type
string
Always: object.in-zone
zone
number
ID of the zone the incident detected in. You can query our  /api/zones  endpoint to get information on the zones.
object
Information about the object related to the incident
object.id[]
array[number]
ID of the object. A two part ID to  help maintain uniqueness local to the Integrator-AI that generated it
object.type
string
Type of the object

possible values: unclassified, vehicle, pedestrian, cyclist, animal, railcar, aircraft
object.classification
string

Classification of the object as reported by the sensing device (e.g. car, truck, bus, person, bicycle, etc.). This value is supplied by the sensor, so it does not have a known set of values. If you're sourcing objects from one sensor, then you can refer to that sensor's documentation to see what object classification's it provides as those will be what you find this value set to.

object.lwh[]
array[float,float,float]
An array that contains the size of the object, in meters. This value will be false if not available. The first value is length, then width, then height. For example:

"lwh":[5.25, 2.5, 1.9]: would indicate 5.25m for the length, 2.5m for the width, and 1.9m for the height
"lwh":false: indicates that size information is not available

object.description

Additional descriptive information about the object, if available. For example if it was a car then this may contain make, model, color, and license plate number

log[]
array
History of the incident, including the most recent state of it
log[].timestamp
number
Unix epoch timestamp, in milliseconds, of this entry
log[].position
array[lat,lng,alt]
The position of the object when this entry was created. This value will be null if not available.
log[].heading
float

Heading angle, in radians, of the object when this entry was created. 0.0 is north. null indicates unknown

log[].speed
float
Speed of the object, in meters per second, when this entry was created
log[].state
string
State of the incident, when this entry was created
active - the incident is currently active, or still present
clear - the incident has cleared and no longer present

Object : Lane Change

Information on a single object that changed lanes

detector
number
ID of the detector that generated this incident
id
array
ID of the incident
timestamp
number
Unix epoch timestamp, in milliseconds, of when the incident started
recording
number
ID of the Echo View GIS recording, if one was generated. 0 if no recording exists, or the recording is still being generated
type
string
Always: object.lane-change
from
number
Origin zone ID (lane they came from). You can query our  /api/zones  endpoint to get information on the zones.
to
number
Destination zone ID (lane they went to). You can query our  /api/zones  endpoint to get information on the zones.
object
Information about the object related to the incident
object.id[]
array[number]
ID of the object. A two part ID to  help maintain uniqueness local to the Integrator-AI that generated it
object.type
string
Type of the object

possible values: unclassified, vehicle, pedestrian, cyclist, animal, railcar, aircraft
object.classification
string

Classification of the object as reported by the sensing device (e.g. car, truck, bus, person, bicycle, etc.). This value is supplied by the sensor, so it does not have a known set of values. If you're sourcing objects from one sensor, then you can refer to that sensor's documentation to see what object classification's it provides as those will be what you find this value set to.

object.lwh[]
array[float,float,float]
An array that contains the size of the object, in meters. This value will be false if not available. The first value is length, then width, then height. For example:

"lwh":[5.25, 2.5, 1.9]: would indicate 5.25m for the length, 2.5m for the width, and 1.9m for the height
"lwh":false: indicates that size information is not available

object.description

Additional descriptive information about the object, if available. For example if it was a car then this may contain make, model, color, and license plate number

object.position
array[lat,lng,alt]
The position of the object when this entry was created. This value will be null if not available.
object.heading
float

Heading angle, in radians, of the object when this entry was created. 0.0 is north. null indicates unknown

object.speed
float
Speed of the object, in meters per second, when this entry was created

Object : Path

Information on a single object that is detected traveling through a specific path of zones

detector
number
ID of the detector that generated this incident
id
array
ID of the incident
timestamp
number
Unix epoch timestamp, in milliseconds, of when the incident started
recording
number
ID of the Echo View GIS recording, if one was generated. 0 if no recording exists, or the recording is still being generated
type
string
Always: object.path
zone
number
ID of the zone the incident detected in. You can query our  /api/zones  endpoint to get information on the zones.
object
Information about the object related to the incident
object.id[]
array[number]
ID of the object. A two part ID to  help maintain uniqueness local to the Integrator-AI that generated it
object.type
string
Type of the object

possible values: unclassified, vehicle, pedestrian, cyclist, animal, railcar, aircraft
object.classification
string

Classification of the object as reported by the sensing device (e.g. car, truck, bus, person, bicycle, etc.). This value is supplied by the sensor, so it does not have a known set of values. If you're sourcing objects from one sensor, then you can refer to that sensor's documentation to see what object classification's it provides as those will be what you find this value set to.

object.lwh[]
array[float,float,float]
An array that contains the size of the object, in meters. This value will be false if not available. The first value is length, then width, then height. For example:

"lwh":[5.25, 2.5, 1.9]: would indicate 5.25m for the length, 2.5m for the width, and 1.9m for the height
"lwh":false: indicates that size information is not available

object.description

Additional descriptive information about the object, if available. For example if it was a car then this may contain make, model, color, and license plate number

path[]
array
Path history, in chronological order. Only contains zones targeted by the detector
path[].timestamp
number
Unix epoch timestamp, in milliseconds, of this entry
path[].position
array[lat,lng,alt]
The position of the object when this entry was created. This value will be null if not available.
path[].heading
float

Heading angle, in radians, of the object when this entry was created. 0.0 is north. null indicates unknown

path[].speed
float
Speed of the object, in meters per second, when this entry was created

Object : Wrong Way

Information on a single object that is detected traveling the wrong way

detector
number
ID of the detector that generated this incident
id
array
ID of the incident
timestamp
number
Unix epoch timestamp, in milliseconds, of when the incident started
recording
number
ID of the Echo View GIS recording, if one was generated. 0 if no recording exists, or the recording is still being generated
type
string
Always: object.wrong-way
zone
number
ID of the zone the incident detected in. You can query our  /api/zones  endpoint to get information on the zones.
object
Information about the object related to the incident
object.id[]
array[number]
ID of the object. A two part ID to  help maintain uniqueness local to the Integrator-AI that generated it
object.type
string
Type of the object

possible values: unclassified, vehicle, pedestrian, cyclist, animal, railcar, aircraft
object.classification
string

Classification of the object as reported by the sensing device (e.g. car, truck, bus, person, bicycle, etc.). This value is supplied by the sensor, so it does not have a known set of values. If you're sourcing objects from one sensor, then you can refer to that sensor's documentation to see what object classification's it provides as those will be what you find this value set to.

object.lwh[]
array[float,float,float]
An array that contains the size of the object, in meters. This value will be false if not available. The first value is length, then width, then height. For example:

"lwh":[5.25, 2.5, 1.9]: would indicate 5.25m for the length, 2.5m for the width, and 1.9m for the height
"lwh":false: indicates that size information is not available

object.description

Additional descriptive information about the object, if available. For example if it was a car then this may contain make, model, color, and license plate number

path[]
array
Path history, in chronological order. Only contains zones targeted by the detector
path[].timestamp
number
Unix epoch timestamp, in milliseconds, of this entry
path[].position
array[lat,lng,alt]
The position of the object when this entry was created. This value will be null if not available.
path[].heading
float

Heading angle, in radians, of the object when this entry was created. 0.0 is north. null indicates unknown

path[].speed
float
Speed of the object, in meters per second, when this entry was created
path[].state
string
State of the incident when this entry was created

tracking - The first state when the incident is generated, indicating that we are tracking a wrong way driver within our detection system's view
tracking-lost - If the object continues out of view of our detection systems, we lose track of it. This state indicates that it was still traveling the wrong way when we lost track of it
course-corrected - This state indicates that we detected the object correct their course. Essentially we detected them going the wrong way, but they turned around and began moving the correct way

Congestion

Information on when congestion has been detected

detector
number
ID of the detector that generated this incident
id
array
ID of the incident
timestamp
number
Unix epoch timestamp, in milliseconds, of when the incident started
recording
number
ID of the Echo View GIS recording, if one was generated. 0 if no recording exists, or the recording is still being generated
type
string
Always: congestion
log[]
array
History of the congestion event
log[].timestamp
number
Unix epoch timestamp, in milliseconds, of this entry
path[].objects[]
array[id]

Object ID list of objects that contributed to the congestion event state

path[].state
string
State of the incident when this entry was created

building - congestion conditions match indicating that it's building, congestion won't be official until it holds these conditions for the configured time
congested - congestion conditions matched for the configured time, so it has officially started
clearing - congestion conditions no longer match, so congestion appears to be clearing. if conditions hold for the configured time, will officially report as cleared
clear - congestion conditions have cleared, no more congestion

Intersection : Split Failure

Information on when a split failure was detected for a movement

detector
number
ID of the detector that generated the incident
id
number
Unique ID of the incident. Will retain the same ID as you receive updates to this incident
type
string
Always: intersection.split-failure
timestamp
number
Unix epoch timestamp, in milliseconds, of when the incident occurred (light turned red for the movement)
recording
number
Recording ID, if one is available. 0 if no recording is available. Generally a recording may take some additional time, after the incident is generated, to be completed. When the recording is completed, it will populate this field with the recording ID
gor
number

Green occupancy ratio

ror
number

Red occupancy ratio

movement
object
The movement that the split failure occurred with
movement.heading
string
Heading of the movement

Values: nb, sb, eb, wb
movement.type
string
Type of movement

Values: left, right, through, u-turn, pedestrian
movement.time
number

The total time the movement was permitted, in milliseconds

Intersection : Near Miss

Information on when a near miss is detected

detector
number
ID of the detector that generated the incident
id
number
Unique ID of the incident. Will retain the same ID as you receive updates to this incident
type
string
Always: intersection.near-miss
timestamp
number
Unix epoch timestamp, in milliseconds, of when the incident occurred
recording
number
Recording ID, if one is available. 0 if no recording is available. Generally a recording may take some additional time, after the incident is generated, to be completed. When the recording is completed, it will populate this field with the recording ID
intersect
array[lat,lng,alt]
Intersect position of the near miss, in WGS-84 decimal degrees
pet
number
Post encroachment time, in milliseconds
severity
string
How severe the near miss was
Values: unsafe, critical
leading
object
The leading object involved in the near miss. The first object to reach the intersect point
leading.id
array[number]
UUID of the object
leading.type
string
Type of object

Values: vehicle, pedestrian, cyclist, unclassified, animal, aircraft, railcar
leading.classification
string
Classification of the object. This is forwarded from the detection system, and what it reports the object as
leading.lwh
array[length,width,height]
Object length, width, and height. In meters
leading.speed
number
Speed of the object, in meters per second, when the near miss was detected
leading.position
array[lat,lng,alt]
Position of the object when the near miss was detected
leading.heading
number
Heading angle, in radians, of the object. 0.0 is north. null if unknown

trailing

object

The trailing object involved in the near miss. The second object to reach the intersect point

trailing.id
array[number]

UUID of the object

trailing.type
string
Type of object

Values: vehicle, pedestrian, cyclist, unclassified, animal, aircraft, railcar
trailing.classification
Classification of the object. This is forwarded from the detection system, and what it reports the object as
trailing.lwh
array[length,width,height]
Object length, width, and height. In meters
trailing.speed
number
Speed of the object, in meters per second, when the near miss was detected
trailing.position
array[lat,lng,alt]
Position of the object when the near miss was detected
trailing.heading
number
Heading angle, in radians, of the object. 0.0 is north. null if unknown

Intersection : Red Light

Information on when a red light runner was detected

detector
number
ID of the detector that generated the incident
id
number
Unique ID of the incident. Will retain the same ID as you receive updates to this incident
type
string
Always: intersection.red-light
timestamp
number
Unix epoch timestamp, in milliseconds, of when the incident occured (entered the intersection on red)
recording
number
Recording ID, if one is available. 0 if no recording is available. Generally a recording may take some additional time, after the incident is generated, to be completed. When the recording is completed, it will populate this field with the recording ID
object.id
array[number]
UUID of the object
object.type
string
Type of object

Values: vehicle, pedestrian, cyclist, unclassified, animal, aircraft, railcar
object.classification
string
Classification of the object. This is forwarded from the detection system, and what it reports the object as
object.lwh
array[length,width,height]
Object length, width, and height. In meters
object.speed
number
Speed of the object, in meters per second, when this event was generated
object.position
array[lat,lng,alt]
Position of the object when it was detected entering the middle of the intersection while prohibited. null if not known
object.heading
number
Heading angle, in radians, of the object. 0.0 is north. null if unknown
object.description
object
Additional information about the object if available. The fields available are depend on the object type. null if no additional information is known
object.description.make (vehicle)
string
Make of the vehicle. null or empty if not known
object.description.model (vehicle)
string
Model of the vehicle. null or empty if not known
object.description.license-plate (vehicle)
string
License plate of the vehicle. null or empty if not known
object.description.year (vehicle)
number
Year of the vehicle. null or 0 if not known
object.description.confidence
number
How reliable the description information is. 0.0 is unknown
movement
object
The resolved movement for the object. This is the final movement we were able to resolve the object making while tracking it as it moved through the intersection. It has no impact on what the lanes permit, it's the real movement the object made
movement.heading
string
Heading of the movement

Values: nb, sb, eb, wb
movement.type
string
Type of movement

Values: left, right, through, u-turn, pedestrian
movement.certainty
string
How confident the resolved movement is. Sometimes we don't have enough information to determine the movement the object actually made, so we make an educated guess

Values: realized, unrealized

realized - indicates that we had enough information to resolve the actual movement the object made through the intersection
unrealized - indicates that we didn't have enough information to resolve the actual movement the object made, so we used what we did know to make an educated guess
movement.ppt
number
Post prohibited time, in milliseconds. When the object was detected entering the middle of the intersection, how long has the movement been prohibited?
movements[]
array
A snapshot of the state of all movements at the intersection at the time that the object entered the middle of the intersection. This gives you a view of what state all the movements were in when they ran the red light
movements[].heading
string
Heading of the movement

Values: nb, sb, eb, wb
movements[].type
string
Type of movement

Values: left, right, through, u-turn, pedestrian
movements[].timestamp
number
Timestamp of the movements listed state, at the time of the snapshot
movements[].duration
number
Elapsed time, in milliseconds, that this movement was in this state at the time of the snapshot
movements[].indication
string
What indication the movement is showing to travelers

Values: none, red, yellow, green, prepare-to-go, flashing-green, flashing-yellow, flashing-red, fya, fra, dont-walk, flashing-dont-walk, walk
movements[].state
string
What state the movement is in

Values: protected, permissive, permissive-after-stop, prohibited

Intersection : Illegal Movement

Information on when an object makes a movement from a lane that doesn't permit that movement (e.g. through movement from a left turn only lane)

detector
number
ID of the detector that generated this incident
id
array
ID of the incident
timestamp
number
Unix epoch timestamp, in milliseconds, of when the incident started
recording
number
ID of the Echo View GIS recording, if one was generated. 0 if no recording exists, or the recording is still being generated
type
string
Always: intersection.illegal-movement
movement.heading
string
Heading of the movement the object made (illegally)

Values: nb, sb, eb, wb
movement.type
string
Type of movement the object made (illegally)

Values:  left, right, through, u-turn
movement.zone
number
The zone dictating which movements were permitted. You can query our  /api/zones  endpoint to get information on the zones.
object
Information about the object related to the incident
object.id[]
array[number]
ID of the object. A two part ID to  help maintain uniqueness local to the Integrator-AI that generated it
object.type
string
Type of the object

possible values: unclassified, vehicle, pedestrian, cyclist, animal, railcar, aircraft
object.classification
string

Classification of the object as reported by the sensing device (e.g. car, truck, bus, person, bicycle, etc.). This value is supplied by the sensor, so it does not have a known set of values. If you're sourcing objects from one sensor, then you can refer to that sensor's documentation to see what object classification's it provides as those will be what you find this value set to.

object.lwh[]
array[float,float,float]
An array that contains the size of the object, in meters. This value will be false if not available. The first value is length, then width, then height. For example:

"lwh":[5.25, 2.5, 1.9]: would indicate 5.25m for the length, 2.5m for the width, and 1.9m for the height
"lwh":false: indicates that size information is not available

object.description

Additional descriptive information about the object, if available. For example if it was a car then this may contain make, model, color, and license plate number

object.position
array[lat,lng,alt]
The position of the object when this entry was created. This value will be null if not available.
object.heading
float

Heading angle, in radians, of the object when this entry was created. 0.0 is north. null indicates unknown

object.speed
float
Speed of the object, in meters per second, when this entry was created

Reports

Each detector will allow you to generate a report that contains incidents between a time frame that you select.

REST API

/api/app/aid

Settings

GET, PUT

Application configurations

/api/app/aid/incidents

Raw data

GET, DELETE

Access and management of incidents

/api/app/aid/incident/detectors

Settings

GET, PUT, POST, DELETE

Management of incident detectors

/api/app/aid/report/*

Report

GET

Aggregate data with selectable output formats and time bin sizes (where applicable)

PUT /api/app/aid

Update app settings
💡
This endpoint will only update settings you include in the request. So only include settings you intend to modify.
PUT /api/app/aid HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Content-Type: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61

{"settings":{"enabled":true,"db":{"limit":{"age":0}}}}

HTTP/1.1 200 OK
Content-Type: application/json
settings.enabled
boolean
Enable/disable the AID application
settings.db.limit.age
number
Number of seconds for aid incidents to exist before being automatically deleted. A value of 0 indicates that AID incidents will be retained forever

GET /api/app/aid

Get app settings
GET /api/app/aid HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61

HTTP/1.1 200 OK
Content-Type: application/json

{"app":{"name":"aid","settings":{"_version_":[2,71],"db":{"limit":{"age":0}},"enabled":false,"incident":{"detectors":{"11":{"actions":[],"id":11,"settings":{"enabled":true,"exceptions":{"stopped":{"movements":[],"speed":0.89}},"filter":["vehicle","pedestrian","cyclist","unclassified"],"name":"red light runner","traffic-signal":16},"sinks":[],"type":"intersection.red-light"},"12":{"actions":[],"id":12,"settings":{"enabled":true,"filter":["pedestrian","pedestrian"],"name":"jaywalking","traffic-signal":16},"sinks":[],"type":"intersection.jaywalking"},"13":{"actions":[],"id":13,"settings":{"enabled":false,"filter":[],"name":"adgasdgasdgasdgasdg","speed":11.18,"zones":[1,2]},"sinks":[],"type":"object.low-speed"},"14":{"actions":[],"id":14,"settings":{"enabled":true,"filter":["vehicle"],"name":"impeded depart","speed":55,"traffic-signal":16},"sinks":[],"type":"intersection.impeded-departure"},"16":{"actions":[],"id":16,"settings":{"enabled":false,"heading":45,"name":"Near miss","pet":{"critical":1500,"unsafe":2000},"speed":4.47,"zones":{"exclusion":[],"search":[]}},"sinks":[],"type":"intersection.near-miss"},"2":{"actions":[],"id":2,"settings":{"enabled":true,"filter":["vehicle","cyclist"],"name":"Speeding NB","speed":6.71,"zones":[24,25,26,28,33]},"sinks":[],"type":"object.high-speed"},"3":{"actions":[],"id":3,"settings":{"enabled":true,"filter":["pedestrian","cyclist"],"name":"VRU NB","zones":[24,25,26,27]},"sinks":[],"type":"object.in-zone"},"4":{"actions":[],"id":4,"settings":{"enabled":false,"filter":["vehicle","pedestrian","cyclist","unclassified"],"length":3.05,"name":"NB Oversized","width":1.22,"zones":[24,25,26,27]},"sinks":[],"type":"object.oversized"},"5":{"actions":[],"id":5,"settings":{"dwell":10000,"enabled":true,"filter":["vehicle","pedestrian","cyclist","unclassified"],"name":"Stopbar loitering","zones":[28,33]},"sinks":[],"type":"object.loitering"},"6":{"actions":[],"id":6,"settings":{"count":2,"duration":10,"enabled":true,"filter":["vehicle","unclassified"],"name":"Congestion NB","speed":15.65,"zones":[33]},"sinks":[{"settings":{"interface":24},"type":"aid-streamer"}],"type":"congestion"},"7":{"actions":[],"id":7,"settings":{"enabled":true,"filter":["vehicle"],"name":"Wrong Way NB","path":[24,25,26]},"sinks":[],"type":"object.wrong-way"},"8":{"actions":[],"id":8,"settings":{"enabled":true,"filter":["vehicle","pedestrian","cyclist","unclassified"],"name":"NB Shoulder Stopped","zones":[28,33]},"sinks":[{"settings":{"interface":24},"type":"aid-streamer"}],"type":"object.stopped"}}},"sequence":{"incident-detectors":17}},"defaults":{"db":{"limit":{"age":0}},"enabled":false,"incident":{"detectors":null,"sinks":null},"sequence":{"incident-detectors":1,"incident-sinks":2}},"manifest":{"description":"A system for detecting specific kinds of incidents","name":"AID (Automatic Incident Detection)","version":"1.0.0"}}}

GET /api/app/aid/incident/detectors

Fetches the list of configured incident detectors
GET /api/app/aid/incident/detectors HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61

HTTP/1.1 200 OK
Content-Type: application/json

{"detectors":[{"actions":[],"id":2,"settings":{"enabled":true,"filter":["vehicle","cyclist"],"name":"Speeding NB","speed":6.71,"zones":[24,25,26,28,33]},"sinks":[],"type":"object.high-speed"},{"actions":[],"id":3,"settings":{"enabled":true,"filter":["pedestrian","cyclist"],"name":"VRU NB","zones":[24,25,26,27]},"sinks":[],"type":"object.in-zone"},{"actions":[],"id":4,"settings":{"enabled":true,"filter":["vehicle","pedestrian","cyclist","unclassified"],"length":3.05,"name":"NB Oversized","width":1.22,"zones":[24,25,26,27]},"sinks":[],"type":"object.oversized"},{"actions":[],"id":5,"settings":{"dwell":10000,"enabled":true,"filter":["vehicle","pedestrian","cyclist","unclassified"],"name":"Stopbar loitering","zones":[28,33]},"sinks":[],"type":"object.loitering"},{"actions":[],"id":6,"settings":{"count":2,"duration":10,"enabled":true,"filter":["vehicle","unclassified"],"name":"Congestion NB","speed":15.65,"zones":[33]},"sinks":[{"settings":{"interface":24},"type":"aid-streamer"}],"type":"congestion"},{"actions":[],"id":7,"settings":{"enabled":true,"filter":["vehicle"],"name":"Wrong Way NB","path":[24,25,26]},"sinks":[],"type":"object.wrong-way"},{"actions":[],"id":8,"settings":{"enabled":true,"filter":["vehicle","pedestrian","cyclist","unclassified"],"name":"NB Shoulder Stopped","zones":[28,33]},"sinks":[],"type":"object.stopped"}]}

GET /api/app/aid/incident/detectors?q=status

Fetches incident detectors and their current status, which includes active incidents
GET /api/app/aid/incident/detectors?q=status HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61

HTTP/1.1 200 OK
Content-Type: application/json

{"detectors":[{"actions":[],"id":11,"settings":{"enabled":true,"exceptions":{"stopped":{"movements":[],"speed":0.89}},"filter":["vehicle","pedestrian","cyclist","unclassified"],"name":"red light runner","traffic-signal":16},"sinks":[],"type":"intersection.red-light","status":{"incidents":null,"count":0}},{"actions":[],"id":12,"settings":{"enabled":true,"filter":["pedestrian","pedestrian"],"name":"jaywalking","traffic-signal":16},"sinks":[],"type":"intersection.jaywalking","status":{"incidents":null,"count":0}},{"actions":[],"id":13,"settings":{"enabled":false,"filter":[],"name":"adgasdgasdgasdgasdg","speed":11.18,"zones":[1,2]},"sinks":[],"type":"object.low-speed","status":{"incidents":null,"count":0}},{"actions":[],"id":14,"settings":{"enabled":true,"filter":["vehicle"],"name":"impeded depart","speed":55,"traffic-signal":16},"sinks":[],"type":"intersection.impeded-departure","status":{"incidents":null,"count":0}},{"actions":[],"id":16,"settings":{"enabled":false,"heading":45,"name":"Near miss","pet":{"critical":1500,"unsafe":2000},"speed":4.47,"zones":{"exclusion":[],"search":[]}},"sinks":[],"type":"intersection.near-miss","status":{"incidents":null,"count":0}},{"actions":[],"id":2,"settings":{"enabled":true,"filter":["vehicle","cyclist"],"name":"Speeding NB","speed":6.71,"zones":[24,25,26,28,33]},"sinks":[],"type":"object.high-speed","status":{"incidents":null,"count":1556}},{"actions":[],"id":3,"settings":{"enabled":true,"filter":["pedestrian","cyclist"],"name":"VRU NB","zones":[24,25,26,27]},"sinks":[],"type":"object.in-zone","status":{"incidents":null,"count":632}},{"actions":[],"id":4,"settings":{"enabled":false,"filter":["vehicle","pedestrian","cyclist","unclassified"],"length":3.05,"name":"NB Oversized","width":1.22,"zones":[24,25,26,27]},"sinks":[],"type":"object.oversized","status":{"incidents":null,"count":0}},{"actions":[],"id":5,"settings":{"dwell":10000,"enabled":true,"filter":["vehicle","pedestrian","cyclist","unclassified"],"name":"Stopbar loitering","zones":[28,33]},"sinks":[],"type":"object.loitering","status":{"incidents":[{"detector":5,"id":199375,"log":[{"dwell":10011,"position":{"altitude":0,"latitude":47.617202465562535,"longitude":-122.20167655261695},"speed":0.02706615999341011,"state":"active","timestamp":1750358086490}],"object":{"classification":"unknown","id":[1414,1750358076479],"lwh":[1.585039734840393,0.4656212031841278,0.7398056387901306],"type":"unclassified"},"recording":0,"timestamp":1750358086490,"type":"object.loitering","zone":33},{"detector":5,"id":199368,"log":[{"dwell":10011,"position":{"altitude":0,"latitude":47.61724374979129,"longitude":-122.20169517327007},"speed":0.014030919410288334,"state":"active","timestamp":1750358073926}],"object":{"classification":"car","id":[1404,1750358063915],"lwh":[4.530211448669434,1.4827631711959839,1.3122004270553589],"type":"vehicle"},"recording":0,"timestamp":1750358073926,"type":"object.loitering","zone":33}],"count":148}},{"actions":[],"id":6,"settings":{"count":2,"duration":10,"enabled":true,"filter":["vehicle","unclassified"],"name":"Congestion NB","speed":15.65,"zones":[33]},"sinks":[{"settings":{"interface":24},"type":"aid-streamer"}],"type":"congestion","status":{"incidents":null,"count":50}},{"actions":[],"id":7,"settings":{"enabled":true,"filter":["vehicle"],"name":"Wrong Way NB","path":[24,25,26]},"sinks":[],"type":"object.wrong-way","status":{"incidents":null,"count":0}},{"actions":[],"id":8,"settings":{"enabled":true,"filter":["vehicle","pedestrian","cyclist","unclassified"],"name":"NB Shoulder Stopped","zones":[28,33]},"sinks":[{"settings":{"interface":24},"type":"aid-streamer"}],"type":"object.stopped","status":{"incidents":[{"detector":8,"id":199374,"log":[{"position":{"altitude":0,"latitude":47.61723071443753,"longitude":-122.2016962133626},"speed":1.4983563423156738,"state":"active","timestamp":1750358086140}],"object":{"classification":"unknown","id":[1412,1750358067519],"lwh":[1.5968462228775024,0.6303684115409851,0.4934808015823364],"type":"unclassified"},"recording":0,"timestamp":1750358086140,"type":"object.stopped","zone":33},{"detector":8,"id":199370,"log":[{"position":{"altitude":0,"latitude":47.61720028893712,"longitude":-122.2016805424301},"speed":1.0508331060409546,"state":"active","timestamp":1750358076529}],"object":{"classification":"unknown","id":[1414,1750358076479],"lwh":[1.5576549768447876,0.4445152282714844,0.7142224907875061],"type":"unclassified"},"recording":0,"timestamp":1750358076529,"type":"object.stopped","zone":33},{"detector":8,"id":199365,"log":[{"position":{"altitude":0,"latitude":47.6172434029321,"longitude":-122.20169353770238},"speed":0.06852327287197113,"state":"active","timestamp":1750358063965}],"object":{"classification":"car","id":[1404,1750358063915],"lwh":[4.530211448669434,1.4827631711959839,1.3122004270553589],"type":"vehicle"},"recording":0,"timestamp":1750358063965,"type":"object.stopped","zone":33}],"count":541}}]}

GET /api/app/aid/incident/detectors?id={id}

Fetches a specific incident detector
GET /api/app/aid/incident/detectors?id={id} HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
id
number
ID of the detector to fetch

HTTP/1.1 200 OK
Content-Type: application/json

{"detector":{"actions":[],"id":2,"settings":{"enabled":true,"filter":["vehicle","cyclist"],"name":"Speeding NB","speed":6.71,"zones":[24,25,26,28,33]},"sinks":[],"type":"object.high-speed"}}

GET /api/app/aid/incident/detectors?id={id}&q=status

Fetches a specific incident detector with status information, including active incidents
GET /api/app/aid/incident/detectors?id={id}&q=status HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
id
number
ID of the detector to fetch

HTTP/1.1 200 OK
Content-Type: application/json

{"detector":{"actions":[],"id":8,"settings":{"enabled":true,"filter":["vehicle","pedestrian","cyclist","unclassified"],"name":"NB Shoulder Stopped","zones":[28,33]},"sinks":[{"settings":{"interface":24},"type":"aid-streamer"}],"type":"object.stopped","status":{"incidents":[{"detector":8,"id":198650,"log":[{"position":{"altitude":0,"latitude":47.61720028893712,"longitude":-122.2016805424301},"speed":1.0508331060409546,"state":"active","timestamp":1750357138325}],"object":{"classification":"unknown","id":[22,1750357138275],"lwh":[1.5576549768447876,0.4445152282714844,0.7142224907875061],"type":"unclassified"},"recording":0,"timestamp":1750357138325,"type":"object.stopped","zone":33},{"detector":8,"id":198645,"log":[{"position":{"altitude":0,"latitude":47.6172434029321,"longitude":-122.20169353770238},"speed":0.06852327287197113,"state":"active","timestamp":1750357125762}],"object":{"classification":"car","id":[6,1750357125713],"lwh":[4.530211448669434,1.4827631711959839,1.3122004270553589],"type":"vehicle"},"recording":0,"timestamp":1750357125762,"type":"object.stopped","zone":33}],"count":409}}}

POST /api/app/aid/incident/detectors

Create a new incident detector
POST /api/app/aid/incident/detectors HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Content-Type: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61

{"type":"object.high-speed","settings":{"speed":11.18,"zones":[2],"filter":["vehicle","cyclist"],"enabled":true,"name":"My Detector"},"sinks":[{"type":"aid-streamer","settings":{"interface":24}}],"actions":[]}

HTTP/1.1 200 OK
Content-Type: application/json

PUT /api/app/aid/incident/detectors?id={id}

Update an existing incident detector
PUT /api/app/aid/incident/detectors?id={id} HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Content-Type: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61

{"type":"object.high-speed","settings":{"speed":11.18,"zones":[2],"filter":["vehicle","cyclist"],"enabled":true,"name":"My Detector"},"sinks":[{"type":"aid-streamer","settings":{"interface":24}}],"actions":[]}
id
number
ID of the detector to update

HTTP/1.1 200 OK
Content-Type: application/json
type
string
The type of incident detector
settings
Settings specific to this detector type
sinks[]
A list of sinks for this detector to send incident data to
actions[]
A list of actions for this detector to execute

DELETE /api/app/aid/incident/detectors?id={id}

Delete an existing incident detector
DELETE /api/app/aid/incident/detectors?id={id} HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
id
number
ID of the detector to delete

HTTP/1.1 200 OK
Content-Type: application/json

GET /api/app/aid/incidents?id={id} 

Get a specific incident
GET /api/app/aid/incidents?id={id} HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
id
number
ID of the incident to fetch

HTTP/1.1 200 OK
Content-Type: application/json

{"incident":{"detector":2,"id":196177,"log":[{"position":{"altitude":0,"latitude":47.617469787597656,"longitude":-122.2018814086914},"speed":10.452117919921875,"state":"active","timestamp":1750353823233},{"position":{"altitude":0,"latitude":47.617469787597656,"longitude":-122.20195007324219},"speed":10.05234432220459,"state":"clear","timestamp":1750353823783}],"object":{"classification":"car","id":[250,1750353821731],"lwh":[4.373017311096191,1.7903811931610107,1.4800803661346436],"type":"vehicle"},"recording":0,"timestamp":1750353823233,"type":"object.high-speed","zone":24}}

GET /api/app/aid/incidents?detector={id}&start={iso8601}&end={iso8601} 

Get a list of incidents from a specific detector
GET /api/app/aid/incidents?detector={id}&start={iso8601}&end={iso8601} HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
detector
number
ID of the detector to search for incidents
start
ISO 8601
Start date to search for incidents

/api/app/aid/incidents?start=2025-06-16T12:15:30
end
ISO 8601
End date to search for incidents

/api/app/aid/incidents?end=2025-06-16T12:15:30
limit
number
Limit the number of incidents returned. This will return the most recent incidents up to this limit

HTTP/1.1 200 OK
Content-Type: application/json

{"incidents":[{"detector":2,"id":196189,"log":[{"position":{"altitude":0,"latitude":47.617469787597656,"longitude":-122.2018814086914},"speed":9.311111450195312,"state":"active","timestamp":1750353858367},{"position":{"altitude":0,"latitude":47.61746597290039,"longitude":-122.20195007324219},"speed":8.737798690795898,"state":"clear","timestamp":1750353858967}],"object":{"classification":"car","id":[278,1750353851059],"lwh":[4.398856163024902,1.4482020139694214,1.181886076927185],"type":"vehicle"},"recording":0,"timestamp":1750353858367,"type":"object.high-speed","zone":24}],"total":917}
incidents
array
List of matching incidents
total
number
The total number of incidents that matched, even if not provided in the list due to the limit constraint

DELETE /api/app/aid/incidents?id={id} 

Delete a specific incident
DELETE /api/app/aid/incidents?id={id} HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
id
number
ID of the incident to delete

HTTP/1.1 200 OK
Content-Type: application/json

DELETE /api/app/aid/incidents?detector={id}

Delete all incidents for this detector
DELETE /api/app/aid/incidents?detector={id} HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
detector
number
ID of the detector to delete incidents from

DELETE /api/app/aid/incidents?detector={id}&start={iso8601}&end={iso8601} 

Delete all incidents between the start and end time
DELETE /api/app/aid/incidents?detector={id}&start={iso8601}&end={iso8601} HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
detector
number
ID of the detector to delete incidents from
start
ISO 8601
Start date to search for incidents

/api/app/aid/incidents?start=2025-06-16T12:15:30
end
ISO 8601
End date to search for incidents

/api/app/aid/incidents?end=2025-06-16T12:15:30

HTTP/1.1 200 OK
Content-Type: application/json

DELETE /api/app/aid/incidents?detector={id}&before={iso8601}

Delete all incidents before a certain date and time
DELETE /api/app/aid/incidents?detector={id}&before={iso8601} HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
detector
number
ID of the detector to delete incidents from
before
ISO 8601
Delete incidents before this date time

/api/app/aid/incidents?before=2025-06-16T12:15:30

HTTP/1.1 200 OK
Content-Type: application/json

DELETE /api/app/aid/incidents?detector={id}&after={iso8601}

Delete all incidents after a certain date and time
DELETE /api/app/aid/incidents?detector={id}&after={iso8601} HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
detector
number
ID of the detector to delete incidents from
after
ISO 8601
Delete incidents after this date time

/api/app/aid/incidents?after=2025-06-16T12:15:30

HTTP/1.1 200 OK
Content-Type: application/json

GET /api/app/aid/status 

This provides current state information about the AID system, including all active incidents
GET /api/app/aid/status HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61

HTTP/1.1 200 OK
Content-Type: application/json

{"status":{"incident":{"detectors":{"2":{"count":2076,"id":2,"incidents":null,"name":"Speeding NB","type":"object.high-speed"},"3":{"count":866,"id":3,"incidents":null,"name":"VRU NB","type":"object.in-zone"},"4":{"count":4956,"id":4,"incidents":null,"name":"NB Oversized","type":"object.oversized"},"5":{"count":215,"id":5,"incidents":[{"detector":5,"dwell":10009,"id":[1745326789822,8],"object":{"classification":"car","id":[6,1745326779812],"lwh":[4.530211448669434,1.4827631711959839,1.3122004270553589],"position":{"altitude":0,"latitude":47.61724374979129,"longitude":-122.20169517327007},"speed":0.014030919410288334,"type":"vehicle"},"state":"active","timestamp":1745326789822,"type":"object.loitering","zone":33}],"name":"Stopbar loitering","type":"object.loitering"},"6":{"count":73,"duration":10,"id":6,"name":"Congestion NB","objects":1,"state":"clear","type":"congestion"},"7":{"count":0,"id":7,"name":"Wrong Way NB","type":"object.wrong-way"}}}}}

GET /api/app/aid/report/object.high-speed/incidents

Fetches an incident report, which provides per incident details
GET /api/app/aid/report/object.high-speed/incidents HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
format
string
Specifies the output format for the report. Defaults to json

/api/app/aid/report/object.high-speed/incidents?format=excel - generates a report as an excel file download
/api/app/aid/report/object.high-speed/incidents?format=csv - generates a report as a csv file download
/api/app/aid/report/object.high-speed/incidents?format=json - generates a report as a json output
/api/app/aid/report/object.high-speed/incidents?format=json.file - generates a report as a json file download
start
ISO8601 Date & Time
Start date and time for the selection range of the report

/api/app/aid/report/object.high-speed/incidents?start=2025-06-16T12:15:30
end
ISO8601 Date & Time
End date and time for the selection range of the report

/api/app/aid/report/object.high-speed/incidents?end=2025-06-16T12:15:30
HTTP/1.1 200 OK
Content-Type: {depends on format parameter}

GET /api/app/aid/report/object.low-speed/incidents

Fetches an incident report, which provides per incident details
GET /api/app/aid/report/object.low-speed/incidents HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
format
string
Specifies the output format for the report. Defaults to json

/api/app/aid/report/object.low-speed/incidents?format=excel - generates a report as an excel file download
/api/app/aid/report/object.low-speed/incidents?format=csv - generates a report as a csv file download
/api/app/aid/report/object.low-speed/incidents?format=json - generates a report as a json output
/api/app/aid/report/object.low-speed/incidents?format=json.file - generates a report as a json file download
start
ISO8601 Date & Time
Start date and time for the selection range of the report

/api/app/aid/report/object.low-speed/incidents?start=2025-06-16T12:15:30
end
ISO8601 Date & Time
End date and time for the selection range of the report

/api/app/aid/report/object.low-speed/incidents?end=2025-06-16T12:15:30
HTTP/1.1 200 OK
Content-Type: {depends on format parameter}

GET /api/app/aid/report/object.in-zone/incidents

Fetches an incident report, which provides per incident details
GET /api/app/aid/report/object.in-zone/incidents HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
format
string
Specifies the output format for the report. Defaults to json

/api/app/aid/report/object.in-zone/incidents?format=excel - generates a report as an excel file download
/api/app/aid/report/object.in-zone/incidents?format=csv - generates a report as a csv file download
/api/app/aid/report/object.in-zone/incidents?format=json - generates a report as a json output
/api/app/aid/report/object.in-zone/incidents?format=json.file - generates a report as a json file download
start
ISO8601 Date & Time
Start date and time for the selection range of the report

/api/app/aid/report/object.in-zone/incidents?start=2025-06-16T12:15:30
end
ISO8601 Date & Time
End date and time for the selection range of the report

/api/app/aid/report/object.in-zone/incidents?end=2025-06-16T12:15:30
HTTP/1.1 200 OK
Content-Type: {depends on format parameter}

GET /api/app/aid/report/object.lane-change/incidents

Fetches an incident report, which provides per incident details
GET /api/app/aid/report/object.lane-change/incidents HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
format
string
Specifies the output format for the report. Defaults to json

/api/app/aid/report/object.lane-change/incidents?format=excel - generates a report as an excel file download
/api/app/aid/report/object.lane-change/incidents?format=csv - generates a report as a csv file download
/api/app/aid/report/object.lane-change/incidents?format=json - generates a report as a json output
/api/app/aid/report/object.lane-change/incidents?format=json.file - generates a report as a json file download
start
ISO8601 Date & Time
Start date and time for the selection range of the report

/api/app/aid/report/object.lane-change/incidents?start=2025-06-16T12:15:30
end
ISO8601 Date & Time
End date and time for the selection range of the report

/api/app/aid/report/object.lane-change/incidents?end=2025-06-16T12:15:30
HTTP/1.1 200 OK
Content-Type: {depends on format parameter}

GET /api/app/aid/report/object.loitering/incidents

Fetches an incident report, which provides per incident details
GET /api/app/aid/report/object.loitering/incidents HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
format
string
Specifies the output format for the report. Defaults to json

/api/app/aid/report/object.loitering/incidents?format=excel - generates a report as an excel file download
/api/app/aid/report/object.loitering/incidents?format=csv - generates a report as a csv file download
/api/app/aid/report/object.loitering/incidents?format=json - generates a report as a json output
/api/app/aid/report/object.loitering/incidents?format=json.file - generates a report as a json file download
start
ISO8601 Date & Time
Start date and time for the selection range of the report

/api/app/aid/report/object.loitering/incidents?start=2025-06-16T12:15:30
end
ISO8601 Date & Time
End date and time for the selection range of the report

/api/app/aid/report/object.loitering/incidents?end=2025-06-16T12:15:30
HTTP/1.1 200 OK
Content-Type: {depends on format parameter}

GET /api/app/aid/report/object.oversized/incidents

Fetches an incident report, which provides per incident details
GET /api/app/aid/report/object.oversized/incidents HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
format
string
Specifies the output format for the report. Defaults to json

/api/app/aid/report/object.oversized/incidents?format=excel - generates a report as an excel file download
/api/app/aid/report/object.oversized/incidents?format=csv - generates a report as a csv file download
/api/app/aid/report/object.oversized/incidents?format=json - generates a report as a json output
/api/app/aid/report/object.oversized/incidents?format=json.file - generates a report as a json file download
start
ISO8601 Date & Time
Start date and time for the selection range of the report

/api/app/aid/report/object.oversized/incidents?start=2025-06-16T12:15:30
end
ISO8601 Date & Time
End date and time for the selection range of the report

/api/app/aid/report/object.oversized/incidents?end=2025-06-16T12:15:30
HTTP/1.1 200 OK
Content-Type: {depends on format parameter}

GET /api/app/aid/report/object.stopped/incidents

Fetches an incident report, which provides per incident details
GET /api/app/aid/report/object.stopped/incidents HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
format
string
Specifies the output format for the report. Defaults to json

/api/app/aid/report/object.stopped/incidents?format=excel - generates a report as an excel file download
/api/app/aid/report/object.stopped/incidents?format=csv - generates a report as a csv file download
/api/app/aid/report/object.stopped/incidents?format=json - generates a report as a json output
/api/app/aid/report/object.stopped/incidents?format=json.file - generates a report as a json file download
start
ISO8601 Date & Time
Start date and time for the selection range of the report

/api/app/aid/report/object.stopped/incidents?start=2025-06-16T12:15:30
end
ISO8601 Date & Time
End date and time for the selection range of the report

/api/app/aid/report/object.stopped/incidents?end=2025-06-16T12:15:30
HTTP/1.1 200 OK
Content-Type: {depends on format parameter}

GET /api/app/aid/report/object.wrong-way/incidents

Fetches an incident report, which provides per incident details
GET /api/app/aid/report/object.wrong-way/incidents HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
format
string
Specifies the output format for the report. Defaults to json

/api/app/aid/report/object.wrong-way/incidents?format=excel - generates a report as an excel file download
/api/app/aid/report/object.wrong-way/incidents?format=csv - generates a report as a csv file download
/api/app/aid/report/object.wrong-way/incidents?format=json - generates a report as a json output
/api/app/aid/report/object.wrong-way/incidents?format=json.file - generates a report as a json file download
start
ISO8601 Date & Time
Start date and time for the selection range of the report

/api/app/aid/report/object.wrong-way/incidents?start=2025-06-16T12:15:30
end
ISO8601 Date & Time
End date and time for the selection range of the report

/api/app/aid/report/object.wrong-way/incidents?end=2025-06-16T12:15:30
HTTP/1.1 200 OK
Content-Type: {depends on format parameter}

GET /api/app/aid/report/congestion/incidents

Fetches an incident report, which provides per incident details
GET /api/app/aid/report/congestion/incidents HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
format
string
Specifies the output format for the report. Defaults to json

/api/app/aid/report/congestion/incidents?format=excel - generates a report as an excel file download
/api/app/aid/report/congestion/incidents?format=csv - generates a report as a csv file download
/api/app/aid/report/congestion/incidents?format=json - generates a report as a json output
/api/app/aid/report/congestion/incidents?format=json.file - generates a report as a json file download
start
ISO8601 Date & Time
Start date and time for the selection range of the report

/api/app/aid/report/congestion/incidents?start=2025-06-16T12:15:30
end
ISO8601 Date & Time
End date and time for the selection range of the report

/api/app/aid/report/congestion/incidents?end=2025-06-16T12:15:30
HTTP/1.1 200 OK
Content-Type: {depends on format parameter}

GET /api/app/aid/report/intersection.red-light/incidents

Fetches an incident report, which provides per incident details
GET /api/app/aid/report/intersection.red-light/incidents HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
format
string
Specifies the output format for the report. Defaults to json

/api/app/aid/report/intersection.red-light/incidents?format=excel - generates a report as an excel file download
/api/app/aid/report/intersection.red-light/incidents?format=csv - generates a report as a csv file download
/api/app/aid/report/intersection.red-light/incidents?format=json - generates a report as a json output
/api/app/aid/report/intersection.red-light/incidents?format=json.file - generates a report as a json file download
start
ISO8601 Date & Time
Start date and time for the selection range of the report

/api/app/aid/report/intersection.red-light/incidents?start=2025-06-16T12:15:30
end
ISO8601 Date & Time
End date and time for the selection range of the report

/api/app/aid/report/intersection.red-light/incidents?end=2025-06-16T12:15:30
HTTP/1.1 200 OK
Content-Type: {depends on format parameter}

GET /api/app/aid/report/intersection.split-failure/incidents

Fetches an incident report, which provides per incident details
GET /api/app/aid/report/intersection.split-failure/incidents HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
format
string
Specifies the output format for the report. Defaults to json

/api/app/aid/report/intersection.split-failure/incidents?format=excel - generates a report as an excel file download
/api/app/aid/report/intersection.split-failure/incidents?format=csv - generates a report as a csv file download
/api/app/aid/report/intersection.split-failure/incidents?format=json - generates a report as a json output
/api/app/aid/report/intersection.split-failure/incidents?format=json.file - generates a report as a json file download
start
ISO8601 Date & Time
Start date and time for the selection range of the report

/api/app/aid/report/intersection.split-failure/incidents?start=2025-06-16T12:15:30
end
ISO8601 Date & Time
End date and time for the selection range of the report

/api/app/aid/report/intersection.split-failure/incidents?end=2025-06-16T12:15:30
HTTP/1.1 200 OK
Content-Type: {depends on format parameter}


GET /api/app/aid/report/intersection.jaywalking/incidents

Fetches an incident report, which provides per incident details
GET /api/app/aid/report/intersection.jaywalking/incidents HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
format
string
Specifies the output format for the report. Defaults to json

/api/app/aid/report/intersection.jaywalking/incidents?format=excel - generates a report as an excel file download
/api/app/aid/report/intersection.jaywalking/incidents?format=csv - generates a report as a csv file download
/api/app/aid/report/intersection.jaywalking/incidents?format=json - generates a report as a json output
/api/app/aid/report/intersection.jaywalking/incidents?format=json.file - generates a report as a json file download
start
ISO8601 Date & Time
Start date and time for the selection range of the report

/api/app/aid/report/intersection.jaywalking/incidents?start=2025-06-16T12:15:30
end
ISO8601 Date & Time
End date and time for the selection range of the report

/api/app/aid/report/intersection.jaywalking/incidents?end=2025-06-16T12:15:30
HTTP/1.1 200 OK
Content-Type: {depends on format parameter}

GET /api/app/aid/report/intersection.impeded-departure/incidents

Fetches an incident report, which provides per incident details
GET /api/app/aid/report/intersection.impeded-departure/incidents HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
format
string
Specifies the output format for the report. Defaults to json

/api/app/aid/report/intersection.impeded-departure/incidents?format=excel - generates a report as an excel file download
/api/app/aid/report/intersection.impeded-departure/incidents?format=csv - generates a report as a csv file download
/api/app/aid/report/intersection.impeded-departure/incidents?format=json - generates a report as a json output
/api/app/aid/report/intersection.impeded-departure/incidents?format=json.file - generates a report as a json file download
start
ISO8601 Date & Time
Start date and time for the selection range of the report

/api/app/aid/report/intersection.impeded-departure/incidents?start=2025-06-16T12:15:30
end
ISO8601 Date & Time
End date and time for the selection range of the report

/api/app/aid/report/intersection.impeded-departure/incidents?end=2025-06-16T12:15:30
HTTP/1.1 200 OK
Content-Type: {depends on format parameter}

GET /api/app/aid/report/intersection.near-miss/incidents

Fetches an incident report, which provides per incident details
GET /api/app/aid/report/intersection.near-miss/incidents HTTP/1.1
Host: 127.0.0.1
Accept: application/json
Authorization: bearer 109b893ceb1c26e3e64e9abf7cdd2aa1c0d25f61
format
string
Specifies the output format for the report. Defaults to json

/api/app/aid/report/intersection.near-miss/incidents?format=excel - generates a report as an excel file download
/api/app/aid/report/intersection.near-miss/incidents?format=csv - generates a report as a csv file download
/api/app/aid/report/intersection.near-miss/incidents?format=json - generates a report as a json output
/api/app/aid/report/intersection.near-miss/incidents?format=json.file - generates a report as a json file download
start
ISO8601 Date & Time
Start date and time for the selection range of the report

/api/app/aid/report/intersection.near-miss/incidents?start=2025-06-16T12:15:30
end
ISO8601 Date & Time
End date and time for the selection range of the report

/api/app/aid/report/intersection.near-miss/incidents?end=2025-06-16T12:15:30
HTTP/1.1 200 OK
Content-Type: {depends on format parameter}


Edge Link (MQTT)

⚠️

Many AID incidents are tracked over a period of time, for example, stopped objects. This means that depending on the AID incident you subscribe to, you may receive multiple updates for the same one. The incident ID will be the same between all updates to that specific incident. These kinds of incidents typically contain a "log" which tracks changes to that incident over time. Recordings may also be added later on because an incident may be generated immediately but recording has not completed yet. When the recording is complete, it will update the incident with the recording ID which you can then download via our REST API.

app/aid/incident/congestion [JSON]

When a congestion event is updated or created, it will be published to this topic


app/aid/incident/object/low-speed [JSON]

When an object low speed event is updated or created, it will be published to this topic

{"detector":1,"id":7825,"log":[{"position":[42.355704137584034,-83.06646078671089,0.0],"heading":1.029386,"speed":4.949476718902588,"state":"active","timestamp":1765043148682},{"position":[42.35623791037424,-83.06677162056867,0.0],"heading":1.029386,"speed":9.596440315246582,"state":"clear","timestamp":1765043156492}],"object":{"classification":"car","id":[4,1765043131812],"lwh":[4.4403977394104,1.9305750131607056,1.6903574466705322],"type":"vehicle"},"recording":0,"timestamp":1765043148682,"type":"object.low-speed","zone":22}


app/aid/incident/object/high-speed [JSON]

When an object high speed event is updated or created, it will be published to this topic

{"detector":1,"id":7815,"log":[{"position":[42.355704137584034,-83.06646078671089,0.0],"heading":1.029386,"speed":4.949476718902588,"state":"active","timestamp":1765043148682},{"position":[42.35623791037424,-83.06677162056867,0.0],"heading":1.029386,"speed":9.596440315246582,"state":"clear","timestamp":1765043156492}],"object":{"classification":"car","id":[4,1765043131812],"lwh":[4.4403977394104,1.9305750131607056,1.6903574466705322],"type":"vehicle"},"recording":0,"timestamp":1765043148682,"type":"object.high-speed","zone":22}


app/aid/incident/object/in-zone [JSON]

When an object in-zone event is updated or created, it will be published to this topic

{"detector":1,"id":7815,"type":"object.in-zone","zone":21,"log":[{"position":[42.355704137584034,-83.06646078671089,0.0],"heading":1.029386,"speed":4.949476718902588,"state":"active","timestamp":1765043148682},{"position":[42.35623791037424,-83.06677162056867,0.0],"heading":1.029386,"speed":9.596440315246582,"state":"clear","timestamp":1765043156492}],"object":{"classification":"car","id":[4,1765043131812],"lwh":[4.4403977394104,1.9305750131607056,1.6903574466705322],"type":"vehicle"},"recording":0,"timestamp":1765043148682}


app/aid/incident/object/lane-change [JSON]

When an object lane change event is updated or created, it will be published to this topic

{"detector":1,"id":7815,"type":"object.lane-change","from":21,"to":27,"object":{"classification":"car","id":[4,1765043131812],"heading":1.029386,"lwh":[4.4403977394104,1.9305750131607056,1.6903574466705322],"type":"vehicle","position":[42.35623791037424,-83.06677162056867,0.0],"speed":9.596440315246582},"recording":0,"timestamp":1765043148682}


app/aid/incident/object/loitering [JSON]

When an object loitering event is updated or created, it will be published to this topic

{"detector":1,"id":7815,"type":"object.loitering","zone":21,"log":[{"position":[42.355704137584034,-83.06646078671089,0.0],"heading":1.029386,"speed":4.949476718902588,"state":"active","timestamp":1765043148682,"dwell":5000},{"dwell":17235,"position":[42.35623791037424,-83.06677162056867,0.0],"heading":1.029386,"speed":9.596440315246582,"state":"clear","timestamp":1765043156492}],"object":{"classification":"car","id":[4,1765043131812],"lwh":[4.4403977394104,1.9305750131607056,1.6903574466705322],"type":"vehicle"},"recording":0,"timestamp":1765043148682}


app/aid/incident/object/stopped [JSON]

When an object stopped event is updated or created, it will be published to this topic

{"detector":1,"id":7815,"type":"object.in-stopped","zone":21,"log":[{"position":[42.355704137584034,-83.06646078671089,0.0],"heading":1.029386,"speed":4.949476718902588,"state":"active","timestamp":1765043148682},{"position":[42.35623791037424,-83.06677162056867,0.0],"heading":1.029386,"speed":9.596440315246582,"state":"clear","timestamp":1765043156492}],"object":{"classification":"car","id":[4,1765043131812],"lwh":[4.4403977394104,1.9305750131607056,1.6903574466705322],"type":"vehicle"},"recording":0,"timestamp":1765043148682}


app/aid/incident/object/oversized [JSON]

When an object oversized event is updated or created, it will be published to this topic

{"detector":1,"id":7815,"type":"object.oversized","zone":21,"log":[{"position":[42.355704137584034,-83.06646078671089,0.0],"heading":1.029386,"speed":4.949476718902588,"state":"active","timestamp":1765043148682},{"position":[42.35623791037424,-83.06677162056867,0.0],"heading":1.029386,"speed":9.596440315246582,"state":"clear","timestamp":1765043156492}],"object":{"classification":"car","id":[4,1765043131812],"lwh":[4.4403977394104,1.9305750131607056,1.6903574466705322],"type":"vehicle"},"recording":0,"timestamp":1765043148682}


app/aid/incident/object/wrong-way [JSON]

When an object wrong way event is updated or created, it will be published to this topic

{"detector":2,"heading":"eb","id":1938,"log":[{"heading":1.105635795063955,"position":[42.35599496180403,-83.06650130222137,0.0],"speed":11.513517379760742,"state":"tracking","timestamp":1765904331005},{"heading":1.0161353106076807,"position":[42.356276876215546,-83.06586378900809,0.0],"speed":10.195969581604004,"state":"tracking-lost","timestamp":1765904336595}],"object":{"classification":"car","id":[4,1765904312282],"lwh":[4.221421241760254,1.8234446048736572,1.5356385707855225],"type":"vehicle","description":{"color":"yellow","confidence":0.0,"license-plate":"ABC123","make":false,"model":false,"year":false}},"recording":0,"timestamp":1765904331005,"type":"object.wrong-way"}


app/aid/incident/intersection/belated-walker [JSON]

When an intersection belated walker event is updated or created, it will be published to this topic

{"detector":1,"id":883436,"type":"intersection.belated-walker","scenario":"flashing-dont-walk","movement":{"heading":"nb","time":{"walk":16396,"provided":22000,"deficit":4333,"ppt":4235},"ingress":{"timestamp":1765043148682,"state":"protected","indication":"flashing-dont-walk"},"egress":{"timestamp":1765043148682}},"object":{"classification":"person","id":[4,1765043131812],"heading":1.029386,"lwh":[4.4403977394104,1.9305750131607056,1.6903574466705322],"type":"pedestrian","position":[42.355704137584034,-83.06646078671089,0.0],"speed":4.949476718902588},"recording":0,"timestamp":1765043148682}


app/aid/incident/intersection/illegal-movement [JSON]

When an intersection illegal movement event is updated or created, it will be published to this topic

{"detector":1,"id":7825,"type":"intersection.illegal-movement","movement":{"heading":"nb","type":"through","zone":23},"object":{"classification":"car","id":[4,1765043131812],"lwh":[4.4403977394104,1.9305750131607056,1.6903574466705322],"heading":1.029386,"type":"vehicle","position":[42.355704137584034,-83.06646078671089,0.0],"speed":4.949476718902588},"recording":0,"timestamp":1765043148682}


app/aid/incident/intersection/jaywalking [JSON]

When an intersection jaywalking event is updated or created, it will be published to this topic

{"detector":1,"id":27006,"movement":{"heading":"sb","ppt":502},"movements":[{"state":"prohibited","duration":11127,"heading":"eb","indication":"red","timestamp":1765129827583,"type":"left"},{"state":"prohibited","duration":11127,"heading":"wb","indication":"red","timestamp":1765129827583,"type":"through"},{"state":"prohibited","duration":11127,"heading":"wb","indication":"red","timestamp":1765129827583,"type":"right"},{"state":"prohibited","duration":327,"heading":"nb","indication":"red","timestamp":1765129838384,"type":"through"},{"state":"prohibited","duration":327,"heading":"nb","indication":"red","timestamp":1765129838384,"type":"left"},{"state":"prohibited","duration":327,"heading":"nb","indication":"red","timestamp":1765129838384,"type":"right"},{"state":"prohibited","duration":11127,"heading":"wb","indication":"red","timestamp":1765129827583,"type":"left"},{"state":"prohibited","duration":11127,"heading":"wb","indication":"red","timestamp":1765129827583,"type":"u-turn"},{"state":"prohibited","duration":11127,"heading":"eb","indication":"red","timestamp":1765129827583,"type":"through"},{"state":"prohibited","duration":11127,"heading":"eb","indication":"red","timestamp":1765129827583,"type":"right"},{"state":"prohibited","duration":11127,"heading":"eb","indication":"red","timestamp":1765129827583,"type":"u-turn"},{"state":"prohibited","duration":327,"heading":"sb","indication":"red","timestamp":1765129838384,"type":"through"},{"state":"prohibited","duration":327,"heading":"sb","indication":"red","timestamp":1765129838384,"type":"left"},{"state":"prohibited","duration":327,"heading":"sb","indication":"red","timestamp":1765129838384,"type":"right"},{"state":"prohibited","duration":15214,"heading":"wb","indication":"dont-walk","timestamp":1765129823497,"type":"pedestrian"},{"state":"prohibited","duration":789508,"heading":"nb","indication":"dont-walk","timestamp":1765129049202,"type":"pedestrian"},{"state":"prohibited","duration":15214,"heading":"eb","indication":"dont-walk","timestamp":1765129823497,"type":"pedestrian"},{"state":"prohibited","duration":789508,"heading":"sb","indication":"dont-walk","timestamp":1765129049202,"type":"pedestrian"}],"object":{"classification":"person","heading":1.029386,"id":[523,1765129830984],"lwh":[4.659926414489746,1.9463437795639038,1.1883721351623535],"position":[40.6095920926849,-111.94829823344843,0.0],"speed":5.505294322967529,"type":"pedestrian"},"recording":186131,"timestamp":1765129838886,"type":"intersection.jaywalking"}


app/aid/incident/intersection/near-miss [JSON]

When an intersection near miss event is updated or created, it will be published to this topic

{"detector":1,"id":192386,"type":"intersection.near-miss","severity":"critical","pet":1765,"intersect":[42.355704137584034,-83.06646078671089,0.0],"trailing":{"classification":"car","id":[4,1765043131812],"heading":1.029386,"lwh":[4.4403977394104,1.9305750131607056,1.6903574466705322],"type":"vehicle","position":[42.355704137584034,-83.06646078671089,0.0],"speed":4.949476718902588},"leading":{"classification":"car","heading":1.029386,"id":[4,1765043131812],"lwh":[4.4403977394104,1.9305750131607056,1.6903574466705322],"type":"vehicle","position":[42.355704137584034,-83.06646078671089,0.0],"speed":4.949476718902588},"recording":1235,"timestamp":1765043148682}


app/aid/incident/intersection/impeded-departure [JSON]

When an intersection impeded departure event is updated or created, it will be published to this topic

{"detector":1,"id":23006,"type":"intersection.impeded-departure","movement":{"heading":"sb","type":"left","certainty":"realized"},"movements":[{"state":"prohibited","duration":11127,"heading":"eb","indication":"red","timestamp":1765129827583,"type":"left"},{"state":"prohibited","duration":11127,"heading":"wb","indication":"red","timestamp":1765129827583,"type":"through"},{"state":"prohibited","duration":11127,"heading":"wb","indication":"red","timestamp":1765129827583,"type":"right"},{"state":"prohibited","duration":327,"heading":"nb","indication":"red","timestamp":1765129838384,"type":"through"},{"state":"prohibited","duration":327,"heading":"nb","indication":"red","timestamp":1765129838384,"type":"left"},{"state":"prohibited","duration":327,"heading":"nb","indication":"red","timestamp":1765129838384,"type":"right"},{"state":"prohibited","duration":11127,"heading":"wb","indication":"red","timestamp":1765129827583,"type":"left"},{"state":"prohibited","duration":11127,"heading":"wb","indication":"red","timestamp":1765129827583,"type":"u-turn"},{"state":"prohibited","duration":11127,"heading":"eb","indication":"red","timestamp":1765129827583,"type":"through"},{"state":"prohibited","duration":11127,"heading":"eb","indication":"red","timestamp":1765129827583,"type":"right"},{"state":"prohibited","duration":11127,"heading":"eb","indication":"red","timestamp":1765129827583,"type":"u-turn"},{"state":"prohibited","duration":327,"heading":"sb","indication":"red","timestamp":1765129838384,"type":"through"},{"state":"prohibited","duration":327,"heading":"sb","indication":"red","timestamp":1765129838384,"type":"left"},{"state":"prohibited","duration":327,"heading":"sb","indication":"red","timestamp":1765129838384,"type":"right"},{"state":"prohibited","duration":15214,"heading":"wb","indication":"dont-walk","timestamp":1765129823497,"type":"pedestrian"},{"state":"prohibited","duration":789508,"heading":"nb","indication":"dont-walk","timestamp":1765129049202,"type":"pedestrian"},{"state":"prohibited","duration":15214,"heading":"eb","indication":"dont-walk","timestamp":1765129823497,"type":"pedestrian"},{"state":"prohibited","duration":789508,"heading":"sb","indication":"dont-walk","timestamp":1765129049202,"type":"pedestrian"}],"object":{"classification":"car","id":[523,1765129830984],"lwh":[4.659926414489746,1.9463437795639038,1.1883721351623535],"heading":1.029386,"position":[40.6095920926849,-111.94829823344843,0.0],"speed":5.505294322967529,"type":"vehicle"},"recording":186131,"timestamp":1765129838886}


app/aid/incident/intersection/red-light [JSON]

When an intersection red light incident is updated or created, it will be published to this topic

{"detector":1,"id":211006,"movement":{"certainty":"realized","heading":"sb","ppt":502,"type":"right"},"movements":[{"state":"prohibited","duration":11127,"heading":"eb","indication":"red","timestamp":1765129827583,"type":"left"},{"state":"prohibited","duration":11127,"heading":"wb","indication":"red","timestamp":1765129827583,"type":"through"},{"state":"prohibited","duration":11127,"heading":"wb","indication":"red","timestamp":1765129827583,"type":"right"},{"state":"prohibited","duration":327,"heading":"nb","indication":"red","timestamp":1765129838384,"type":"through"},{"state":"prohibited","duration":327,"heading":"nb","indication":"red","timestamp":1765129838384,"type":"left"},{"state":"prohibited","duration":327,"heading":"nb","indication":"red","timestamp":1765129838384,"type":"right"},{"state":"prohibited","duration":11127,"heading":"wb","indication":"red","timestamp":1765129827583,"type":"left"},{"state":"prohibited","duration":11127,"heading":"wb","indication":"red","timestamp":1765129827583,"type":"u-turn"},{"state":"prohibited","duration":11127,"heading":"eb","indication":"red","timestamp":1765129827583,"type":"through"},{"state":"prohibited","duration":11127,"heading":"eb","indication":"red","timestamp":1765129827583,"type":"right"},{"state":"prohibited","duration":11127,"heading":"eb","indication":"red","timestamp":1765129827583,"type":"u-turn"},{"state":"prohibited","duration":327,"heading":"sb","indication":"red","timestamp":1765129838384,"type":"through"},{"state":"prohibited","duration":327,"heading":"sb","indication":"red","timestamp":1765129838384,"type":"left"},{"state":"prohibited","duration":327,"heading":"sb","indication":"red","timestamp":1765129838384,"type":"right"},{"state":"prohibited","duration":15214,"heading":"wb","indication":"dont-walk","timestamp":1765129823497,"type":"pedestrian"},{"state":"prohibited","duration":789508,"heading":"nb","indication":"dont-walk","timestamp":1765129049202,"type":"pedestrian"},{"state":"prohibited","duration":15214,"heading":"eb","indication":"dont-walk","timestamp":1765129823497,"type":"pedestrian"},{"state":"prohibited","duration":789508,"heading":"sb","indication":"dont-walk","timestamp":1765129049202,"type":"pedestrian"}],"object":{"classification":"car","id":[523,1765129830984],"lwh":[4.659926414489746,1.9463437795639038,1.1883721351623535],"heading":1.029386,"position":[40.6095920926849,-111.94829823344843,0.0],"speed":5.505294322967529,"type":"vehicle"},"recording":186131,"timestamp":1765129838886,"type":"intersection.red-light"}


app/aid/incident/intersection/split-failure [JSON]

When an intersection split failure incident is updated or created, it will be published to this topic

{"detector":3,"gor":0.983534038066864,"id":2128,"movement":{"heading":"sb","time":62189,"type":"u-turn"},"recording":0,"ror":1.0,"timestamp":1772104088157,"type":"intersection.split-failure"}