Accidents
Accidents give you the same report the Manifold portal shows on its Losses and Accident Report pages: where and when the accident happened, who was involved, how severe it was, the cost estimate, the reconstruction map, and a PDF of the report. Minor collisions are listed next to accidents.
All four endpoints need the Connection-Id header of one of your connections, together with your x-api-key. Property names are the labels the portal uses, in camel case.
| Endpoint | Purpose |
|---|---|
GET /accidents | Lists the accidents and minor collisions of a connection, newest first |
GET /accidents/{id} | One accident with every section of the report |
GET /accidents/{id}/reconstruction-map | The reconstruction map as an image |
GET /accidents/{id}/report.pdf | The accident report as a PDF document |
See the API Reference for every field.
List accidents
GET /accidents
Returns the accidents and minor collisions of one connection, newest first. A minor collision has no report and no severity: it comes back with isReportReady set to false, and only the fields of the list.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
from | date | Yes | First day of the range, for example 2026-09-01 |
to | date | Yes | Last day of the range, inclusive: the whole last day counts |
vehicleIds | array of UUID | No | Only accidents of these vehicles. Repeat the parameter for each id |
driverIds | array of UUID | No | Only accidents of these drivers |
incidentTypes | array | No | Accident and/or Minor Collision. Both when left out |
severity | array of integer | No | Only accidents with these severities (1 to 5). Minor collisions are left out |
driverAtFault | boolean | No | true or false. Minor collisions are left out |
limit | integer | No | Items per page: 50 by default, at most 500 |
cursor | string | No | The next value of the previous page |
The range may cover at most 120 days; a longer range answers 400.
Paging
When more accidents follow, the response carries a next value. Pass it as cursor to read the next page, and repeat until next is null. Do not build or change a cursor yourself.
Example request
curl --request GET \
--url "https://api.analytics.autos/accidents?from=2026-10-01&to=2026-10-31&limit=1" \
--header 'x-api-key: YOUR-API-KEY' \
--header 'Connection-Id: YOUR-CONNECTION-ID'Example response
The request asks for October 2026 with limit=1, so the response holds one accident and a next value for the page after it. Each item of the list has this shape. GET /accidents/{id} returns the same fields plus the report sections below.
{
"status": 200,
"message": null,
"data": [
{
"id": "3d7c9feb-89f3-4eff-b8c8-32a408c12d43",
"safetyEventId": "0a8749a0-d1b5-4d86-b8e1-5167904ad986",
"accidentId": 34,
"incidentType": "Accident",
"connectionId": "4c540ad6-3e76-427c-95e8-72ce794b34de",
"connection": "Fleet A",
"provider": "Geotab",
"isReportReady": true,
"accidentSeverity": 2,
"driverAtFault": false,
"damageValue": 1651.0,
"providerEventData": {
"dateAndTime": "2026-10-19T10:40:00Z",
"duration": 299,
"minSpeed": 0.0,
"maxSpeed": 49.94
},
"vehicleAndDriverInformation": {
"vehicleId": "b7bad301-7572-4b8a-991b-65240d9d5784",
"vehicleName": "Unit 14 (ABC1234)",
"vin": "1HGCM82633A004352",
"vehicleType": "TRUCK",
"make": "NISSAN",
"model": "Frontier",
"modelYear": 2022,
"bodyClass": "Pickup",
"groups": ["Toronto depot", "Pickup trucks"],
"driverId": "f5f0710e-f6de-4241-8653-ca27dea862b1",
"driverName": "Alex Morgan",
"driversLn": "M1234-56789-01234",
"licenseState": "ON",
"phoneNumber": "+1 416 555 0123"
},
"locationOfAccident": {
"locationAddress": {
"state": "Ontario",
"isoCode": "CA-ON",
"country": "Canada",
"countryCode": "ca"
},
"gpsCoordinates": { "latitude": 43.6532, "longitude": -79.3832 }
},
"environmentalData": {
"weatherCondition": { "status": "Clear", "temperature": 3.6 },
"dayNight": "Night",
"trafficCongestion": true,
"visibilityImpact": false
},
"eventVideo": [
{
"videoType": "in",
"mediaType": "Video",
"url": "/safety-events/0a8749a0-d1b5-4d86-b8e1-5167904ad986/videos/in",
"thumbnailUrl": "/safety-events/0a8749a0-d1b5-4d86-b8e1-5167904ad986/thumbnails/in?format=img"
},
{
"videoType": "ex",
"mediaType": "Video",
"url": "/safety-events/0a8749a0-d1b5-4d86-b8e1-5167904ad986/videos/ex",
"thumbnailUrl": "/safety-events/0a8749a0-d1b5-4d86-b8e1-5167904ad986/thumbnails/ex?format=img"
},
{
"videoType": "reex",
"mediaType": "Video",
"url": "/safety-events/0a8749a0-d1b5-4d86-b8e1-5167904ad986/videos/reex",
"thumbnailUrl": "/safety-events/0a8749a0-d1b5-4d86-b8e1-5167904ad986/thumbnails/reex?format=img"
}
]
}
],
"next": "eyJyZWZlcmVuY2VUaW1lIjoiMjAyNi0xMC0xOVQxMDo0MDowMFoiLCJpZCI6IjNkN2M5ZmViLTg5ZjMtNGVmZi1iOGM4LTMyYTQwOGMxMmQ0MyJ9"
}Fields of the list
| Field | Description |
|---|---|
id | The accident id. Use it in the other accident endpoints |
safetyEventId | The id of the same incident in the /safety-events endpoints. The media links are built from it |
accidentId | The accident number Manifold gave the accident when it was confirmed, unique within your account. null when none was given |
incidentType | Accident or Minor Collision |
isReportReady | Whether the accident has a report (false for a minor collision) |
accidentSeverity | How severe the collision was, from 1 to 5: 1 Minor, 2 Moderate, 3 Severe, 4 Major, 5 Catastrophic. It is the intensity the Validation Engine gives the accident after analysing the footage, shown as the needle of the portal's severity gauge. It is not an insurance or legal classification. null when no severity has been determined |
driverAtFault | Whether the driver of your vehicle was at fault. true means the driver was at fault and false means the accident was not the driver's fault. null means fault has not been determined for this accident, which is not the same as false |
damageValue | The estimated cost of the damage to the vehicle, in dollars. It is your own estimate when you entered one in the portal (on the accident report, Damage Assessment, Your Estimated Price; you can edit or clear it there), otherwise Manifold's estimate. It is an estimate, not a repair invoice or an insurer's assessment. null when there is no estimate. The detail response shows both values (yourEstimatedPrice and annotatedValue) |
providerEventData | What the telematics provider recorded for the event. dateAndTime is the time the provider's incident started, in UTC: the provider's own event timestamp, which is the best available time of the accident, but it can differ by a few seconds from the moment of impact. duration is in seconds, and minSpeed and maxSpeed are the lowest and highest speed of the event, in km/h |
vehicleAndDriverInformation | The vehicle, its groups and the driver |
locationOfAccident | The address and GPS coordinates. An accident whose location is unknown has coordinates 0, 0 and no address |
environmentalData | Weather (temperature in °C), day or night, traffic and visibility |
eventVideo | The camera media of the incident. videoType is the camera position to use in the media routes: in (interior), ex (exterior) or reex (rear exterior). url and thumbnailUrl are routes of the /safety-events media endpoints, for the same Connection-Id |
Speeds are in km/h. Times are UTC.
Get one accident
GET /accidents/{id}
Returns the fields of the list plus the sections of the portal's accident report. For a minor collision these sections are empty.
| Section | Content |
|---|---|
reconstructionMap | imageUrl (the route of the image) and data, the canvas the portal draws: the map centre and zoom and the vehicles and other elements placed on it |
speedGraph | highestSpeed, collisionSpeed, postedSpeedLimit and the graph points (time, speed, and whether the point lies within the accident) |
impact | pointOfImpact: Front Left, Front, Front Right, Left, Right, Rear Left, Rear or Rear Right; and accelerationForce in G |
damageAssessment | newVehiclePrice, presentVehiclePrice and vehicleDamage. Each has the value the portal shows, your own estimate in yourEstimatedPrice, and annotatedValue |
damageToVehicle | percentageToWriteOff: the damage as a share of the present price, in whole percent |
vehiclePreAccidentScore | The vehicle's risk score over the three months before the accident (preAccidentScore, and range in months). Only for accounts with the Analytics feature |
objectsStruck | What the vehicle struck, for example Car or Guardrail |
injuryInformation | One entry per party. party is Driver, Passenger, Pedestrian or Cyclist. probabilityOfInjury is the Validation Engine's estimate, from the footage, of how likely it is that this party was injured: Low, High or Critical (an injury is likely to be serious). It is an estimate, not a medical report. The list is empty when nothing has been entered |
incidentDetails | overallEventRisk (Very Low to Critical) and the incidents of the event: incidentType, provider (the provider's name, or Manifold) and accuracy |
reportPdfUrl | The route of the PDF |
curl --request GET \
--url "https://api.analytics.autos/accidents/3d7c9feb-89f3-4eff-b8c8-32a408c12d43" \
--header 'x-api-key: YOUR-API-KEY' \
--header 'Connection-Id: YOUR-CONNECTION-ID'{
"status": 200,
"message": null,
"data": {
"id": "3d7c9feb-89f3-4eff-b8c8-32a408c12d43",
"accidentId": 34,
"incidentType": "Accident",
"isReportReady": true,
"accidentSeverity": 2,
"driverAtFault": false,
"damageValue": 1651.0,
"reconstructionMap": {
"imageUrl": "/accidents/3d7c9feb-89f3-4eff-b8c8-32a408c12d43/reconstruction-map",
"data": {
"version": "1.0",
"canvas": { "width": 780, "height": 620 },
"map": { "center": { "latitude": 43.6532, "longitude": -79.3832 }, "zoom": 20, "style": "google-roadmap" },
"elements": [
{ "id": "6", "category": "insured", "variantIndex": 6, "isInsured": true,
"position": { "x": 451.7, "y": 361.7 },
"transform": { "rotation": -63.3, "scaleX": 0.8, "scaleY": 0.8, "flipX": false, "flipY": false },
"dimensions": { "width": 37, "height": 89 }, "zIndex": 2 },
{ "id": "3", "category": "other-party", "variantIndex": 0, "isInsured": false,
"position": { "x": 408.6, "y": 320.5 },
"transform": { "rotation": -83.6, "scaleX": 0.9, "scaleY": 0.9, "flipX": false, "flipY": false },
"dimensions": { "width": 37, "height": 74 }, "zIndex": 0 }
],
"metadata": { "createdAt": "2026-10-19T14:02:11Z", "updatedAt": "2026-10-19T14:05:40Z" },
"image": { "url": "https://cdn.example.com/reconstruction-maps/84e32ed8.png", "capturedAt": "2026-10-19T14:05:41Z" }
}
},
"speedGraph": {
"highestSpeed": 49.94,
"collisionSpeed": 25.4,
"postedSpeedLimit": 80,
"graph": [
{ "time": "2026-10-19T10:39:58Z", "speed": 48.2, "accident": false },
{ "time": "2026-10-19T10:40:00Z", "speed": 49.9, "accident": true },
{ "time": "2026-10-19T10:40:02Z", "speed": 25.4, "accident": true },
{ "time": "2026-10-19T10:40:04Z", "speed": 3.1, "accident": false }
]
},
"impact": { "pointOfImpact": ["Front Right"], "accelerationForce": 0.64 },
"damageAssessment": {
"newVehiclePrice": { "value": 31205.0, "annotatedValue": 31205.0, "yourEstimatedPrice": null },
"presentVehiclePrice": { "value": 28012.99, "annotatedValue": 28012.99, "yourEstimatedPrice": null },
"vehicleDamage": { "value": 1651.0, "annotatedValue": 1651.0, "yourEstimatedPrice": null }
},
"damageToVehicle": { "percentageToWriteOff": 6 },
"vehiclePreAccidentScore": { "preAccidentScore": 54.0, "range": 3 },
"objectsStruck": ["Car"],
"injuryInformation": [
{ "party": "Driver", "probabilityOfInjury": "Low" },
{ "party": "Passenger", "probabilityOfInjury": "Low" }
],
"incidentDetails": {
"overallEventRisk": "Critical",
"incidents": [
{ "incidentType": "Manual Selection", "provider": "Geotab", "accuracy": "No Video" },
{ "incidentType": "Accident", "provider": "Manifold", "accuracy": "Accurate" },
{ "incidentType": "Lane Departure", "provider": "Manifold", "accuracy": "Accurate" }
]
},
"reportPdfUrl": "/accidents/3d7c9feb-89f3-4eff-b8c8-32a408c12d43/report.pdf"
},
"next": null
}The fields listed for the list (providerEventData, vehicleAndDriverInformation and so on) are part of this response too; they are left out here to keep the example short.
Reconstruction map image
GET /accidents/{id}/reconstruction-map
Answers with a temporary redirect to the image of the accident's reconstruction map. With mode=Url it answers with the address instead of redirecting. The redirect is temporary because the address of an older map expires within minutes: do not store it. An accident without a map image answers 404.
Accident report as a PDF
GET /accidents/{id}/report.pdf
Answers with the accident report as a PDF document, laid out like the PDF you download from the portal: three pages with the overview and maps, cost, connection, vehicle and driver details, environmental conditions, injuries and damage assessment. The file is named like the portal's download, for example 20261019-AC0034-ALEX_MORGAN-1HGCM82633A004352-DetailedAccidentReport.pdf.
The report holds personal data (the driver's licence number and phone number), so the response must not be cached. The API sends Cache-Control: no-store with the PDF, and with the list and the detail responses, which carry the same personal data. Do not store these responses in a shared cache or proxy. Minor collisions have no report and answer 404.
Errors
| Status | Meaning |
|---|---|
400 | The range is invalid or over 120 days, the cursor, limit or a filter is invalid, or the Connection-Id is missing or is not one of yours |
401 | The x-api-key is missing or expired |
404 | No accident with this id on the connection (or no map image, or no report) |
429 | Rate limited |
Updated about 3 hours ago