Vehicle Triggers API
Commonly known as webhooks
Vehicle Triggers is a way for DIMO to automatically send real-time data to your systems when an event occurs. Think of it like a "push notification" for servers — instead of you constantly checking the API (polling) for updates, your app now gets notified instantly when something happens.
Developer Notes
Webhooks that you configure are tied to a specific Developer License.
If you have multiple Developer Licenses under a single account in the DIMO Developer Console, please make sure to authenticate using the Developer JWT associated with the specific license.
Overview
Webhooks can also be setup directly via the DIMO Developer Console, but the options below provide a programmatic way of configuring vehicle triggers and subscribing vehicles to triggers you have configured. Webhooks are currently available in public beta. If you have feedback to share, please reach out to developer-support@dimo.org.Base URL
https://vehicle-triggers-api.dimo.zone
Endpoints
List all webhooks
Retrieves a list of all the webhooks that have been created under your Developer License.GET/v1/webhooks
const allWebhooks = await dimo.VehicleTriggers.listWebhooks({developerJwt: "eyJhbGc...ILlujqw"});
Response
[{"id": "2r8653ab-721c-4356-ac1d-f2a620b345bc","service": "telemetry.signals","metricName": "speed","condition": "valueNumber > 95","targetURL": "https://api.igottafastcar.com/webhook-receiver","coolDownPeriod": 30,"status": "enabled","description": "Fires whenever a subscribed vehicle travels over 95kph","createdAt": "2025-08-12T20:06:38.285919Z","updatedAt": "2025-08-12T20:06:38.285919Z","failureCount": 0,"displayName": "Speeding check"},{"id": "9d5fd26c-7d21-4425-b43c-dc279bb76036","service": "telemetry.signals","metricName": "powertrainTractionBatteryChargingIsCharging","condition": "valueNumber == 1","targetURL": "https://api.igottafastcar.com/webhook-receiver","coolDownPeriod": 0,"status": "enabled","description": "Fires when a subscribed vehicle begins a charging session","createdAt": "2025-08-19T13:42:23.654711Z","updatedAt": "2025-08-19T13:42:23.654711Z","failureCount": 0,"displayName": "Vehicle charging check"}]
Create a webhook
Registers a new webhook with the specified configurations and conditions.Parameters
service
stringRequiredThe subsystem producing the metric. For example, telemetry.signals or telemetry.events
metricName
stringRequiredThe fully qualified signal or event name to monitor. Examples: Signals: speed, powertrainTransmissionTravelledDistance, powertrainTractionBatteryChargingIsCharging, etc. Events: ExtremeBraking, HarshAcceleration, HarshBraking, HarshCornering
condition
stringRequiredThe CEL expression evaluated against the metric to decide when to fire. You can use the following condition statements: >=, <=, >, <, ==. You should always include value. In the example above, we're checking when the speed (value) is greater than 55 kph. Optionally, you can also include a previousValue to perform a check to see if things have changed, i.e. value > 55 && value != previousValue
CEL Conditions
To learn more about how CEL conditions work, check out this README
coolDownPeriod
integerRequiredThe minimum number of seconds between successive firings of your webhook.
description
stringRequiredA brief description of the webhook conditions for your own reference.
displayName
stringOptionalAn optional input to easily identify your webhook. If left blank, displayName will default to the webhookId.
targetURL
stringRequiredThe HTTPS endpoint URL that will receive webhook callbacks.
status
stringRequiredShould be one of the following: enabled - the webhook is actively in use, disabled - the webhook exists, but is not actively in use.
verificationToken
stringRequiredA plain/text string that is the expected token that your endpoint must echo back during verification.
POST/v1/webhooks
const newWebhook = await dimo.VehicleTriggers.createWebhook({developerJwt: "eyJhbGc...ILlujqw",service: "telemetry.signals",metricName: "speed",condition: "valueNumber > 95",coolDownPeriod: 30,description: "Fires whenever a subscribed vehicle travels over 95kph",displayName: "Speeding check",targetURL: "https://api.igottafastcar.com/webhook-receiver",status: "enabled",verificationToken: "abc123",});
Response
{"id": "124e4d57-8952-4ded-96c1-0g99f1fa1234","message": "Webhook registered successfully"}
Get webhook signals
Retrieves a list of signal names available for the data field.GET/v1/webhooks/signals
const webhookSignals = await dimo.VehicleTriggers.getWebhookSignalNames({developerJwt: "eyJhbGc...ILlujqw"});
Response
// Abbreviated sample response below:...{"name": "powertrainTransmissionTravelledDistance","description": "Odometer reading, total distance travelled during the lifetime of the transmission.","unit": "km","valueType": "float64","permissions": ["privilege:GetNonLocationHistory"]},...
Update a webhook
Updates the parameters or configurations of an existing webhook via the webhooks webhookId.Parameters
webhookId
stringRequiredThe Webhook ID.
request
objectRequiredThe full request payload for the webhook you're updating. See: 'Create a webhook' for more details
PUT/v1/webhooks/:webhookId
const updateWebhook = await dimo.VehicleTriggers.updateWebhook({developerJwt: "eyJhbGc...ILlujqw",webhookId: "1d2bef3c-4d56-7890-b12c-dc345ee67906",service: "telemetry.signals",metricName: "speed",condition: "valueNumber > 99",coolDownPeriod: 30,description: "Fires whenever a subscribed vehicle travels over 99kph",displayName: "Speeding check",targetURL: "https://api.igottafastcar.com/webhook-receiver",status: "enabled",verificationToken: "abc123",});
Response
{"message": "Webhook updated successfully"}
Delete a webhook
Deletes an existing webhook that was configured under your Developer License. In order to successfully delete a webhook, you must have first unsubscribed all vehicles from the webhook. Otherwise, the deletion will fail.Parameters
webhookId
stringRequiredThe Webhook ID.
DELETE/v1/webhooks/:webhookId
const deletedWebhook = await dimo.VehicleTriggers.deleteWebhook({developerJwt: "eyJhbGc...ILlujqw",webhookId: "1d2bef3c-4d56-7890-b12c-dc345ee67906"});
Response
{"message": "Webhook deleted successfully"}
Get vehicles susbcribed to a webhook
Lists all of the vehicles that are subscribed to a specific webhook that you've created.Parameters
webhookId
stringRequiredThe Webhook ID.
GET/v1/webhooks/:webhookId
const subscribedVehicles = await dimo.VehicleTriggers.listSubscribedVehicles({developerJwt: "eyJhbGc...ILlujqw",webhookId: "1d2bef3c-4d56-7890-b12c-dc345ee67906"});
Response
{[12345, 54321]}
Get a list of webhooks a vehicle is subscribed to
Lists all the webhooks that a provided vehicle tokenDID is subscribed to.Parameters
tokenDID
stringRequiredThe vehicles token DID.
GET/v1/webhooks/vehicles/:tokenDID
const vehicleSubscriptions = await dimo.VehicleTriggers.listVehicleSubscriptions({developerJwt: "eyJhbGc...ILlujqw",tokenDid: "did:erc721:137:0xbA5738a18d83D41847dfFbDC6101d37C69c9B0cF:12345"});
Response
{"webhookId": "1d2bef3c-4d56-7890-b12c-dc345ee67906","assetDid": "did:erc721:137:0xbA5738a18d83D41847dfFbDC6101d37C69c9B0cF:12345","createdAt": "2025-08-19T13:55:13.768969Z","description": "Fires when a vehicle begins charging"}
Subscribe a vehicle to a webhook
Subscribes a vehicle tokenDID to a specified webhook.Parameters
webhookId
stringRequiredThe Webhook ID.
tokenDID
stringRequiredThe vehicles token DID.
POST/v1/webhooks/:webhookId/subscribe/:tokenDID
const subVehicle = await dimo.VehicleTriggers.subscribeVehicle({developerJwt: "eyJhbGc...ILlujqw",webhookId: "1d2bef3c-4d56-7890-b12c-dc345ee67906",tokenDid: "did:erc721:137:0xbA5738a18d83D41847dfFbDC6101d37C69c9B0cF:12345"});
Response
{"message": "Vehicle assigned successfully"}
Subscribe all vehicles to a webhook
Subscribes all vehicles that have previously shared permissions with your Developer License to a specific webhook.Parameters
webhookId
stringRequiredThe Webhook ID.
POST/v1/webhooks/:webhookId/subscribe/all
const subscribeAll = await dimo.VehicleTriggers.subscribeAllVehicles({developerJwt: "eyJhbGc...ILlujqw",webhookId: "1d2bef3c-4d56-7890-b12c-dc345ee67906"});
Response
{"message": "Subscribed 100 assets"}
Unsubscribe a vehicle from a webhook
Unsubscribes a vehicle tokenDID from a specified webhook.Parameters
webhookId
stringRequiredThe Webhook ID.
tokenDID
stringRequiredThe vehicles token DID.
DELETE/v1/webhooks/:webhookId/unsubscribe/:tokenDID
const unsubVehicle = await dimo.VehicleTriggers.unsubscribeVehicle({developerJwt: "eyJhbGc...ILlujqw",webhookId: "1d2bef3c-4d56-7890-b12c-dc345ee67906",tokenDid: "did:erc721:137:0xbA5738a18d83D41847dfFbDC6101d37C69c9B0cF:12345"});
Response
{"message": "Vehicle unsubscribed successfully"}
Unsubscribe all vehicles from a webhook
Unsubscribes all previously subscribed vehicles from a webhook you've created.Parameters
webhookId
stringRequiredThe Webhook ID.
DELETE/v1/webhooks/:webhookId/unsubscribe/all
const unsubAll = await dimo.VehicleTriggers.unsubscribeAllVehicles({developerJwt: "eyJhbGc...ILlujqw",webhookId: "1d2bef3c-4d56-7890-b12c-dc345ee67906"});
Response
{"message": "Unsubscribed 100 vehicles"}
Event Responses
When a vehicle that you have subscribed to an event meets the criteria you've configured in your webhook trigger, it will send aPOST
request to your specified targetURL
. The response body will contain the information that you need to handle the event as required by your application.Data
id
The Webhook ID.
source
The Webhook ID.
producer
The Webhook ID.
specVersion
The Webhook ID.
subject
The Webhook ID.
time
The Webhook ID.
type
The Webhook ID.
datacontenttype
The Webhook ID.
dataversion
The Webhook ID.
service
The Webhook ID.
metricName
The Webhook ID.
webhookId
The Webhook ID.
webhookName
The Webhook ID.
assetDID
The Webhook ID.
condition
The Webhook ID.
name
The Webhook ID.
unit
The Webhook ID.
timestamp
The Webhook ID.
valuetype
The Webhook ID.
value
The Webhook ID.
Response
{"id": "6be980f3-7edf-4cab-ba72-3871f61e6cdb","source": "vehicle-triggers-api","producer": "3dfc572a-ea31-4e8e-8685-29fb4a24d0c2","specversion": "1.0","subject": "did:erc721:137:0xbA5738a18d83D41847dfFbDC6101d37C69c9B0cF:12345","time": "2025-08-14T11:04:29.685302958Z","type": "dimo.trigger","datacontenttype": "application/json","dataversion": "telemetry.signals/v1.0","data": {"service": "telemetry.signals","metricName": "speed","webhookId": "3dfc572a-ea31-4e8e-8685-29fb4a24d0c2","webhookName": "3dfc572a-ea31-4e8e-8685-29fb4a24d0c2","assetDID": "did:erc721:137:0xbA5738a18d83D41847dfFbDC6101d37C69c9B0cF:12345","condition": "value > 55","signal": {"name": "speed","unit": "km/h","timestamp": "0001-01-01T00:00:00Z","valueType": "float64","value": 59}}}