Incident Counts
Incident counts tell you how many incidents each behavioral incident type (Tailgating, Lane Departure, Distracted Driving and so on) had over the last 30, 60 or 90 days, how many of them are confirmed accurate, and how that compares with the period before. They are the figures of the portal's incident breakdown, for a vehicle, a driver, one connection or your whole account.
Speeding is not part of the breakdown: it has its own page in the portal.
| Endpoint | Counts for | Header |
|---|---|---|
GET /vehicles/{vehicleId}/incident-counts | One vehicle | Connection-Id of a connection the vehicle was seen on |
GET /drivers/{driverId}/incident-counts | One driver | Connection-Id of the driver's connection |
GET /reports/incident-counts | One connection (connectionId), or all your live connections | none |
All three need your x-api-key, and the Analytics feature on your account; without it they answer 403.
Query parameters
| Parameter | Type | Description |
|---|---|---|
period | integer | The number of days: 30 (default), 60 or 90. Any other value answers 400. The period ends today, today included |
incidentTypes | array | Only these incident types. The case does not matter. All behavioral types when left out |
connectionId | UUID | GET /reports/incident-counts only: restricts the counts to one of your connections |
Example request
curl --request GET \
--url "https://api.analytics.autos/vehicles/b7bad301-7572-4b8a-991b-65240d9d5784/incident-counts?period=30" \
--header 'x-api-key: YOUR-API-KEY' \
--header 'Connection-Id: YOUR-CONNECTION-ID'Example response
{
"status": 200,
"message": null,
"data": {
"subject": { "type": "vehicle", "id": "b7bad301-7572-4b8a-991b-65240d9d5784", "name": "Unit 14 (ABC1234)" },
"period": { "days": 30, "from": "2026-09-22", "to": "2026-10-21" },
"totals": {
"byProvider": 86,
"byManifold": 8,
"totalAccurate": 26,
"inaccurate": 66,
"awaitingValidation": 2
},
"incidents": [
{ "incidentType": "Tailgating", "rate": 0.25, "change": -5,
"byProvider": 68, "byManifold": 0, "totalAccurate": 17, "inaccurate": 49, "awaitingValidation": 2 },
{ "incidentType": "Lane Departure", "rate": 1.0, "change": -11,
"byProvider": 0, "byManifold": 7, "totalAccurate": 7, "inaccurate": 0, "awaitingValidation": 0 },
{ "incidentType": "Distracted Driving", "rate": 0.1053, "change": -2,
"byProvider": 18, "byManifold": 1, "totalAccurate": 2, "inaccurate": 17, "awaitingValidation": 0 }
]
},
"next": null
}The example vehicle had incidents of three types, so the totals are the sum of its three rows (for example 68 + 0 + 18 = 86 incidents the provider reported). For GET /reports/incident-counts, subject.type is connection (with the connection's id and name) or client (your whole account, without an id).
Fields
| Field | Description |
|---|---|
subject | What the counts are for: type (vehicle, driver, connection or client), its id and name |
period | days, and the first and last day (from, to, both included) |
totals | The sum of the listed incident types, with the same five counts as every row |
incidents | One row per incident type that had at least one incident in the period, the one with the most accurate incidents first |
incidentType | The incident type |
byProvider | Incidents the telematics provider reported |
byManifold | Incidents Manifold identified in the footage that the provider did not report |
totalAccurate | Confirmed accurate: the provider's incidents Manifold rated Accurate, plus every incident Manifold identified |
inaccurate | The provider's incidents Manifold rated Inaccurate |
awaitingValidation | The provider's incidents that have no Accurate or Inaccurate verdict. Most are still waiting for the Validation Engine; the count also includes incidents Manifold will not rate, such as types it does not validate, connections not enrolled in the Validation Engine, and incidents without usable video |
rate | totalAccurate divided by byProvider plus byManifold, from 0 to 1. It is not the detection accuracy of the provider: see Reading the figures |
change | A count, not a percentage: this period's totalAccurate minus the totalAccurate of the previous period of the same type. The previous period has the same number of days and ends the day before this one starts (see Reading the figures). Negative means fewer accurate incidents than before; a type with no accurate incident in the previous period has a change equal to its totalAccurate |
A type that only had incidents in the previous period is not listed, so the totals and the changes cover the listed types.
Reading the figures
rate is not the accuracy of the provider's detection. rate is totalAccurate divided by all the incidents of the type, which means:
- the incidents still awaiting validation are in the denominator, so a type with many unvalidated incidents has a low
ratethat can still rise once they are validated; - the incidents Manifold identified (
byManifold) are in both the numerator and the denominator, although the provider did not report them.
To see how often the provider's incidents are right, use only the incidents that have a verdict. The provider's accurate incidents are totalAccurate - byManifold, so:
provider detection accuracy = (totalAccurate - byManifold) / (totalAccurate - byManifold + inaccurate)
For the three rows of the example:
| Incident type | rate | Provider detection accuracy | Why they differ |
|---|---|---|---|
| Tailgating | 0.25 (17 of 68) | 0.26 (17 of 17 + 49) | 2 incidents are awaiting validation and are counted in rate only |
| Lane Departure | 1.0 (7 of 7) | not defined | The provider reported nothing: all 7 incidents were identified by Manifold |
| Distracted Driving | 0.1053 (2 of 19) | 0.06 (1 of 1 + 17) | 1 incident was identified by Manifold and counts in rate only |
change compares two periods of the same length. The current period ends today, today included. The previous period is the same number of days immediately before it. With period=30 on 2026-10-21 (the example):
| Period | Days |
|---|---|
| Current | 2026-09-22 to 2026-10-21 |
| Previous | 2026-08-23 to 2026-09-21 |
For Tailgating change is -5: it has 17 accurate incidents in the current period and had 22 in the previous one. It is a difference in the number of accurate incidents, not a percentage.
Good to know
- A vehicle without a valid VIN has no counts: the response is empty, not an error.
- The counts of a vehicle or driver cover the incidents on your live connections only.
- The answer is cached for up to 15 minutes, so a figure can lag the portal slightly.
GET /reports/incident-countsreads a lot of data for a large account. If the figures cannot be read within about 25 seconds, the endpoint answers503("The incident counts are not available right now"). A failed attempt is remembered for a short time, so wait about a minute before you call again, and do not retry in a tight loop. The vehicle and driver counts read much less and are not affected (a vehicle answered in about 2 seconds on a large account). For a very large account the account-wide counts can keep answering503; in that case request the counts per vehicle or per driver.
Errors
| Status | Meaning |
|---|---|
400 | period is not 30, 60 or 90; or the Connection-Id / connectionId is missing or is not one of yours |
403 | The Analytics feature is not enabled for your account |
404 | The vehicle or driver does not exist on that connection |
429 | Rate limited |
503 | The counts are not available right now; try again shortly |
Updated about 3 hours ago