# Check EVSE model compatibility in a country

Returns whether the given `EVSEModel` is supported in the supplied
country, and whether the support is `beta` (early-access) or live.
Used by the onboarding flow to tell the user upfront whether their
hardware 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, program membership is applied as an
additional filter on top of the global compatibility check: the
model must be in the program's `supported_evse_models` list AND
pass the global region + `EvseCompatibility` check. Region is
derived from the program's country, so the `country` query
parameter and `Accept-Language` header are ignored in that case.
Error responses follow RFC 9457 Problem Details. Problem types
emitted by this endpoint:
- `validation-failed-evse-compatibility-check` — missing or
invalid `evse_model_id` / `country` query parameter (`400`).
- `evse-model-not-found` — `evse_model_id` does not resolve to
an `EVSEModel` (`404`).
- `program-not-found` — `program_id` does not resolve to a
program (`404`).

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

## Query parameters:

  - `evse_model_id` (string, required)
    `EVSEModel.uid` 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 model must be in the
program's `supported_evse_models` list AND pass the global
region + `EvseCompatibility` check. Region is derived from
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.

  - `beta` (boolean, required)
    True if support is currently in early-access / beta. Always
present in the response; `false` when `compatible` is `false`.

  - `recommendation_rank` (integer | null, required)
    Priority of the EVSE 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.

