> ## Documentation Index
> Fetch the complete documentation index at: https://smartcar.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Compatible Vehicles

> Learn how Smartcar determines vehicle compatibility and how to access compatibility data for your application.

Smartcar compatibility reflects which vehicles are compatible with specific signals and commands, updated dynamically based on real activity across the Smartcar platform.

## Browsing Compatibility Data

The most convenient way to explore compatibility is through our website, where you can browse and download a CSV of the full dataset:

<Card title="Compatible Vehicles" icon="car" href="https://smartcar.com/product/compatible-vehicles">
  Look up which vehicles support which signals and commands, filter by make or region, and export the full matrix as a CSV.
</Card>

## Accessing Compatibility Data Programmatically

If your application needs to consume this data dynamically, use the endpoint above.

<Warning>
  **Caching is strongly recommended.** We recommend caching the results for a minimum of **24 hours**. This endpoint is not intended to be queried prior to connecting a vehicle. The data is the same whether you fetch it in advance or at the time of connection, and drivers should not be waiting extra seconds while this data is fetched.

  Instead, cache the results locally and compute compatibility on your end. You can refresh the cache every 24 hours if desired, as the data changes dynamically each day based on activity across the Smartcar platform.
</Warning>

### Query Parameters

<ParamField query="filter[region]" type="string">
  Filter vehicles by market region. Omit to return all regions.

  <Expandable>
    <ResponseField name="US" />

    <ResponseField name="CA" />

    <ResponseField name="EUROPE" />
  </Expandable>
</ParamField>

<ParamField query="filter[make]" type="string">
  Filter vehicles by manufacturer (case-insensitive). Example: `TESLA`, `BMW`, `FORD`. Omit to return all makes.
</ParamField>

<ParamField query="filter[powertrainType]" type="string">
  Filter vehicles by powertrain type. Omit to return all types.

  <Expandable>
    <ResponseField name="ICE">
      Internal combustion engine vehicles only
    </ResponseField>

    <ResponseField name="BEV">
      Battery electric vehicles only
    </ResponseField>

    <ResponseField name="PHEV">
      Plug-in hybrid electric vehicles only
    </ResponseField>

    <ResponseField name="EV">
      BEV + PHEV combined
    </ResponseField>
  </Expandable>
</ParamField>

### Response Schema

The response follows [JSON:API](https://jsonapi.org/) format with a `data` array of vehicle compatibility entries, pagination metadata, and a self link.

<RequestExample>
  ```bash All vehicles theme={null}
  curl https://compatibility.api.smartcar.com/v3/compatible-vehicles
  ```

  ```bash US only theme={null}
  curl "https://compatibility.api.smartcar.com/v3/compatible-vehicles?filter[region]=US"
  ```

  ```bash Tesla in US theme={null}
  curl "https://compatibility.api.smartcar.com/v3/compatible-vehicles?filter[region]=US&filter[make]=TESLA"
  ```

  ```bash All EVs theme={null}
  curl "https://compatibility.api.smartcar.com/v3/compatible-vehicles?filter[powertrainType]=EV"
  ```

  ```bash BMW EVs in US theme={null}
  curl "https://compatibility.api.smartcar.com/v3/compatible-vehicles?filter[region]=US&filter[make]=BMW&filter[powertrainType]=EV"
  ```
</RequestExample>

<ResponseExample>
  ```json Example Response theme={null}
  {
    "data": [
      {
        "id": "TESLA-Model 3-2016-2026-BEV-US",
        "type": "vehicle-model-capability",
        "attributes": {
          "make": "Tesla",
          "model": "Model 3",
          "region": "US",
          "powertrainType": "BEV",
          "years": {
            "start": 2016,
            "end": 2026
          },
          "capabilities": [
            {
              "type": "signal",
              "name": "State Of Charge",
              "group": "TractionBattery",
              "code": "StateOfCharge",
              "capability": "tractionbattery-stateofcharge",
              "permission": "read_battery"
            },
            {
              "type": "signal",
              "name": "Range",
              "group": "TractionBattery",
              "code": "Range",
              "capability": "tractionbattery-range",
              "permission": "read_battery"
            },
            {
              "type": "signal",
              "name": "Location",
              "group": "Location",
              "code": "PreciseLocation",
              "capability": "location-preciselocation",
              "permission": "read_location"
            },
            {
              "type": "command",
              "name": "Start charge",
              "group": "",
              "code": "charge-start",
              "capability": "charge-start",
              "permission": ""
            },
            {
              "type": "command",
              "name": "Lock vehicle",
              "group": "",
              "code": "closure-lock",
              "capability": "closure-lock",
              "permission": ""
            }
          ]
        }
      }
    ],
    "meta": {
      "page": 1,
      "pageSize": 1384,
      "totalCount": 1384
    },
    "links": {
      "self": "https://compatibility.api.smartcar.com/v3/compatible-vehicles"
    }
  }
  ```
</ResponseExample>

#### Data Item

Each item in the `data` array represents a unique vehicle make/model/powertrain/region combination.

| Field                       | Type      | Description                                                           |
| --------------------------- | --------- | --------------------------------------------------------------------- |
| `id`                        | `string`  | Deterministic composite key (e.g., `TESLA-Model 3-2016-2026-BEV-US`). |
| `type`                      | `string`  | Always `vehicle-model-capability`.                                    |
| `attributes.make`           | `string`  | Vehicle manufacturer display name (e.g., `Tesla`, `Mercedes-Benz`).   |
| `attributes.model`          | `string`  | Vehicle model name.                                                   |
| `attributes.region`         | `string`  | Market region: `US`, `CA`, or `EUROPE`.                               |
| `attributes.powertrainType` | `string`  | Powertrain type: `ICE`, `BEV`, or `PHEV`.\*                           |
| `attributes.years.start`    | `integer` | First compatible model year.                                          |
| `attributes.years.end`      | `integer` | Last compatible model year.                                           |
| `attributes.capabilities`   | `array`   | Array of compatible signal and command objects.                       |

<sub>\*HEV (Hybrid Electric Vehicle) powertrain types are designated as `ICE` in Smartcar API responses.</sub>

#### Capability Object

Each capability in `attributes.capabilities` describes a signal or command the vehicle supports.

| Field        | Type     | Description                                                           |
| ------------ | -------- | --------------------------------------------------------------------- |
| `type`       | `string` | `signal` for data signals, `command` for executable commands.         |
| `name`       | `string` | Human-readable name (e.g., `State Of Charge`, `Start charge`).        |
| `group`      | `string` | Signal group (e.g., `TractionBattery`, `Charge`). Empty for commands. |
| `code`       | `string` | Internal code (e.g., `StateOfCharge`, `charge-start`).                |
| `capability` | `string` | Capability key (e.g., `tractionbattery-stateofcharge`).               |
| `permission` | `string` | Required Smartcar permission (e.g., `read_battery`).                  |

#### Pagination Metadata

| Field             | Type      | Description                                          |
| ----------------- | --------- | ---------------------------------------------------- |
| `meta.page`       | `integer` | Always `1` (all data returned in a single response). |
| `meta.pageSize`   | `integer` | Number of items returned.                            |
| `meta.totalCount` | `integer` | Total number of items (equals `pageSize`).           |

### Error Handling

| Status | Description                                                                                                 |
| ------ | ----------------------------------------------------------------------------------------------------------- |
| `200`  | Successful request. If no vehicles match the filters, `data` will be an empty array — this is not an error. |
| `404`  | Invalid path. Returned when the requested URL does not match any endpoint.                                  |
| `500`  | Server error. Retry with exponential backoff.                                                               |

Error responses follow the Smartcar [error format](/errors/api-errors/v3):

```json theme={null}
{
  "errors": [
    {
      "status": "500",
      "type": "SERVER",
      "code": "INTERNAL",
      "title": "Internal Server Error",
      "detail": "An unexpected error occurred on the server.",
      "links": {
        "about": "https://smartcar.com/docs/errors/api-errors/v3/server-errors"
      }
    }
  ]
}
```

## How Compatibility is Determined

Smartcar compatibility data is generated dynamically from real vehicle connections and API requests across the platform. When we mark a vehicle as compatible with a specific signal, it means we have confirmed successful requests to that signal on that vehicle.

Because this data is based on platform activity:

* **Unlisted vehicles** — If a particular make, model, or year is not listed, it may be because we have not yet seen one connected to our platform, or we do not yet have sufficient data to determine compatibility.
* **Dynamic updates** — The dataset is updated daily as new vehicles connect and new data flows through the platform.

<Info>
  While we strive for accuracy and comprehensiveness, it is important to acknowledge that the functional capabilities of individual vehicles can exhibit variability. Even if we have confirmed a particular make, model, and year as compatible with a specific signal, a slight trim variation could cause the same vehicle to not be compatible.
</Info>
