# EVSEs

Endpoints for interacting with EVSEs.

## Check EVSE model compatibility in a country

 - [GET /evse_compatibility/check](https://developers.ev.energy/ev.energy-api-v2/evses/get-evse_compatibility-check.md): 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).

## List EVSEs

 - [GET /evses](https://developers.ev.energy/ev.energy-api-v2/evses/get-evses.md): List all the EVSEs that the authorization token has access to.

## Retrieve an EVSE

 - [GET /evses/{evse_id}](https://developers.ev.energy/ev.energy-api-v2/evses/get-evses-evse_id.md): Retrieve a single, specific EVSE's details.

## Decommission an EVSE

 - [DELETE /evses/{evse_id}](https://developers.ev.energy/ev.energy-api-v2/evses/delete-evses-evse_id.md): Decommission the EVSE by disconnecting it from the ev.energy system.

## List EVSE models

 - [GET /evse_models](https://developers.ev.energy/ev.energy-api-v2/evses/get-evse_models.md): List all the EVSE models known by the ev.energy system.

Anonymous callers are rate limited to 50 requests per hour per IP.

## Retrieve an EVSE model

 - [GET /evse_models/{evse_model_id}](https://developers.ev.energy/ev.energy-api-v2/evses/get-evse_models-evse_model_id.md): Retrieve details for a single, specific EVSE model.

Anonymous callers are rate limited to 50 requests per hour per IP.

## List EVSE makes

 - [GET /evse_makes](https://developers.ev.energy/ev.energy-api-v2/evses/get-evse_makes.md): List all the EVSE makes known by the ev.energy system.

Anonymous callers are rate limited to 50 requests per hour per IP.

## Retrieve an EVSE make

 - [GET /evse_makes/{evse_make_id}](https://developers.ev.energy/ev.energy-api-v2/evses/get-evse_makes-evse_make_id.md): Retrieve details for a single, specific EVSE make.

Anonymous callers are rate limited to 50 requests per hour per IP.

## List status logs for an EVSE

 - [GET /evses/{evse_id}/status_logs](https://developers.ev.energy/ev.energy-api-v2/evses/get-evses-evse_id-status_logs.md): List the historical status logs for a specific EVSE. Used to find out the state of the EVSE at each point it reported in to ev.energy.

## Retrieve a status log for an EVSE

 - [GET /evses/{evse_id}/status_logs/{sampled_at}](https://developers.ev.energy/ev.energy-api-v2/evses/get-evses-evse_id-status_logs-timestamp.md): An EVSE status log is uniquely identified by the combination of EVSE ID and the time it was sampled at.

## List command logs for an EVSE

 - [GET /evses/{evse_id}/command_logs](https://developers.ev.energy/ev.energy-api-v2/evses/get-evses-evse_id-command_logs.md): List the historical command logs for a specific EVSE. These logs record commands that were sent to the EVSE.

## Retrieve a command log for an EVSE

 - [GET /evses/{evse_id}/command_logs/{logged_at}](https://developers.ev.energy/ev.energy-api-v2/evses/get-evses-evse_id-command_logs-timestamp.md): An EVSE command log is uniquely identified by the combination of EVSE ID and the time it was logged at.

## List API error logs for an EVSE

 - [GET /evses/{evse_id}/error_logs](https://developers.ev.energy/ev.energy-api-v2/evses/get-evses-evse_id-error_logs.md): List the historical API error logs for a specific EVSE. These logs capture errors that occurred when attempting to communicate with the EVSE's hardware API.

## Retrieve a specific API error log for an EVSE

 - [GET /evses/{evse_id}/error_logs/{sampled_at}](https://developers.ev.energy/ev.energy-api-v2/evses/get-evses-evse_id-error_logs-timestamp.md): A single API error log for a particular EVSE is uniquely identified by the timestamp it was sampled at.

## List OCPP logs for an EVSE

 - [GET /evses/{evse_id}/ocpp_logs](https://developers.ev.energy/ev.energy-api-v2/evses/get-evses-evse_id-ocpp_logs.md): List the historical OCPP message logs for a specific EVSE. These logs record OCPP messages sent to or received from the charger.

## Retrieve an OCPP log for an EVSE

 - [GET /evses/{evse_id}/ocpp_logs/{sampled_at}](https://developers.ev.energy/ev.energy-api-v2/evses/get-evses-evse_id-ocpp_logs-timestamp.md): An EVSE OCPP log is uniquely identified by the combination of EVSE ID and the time it was sampled at.

## Get VPP modes for an EVSE

 - [GET /evses/{evse_id}/vpp_modes](https://developers.ev.energy/ev.energy-api-v2/evses/get-evses-evse_id-vpp_modes.md): Returns the VPP (Virtual Power Plant) control modes supported by this EVSE.

## Get connectivity information for an EVSE

 - [GET /evses/{evse_id}/connectivity](https://developers.ev.energy/ev.energy-api-v2/evses/get-evses-evse_id-connectivity.md): Returns a snapshot of the EVSE's connectivity metrics including signal strength, SIM data, firmware version, and connection reliability.

## Create EVSE reconnection URL

 - [POST /evses/{evse_id}/reconnect](https://developers.ev.energy/ev.energy-api-v2/evses/post-evses-evse_id-reconnect.md): Create a reconnection request URL for the EVSE. The EVSE must have a user assigned.

## List EVSE firmware versions

 - [GET /evse_firmware_versions](https://developers.ev.energy/ev.energy-api-v2/evses/get-evse_firmware_versions.md): List EVSE firmware versions available in the catalogue. Only firmware
versions flagged as production releases are returned.

## Retrieve an EVSE firmware version

 - [GET /evse_firmware_versions/{evse_firmware_version_id}](https://developers.ev.energy/ev.energy-api-v2/evses/get-evse_firmware_versions-evse_firmware_version_id.md): Retrieve a single EVSE firmware version by ID.

## Initiate EVSE onboarding

 - [GET /evse_onboarding](https://developers.ev.energy/ev.energy-api-v2/evses/get-evse_onboarding.md): Initiate the onboarding process for a new EVSE in your user's browser (or an embedded web view in an app).

If neither make_id or model_id are passed as query parameters, the user will be shown a user interface to pick their EVSE make.

## Native clients (response_type=json)

Native mobile clients that need to open the onboarding URL in a WebView (rather than follow a 302 redirect) can pass response_type=json to receive a JSON payload instead. In that case at least one of make_id or model_id is required (otherwise the endpoint responds with 400).

## Final redirect

After the user completes the web flow, the browser is redirected to the onboarding_redirect_url configured on your application. The redirect URL will carry two query parameters identifying the onboarded EVSE:

- evse_uid — the v2 UID of the onboarded EVSE (preferred). Use this to call GET /v2/evses/{evse_uid} for further details.
- evse_id — the legacy integer primary key. Prefer evse_uid.

Example: https://your-redirect/?evse_id=123&evse_uid=evse01....

## Import an EVSE by serial number

 - [POST /evse_onboarding/import](https://developers.ev.energy/ev.energy-api-v2/evses/post-evse_onboarding-import.md): Import an EVSE into the ev.energy system using its serial number and the authenticated user's email. The backend calls the provider's API to look up the device and link it; the response is the freshly created EVSE resource, shape-identical to GET /evses/{evse_id}.

Supported providers (serial-number-based onboarding): ChargePoint, EO, SyncEV, EnelX, Easee, Wallbox, Zaptec. Other EVSE providers use the OAuth flow via GET /evse_onboarding/ instead.

## Add user to the EVSE waitlist

 - [POST /evse_waitlist](https://developers.ev.energy/ev.energy-api-v2/evses/post-evse_waitlist.md): Captures a user who hit an incompatible result on the EVSE compatibility check, so we can notify them once their hardware becomes supported. Pre-account, anonymous endpoint — no OAuth token required.

The request body must identify the device in exactly one of two modes:

- Picker mode — supply evse_model_id (uid of an EVSEModel). evse_make_name and evse_model_name must be omitted / null.
- Manual entry — supply both evse_make_name and evse_model_name as free-text strings. evse_model_id must be omitted / null.

Any other combination — including all three null — returns 400.

Country is derived server-side: from program.country when program_id is supplied; otherwise from the Accept-Language header (defaulting to US).

Error responses follow RFC 9457 Problem Details. Problem types emitted by this endpoint:

- validation-failed-evse-waitlist — request body fails validation (missing required field, mode constraint violation, unknown evse_model_id / program_id).

## Get VPP modes for an EVSE

 - [GET /evses/{evse_id}/vpp_modes](https://developers.ev.energy/ev.energy-api-v2/vpp/get-evses-evse_id-vpp_modes.md): Returns the VPP (Virtual Power Plant) control modes supported by this EVSE.

