Webhook
Your business has one webhook. Every shared vehicle's telemetry is posted to it. You can set it on the Webhook page, or with these endpoints.
Setting the webhook
PUT /api/business/webhook sets the webhook, and replaces any webhook you had.
curl --request PUT --header "Authorization: Bearer {token}" --header 'Content-Type: application/json' \
--data '{"url":"https://fleetco.example/tesla/webhook","format":"teslemetry","auth":"Bearer {your secret}"}' \
'https://api.teslemetry.pro/api/business/webhook'
| Field | Required | Description |
|---|---|---|
url | Yes | Where each message is posted. Must be reachable from the internet. |
format | Yes | teslemetry, tesla or splunk. See Payloads. |
auth | No | Sent as the Authorization header with every message. Never returned. |
verify | No | Check the TLS certificate of url. Defaults to true. |
enabled | No | Deliver messages. Defaults to true. Send false to pause delivery without deleting the webhook. |
{
"response": {
"url": "https://fleetco.example/tesla/webhook",
"format": "teslemetry",
"auth": true,
"verify": true,
"enabled": true,
"updated_at": "2026-10-05T00:00:00.000Z"
}
}
auth in the response only says whether a header is set.
A URL that is not reachable from the internet, such as localhost, a .local name or a private IP address, is refused with 400 invalid_webhook_url.
Reading and deleting
GET /api/business/webhookreturns the webhook, in the same shape as above.DELETE /api/business/webhookdeletes it and returns{"response": true}.
Both return 404 webhook_not_found when no webhook is set.
Verifying messages
Teslemetry does not sign webhook messages. Set auth to a long random secret, and check the Authorization header of each request your URL receives against it. Use https:// so the header and data are encrypted.
Delivery
Each message is an HTTP POST with Content-Type: application/json, sent once. A message your server does not accept is not retried, so answer quickly with a 2xx and process the message afterwards.
Messages carry the vin of the vehicle they are about. Use it with your consented products to find the customer.
Topics
| Topic | Description |
|---|---|
| data | Telemetry data updates, for the fields in the vehicle's streaming config |
| state | Vehicle state changes (online, asleep, driving) |
| vehicle_data | Full vehicle data responses |
| alerts | Alert notifications |
| errors | Error events from the vehicle |
| connectivity | Connection status changes |
Payloads
A data message in each format:
{
"data": {
"Location": {
"latitude": 30.2226645,
"longitude": -97.6213806
},
"VehicleSpeed": "34.797"
},
"createdAt": "2026-10-05T04:58:44.983607402Z",
"vin": "5YJ3E1EA7KF000001"
}
{
"data": [
{
"key": "Location",
"value": {
"locationValue": {
"latitude": 30.2226645,
"longitude": -97.6213806
}
}
},
{
"key": "VehicleSpeed",
"value": {
"stringValue": "34.797"
}
}
],
"createdAt": "2026-10-05T04:58:44.983607402Z",
"vin": "5YJ3E1EA7KF000001"
}
{
"time": 1791176324.9836073,
"host": "na1.teslemetry.com",
"source": "5YJ3E1EA7KF000001",
"sourcetype": "tesla:telemetry:data",
"event": {
"Location": {
"latitude": 30.2226645,
"longitude": -97.6213806
},
"VehicleSpeed": "34.797"
}
}
In the Teslemetry format, alerts and errors messages are keyed by name. The Tesla format is Tesla's own message, unchanged. The Splunk format is a Splunk HTTP Event Collector event; an auth value without a scheme is sent as Splunk <auth>.