Event Types
VERIFY
One-time challenge to verify your callback URL
VEHICLE_STATE
Fired when any monitored signal changes value
VEHICLE_ERROR
Fired when signal retrieval fails or enters error state
VERIFY
A one-time event sent when you first create a webhook to verify that Smartcar can successfully deliver payloads to your callback URL.
When This Event Fires
TheVERIFY event fires once when you:
- Create a new webhook in the Smartcar Dashboard
- Update the callback URL of an existing webhook
- Click “Verify this webhook” in the Dashboard
Payload Structure
Required Response
Your endpoint must respond with a200 status code and return the challenge hashed with your Application Management Token.
Response Requirements:
- Status code:
200 - Content-Type:
application/json - Body:
{ "challenge": "<HMAC-SHA256-hex>" }
challenge value using your Application Management Token as the secret key, then hex-encode the result.
For step-by-step implementation guidance, see Callback URI Verification.
VEHICLE_STATE
Triggered when one or more signals you’ve configured as triggers change their value. This event delivers the updated signal data for all subscribed signals in the payload.
When This Event Fires
TheVEHICLE_STATE event fires when Smartcar detects a signal value change for any trigger signal.
Trigger Configuration
You configure which signals should trigger this event through the Smartcar Dashboard when creating or editing a webhook. For example: Triggers:TractionBattery.StateOfCharge(code:tractionbattery-stateofcharge)Charge.IsCharging(code:charge-ischarging)Location.PreciseLocation(code:location-preciselocation)
TractionBattery.StateOfChargeCharge.IsChargingLocation.PreciseLocationCharge.VoltageOdometer.TraveledDistance
VEHICLE_STATE event is delivered containing all five subscribed signals.
Identifying Which Triggers Fired
The webhook payload includes atriggers field that specifies which trigger signal(s) changed to prompt this delivery. This helps you identify what caused the event without comparing all signal values.
Trigger Types
Signal Change Triggers
Signal Change Triggers
When a monitored trigger signal changes value, the If multiple triggers change simultaneously, all will be included in the array.
triggers array contains the signal(s) that changed.First Delivery Trigger
First Delivery Trigger
When a webhook subscription is first created, a This initial delivery:
FIRST_DELIVERY trigger is sent to provide the initial state of the vehicle.- Occurs after vehicle subscription to a webhook
- Contains all subscribed signals at their current values
- Does not indicate any signal value changes
- Helps establish baseline state for your application
- The vehicle is offline or not communicating with the OEM
- When a vehicle is unsubscribed and then resubscribed to your webhook
- If your endpoint fails to respond with a 2xx status code, Smartcar will retry delivery with the same
FIRST_DELIVERYtrigger
Payload Structure
Unique identifier for this event. Use this for idempotency.
Always
"VEHICLE_STATE" for this event type.Container for event data.
Webhook delivery metadata
Example Payloads
- Signal Change Trigger
- First Delivery
Delivered when a configured trigger signal changes value.
Signal Reference
Thesignals array contains data structured according to the Signals Schema Reference. Each signal type has a specific shape:
Signal-Level Errors
Individual signals within aVEHICLE_STATE payload can contain errors if the vehicle doesn’t support that signal or if retrieval fails. When this occurs, the signal will have a status object with error details instead of a body with data:
Partial data delivery: When some signals succeed and others fail, you’ll receive a
VEHICLE_STATE event with successful signals containing body data and failed signals containing status errors. This allows you to process available data even when some signals are unavailable.VEHICLE_ERROR
Triggered when Smartcar encounters an error while attempting to retrieve signal data from a vehicle. This event helps you monitor data availability and handle errors gracefully.
When This Event Fires
TheVEHICLE_ERROR event fires when:
- Smartcar detects an error while retrieving signal data
- The vehicle manufacturer’s API returns an error
- The vehicle is offline or unreachable
- Authentication, permission, or compatibility errors occur
Error Categories
Errors are categorized by type and include specific error codes:Connected Services Account Errors
Connected Services Account Errors
Issues with the user’s account with the vehicle manufacturer.
| Type | Code | Description |
|---|---|---|
CONNECTED_SERVICES_ACCOUNT | ACCOUNT_ISSUE | General account problem |
CONNECTED_SERVICES_ACCOUNT | AUTHENTICATION_FAILED | Authentication credentials are invalid |
CONNECTED_SERVICES_ACCOUNT | PERMISSION | User lacks necessary permissions |
CONNECTED_SERVICES_ACCOUNT | SUBSCRIPTION | Required subscription is inactive or expired |
CONNECTED_SERVICES_ACCOUNT | VIRTUAL_KEY_REQUIRED | Vehicle requires a virtual key to be configured |
Vehicle State Errors
Vehicle State Errors
Issues with the vehicle’s connectivity or state.
| Type | Code | Description |
|---|---|---|
VEHICLE_STATE | REMOTE_ACCESS_DISABLED | Remote access is disabled on the vehicle |
VEHICLE_STATE | ASLEEP | Vehicle is in sleep mode |
VEHICLE_STATE | UNREACHABLE | Vehicle is not connected to the internet |
Compatibility Errors
Compatibility Errors
Issues with signal availability for the specific vehicle.
| Type | Code | Description |
|---|---|---|
COMPATIBILITY | MAKE_NOT_COMPATIBLE | Vehicle manufacturer doesn’t support this signal |
COMPATIBILITY | SMARTCAR_NOT_CAPABLE | Smartcar cannot retrieve this signal yet |
COMPATIBILITY | VEHICLE_NOT_CAPABLE | This specific vehicle doesn’t support the signal |
Permission Errors
Permission Errors
Issues with granted permissions.
| Type | Code | Description |
|---|---|---|
PERMISSION | null | Required permission not granted by user |
Payload Structure
Unique identifier for this event. Use this for idempotency.
Always
"VEHICLE_ERROR" for this event type.Container for event data.
Webhook delivery metadata (same structure as
VEHICLE_STATE)Example Payload
Error Handling Best Practices
Log and Monitor
Track error patterns to identify systemic issues or vehicles requiring attention
Retry with Backoff
For transient errors (
ASLEEP, UNREACHABLE), implement exponential backoff retriesUser Notifications
Use
suggestedUserMessage to notify vehicle owners when action is requiredGraceful Degradation
Handle missing data gracefully in your application UI
Common Error Scenarios
| Scenario | Type | Code | Recommended Action |
|---|---|---|---|
| Vehicle offline | VEHICLE_STATE | UNREACHABLE | Retry later; notify user if persistent |
| User revoked permissions | CONNECTED_SERVICES_ACCOUNT | PERMISSION | Prompt user to re-authenticate |
| Connected services subscription expired | CONNECTED_SERVICES_ACCOUNT | SUBSCRIPTION | Direct user to renew manufacturer subscription |
| Signal not supported | COMPATIBILITY | VEHICLE_NOT_CAPABLE | Remove signal from webhook or handle gracefully |
| Vehicle asleep | VEHICLE_STATE | ASLEEP | Retry later; avoid waking vehicle unnecessarily |
Error Resolution
When an error condition is resolved (e.g., a vehicle comes back online or a user renews their subscription), Smartcar sends anotherVEHICLE_ERROR event with state set to "RESOLVED":
Track error state: Use the
state field to differentiate between new errors ("ERROR") and resolved issues ("RESOLVED"). This allows you to implement automatic recovery workflows and user notifications.Event Delivery Guarantees
All webhook events follow these delivery characteristics:- At-least-once delivery: Events may be delivered more than once. Use
eventIdfor deduplication. - Ordering: Events are not guaranteed to arrive in chronological order. Use timestamps to determine sequence.
- Idempotency: The
eventIdfield remains constant across delivery retries for the same event. - Retries: Failed deliveries are retried with exponential backoff up to 3 days.

