# Check vehicle model compatibility in a country

Returns whether the given vehicle model is supported in the supplied
country. Used by the onboarding flow to tell the user upfront
whether their vehicle will work before any account-linking step.
Public endpoint — callable pre-account, no authentication required.
Country resolution follows this order: explicit `country` query
parameter, then the `Accept-Language` header, then `US`.
When `program_id` is supplied, the check is scoped to that program's
effective supported-models list (inclusion/exclusion lists applied)
and the program's country — the `country` query parameter and
`Accept-Language` header are ignored.
Error responses follow RFC 9457 Problem Details. Problem types
emitted by this endpoint:
- `validation-failed-vehicle-compatibility-check` — missing or
invalid `vehicle_model_id` / `country` query parameter (`400`).
- `vehicle-model-not-found` — `vehicle_model_id` does not resolve
to a vehicle model (`404`).
- `program-not-found-vehicle-compatibility` — `program_id` does
not resolve to a program (`404`).

Endpoint: GET /vehicle_compatibility/check
Version: 2.0
Security: oauth2

## Query parameters:

  - `vehicle_model_id` (string, required)
    Vehicle Model id to check compatibility for.

  - `country` (string)
    ISO-3166 alpha-2 country code. See description for fallback chain.

  - `client_id` (string)
    OAuth `Application.client_id`. Mirrors the pre-account
onboarding endpoints: when supplied and the application has
sandbox mode enabled, the endpoint returns a canned response
without touching the database.

  - `program_id` (string)
    Program uid. When supplied, the check is scoped to the
program's effective supported-models list (inclusion / exclusion
lists applied) and the program's country. `country` and
`Accept-Language` are ignored in that case. Omit for the core
app's pre-account flow where the program is not yet known.

## Header parameters:

  - `EvEnergy-Version` (number)
    Specify the version of this endpoint to use.

  - `Accept-Language` (string)
    Indicates the natural language and locale that the client prefers.

## Response 200 fields (application/json):

  - `compatible` (boolean, required)
    True if the model is supported in the requested country.

  - `recommendation_rank` (integer | null, required)
    Priority of the car make on the new device-selection screen.
Lower = higher priority (1 = top, 10 = lowest explicit value);
`null` means no rank set and should be treated as lower priority
than any explicit value. Always reflects the make's current
value, independent of `compatible`.

## Response 400 fields (application/problem+json):

  - `type` (string)
    Example: https://api.ev.energy/v2/problems/example-problem/

  - `status` (number)
    Example: 400

  - `title` (string, required)
    Example: Short description

  - `detail` (string, required)
    Example: Long, more specific description.

  - `instance` (string)
    Example: https://api.ev.energy/v2/users/user01HN2P75GBNFRJPCZJXEFVXH5E

  - `notification` (object)
    Something that the user should be informed about.

  - `notification.id` (string, required)
    Unique identifier for the Notification
    Example: notf67O36PLTFDB57M0E5L33JZLGM0

  - `notification.url` (string, required)
    Example: https://api.ev.energy/notifications/notf67O36PLTFDB57M0E5L33JZLGM0

  - `notification.message_id` (string, required)
    Internal identifier for this notification type. E.g. 'ERR0023'

  - `notification.category` (string, required)
    Category of this notification type
    Enum: "ACTIONABLE", "SERVICE", "RETRY", "MARKETING", "INTERNAL"

  - `notification.event_time` (string, required)
    The timestamp of the event described by this notification

  - `notification.short_text_title` (string, required)
    Short title for the notification

  - `notification.short_text_body` (string, required)
    Short description of the event being notified

  - `notification.detail_page_title` (string, required)
    Title of a help page giving more information about this notification

  - `notification.detail_page_body` (string, required)
    Text of a help page giving more information about this notification

  - `notification.external_link` (string | null, required)
    URL of a web page giving further information about this notification

  - `notification.external_button_label` (string, required)
    Text to be displayed on a button leading to the external_link location

  - `notification.read_at` (string)
    When the user examined the contents of this notification

  - `notification.resolved_at` (string)
    When the problem associated with this notification was resolved

## Response 401 fields (application/problem+json):

  - `status` (number)
    Example: 401

  - `title` (string, required)
    Example: Unauthorized

  - `detail` (string, required)
    Example: Authentication credentials were not provided.

## Response 404 fields (application/problem+json):

  - `status` (number)
    Example: 404

  - `title` (string, required)
    Example: Not found

  - `detail` (string, required)
    Example: Resource does not exist or cannot be accessed.

## Response 405 fields (application/problem+json):

  - `status` (number)
    Example: 405

  - `title` (string, required)
    Example: Method Not Allowed

  - `detail` (string, required)
    Example: Could not satisfy this HTTP method.

## Response 406 fields (application/problem+json):

  - `status` (number)
    Example: 406

  - `title` (string, required)
    Example: Not Acceptable

  - `detail` (string, required)
    Example: Could not satisfy the request Accept header.

