Webhooks
Webhooks let Manifold push notifications to your endpoint instead of you polling.
- You register a URL, an HTTP verb, optional custom headers, the connections to watch, and the notification types you want.
- Webhooks are the only objects you create, update, and delete through this API.
- Base URL:
https://api.analytics.autos - Authentication on these endpoints uses the
X-API-KEYheader. - These endpoints are account-level. They are not scoped by a
Connection-Idheader. You scope a webhook to connections in the request body instead.
Notification types
Manifold sends two types of notifications. One for events. One for accidents.
A single webhook can subscribe to either type or both. You set this with notificationTypes. At least one value is required.
Event notifications
- Enum value:
EventNotification(2). - A detected driving safety event. For example harsh braking or a collision.
- Each event carries an Event Risk rating from
1(very low) to5(critical).
Accident notifications
- Enum value:
Fnol(1). FNOL stands for first notice of loss. - The insurance-claim lifecycle for a detected accident.
- Delivered at three notification levels:
1First detection.2Verified.3Report-ready.
- The same accident is delivered once per level. Use the event ID to tie the levels together.
Note: the notification type is delivered as an integer in the payload type field. 1 is an accident notification. 2 is an event notification.
Delivery envelope
Every delivery uses the same outer envelope. Manifold calls your URL with POST or PUT, based on the httpVerb you configured.
{
"timestamp": "2026-06-17T14:32:05Z",
"type": 2,
"data": {}
}timestampis the UTC RFC 3339 time of the delivery.typeis the notification type integer.1accident,2event.datais the payload for that notification type. See below.
Event notification payload (type = 2)
type = 2)Payload fields for event notifications. The whole delivery is serialized as camelCase, including the data object.
eventIdissuedOntranslatedIncidentTypeseventRisk(1very low to5critical)vehicleIdvehicleNamevehicleVinvehicleGroupsrecipients
Sample delivery:
{
"timestamp": "2026-06-17T14:32:05Z",
"type": 2,
"data": {
"eventId": "b71c4d92-2e88-4a13-9f0c-5d6e7a8b9c01",
"issuedOn": "2026-06-17T14:31:40Z",
"translatedIncidentTypes": ["Harsh Braking"],
"eventRisk": 4,
"vehicleId": "a18f6e22-9c3d-4b7a-8e15-0f2c4d6e8a90",
"vehicleName": "Truck 14",
"vehicleVin": "1HGCM82633A004352",
"vehicleGroups": ["West Region"],
"recipients": ["[email protected]"]
}
}eventRiskis the field to triage on. Route4and5first.translatedIncidentTypesis normalized across providers, so you do not need provider-specific mapping.
Accident notification payload (type = 1)
type = 1)Payload fields for accident notifications. The whole delivery is serialized as camelCase, including the data object.
eventIdeventTimevinconnectiontSP(note the casing: the serializer lowercases only the first letter ofTSP)location(an object withlatitudeandlongitude)notificationLevel(1first detection,2verified,3report-ready)reportReadyisAccurate
Sample delivery:
{
"timestamp": "2026-06-17T14:32:05Z",
"type": 1,
"data": {
"eventId": "8d2b1f4a-6c11-4f2e-9b77-1a3c5e9d0f21",
"eventTime": "2026-06-17T14:30:58Z",
"vin": "1HGCM82633A004352",
"connection": "3f2a9c10-7d44-4b8e-bf61-2c9a0e6d4471",
"tSP": "samsara",
"location": {
"latitude": 37.7749,
"longitude": -122.4194
},
"notificationLevel": 2,
"reportReady": false,
"isAccurate": true
}
}notificationLeveltells you where the accident is in the lifecycle. Expect up to three deliveries, one per level.reportReadyindicates whether the full report is available. It typically becomes true at level3.isAccuratereflects whether the detection has been verified.- Treat
eventIdas the key that ties the three levels together. tSPis intentional. Key ontSP, notTSPortsp.
Webhook configuration
These fields apply to create and update requests.
connectionIdsis the list of connection UUIDs the webhook is scoped to.urlis the endpoint Manifold calls to deliver notifications. It must use HTTPS. A non-HTTPS URL is rejected with400 Invalid URL, must use 'https'.httpVerbis the verb Manifold uses when calling your URL. UsePOSTorPUT.headersis a map of custom headers Manifold includes on each delivery.notificationTypesis the list of types to subscribe to (1accident,2event). At least one value is required.
The response adds two read-only fields:
idis the webhook UUID.createdAtis the UTC timestamp when the webhook was created.
Note: the spec does not define a delivery signature. Use headers to add an inbound token or shared secret so you can verify that a delivery came from your webhook.
Endpoints
List webhooks
Retrieve all webhooks configured for the current account.
- Method and path:
GET /webhooks - When to use it: to audit existing webhooks, confirm subscriptions, or reconcile config before changes.
- Required headers:
X-API-KEY - Query parameters: none defined.
curl -X GET "https://api.analytics.autos/webhooks" \
-H "X-API-KEY: sample_api_key_8a1f2c"Example response:
{
"status": 200,
"message": "Success",
"data": [
{
"id": "5e1d8b3a-44c2-4f9e-90a7-7c2b6d1e4f08",
"connectionIds": ["3f2a9c10-7d44-4b8e-bf61-2c9a0e6d4471"],
"url": "https://hooks.fleetco.example/manifold",
"httpVerb": "POST",
"headers": {
"X-Webhook-Token": "sample_inbound_token"
},
"createdAt": "2026-05-02T09:14:33Z",
"notificationTypes": [1, 2]
}
]
}Notes and edge cases:
- This endpoint returns all webhooks for the account. It does not paginate. The response model can include a
nextfield, but the list never sets it. - Returns
400on a bad request and429when rate limited.
Create webhook
Register a new webhook.
- Method and path:
POST /webhook - When to use it: during onboarding, or when adding a new subscription or destination.
- Required headers:
X-API-KEY,Content-Type: application/json
curl -X POST "https://api.analytics.autos/webhook" \
-H "X-API-KEY: sample_api_key_8a1f2c" \
-H "Content-Type: application/json" \
-d '{
"connectionIds": ["3f2a9c10-7d44-4b8e-bf61-2c9a0e6d4471"],
"url": "https://hooks.fleetco.example/manifold",
"httpVerb": "POST",
"headers": {
"X-Webhook-Token": "sample_inbound_token"
},
"notificationTypes": [1, 2]
}'Example response:
{
"status": 200,
"message": "Webhook created successfully",
"data": {
"id": "5e1d8b3a-44c2-4f9e-90a7-7c2b6d1e4f08",
"connectionIds": ["3f2a9c10-7d44-4b8e-bf61-2c9a0e6d4471"],
"url": "https://hooks.fleetco.example/manifold",
"httpVerb": "POST",
"headers": {
"X-Webhook-Token": "sample_inbound_token"
},
"createdAt": "2026-06-17T14:00:00Z",
"notificationTypes": [1, 2]
}
}Notes and edge cases:
notificationTypesmust contain at least one value. Use[2]for events only,[1]for accidents only, or[1, 2]for both.- Success returns
200, not201. - Returns
429when rate limited. Common400cases: a non-HTTPS URL (Invalid URL, must use 'https'), a duplicate URL (Webhook with this URL already exist), and connection IDs not owned by the account (Invalid connection ids).
Update webhook
Update an existing webhook, including its subscribed notification types.
- Method and path:
PUT /webhook/{id} - When to use it: to change the destination URL, headers, scoped connections, or subscriptions.
- Required headers:
X-API-KEY,Content-Type: application/json - Path parameter:
idis the webhook UUID. Required.
curl -X PUT "https://api.analytics.autos/webhook/5e1d8b3a-44c2-4f9e-90a7-7c2b6d1e4f08" \
-H "X-API-KEY: sample_api_key_8a1f2c" \
-H "Content-Type: application/json" \
-d '{
"connectionIds": ["3f2a9c10-7d44-4b8e-bf61-2c9a0e6d4471"],
"url": "https://hooks.fleetco.example/manifold/v2",
"httpVerb": "POST",
"headers": {
"X-Webhook-Token": "sample_inbound_token"
},
"notificationTypes": [2]
}'Example response:
{
"status": 200,
"message": "Webhook updated successfully",
"data": {
"id": "5e1d8b3a-44c2-4f9e-90a7-7c2b6d1e4f08",
"connectionIds": ["3f2a9c10-7d44-4b8e-bf61-2c9a0e6d4471"],
"url": "https://hooks.fleetco.example/manifold/v2",
"httpVerb": "POST",
"headers": {
"X-Webhook-Token": "sample_inbound_token"
},
"createdAt": "2026-05-02T09:14:33Z",
"notificationTypes": [2]
}
}Notes and edge cases:
- Update replaces the configuration. Send the full set of
notificationTypesyou want, not just the change. - Returns
429when rate limited. Common400cases: a non-HTTPS URL (Invalid URL, must use 'https'), a duplicate URL (Webhook with this URL already exist), and connection IDs not owned by the account (Invalid connection ids).
Delete webhook
Remove an existing webhook.
- Method and path:
DELETE /webhook/{id} - When to use it: to stop deliveries for a destination that is being retired.
- Required headers:
X-API-KEY - Path parameter:
idis the webhook UUID. Required.
curl -X DELETE "https://api.analytics.autos/webhook/5e1d8b3a-44c2-4f9e-90a7-7c2b6d1e4f08" \
-H "X-API-KEY: sample_api_key_8a1f2c"Example response:
{
"status": 200,
"message": "Webhook deleted successfully",
"data": true
}Notes and edge cases:
- Deletion takes effect immediately. The webhook stops receiving notifications for all previously subscribed types.
- An unknown or not-owned
idreturns400 Invalid webhook id. - Returns
429when rate limited.
