Enode Developers

Enode API

This reference provides an in-depth description of our endpoints for accessing and controlling the hardware and features available through the Enode API.

The API is organised around REST, and utilises OAuth2 authorization.

Environments

We offer multiple environments, each with their own software versions, data access policies, and live/mocked vendors.

Each environment is completely isolated from the others. When you are issued client credentials, they are tied to a specific environment and cannot be re-used across environments.

Copy linkProduction

Running the latest stable software, with live vendors (vehicles/chargers), and strict data access controls

NameURL
APIhttps://enode-api.production.enode.io
OAuth Authorizationhttps://oauth.production.enode.io/oauth2/auth
OAuth Tokenhttps://oauth.production.enode.io/oauth2/token
Link UIhttps://link.production.enode.io

Copy linkSandbox

Running the latest stable software, with mocked vendors/vehicles/chargers

NameURL
APIhttps://enode-api.sandbox.enode.io
OAuth Authorizationhttps://oauth.sandbox.enode.io/oauth2/auth
OAuth Tokenhttps://oauth.sandbox.enode.io/oauth2/token
Link UIhttps://link.sandbox.enode.io
Was this section helpful?

Authentication

The Enode API uses OAuth 2.0 client access tokens to authenticate requests coming from your server.

Copy linkAPI credentials

Access to the Enode API starts with a client and the API credentials belonging to that client: the client ID and client secret. Clients are a way of organizing data, are completely separated from each other, and are tied to a specific environment.

The API credentials used to get an access token, which in turn is used to access client-wide endpoints and user-specific endpoints.

Key Description
Client IDThe identifier for your client, referred to as the client_id.
Client secretThe secret for your client, referred to as the client_secret.

Copy linkGetting an access token

The access token allows you to authenticate as your client, authorizing access to all data and functionality within your client. The token is obtained via the standard OAuth 2.0 client credentials grant, using the API credentials and the corresponding OAuth URLs for the environment of your client.

Token request example

curl https://oauth.{YOUR_CLIENT_ENVIRONMENT}.enode.io/oauth2/token \
-X POST \
-u {YOUR_CLIENT_ID}:{YOUR_CLIENT_SECRET} \
-d "grant_type=client_credentials"

After requesting the token URL as described above, you’ll receive a response containing your access token. This access token should be cached on your server until it expires and subsequently needs to be refreshed.

As with the API credentials, the access token must be kept secret.

Token response example

{
	"access_token": "{YOUR_ACCESS_TOKEN}",
	"expires_in": 3599,
	"scope": "",
	"token_type": "bearer"
}

Copy linkRefreshing access tokens

The access token expires every hour, as described by the expires_in key in the access token response. Once your token expires, your server should repeat the process to obtain a new access token.

Copy linkAccessing the API with the access token

All API requests towards your client need to be authenticated via a bearer authentication header.

The bearer authorization header can be used on its own to access the client-wide endpoints (service health, tariffs, user management and webhooks).

Type Value
HeaderAuthorization: Bearer {YOUR_ACCESS_TOKEN}

Client resource request example

curl https://enode-api.{YOUR_CLIENT_ENVIRONMENT}.enode.io/health/ready \
-X POST \
-H "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \

Copy linkAccessing user-specific endpoints

To access resources specific to a user, an additional header containing the user ID must be specified together with the general authorization header.

This additional header is needed for all general user endpoints (charging locations, me, schedules and statistics) and device-specific endpoints (chargers, HVACs, solar inverters and vehicles).

Type Value
HeaderEnode-User-Id: {USER_ID}

User resource request example

curl https://enode-api.{YOUR_CLIENT_ENVIRONMENT}.enode.io/me \
-X GET \
-H "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
-H "Enode-User-Id: {USER_ID}" \
Was this section helpful?

Response times

Interacting with pure-Enode resources such as Schedules and Charging Locations enjoys typical response times <200ms, but when interacting with vehicles, a wide array of delays and timing characteristics come into play.

You don't need to know or handle any of the vendor-specifics that are the root cause of the variability, but it is recommended to be aware of the range of possible timings, so that they can be accounted for in your UX considerations.

Copy linkAPI GET requests

Copy linkGet Vehicle

When fetching a vehicle, you can specify which fields should be refreshed syncronously. Adding more fields typically incurs more delay, though with some vendors multiple fields are handled by one request behind the scenes.

It is recommended to only request the needed fields.

FieldTypical added delay
smartChargingPolicynone
chargeState8 seconds
location8 seconds
information8 seconds
odometer8 seconds

Copy linkList Vehicles

The characteristics of List Vehicles are the same as Get Vehicle - but delays are potentially multiplied by the number of vehicles present.

If the User has multiple vendors connected, then the entire request needs to wait for the slowest vendor to complete before we can respond. These delays can easily combine to reach 30 seconds or more.

For this reason, List Vehicles should be used only to discover occasional changes to the User's vehicle list. When you already know what vehicles you are interested in, use Get Vehicle to fetch them.

The Login step typically takes <2 seconds, but in rare cases can take up to 30 seconds while details are negotiated/handled/retried behind the scenes, and initial vehicle data is fetched.

The final Accept step is subject to the same delays as List Vehicles

Copy linkCharging commands

Charging commands have the greatest timing variability, as they are implemented in a variety of ways across vendors. Overall, typical delay is 15 seconds, maximum delay is 15 minutes.

Command implementationTypical delay
native3-15 seconds
synthetic A3-30 seconds
synthetic B5-15 minutes

Copy linkWebhooks

Our webhooks are usually implemented via polling behind the scenes, and the rate of polling dynamically adjusts for different situations as we strive for prompt updates without overloading the vehicle with requests.

The baseline maximum delay between a real-world change (such as a vehicle becoming plugged in) and the resulting webhook notification is 7 minutes

Vehicle contextMaximum delay
default7 minutes
charging1 minute
smartcharge PLAN:*2 minutes
sleeping20 minutes

If you want faster updates for a short time, you can call Get Vehicle which always returns synchronous data from the Vehicle and also triggers a webhook if anything has changed.

A typical situation for this would be that a user has your app open and is expecting updates. In that situation you might poll Get Vehicle every 15 seconds for a short period of time.

Was this section helpful?

Errors and problems

Copy linkOAuth Authorization Request

When the User has completed the process of allowing/denying access in Enode Link, they will be redirected to your configured redirect URI. If something has gone wrong, query parameters error and error_description will be set as documented in Section 4.1.2.1 of the OAuth 2.0 spec:

Error Error description
invalid_requestThe request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed.
unauthorized_clientThe client is not authorized to request an authorization code using this method.
access_deniedThe resource owner or authorization server denied the request.
unsupported_response_typeThe authorization server does not support obtaining an authorization code using this method.
invalid_scopeThe requested scope is invalid, unknown, or malformed.
server_errorThe authorization server encountered an unexpected condition that prevented it from fulfilling the request.
temporarily_unavailableThe authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server

Sample

https://website.example/oauth_callback?state=e0a86fe5&error=access_denied&error_description=The+resource+owner+or+authorization+server+denied+the+request.

Copy linkErrors when accessing a User's resources

When using an access_token to access a User's resources, the following HTTP Status Codes in the 4XX range may be encountered:

HTTP Status CodeExplanation
400 Bad RequestThe request payload has failed schema validation / parsing
401 UnauthorizedAuthentication details are missing or invalid
403 ForbiddenAuthentication succeeded, but the authenticated user doesn't have access to the resource
404 Not FoundA non-existent resource is requested
405 Method Not AllowedVendor being unavailable has prevented us from completing the request
408 Request TimeoutTimeout by the vendor has prevented us from completing the request
409 ConflictVendor rejection has prevented us from completing the request
424 Failed DependencyOne or more vendor requests failing have prevented us from completing the request
429 Too Many RequestsRate limiting by the vendor has prevented us from completing the request

In all cases, an RFC7807 Problem Details body is returned to aid in debugging.

Sample

HTTP/1.1 400 Bad Request
Content-Type: application/problem+json
{
  "type": "https://docs.enode.io/problems/bad-request",
  "title": "Payload validation failed",
  "detail": "\"authorizationRequest.scope\" is required",
}

Copy linkProblems

TitleDescription
Bad request

Some part of the request was malformed. See associated detail message for more information.

Enode Controlled Entity

This entity is currently managed by Smart Charging or Schedules and cannot accept manual commands. Either disable the feature controlling the target, or force charging to start through our External Start API.

Entity Not Found

The requested entity was not found on the user's account.

Failed Auth Challenge

The code the User entered in response to a login challenge was not correct.

Forbidden

The current context is not allowed to access the requested resource.

Not Found

The requested entity was not found on the user's account. If requesting vendor entities, ensure you're using the top level id field and not information.id. information.id is the ID the vendor uses to refer to the entity and changes over time.

Permanently Invalid Credentials

The User's vendor credentials have become invalid. The User needs to relink their account.

Server Error

A critical error has ocurred. An employee has been alerted and will work to remedy the situation

Should Not Disturb

Making a call to the vendor would negatively impact the vendor resource. For example, a Kia vehicle's 12V battery has reached a critical state and we cannot send further requests.

Timeout

A request timed out. If this problem was returned by a route that tried to communicate with vendor APIs, remove the fields query parameter to fetch the Enode hosted cache. This cache is updated every 10 minutes.

Unauthorized

The request contained an invalid or expired token.

Validation Error

The response we prepared failed to pass outgoing validation. An employee has been alerted and will work to remedy the situation.

Vendor Not Yet Reached

This error is returned when a request for entity state fails on an entity where lastSeen is null. In this situation, we normally return a 206 status with cached data. However, if lastSeen is null, we don't have any cached data to show.

Vendor Rate Limited

Enode has sent too many requests to a vendor.

Vendor Rejected

An action sent to a vendor was rejected. This typically happens when too many commands are sent in a short period of time.

Unauthorized

The request contained an invalid or expired token.

Vendor Unavailable

We were able to reach the vendor's server but were unable to make direct contact with the requested resource. For example, a Tesla vehicle was sleeping and we were unable to wake it.

Was this section helpful?

Versioning

Copy linkBreaking Changes

Once issued a client, that client is pinned to the latest major version and will only be exposed to major version changes if you request us to migrate it. In such a situation we are able to offer coordinated migration/maintenance windows and can execute the transition together.

For minor breaking changes, we use per-client feature flags, and your technical contact at Enode will keep you notified of new functionalities that are available to be opted into.

Copy linkSchema additions are to be considered non-breaking

Your implementation should be tolerant of the addition of new fields to JSON schemas and the addition of new webhook event names, as such changes are not guarded by feature flags or major version changes.

If this is a problem for your chosen implementation tools, contact us to discuss possible solutions.

Copy linkConsuming the OpenApi Spec

Every release of the API is accompanied by an OpenAPI Specifiction 3.0 document. This document is available at https://enode-api.production.enode.io/openapi/v1.json

Was this section helpful?

Chargers

EV Chargers provide charging data and can be controlled through the Control Charger endpoint and through Schedules

List Chargers

GET /chargers

List all available Chargers for the User.

Response

200
Attributes
List of string array of string

Charger IDs

Sample
[
  "string"
]
Was this section helpful?

Get Charger

GET /chargers/{chargerId}

Request

Path parameters
chargerId string Required

ID of the Charger

Query parameters
a, r, r, a, y, ,, s, t, r, i, n, or g

If you specify any fields here, we make a request to the Charger's OEM APIs and return the updated data.

This will slow down your integration. In cases of vendor downtime requests with fields may take up to a minute to complete, while requests without fields will always be fast. Enode polls all devices connected to our platform, so any cached data returned will not be older than 10 minutes (unless the vendor APIs are unavailable, in which case you can consult the lastSeen & isReachable fields on the charger).

By default, no fields are included, and the latest cached full Charger object will be returned.

Response

200
Attributes
id string

Charger ID

vendor string

Charger Vendor

One of ZAPTEC, EASEE, WALLBOX, EO, CHARGEAMPS, or EVBOX

lastSeen s, t, r, i, n, g, ,, n, u, l, or l<date-time>

The last time the charger was successfully communicated with

isReachable boolean

Whether live data from the charger is currently fetchable from Enode's perspective. This 'reachability' may refer to reading from a cache operated by the charger's cloud service if that service has determined that its cache is valid.

chargingLocationId s, t, r, i, n, g, ,, n, u, l, or l

ID of the charging location the charger is currently positioned at (if any).

object
object

Descriptive information about the Charger

object

A collection of descriptors that describe the capabilities of this specific charger

Sample
{
  "id": "string",
  "vendor": "EASEE",
  "lastSeen": "2019-08-24T14:15:22Z",
  "isReachable": true,
  "chargingLocationId": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "chargeState": {
    "isPluggedIn": true,
    "isCharging": false,
    "chargeRate": 40.1,
    "lastUpdated": "2020-01-07T16:21:76Z",
    "maxCurrent": 20
  },
  "information": {
    "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
    "brand": "Easee",
    "model": "Home",
    "year": 2020
  },
  "capabilities": {
    "information": {
      "isCapable": true,
      "interventionIds": [
        "0defa374-8a1a-4eb1-a85f-b7cb09501097"
      ]
    },
    "chargeState": {
      "isCapable": true,
      "interventionIds": [
        "0defa374-8a1a-4eb1-a85f-b7cb09501097"
      ]
    },
    "startCharging": {
      "isCapable": true,
      "interventionIds": [
        "0defa374-8a1a-4eb1-a85f-b7cb09501097"
      ]
    },
    "stopCharging": {
      "isCapable": true,
      "interventionIds": [
        "0defa374-8a1a-4eb1-a85f-b7cb09501097"
      ]
    },
    "setMaxCurrent": {
      "isCapable": true,
      "interventionIds": [
        "0defa374-8a1a-4eb1-a85f-b7cb09501097"
      ]
    }
  }
}
Was this section helpful?

Control Charging

POST /chargers/{chargerId}/charging

Register a request for a charger to start or stop charging. We retry sending the command until the charger's chargeStateIsCharging field transitions to the expected state. Note that this API request will complete before any commands are sent to the charger. There can only be one vendor action active for any one target id at a time. If a new action is created, the old action transitions to the CANCELLED state. You may react to transitions by listening for the user:vendor-action:updated webhook event or polling the charger action endpoint.

This endpoint returns an error with status code 422 if the charger is controlled by a schedule. To restore user control, either disable the schedule or use our Smart Override API to temporarily enable charging.

Request

Path parameters
chargerId string Required

ID of the Charger

Attributes
action string Required

Kind of action

One of START or STOP

Sample
{
  "action": "START"
}

Response

200
Attributes
id string<uuid>

The ID of the action.

targetId string

ID of the chargeable entity asset (Vehicle or Charger) which this action is controlling.

targetType string

One of vehicle or charger

kind string

Kind of action

One of START or STOP

createdAt string<date-time>

ISO8601 UTC timestamp

updatedAt string<date-time>

ISO8601 UTC timestamp

completedAt string<date-time>

ISO8601 UTC timestamp at which the action transitioned to a non-pending state. If this value is set, then we are no longer sending commands to the chargeable.

s, t, r, i, n, or g

Current state of the charge action.

entityId string Deprecated
entityType string Deprecated
chargeableId string Deprecated
chargeableType string Deprecated
Sample
{
  "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "targetId": "string",
  "targetType": "vehicle",
  "kind": "START",
  "createdAt": "2020-04-07T17:04:26Z",
  "updatedAt": "2020-04-07T17:04:26Z",
  "completedAt": "2020-04-07T17:04:26Z",
  "state": "string",
  "entityId": "string",
  "entityType": "string",
  "chargeableId": "string",
  "chargeableType": "string"
}

Other responses

Response 422

Charger controlled by a Schedule

Attributes
type string
title string
detail string
Sample
{
  "type": "string",
  "title": "string",
  "detail": "string"
}
Was this section helpful?

Get Charge Action

GET /chargers/actions/{vendorActionId}

Returns the current state of the requested action.

Request

Path parameters
vendorActionId string Required

ID of the Action

Response

200
Attributes
id string<uuid>

The ID of the action.

targetId string

ID of the chargeable entity asset (Vehicle or Charger) which this action is controlling.

targetType string

One of vehicle, charger, hvac, or inverter

kind string

Kind of action

One of START or STOP

o, b, j, e, c, or t
o, b, j, e, c, or t
createdAt string
updatedAt string
completedAt s, t, r, i, n, g, ,, n, u, l, or l

ISO8601 UTC timestamp at which the action transitioned to a non-pending state. If this value is set, then we are no longer sending commands to the chargeable.

s, t, r, i, n, or g

Current state of the charge action.

entityId string Deprecated
entityType string Deprecated

One of vehicle, charger, hvac, or inverter

chargeableId string Deprecated
chargeableType string Deprecated

One of vehicle, charger, hvac, or inverter

Sample
{
  "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "targetId": "string",
  "targetType": "vehicle",
  "kind": "START",
  "target": {
    "temperature": 22,
    "deadband": 4
  },
  "targetState": {
    "maxCurrent": 20
  },
  "createdAt": "string",
  "updatedAt": "string",
  "completedAt": "2020-04-07T17:04:26Z",
  "state": "string",
  "entityId": "string",
  "entityType": "vehicle",
  "chargeableId": "string",
  "chargeableType": "vehicle"
}

Other responses

Response 404

Action not found.

Was this section helpful?

Create Smart Override

POST /chargers/{chargerId}/smart-override

Overrides an active smart feature by forcing the charger to start charging. This feature is meant to be used in situations where the user wants to charge immediately without disabling other smart features. The override remains active until the charger stops charging, or until the Delete Smart Override endpoint is called. When the override ends, the overriden smart feature will regain control of the charger. This endpoint should not be used for standard charge control, use the Control Charging endpoint instead.

Request

Path parameters
chargerId string Required

ID of the Charger

Response

200
Attributes
userId string

ID of the User

createdAt string<date-time>

ISO8601 UTC timestamp at which the smart override was created.

endedAt s, t, r, i, n, g, ,, n, u, l, or l<date-time>

ISO8601 UTC timestamp at which the smart override was ended. If null, the smart override is still active.

targetType string

One of vehicle or charger

s, t, r, i, n, or g
targetId string

ID of the asset (Vehicle or Charger) to which this smart override applies.

vendorActionId string

The ID of Vendor Action responsible for starting charging on the target. Use the Vehicle Get Action or the Charger Get Action endpoints to monitor action results.

Sample
{
  "userId": "string",
  "createdAt": "2020-04-07T17:04:26Z",
  "endedAt": "2020-04-07T17:04:26Z",
  "targetType": "vehicle",
  "vendor": "TESLA",
  "targetId": "string",
  "vendorActionId": "string"
}
Was this section helpful?

End Smart Override

DELETE /chargers/{chargerId}/smart-override

Ends any active Smart Override for the charger specified by chargerId. If previously configured, Schedules or Smart Charging will resume control over the target charger. Note that this does not mean the charger will stop charging, only that it will return to the state expected by the active Schedule or Smart Charging Plan.

Request

Path parameters
chargerId string Required

ID of the Charger

Response

200
Attributes
userId string

ID of the User

createdAt string<date-time>

ISO8601 UTC timestamp at which the smart override was created.

endedAt s, t, r, i, n, g, ,, n, u, l, or l<date-time>

ISO8601 UTC timestamp at which the smart override was ended. If null, the smart override is still active.

targetType string

One of vehicle or charger

s, t, r, i, n, or g
targetId string

ID of the asset (Vehicle or Charger) to which this smart override applies.

vendorActionId string

The ID of Vendor Action responsible for starting charging on the target. Use the Vehicle Get Action or the Charger Get Action endpoints to monitor action results.

Sample
{
  "userId": "string",
  "createdAt": "2020-04-07T17:04:26Z",
  "endedAt": "2020-04-07T17:04:26Z",
  "targetType": "vehicle",
  "vendor": "TESLA",
  "targetId": "8d90101b3f2f",
  "vendorActionId": "string"
}

Other responses

Response 404

No Smart Override Exists

Attributes
type string
title string
detail string
Sample
{
  "type": "string",
  "title": "string",
  "detail": "string"
}
Was this section helpful?

Create External Start

Deprecated
POST /chargers/{chargerId}/external-start

Deprecated. Replaced by Create Smart Override. The new name better reflects the functionality this endpoint offers.

Request

Path parameters
chargerId string Required

ID of the Charger

Response

200
Attributes
userId string

ID of the User

createdAt string<date-time>

ISO8601 UTC timestamp at which the smart override was created.

endedAt s, t, r, i, n, g, ,, n, u, l, or l<date-time>

ISO8601 UTC timestamp at which the smart override was ended. If null, the smart override is still active.

targetType string

One of vehicle or charger

s, t, r, i, n, or g
targetId string

ID of the asset (Vehicle or Charger) to which this smart override applies.

vendorActionId string

The ID of Vendor Action responsible for starting charging on the target. Use the Vehicle Get Action or the Charger Get Action endpoints to monitor action results.

Sample
{
  "userId": "string",
  "createdAt": "2020-04-07T17:04:26Z",
  "endedAt": "2020-04-07T17:04:26Z",
  "targetType": "vehicle",
  "vendor": "TESLA",
  "targetId": "8d90101b3f2f",
  "vendorActionId": "string"
}
Was this section helpful?

End External Start

Deprecated
DELETE /chargers/{chargerId}/external-start

Deprecated. Replaced by Delete Smart Override. The new name better reflects the functionality this endpoint offers.

Request

Path parameters
chargerId string Required

ID of the Charger

Response

200
Attributes
userId string

ID of the User

createdAt string<date-time>

ISO8601 UTC timestamp at which the smart override was created.

endedAt s, t, r, i, n, g, ,, n, u, l, or l<date-time>

ISO8601 UTC timestamp at which the smart override was ended. If null, the smart override is still active.

targetType string

One of vehicle or charger

s, t, r, i, n, or g
targetId string

ID of the asset (Vehicle or Charger) to which this smart override applies.

vendorActionId string

The ID of Vendor Action responsible for starting charging on the target. Use the Vehicle Get Action or the Charger Get Action endpoints to monitor action results.

Sample
{
  "userId": "string",
  "createdAt": "2020-04-07T17:04:26Z",
  "endedAt": "2020-04-07T17:04:26Z",
  "targetType": "vehicle",
  "vendor": "TESLA",
  "targetId": "8d90101b3f2f",
  "vendorActionId": "string"
}

Other responses

Response 404

No External Start Exists

Attributes
type string
title string
detail string
Sample
{
  "type": "string",
  "title": "string",
  "detail": "string"
}
Was this section helpful?

Set Max Current

POST /chargers/{chargerId}/max-current

Register a request for a change of the maxCurrent field on a charger. We retry sending the command until the charger's maxCurrent field transitions to the expected value. Note that this request will complete before any commands are sent to the charger. There can only be one vendor action active for any one target id at a time. If a new action is created, the old action transitions to the CANCELLED state. You may react to transitions by listening for the user:vendor-action:updated webhook event or polling Charger Get Action.

Request

Path parameters
chargerId string Required

ID of the Charger

Attributes
maxCurrent number Required

Desired max current in ampere

Sample
{
  "maxCurrent": 20
}

Response

200
Attributes
id string<uuid>

The ID of the action.

targetId string

ID of the entity asset (Charger) which this action is controlling.

object

Target maximum current for charger

createdAt string<date-time>

ISO8601 UTC timestamp

updatedAt string<date-time>

ISO8601 UTC timestamp

completedAt string<date-time>

ISO8601 UTC Timestamp at which the action transitioned to a non-pending state. If this value is set, then we are no longer sending temperature commands to the charger.

s, t, r, i, n, or g

Current state of the charge action.

Sample
{
  "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "targetId": "string",
  "targetState": {
    "maxCurrent": 20
  },
  "createdAt": "2020-04-07T17:04:26Z",
  "updatedAt": "2020-04-07T17:04:26Z",
  "completedAt": "2020-04-07T17:04:26Z",
  "state": "string"
}
Was this section helpful?

Charging Locations

A user creates charging Locations to denote locations where they pay for the power used to charge their vehicle, heat their home, etc. Smart Charging is active at these locations only.

List Charging Locations

GET /charging-locations

Returns a list of Charging Locations registered to the User

Response

200
Attributes
List of object array of object
object object
id string<uuid>
name string

User-supplied name for the Charging Location

longitude number

Longitude in degrees

latitude number

Latitude in degrees

timezoneName string

An IANA TZ database timezone name. This value will be used to convert rules and deadlines for tariffs, smart charging, and schedules into local time. Defaults to 'UTC'.

Sample
[
  {
    "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
    "name": "Home",
    "longitude": 10.757933,
    "latitude": 59.911491,
    "timezoneName": "Europe/Copenhagen"
  }
]
Was this section helpful?

Create Charging Location

POST /charging-locations

Request

Attributes
name string Required

User-supplied name for the Charging Location

longitude number Required

Longitude in degrees

latitude number Required

Latitude in degrees

timezoneName string

An IANA TZ database timezone name. This value will be used to convert rules and deadlines for tariffs, smart charging, and schedules into local time. Defaults to 'UTC'.

Sample
{
  "name": "Home",
  "longitude": 10.757933,
  "latitude": 59.911491,
  "timezoneName": "Europe/Copenhagen"
}

Response

200
Attributes
id string<uuid>
name string

User-supplied name for the Charging Location

longitude number

Longitude in degrees

latitude number

Latitude in degrees

timezoneName string

An IANA TZ database timezone name. This value will be used to convert rules and deadlines for tariffs, smart charging, and schedules into local time. Defaults to 'UTC'.

Sample
{
  "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "name": "Home",
  "longitude": 10.757933,
  "latitude": 59.911491,
  "timezoneName": "Europe/Copenhagen"
}
Was this section helpful?

Get Charging Location

GET /charging-locations/{chargingLocationId}

Request

Path parameters
chargingLocationId string Required

ID of the Charging Location.

Response

200
Attributes
id string<uuid>
name string

User-supplied name for the Charging Location

longitude number

Longitude in degrees

latitude number

Latitude in degrees

timezoneName string

An IANA TZ database timezone name. This value will be used to convert rules and deadlines for tariffs, smart charging, and schedules into local time. Defaults to 'UTC'.

Sample
{
  "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "name": "Home",
  "longitude": 10.757933,
  "latitude": 59.911491,
  "timezoneName": "Europe/Copenhagen"
}
Was this section helpful?

Delete Charging Location

DELETE /charging-locations/{chargingLocationId}

Delete a Charging Location.

Request

Path parameters
chargingLocationId string Required

ID of the Charging Location.

Response

200
Attributes
id string<uuid>
name string

User-supplied name for the Charging Location

longitude number

Longitude in degrees

latitude number

Latitude in degrees

timezoneName string

An IANA TZ database timezone name. This value will be used to convert rules and deadlines for tariffs, smart charging, and schedules into local time. Defaults to 'UTC'.

Sample
{
  "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "name": "Home",
  "longitude": 10.757933,
  "latitude": 59.911491,
  "timezoneName": "Europe/Copenhagen"
}
Was this section helpful?

Update Charging Location

PUT /charging-locations/{chargingLocationId}

Updates a charging location with new configuration.

Request

Path parameters
chargingLocationId string Required

ID of the Charging Location

Attributes
name string

User-supplied name for the Charging Location

longitude number

Longitude in degrees

latitude number

Latitude in degrees

timezoneName string

An IANA TZ database timezone name. This value will be used to convert rules and deadlines for tariffs, smart charging, and schedules into local time. Defaults to 'UTC'.

Sample
{
  "name": "Home",
  "longitude": 10.757933,
  "latitude": 59.911491,
  "timezoneName": "Europe/Copenhagen"
}

Response

200
Attributes
id string<uuid>
name string

User-supplied name for the Charging Location

longitude number

Longitude in degrees

latitude number

Latitude in degrees

timezoneName string

An IANA TZ database timezone name. This value will be used to convert rules and deadlines for tariffs, smart charging, and schedules into local time. Defaults to 'UTC'.

Sample
{
  "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "name": "Home",
  "longitude": 10.757933,
  "latitude": 59.911491,
  "timezoneName": "Europe/Copenhagen"
}
Was this section helpful?

Associate Charging Location With Tariff

PUT /charging-locations/{chargingLocationId}/tariff

Associates a tariff to a charging location and specifies time intervals for the tariff's rates at this location. Further requests will overwrite the existing intervals for the specified tariffId. Multiple tariffs can be associated with a Charging Location. To disassociate a particular tariff, send a request with the tariffId and an empty tariffInterval list.

Request

Path parameters
chargingLocationId string Required

ID of the Charging Location

Attributes
tariffId string Required

Energy Provider Tariff ID

array of Object Required

List of time intervals at which to apply the specified tariff rates

Sample
{
  "tariffId": "offpeaksaver",
  "tariffIntervals": [
    {
      "name": "OFF-WEEKEND",
      "weekdays": [
        5,
        6
      ],
      "from": "00:00",
      "to": "06:00"
    },
    {
      "name": "PEAK-WEEKEND",
      "weekdays": [
        5,
        6
      ],
      "from": "06:00",
      "to": "18:00"
    },
    {
      "name": "OFF",
      "weekdays": [
        5,
        6
      ],
      "from": "18:00",
      "to": "23:59"
    },
    {
      "name": "PEAK",
      "from": "00:00",
      "to": "18:00"
    }
  ]
}

Response

204

Successful

Other responses

Response 400

Invalid tariffId, invalid rate name, or incomplete interval series.

Response 404

Charging Location not found.

Was this section helpful?

Get Charging Location Tariff

GET /charging-locations/{chargingLocationId}/tariff

Get Tariff intervals for a given charging location.

Request

Path parameters
chargingLocationId string Required

ID of the Charging Location

Response

200
Attributes
List of object array of object
object object
weekday number

Weekday to apply the named tariff. A weekday starts with 0 for Monday, and ends with 6 for Sunday. If not specified, named tariff is applied for entire week

fromHourMinute string

Interval from time (inclusive, UTC)

toHourMinute string

Interval to time (exclusive, UTC)

tariffId string

Energy Provider Tariff ID

tariffName string

Rate name

Sample
[
  {
    "weekday": 0,
    "fromHourMinute": "00:00",
    "toHourMinute": "06:00",
    "tariffId": "testing-tariff-a",
    "tariffName": "OFF-PEAK"
  },
  {
    "weekday": 0,
    "fromHourMinute": "06:00",
    "toHourMinute": "18:00",
    "tariffId": "testing-tariff-a",
    "tariffName": "PEAK"
  }
]

Other responses

Response 400

Invalid tariffId or rate name, or incomplete interval series

Response 404

Charging Location not found

Was this section helpful?

HVAC

HVAC units (heaters, heat pumps, air conditioning, thermostats, etc.) are controlled by altering the mode & target setpoints. This can be done directly using the Set Permanent Hold endpoint, Return to Schedule, or via Schedules.

List HVAC units

GET /hvacs

Response

200
Attributes
List of string array of string

HVAC IDs

Sample
[
  "string"
]
Was this section helpful?

Set HVAC Temperature

Deprecated
POST /hvacs/{hvacId}/temperature

This endpoint has been replaced with the Set Permanent Hold and [Follow Schedule] endpoints. A future release will remove this endpoint.

Register a request for a change of the targetTemperature field on an HVAC unit. We retry sending the command until the HVAC unit's targetTemperature field transitions to the expected value. Note that this request will complete before any commands are sent to the HVAC unit. There can only be one vendor action active for any one target id at a time. If a new action is created, the old action transitions to the CANCELLED state. You may react to transitions by listening for the user:vendor-action:updated webhook event or polling the HVAC action endpoint.

This endpoint returns an error with status code 422 if the HVAC unit is controlled by a schedule. To restore user control you must first disable the schedule.

Request

Path parameters
hvacId string Required

ID of the HVAC

Attributes
temperature n, u, m, b, e, r, ,, n, u, l, or l Required

Desired temperature

deadband n, u, m, b, e, r, ,, n, u, l, or l Required

Size of the optional deadband centered around temperature.

For example, with a temperature of 22.0 and a deadband of 4.0, an HVAC unit will receive a heating setpoint of 20.0 and a cooling setpoint of 24.0

Sample
{
  "temperature": 22,
  "deadband": 4
}

Response

200
Attributes
id string<uuid>

The ID of the action.

targetId string

ID of the entity asset (HVAC) which this action is controlling.

targetType string

One of hvac

object Deprecated

Replaced with coolSetpoint and heatSetpoint. A future release will remove this field. Target temperature for a HVAC device.

object

Target mode for an HVAC device. See the Schedules Guide for examples of valid target states.

createdAt string<date-time>

ISO8601 UTC timestamp

updatedAt string<date-time>

ISO8601 UTC timestamp

completedAt string<date-time>

ISO8601 UTC Timestamp at which the action transitioned to a non-pending state. If this value is set, then we are no longer sending temperature commands to the HVAC device.

s, t, r, i, n, or g

Current state of the HVAC action

Sample
{
  "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "targetId": "string",
  "targetType": "hvac",
  "targetTemperature": {
    "temperature": 22,
    "deadband": 4
  },
  "target": {
    "holdType": "PERMANENT",
    "mode": "AUTO",
    "heatSetpoint": 19,
    "coolSetpoint": 24
  },
  "createdAt": "2020-04-07T17:04:26Z",
  "updatedAt": "2020-04-07T17:04:26Z",
  "completedAt": "2020-04-07T17:04:26Z",
  "state": "string"
}

Other responses

Response 422

HVAC unit controlled by a Schedule

Attributes
type string
title string
detail string
Sample
{
  "type": "string",
  "title": "string",
  "detail": "string"
}
Was this section helpful?

Set HVAC Mode as Permanent Hold

POST /hvacs/{hvacId}/permanent-hold

Tell an HVAC unit to enter a permanent hold. Only available if PERMANENT is present in the target's capabilities.capableHoldType. We retry sending the command until the HVAC unit's target field transition to the expected value. Note that this request will complete before any commands are sent to the HVAC unit. You may react to transitions by listening for the user:vendor-action:updated webhook event or polling the HVAC action endpoint.

Request

Path parameters
hvacId string Required

ID of the HVAC

Attributes
Target mode for an HVAC device
mode string Required

Desired mode. HVAC units may specify a list of capableModes under capabilities. No setpoints are accepted in the OFF state.

One of OFF

Sample
{
  "mode": "OFF"
}

Response

200
Attributes
id string<uuid>

The ID of the action.

targetId string

ID of the entity asset (HVAC) which this action is controlling.

targetType string

One of hvac

object Deprecated

Replaced with coolSetpoint and heatSetpoint. A future release will remove this field. Target temperature for a HVAC device.

object

Target mode for an HVAC device. See the Schedules Guide for examples of valid target states.

createdAt string<date-time>

ISO8601 UTC timestamp

updatedAt string<date-time>

ISO8601 UTC timestamp

completedAt string<date-time>

ISO8601 UTC Timestamp at which the action transitioned to a non-pending state. If this value is set, then we are no longer sending temperature commands to the HVAC device.

s, t, r, i, n, or g

Current state of the HVAC action

Sample
{
  "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "targetId": "8d90101b3f2f",
  "targetType": "hvac",
  "targetTemperature": {
    "temperature": 22,
    "deadband": 4
  },
  "target": {
    "holdType": "PERMANENT",
    "mode": "AUTO",
    "heatSetpoint": 19,
    "coolSetpoint": 24
  },
  "createdAt": "2020-04-07T17:04:26Z",
  "updatedAt": "2020-04-07T17:04:26Z",
  "completedAt": "2020-04-07T17:04:26Z",
  "state": "string"
}

Other responses

Response 422

HVAC controlled by an Enode Schedule

Attributes
type string
title string
detail string
Sample
{
  "type": "string",
  "title": "string",
  "detail": "string"
}
Was this section helpful?

Set HVAC to follow device schedule

POST /hvacs/{hvacId}/follow-schedule

Tell an HVAC unit to follow the schedule set on the device. Only available if SCHEDULED is present in the target's capabilities.capableHoldType. This endpoint can be used to cancel permanent holds. We retry sending the command until the HVAC unit's fields transition to the expected values. Note that this request will complete before any commands are sent to the HVAC unit. You may react to transitions by listening for the user:vendor-action:updated webhook event or polling the HVAC action endpoint.

Request

Path parameters
hvacId string Required

ID of the HVAC

Response

200
Attributes
id string<uuid>

The ID of the action.

targetId string

ID of the entity asset (HVAC) which this action is controlling.

targetType string

One of hvac

object Deprecated

Replaced with coolSetpoint and heatSetpoint. A future release will remove this field. Target temperature for a HVAC device.

object

Target mode for an HVAC device. See the Schedules Guide for examples of valid target states.

createdAt string<date-time>

ISO8601 UTC timestamp

updatedAt string<date-time>

ISO8601 UTC timestamp

completedAt string<date-time>

ISO8601 UTC Timestamp at which the action transitioned to a non-pending state. If this value is set, then we are no longer sending temperature commands to the HVAC device.

s, t, r, i, n, or g

Current state of the HVAC action

Sample
{
  "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "targetId": "8d90101b3f2f",
  "targetType": "hvac",
  "targetTemperature": {
    "temperature": 22,
    "deadband": 4
  },
  "target": {
    "holdType": "PERMANENT",
    "mode": "AUTO",
    "heatSetpoint": 19,
    "coolSetpoint": 24
  },
  "createdAt": "2020-04-07T17:04:26Z",
  "updatedAt": "2020-04-07T17:04:26Z",
  "completedAt": "2020-04-07T17:04:26Z",
  "state": "string"
}

Other responses

Response 422

HVAC controlled by an Enode Schedule

Attributes
type string
title string
detail string
Sample
{
  "type": "string",
  "title": "string",
  "detail": "string"
}
Was this section helpful?

Get Action

GET /hvacs/actions/{vendorActionId}

Returns the current state of the requested action.

Request

Path parameters
vendorActionId string Required

ID of the Action

Response

200
Attributes
id string<uuid>

The ID of the action.

targetId string

ID of the entity asset (HVAC) which this action is controlling.

targetType string

One of hvac

object Deprecated

Replaced with coolSetpoint and heatSetpoint. A future release will remove this field. Target temperature for a HVAC device.

object

Target mode for an HVAC device. See the Schedules Guide for examples of valid target states.

createdAt string<date-time>

ISO8601 UTC timestamp

updatedAt string<date-time>

ISO8601 UTC timestamp

completedAt string<date-time>

ISO8601 UTC Timestamp at which the action transitioned to a non-pending state. If this value is set, then we are no longer sending temperature commands to the HVAC device.

s, t, r, i, n, or g

Current state of the HVAC action

Sample
{
  "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "targetId": "8d90101b3f2f",
  "targetType": "hvac",
  "targetTemperature": {
    "temperature": 22,
    "deadband": 4
  },
  "target": {
    "holdType": "PERMANENT",
    "mode": "AUTO",
    "heatSetpoint": 19,
    "coolSetpoint": 24
  },
  "createdAt": "2020-04-07T17:04:26Z",
  "updatedAt": "2020-04-07T17:04:26Z",
  "completedAt": "2020-04-07T17:04:26Z",
  "state": "string"
}

Other responses

Response 404

Action not found.

Was this section helpful?

Get HVAC Unit

GET /hvacs/{hvacId}

Request

Path parameters
hvacId string Required

ID of the HVAC

Response

200
Attributes
id string

HVAC device ID

vendor string

HVAC Vendor

One of TADO, MILL, ADAX, ECOBEE, SENSIBO, HONEYWELL, MITSUBISHI, MICROMATIC, or NEST

lastSeen s, t, r, i, n, g, ,, n, u, l, or l<date-time>

The last time the HVAC unit was successfully communicated with

isReachable boolean

Whether live data from the HVAC unit is currently fetchable from Enode's perspective. It can happen that this 'reachability' refers to reading from a cache operated by the vendor's cloud service, if that service has determined that its cache is valid.

chargingLocationId s, t, r, i, n, g, ,, n, u, l, or l

ID of the charging location the HVAC unit is housed at (if any)

isActive boolean

Whether the HVAC unit is actively heating or cooling.

currentTemperature n, u, m, b, e, r, ,, n, u, l, or l

Current air temperature reported by device in degrees Celsius.

object Deprecated

Replaced with coolSetpoint and heatSetpoint. A future release will remove this field. Target temperature for a HVAC device.

consumptionRate n, u, m, b, e, r, ,, n, u, l, or l

The current rate of energy consumption in kW. An inactive HVAC will have a consumption rate of 0. This value is currently experimental and is typically estimated with a large margin of error.

mode s, t, r, i, n, g, ,, n, u, l, or l

The HVAC's mode.

One of HEAT, COOL, AUTO, or OFF

heatSetpoint n, u, m, b, e, r, ,, n, u, l, or l

If mode allows, heat when currentTemperature falls below this point.

coolSetpoint n, u, m, b, e, r, ,, n, u, l, or l

If mode allows, cool when currentTemperature rises above this point.

holdType s, t, r, i, n, g, ,, n, u, l, or l

The duration the setpoints and mode are expected to be held. If SCHEDULED, the device is being controlled by an OEM schedule configured on the device.

One of PERMANENT or SCHEDULED

object

Descriptive information about the HVAC unit

object

An object describing valid states for this HVAC device.

Sample
{
  "id": "8f39fa8d-8f10-4984-a319-741dc23848c0",
  "vendor": "ADAX",
  "lastSeen": "2020-04-07T17:04:26Z",
  "isReachable": true,
  "chargingLocationId": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "isActive": true,
  "currentTemperature": 20.8,
  "targetTemperature": {
    "temperature": 22,
    "deadband": 4
  },
  "consumptionRate": 1.8,
  "mode": "HEAT",
  "heatSetpoint": 22,
  "coolSetpoint": 24,
  "holdType": "PERMANENT",
  "information": {
    "brand": "ADAX",
    "model": "Neo Wi-Fi Skirting",
    "displayName": "Bedroom Panel Heater",
    "groupName": "Bedroom",
    "category": "HEATING"
  },
  "capabilities": {
    "capableModes": [
      "HEAT",
      "COOL",
      "OFF"
    ],
    "capableHoldTypes": [
      "PERMANENT"
    ],
    "coolSetpointRange": {
      "min": 15,
      "max": 25
    },
    "heatSetpointRange": {
      "min": 15,
      "max": 25
    },
    "setpointDifferenceRange": {
      "min": 15,
      "max": 25
    }
  }
}
Was this section helpful?

Set HVAC Location

PUT /hvacs/{hvacId}

Update the chargingLocationId field on an HVAC device.

Request

Path parameters
hvacId string Required

ID of the HVAC

Attributes
chargingLocationId string<uuid> Required
Sample
{
  "chargingLocationId": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe"
}

Response

200
Attributes
id string

HVAC device ID

vendor string

HVAC Vendor

One of TADO, MILL, ADAX, ECOBEE, SENSIBO, HONEYWELL, MITSUBISHI, MICROMATIC, or NEST

lastSeen s, t, r, i, n, g, ,, n, u, l, or l<date-time>

The last time the HVAC unit was successfully communicated with

isReachable boolean

Whether live data from the HVAC unit is currently fetchable from Enode's perspective. It can happen that this 'reachability' refers to reading from a cache operated by the vendor's cloud service, if that service has determined that its cache is valid.

chargingLocationId s, t, r, i, n, g, ,, n, u, l, or l

ID of the charging location the HVAC unit is housed at (if any)

isActive boolean

Whether the HVAC unit is actively heating or cooling.

currentTemperature n, u, m, b, e, r, ,, n, u, l, or l

Current air temperature reported by device in degrees Celsius.

object Deprecated

Replaced with coolSetpoint and heatSetpoint. A future release will remove this field. Target temperature for a HVAC device.

consumptionRate n, u, m, b, e, r, ,, n, u, l, or l

The current rate of energy consumption in kW. An inactive HVAC will have a consumption rate of 0. This value is currently experimental and is typically estimated with a large margin of error.

mode s, t, r, i, n, g, ,, n, u, l, or l

The HVAC's mode.

One of HEAT, COOL, AUTO, or OFF

heatSetpoint n, u, m, b, e, r, ,, n, u, l, or l

If mode allows, heat when currentTemperature falls below this point.

coolSetpoint n, u, m, b, e, r, ,, n, u, l, or l

If mode allows, cool when currentTemperature rises above this point.

holdType s, t, r, i, n, g, ,, n, u, l, or l

The duration the setpoints and mode are expected to be held. If SCHEDULED, the device is being controlled by an OEM schedule configured on the device.

One of PERMANENT or SCHEDULED

object

Descriptive information about the HVAC unit

object

An object describing valid states for this HVAC device.

Sample
{
  "id": "8f39fa8d-8f10-4984-a319-741dc23848c0",
  "vendor": "ADAX",
  "lastSeen": "2020-04-07T17:04:26Z",
  "isReachable": true,
  "chargingLocationId": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "isActive": true,
  "currentTemperature": 20.8,
  "targetTemperature": {
    "temperature": 22,
    "deadband": 4
  },
  "consumptionRate": 1.8,
  "mode": "HEAT",
  "heatSetpoint": 22,
  "coolSetpoint": 24,
  "holdType": "PERMANENT",
  "information": {
    "brand": "ADAX",
    "model": "Neo Wi-Fi Skirting",
    "displayName": "Bedroom Panel Heater",
    "groupName": "Bedroom",
    "category": "HEATING"
  },
  "capabilities": {
    "capableModes": [
      "HEAT",
      "COOL",
      "OFF"
    ],
    "capableHoldTypes": [
      "PERMANENT"
    ],
    "coolSetpointRange": {
      "min": 15,
      "max": 25
    },
    "heatSetpointRange": {
      "min": 15,
      "max": 25
    },
    "setpointDifferenceRange": {
      "min": 15,
      "max": 25
    }
  }
}
Was this section helpful?

Me

The Me endpoint returns metadata about the authenticated User.

Get My User

GET /me

Returns metadata about the authenticated User, including a list of vendors for which the User has provided credentials.

Response

200
Attributes
id string
array of Object
Sample
{
  "id": "123456789-ABc",
  "linkedVendors": [
    {
      "vendor": "TESLA",
      "isValid": true
    }
  ]
}
Was this section helpful?

Disconnect Vendor

DELETE /me/vendors/{vendor}

Disconnect a single Vendor from the User's account.

All stored data about their Vendor account will be deleted, and any vehicles that were provided by that Vendor will disappear from the system.

Request

Path parameters
vendor s, t, r, i, n, or g Required

Vendor to be unlinked

Response

204

No Content

Was this section helpful?

Schedules

A Schedule is a policy that targets a specific chargeable (vehicle or charger) at a specific Charging Location. It describes whether the target should be charging at any given point in time. This value is called shouldCharge.

More information and examples are available in the Using Schedules guide.

List Schedules

GET /schedules

Returns a list of Schedules registered to the User.

Response

200
Attributes
List of object array of Charge Schedule or Temperature Schedule
object object
scheduleType string

One of CHARGE

targetId string

ID of the asset (Vehicle/Charger) to which this schedule applies

targetType string

One of vehicle or charger

chargingLocationId s, t, r, i, n, g, ,, n, u, l, or l<uuid>

ID of the Charging Location to which this schedule applies. The behaviour of a null value differes based on the targetType. For chargers, a null value is essentially ignored and the schedule is applied even if the charger isn't at a charging location. This is designed to prevent schedules from controlling vehicles at public chargers where the user doesn't pay for electricity.

isEnabled boolean

Whether this Schedule should be attempting to control the target's charge state.

defaultShouldCharge boolean

When no rule is active, the default charge state for the target.

array of Charge Schedule

Each rule sets a value for shouldCharge, either true or false. All other properties of the rule are optional filters that limit the times to which this rule applies.

Sample
[
  {
    "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
    "targetId": "8d90101b3f2f",
    "targetType": "vehicle",
    "chargingLocationId": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
    "isEnabled": true,
    "defaultShouldCharge": false,
    "rules": [
      {
        "hourMinute": {
          "from": "22:00",
          "to": "04:00"
        },
        "fromTimestamp": "2020-01-07T16:21:76Z",
        "toTimestamp": "2020-01-07T16:21:76Z",
        "weekdays": [
          0,
          1,
          2,
          3,
          4
        ],
        "shouldCharge": true
      }
    ]
  }
]
Was this section helpful?

Create Schedule

POST /schedules

Request

Attributes
targetId string

ID of the asset (Vehicle/Charger) to which this schedule applies

targetType string

One of vehicle or charger

chargingLocationId s, t, r, i, n, g, ,, n, u, l, or l<uuid>

ID of the Charging Location to which this schedule applies. The behaviour of a null value differes based on the targetType. For chargers, a null value is essentially ignored and the schedule is applied even if the charger isn't at a charging location. This is designed to prevent schedules from controlling vehicles at public chargers where the user doesn't pay for electricity.

isEnabled boolean

Whether this Schedule should be attempting to control the target's charge state.

defaultShouldCharge boolean Required

When no rule is active, the default charge state for the target.

array of Charge Schedule

Each rule sets a value for shouldCharge, either true or false. All other properties of the rule are optional filters that limit the times to which this rule applies.

Sample
{
  "targetId": "8d90101b3f2f",
  "targetType": "vehicle",
  "chargingLocationId": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "isEnabled": true,
  "defaultShouldCharge": false,
  "rules": [
    {
      "hourMinute": {
        "from": "22:00",
        "to": "04:00"
      },
      "fromTimestamp": "2020-01-07T16:21:76Z",
      "toTimestamp": "2020-01-07T16:21:76Z",
      "weekdays": [
        0,
        1,
        2,
        3,
        4
      ],
      "shouldCharge": true
    }
  ]
}

Response

201
Attributes
scheduleType string

One of CHARGE

targetId string

ID of the asset (Vehicle/Charger) to which this schedule applies

targetType string

One of vehicle or charger

chargingLocationId s, t, r, i, n, g, ,, n, u, l, or l<uuid>

ID of the Charging Location to which this schedule applies. The behaviour of a null value differes based on the targetType. For chargers, a null value is essentially ignored and the schedule is applied even if the charger isn't at a charging location. This is designed to prevent schedules from controlling vehicles at public chargers where the user doesn't pay for electricity.

isEnabled boolean

Whether this Schedule should be attempting to control the target's charge state.

defaultShouldCharge boolean

When no rule is active, the default charge state for the target.

array of Charge Schedule

Each rule sets a value for shouldCharge, either true or false. All other properties of the rule are optional filters that limit the times to which this rule applies.

Sample
{
  "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "targetId": "8d90101b3f2f",
  "targetType": "vehicle",
  "chargingLocationId": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "isEnabled": true,
  "defaultShouldCharge": false,
  "rules": [
    {
      "hourMinute": {
        "from": "22:00",
        "to": "04:00"
      },
      "fromTimestamp": "2020-01-07T16:21:76Z",
      "toTimestamp": "2020-01-07T16:21:76Z",
      "weekdays": [
        0,
        1,
        2,
        3,
        4
      ],
      "shouldCharge": true
    }
  ]
}
Was this section helpful?

Get Schedule

GET /schedules/{scheduleId}

Request

Path parameters
scheduleId string Required

ID of the Schedule.

Response

200
Attributes
scheduleType string

One of CHARGE

targetId string

ID of the asset (Vehicle/Charger) to which this schedule applies

targetType string

One of vehicle or charger

chargingLocationId s, t, r, i, n, g, ,, n, u, l, or l<uuid>

ID of the Charging Location to which this schedule applies. The behaviour of a null value differes based on the targetType. For chargers, a null value is essentially ignored and the schedule is applied even if the charger isn't at a charging location. This is designed to prevent schedules from controlling vehicles at public chargers where the user doesn't pay for electricity.

isEnabled boolean

Whether this Schedule should be attempting to control the target's charge state.

defaultShouldCharge boolean

When no rule is active, the default charge state for the target.

array of Charge Schedule

Each rule sets a value for shouldCharge, either true or false. All other properties of the rule are optional filters that limit the times to which this rule applies.

Sample
{
  "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "targetId": "8d90101b3f2f",
  "targetType": "vehicle",
  "chargingLocationId": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "isEnabled": true,
  "defaultShouldCharge": false,
  "rules": [
    {
      "hourMinute": {
        "from": "22:00",
        "to": "04:00"
      },
      "fromTimestamp": "2020-01-07T16:21:76Z",
      "toTimestamp": "2020-01-07T16:21:76Z",
      "weekdays": [
        0,
        1,
        2,
        3,
        4
      ],
      "shouldCharge": true
    }
  ]
}
Was this section helpful?

Delete Schedule

DELETE /schedules/{scheduleId}

Delete a Schedule

Request

Path parameters
scheduleId string Required

ID of the Schedule.

Response

204

No Content

Was this section helpful?

Update Schedule

PUT /schedules/{scheduleId}

Does a partial update of a schedule.

Request

Path parameters
scheduleId string Required

ID of the Schedule.

Attributes
targetId string

ID of the asset (Vehicle/Charger) to which this schedule applies

targetType string

One of vehicle or charger

chargingLocationId s, t, r, i, n, g, ,, n, u, l, or l<uuid>

ID of the Charging Location to which this schedule applies. The behaviour of a null value differes based on the targetType. For chargers, a null value is essentially ignored and the schedule is applied even if the charger isn't at a charging location. This is designed to prevent schedules from controlling vehicles at public chargers where the user doesn't pay for electricity.

isEnabled boolean

Whether this Schedule should be attempting to control the target's charge state.

defaultShouldCharge boolean

When no rule is active, the default charge state for the target.

array of Charge Schedule

Each rule sets a value for shouldCharge, either true or false. All other properties of the rule are optional filters that limit the times to which this rule applies.

Sample
{
  "targetId": "8d90101b3f2f",
  "targetType": "vehicle",
  "chargingLocationId": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "isEnabled": true,
  "defaultShouldCharge": false,
  "rules": [
    {
      "hourMinute": {
        "from": "22:00",
        "to": "04:00"
      },
      "fromTimestamp": "2020-01-07T16:21:76Z",
      "toTimestamp": "2020-01-07T16:21:76Z",
      "weekdays": [
        0,
        1,
        2,
        3,
        4
      ],
      "shouldCharge": true
    }
  ]
}

Response

200
Attributes
scheduleType string

One of CHARGE

targetId string

ID of the asset (Vehicle/Charger) to which this schedule applies

targetType string

One of vehicle or charger

chargingLocationId s, t, r, i, n, g, ,, n, u, l, or l<uuid>

ID of the Charging Location to which this schedule applies. The behaviour of a null value differes based on the targetType. For chargers, a null value is essentially ignored and the schedule is applied even if the charger isn't at a charging location. This is designed to prevent schedules from controlling vehicles at public chargers where the user doesn't pay for electricity.

isEnabled boolean

Whether this Schedule should be attempting to control the target's charge state.

defaultShouldCharge boolean

When no rule is active, the default charge state for the target.

array of Charge Schedule

Each rule sets a value for shouldCharge, either true or false. All other properties of the rule are optional filters that limit the times to which this rule applies.

Sample
{
  "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "targetId": "8d90101b3f2f",
  "targetType": "vehicle",
  "chargingLocationId": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "isEnabled": true,
  "defaultShouldCharge": false,
  "rules": [
    {
      "hourMinute": {
        "from": "22:00",
        "to": "04:00"
      },
      "fromTimestamp": "2020-01-07T16:21:76Z",
      "toTimestamp": "2020-01-07T16:21:76Z",
      "weekdays": [
        0,
        1,
        2,
        3,
        4
      ],
      "shouldCharge": true
    }
  ]
}
Was this section helpful?

Get Schedule Status

GET /schedules/{scheduleId}/status

Request

Path parameters
scheduleId string Required

ID of the Schedule.

Response

200
Attributes
scheduleId string<uuid>
scheduleType string

One of CHARGE

changedAt string<date-time>

Time at which any value of the status last changed

state string

An enum value that describes the current state of the Schedule

One of ALIGNED, MISALIGNED, PENDING, INACTIVE:OVERRIDDEN, INACTIVE:DISABLED, INACTIVE:AWAY, or INACTIVE:INCAPABLE

isCharging boolean

Whether the target is currently actually charging

isChargingExpected boolean

Whether the target is currently expected to be charging

object

Collection of booleans that - when combined via AND operator - forms the isChargingExpected value

array of Object

List of upcoming transitions of the shouldCharge or targetTemperature value. A maximum of 2 items are returned.

o, b, j, e, c, t, ,, n, u, l, or l

This field is only populated after calling the vehicle or charger smart override APIs. While this parameter is populated, the parent charge controller will remain in an overridden state and will not attempt to send actions to the target. The smart override remains in place until the target stops charging for any reason, or until the smart override is ended via the Delete vehicle or charger smart override APIs.

o, b, j, e, c, t, ,, n, u, l, or l Deprecated

Deprecated, replaced by the smartOverride field.

Sample
{
  "scheduleId": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "scheduleType": "CHARGE",
  "changedAt": "2019-08-24T14:15:22Z",
  "state": "ALIGNED",
  "isCharging": false,
  "isChargingExpected": false,
  "isChargingExpectedParts": {
    "needsCharge": true,
    "isPluggedIn": true,
    "shouldCharge": true
  },
  "upcomingTransitions": [
    {
      "at": "2020-04-07T17:04:26Z",
      "shouldCharge": true,
      "targetTemperature": 0
    }
  ],
  "smartOverride": {
    "createdAt": "2020-04-07T17:04:26Z",
    "endedAt": "2020-04-07T17:04:26Z",
    "targetType": "vehicle",
    "targetId": "string",
    "vendorActionId": "string"
  },
  "externalStart": {
    "createdAt": "2020-04-07T17:04:26Z",
    "endedAt": "2020-04-07T17:04:26Z",
    "targetType": "vehicle",
    "targetId": "string",
    "vendorActionId": "string"
  }
}
Was this section helpful?

Service Health

Endpoints that return information about the health of Enode and our integrations.

Check Service Readiness

GET /health/ready

Gets the combined health status of the service and all functionalities and dependencies.

Response

204

All functionalities are operating nominally.

Other responses

Response 503

At least one functionality of the system is not operating nominally.

Was this section helpful?

Check Available Vehicle Vendors

GET /health/vehicles

Lists the available vehicle vendors. If you authenticate with a client or link token, we also include the activated vendors that your client has access to. Learn more about vendors requiring activation.

Response

200
Attributes
List of object array of object
object object
vendor string

Vehicle Vendor

One of AUDI, BMW, HONDA, HYUNDAI, JAGUAR, KIA, MERCEDES, MINI, NISSAN, PEUGEOT, PORSCHE, RENAULT, SEAT, SKODA, TESLA, VOLKSWAGEN, VOLVO, FORD, OPEL, DS, TOYOTA, CITROEN, CUPRA, VAUXHALL, or FIAT

displayName string

A formatted and properly cased vendor brand name, suitable for reading by humans.

portalName string

The name of the first party service or app that the user normally logs into.

status string

Ready-state of the Vendor. Currently always READY.

One of READY, ELEVATED_ERROR_RATE, or OUTAGE

Sample
[
  {
    "vendor": "TESLA",
    "displayName": "Tesla",
    "status": "READY"
  },
  {
    "vendor": "BMW",
    "displayName": "BMW",
    "status": "READY"
  },
  {
    "vendor": "AUDI",
    "displayName": "Audi",
    "status": "READY"
  }
]
Was this section helpful?

Check Available Charger Vendors

GET /health/chargers

Lists the available charger vendors. If you authenticate with a client or link token, we also include the activated vendors that your client has access to. Learn more about vendors requiring activation.

Response

200
Attributes
List of object array of object
object object
vendor string

Charger Vendor

One of ZAPTEC, EASEE, WALLBOX, EO, CHARGEAMPS, or EVBOX

displayName string

A formatted and properly cased vendor brand name, suitable for reading by humans.

portalName string

The name of the first party service or app that the user normally logs into.

status string

Ready-state of the Vendor. Currently always READY.

One of READY, ELEVATED_ERROR_RATE, or OUTAGE

Sample
[
  {
    "vendor": "EASEE",
    "displayName": "Easee",
    "status": "READY"
  },
  {
    "vendor": "WALLBOX",
    "displayName": "Wallbox",
    "status": "READY"
  },
  {
    "vendor": "ZAPTEC",
    "displayName": "Zaptec",
    "status": "READY"
  },
  {
    "vendor": "EO",
    "displayName": "EO",
    "status": "READY"
  }
]
Was this section helpful?

Check Available Hvac Vendors

GET /health/hvacs

Lists the available HVAC vendors. If you authenticate with a client or link token, we also include the activated vendors that your client has access to. Learn more about vendors requiring activation.

Response

200
Attributes
List of object array of object
object object
vendor string

HVAC Vendor

One of TADO, MILL, ADAX, ECOBEE, SENSIBO, HONEYWELL, MITSUBISHI, MICROMATIC, or NEST

displayName string

A formatted and properly cased vendor brand name, suitable for reading by humans.

portalName string

The name of the first party service or app that the user normally logs into.

status string

Ready-state of the Vendor. Currently always READY.

One of READY, ELEVATED_ERROR_RATE, or OUTAGE

Sample
[
  {
    "vendor": "MILL",
    "displayName": "Mill",
    "portalName": "Mill",
    "status": "READY"
  }
]
Was this section helpful?

Check Available Inverter Vendors

GET /health/inverters

Lists the available inverter vendors. If you authenticate with a client or link token, we also include the activated vendors that your client has access to. Learn more about vendors requiring activation.

Response

200
Attributes
List of object array of object
object object
vendor string

Inverter Vendor

One of FRONIUS, GROWATT, SOLAREDGE, SOLIS, ENPHASE, GOODWE, SMA, EMA, or HUAWEI

displayName string

A formatted and properly cased vendor brand name, suitable for reading by humans.

portalName string

The name of the first party service or app that the user normally logs into.

status string

Ready-state of the Vendor. Currently always READY.

One of READY, ELEVATED_ERROR_RATE, or OUTAGE

Sample
[
  {
    "vendor": "SOLAREDGE",
    "displayName": "Solar Edge",
    "status": "READY"
  },
  {
    "vendor": "SMA",
    "displayName": "SMA",
    "status": "READY"
  },
  {
    "vendor": "SOLIS",
    "displayName": "Solis",
    "status": "READY"
  },
  {
    "vendor": "FRONIUS",
    "displayName": "Fronius",
    "status": "READY"
  }
]
Was this section helpful?

Solar inverters

Solar inverters can be queried for current production state

List Solar inverter

GET /inverters

Response

200
Attributes
List of string array of string

Solar inverter IDs

Sample
[
  "string"
]
Was this section helpful?

Get Solar inverter

GET /inverters/{inverterId}

Request

Path parameters
inverterId string Required

ID of the solar inverter

Query parameters
a, r, r, a, y, ,, s, t, r, i, n, or g

If you specify any fields here, we make a request to the Solar inverter's OEM APIs and return the updated data.

This will slow down your integration. In cases of vendor downtime requests with fields may take up to a minute to complete, while requests without fields will always be fast. Enode polls all devices connected to our platform, so any cached data returned will not be older than 10 minutes (unless the vendor APIs are unavailable, in which case you can consult the lastSeen & isReachable fields on the solar inverter).

By default, no fields are included, and the latest cached full solar inverter object will be returned.

Response

200
Attributes
id string

Solar inverter ID

vendor string

Inverter Vendor

One of FRONIUS, GROWATT, SOLAREDGE, SOLIS, ENPHASE, GOODWE, SMA, EMA, or HUAWEI

chargingLocationId s, t, r, i, n, g, ,, n, u, l, or l

ID of the charging location the solar inverter is currently positioned at (if any).

lastSeen string<date-time>

The last time the solar inverter was successfully communicated with

isReachable boolean

Whether live data from the solar inverter is currently fetchable from Enode's perspective. This 'reachability' may refer to reading from a cache operated by the solar inverter's cloud service if that service has determined that its cache is valid.

object
object

Descriptive information about the solar inverter

object

Solar inverter's GPS coordinates with timestamp

Sample
{
  "id": "string",
  "vendor": "string",
  "chargingLocationId": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "lastSeen": "2022-04-07T17:04:26Z",
  "isReachable": true,
  "productionState": {
    "productionRate": 1.8,
    "isProducing": true,
    "lastUpdated": "2022-04-07T16:21:76Z"
  },
  "information": {
    "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
    "brand": "SMA",
    "model": "Sunny Boy",
    "siteName": "Sunny plant",
    "installationDate": "2020-04-05"
  },
  "location": {
    "longitude": 10.757933,
    "latitude": 59.911491
  }
}
Was this section helpful?

Statistics

Endpoints returning timeseries data collected from any linked devices.

Get User Charging Statistics

GET /statistics/charging

Returns a normalized time series of statistics about power consumption and price for the User.

If Smart Charging has shifted the consumption, the 'non-smart' price fields will show what the consumption would have cost if it had happened at the default time. The difference between the two is provided by the estimatedSavings field for convenience. <CURRENCY> is an ISO4217 Alpha-3 currency code that is determined by client-wide configuration or the currency code provided during price data ingestion (such as Tariffs).

Request

Query parameters
resolution string

The unit of time the data will be cut into before aggregate statistics are applied. Each entry in the response array corresponds to aggregated data of the time range specified.

One of QUARTER_HOUR, HALF_HOUR, HOUR, DAY, WEEK, MONTH, or YEAR

startDate string Required

Earliest date to include in the response in ISO format. Cannot be greater than endDate. Example: 2021-03-21T00:25:43.511Z

endDate string

Latest date to include in the response (defaults to current date/time) in ISO format. Example: 2021-03-21T00:25:43.511Z

type string

Get statistics for this hardware type.

One of vehicle, charger, or hvac

id string

Filter statistics to only include a specific entity. Hardware category of the entity must match the type parameter.

utcOffset number

Offset (in hours) from UTC of the timezone from which the statistics should be viewed. By default, all returned timestamps are in UTC, and period boundaries (day, week, month, year) used in the aggregation are calculated in UTC. Providing utcOffset instead aligns these to the viewer's timezone so that the timestamps and period boundaries fall where the viewer expects them to. Positive, negative, and fractional values are valid.

chargingLocationId string

Filter statistics to only include this charging location.

vehicleId string Deprecated

Response

200
Attributes
List of object array of object
object object
object

Aggregate statistics for charge rate in kW

kwhSum number

Total power consumption in kWh

object

Aggregate statistics for power price (<CURRENCY> per kWh)

object

Aggregate statistics for power price (<CURRENCY> per kWh), calculated as if the charging had ocurred uninterrupted without being delayed by Smart Charging

costSum number

Total cost in <CURRENCY>

nonSmartCostSum number

Total cost for this consumption in <CURRENCY>, if it had not been shifted by Smart Charging

estimatedSavings number

Total estimated savings in <CURRENCY>, achieved by Smart Charging

date string<date-time>

The start date of this sample within the timeseries

Sample
[
  {
    "kw": {
      "min": 0,
      "max": 78,
      "mean": 61
    },
    "kwhSum": 120,
    "price": {
      "min": 13.8,
      "max": 14.4,
      "mean": 14.1
    },
    "nonSmartPrice": {
      "min": 12.9,
      "max": 16.7,
      "mean": 14.8
    },
    "costSum": 3.14,
    "nonSmartCostSum": 4.21,
    "estimatedSavings": 1.07,
    "date": "2021-01-19T09:37:36.845Z"
  }
]
Was this section helpful?

Get User Sessions Charging Statistics

GET /statistics/charging/sessions

Returns a list of statistics about power consumption and price for the User binned by sessions.

Request

Query parameters
targetType string

Get statistics for this hardware type.

One of vehicle, charger, or hvac

startDate string Required

Earliest date to include in the response in ISO format. Example: 2021-03-21T00:25:43.511Z

endDate string

Latest date to include in the response (defaults to current date/time) in ISO format. Example: 2021-03-21T00:25:43.511Z

targetId string

Filter statistics to only include a specific entity.

chargingLocationId string

Filter statistics to only include this charging location

Response

200
Attributes
List of object array of object
object object
id string

ID for this session.

targetId string

ID of the hardware type for this session.

chargingLocationId s, t, r, i, n, g, ,, n, u, l, or l

Charging Location ID for this session.

from string<date-time>

Start time.

to string<date-time>

End time.

object

Aggregate statistics for charge rate in kW

kwhSum number

Total power consumption in kWh

object

Aggregate statistics for power price (<CURRENCY> per kWh)

costSum number

Total cost in <CURRENCY>

smartSession boolean

The values in smartStats will all be null if smartSession is false

object
Sample
[
  {
    "id": "string",
    "targetId": "string",
    "chargingLocationId": "string",
    "from": "2019-08-24T14:15:22Z",
    "to": "2019-08-24T14:15:22Z",
    "kw": {
      "min": 0,
      "max": 78,
      "mean": 61
    },
    "kwhSum": 120,
    "price": {
      "min": 0,
      "max": 78,
      "mean": 61
    },
    "costSum": 3.14,
    "smartSession": true,
    "smartStats": {
      "nonSmartPrice": {
        "min": 0,
        "max": 82,
        "mean": 65
      },
      "nonSmartCostSum": 4.21,
      "estimatedSavings": 1.07
    }
  }
]
Was this section helpful?

Get User Production Statistics

GET /statistics/production

Returns a normalized time series of statistics about power production and price for the User.

Request

Query parameters
resolution string

The unit of time the data will be cut into before aggregate statistics are applied. Each entry in the response array corresponds to aggregated data of the time range specified.

One of QUARTER_HOUR, HALF_HOUR, HOUR, DAY, WEEK, MONTH, or YEAR

startDate string Required

Earliest date to include in the response in ISO format. Cannot be greater than endDate. Example: 2021-03-21T00:25:43.511Z

endDate string

Latest date to include in the response (defaults to current date/time) in ISO format. Example: 2021-03-21T00:25:43.511Z

type string

Get statistics for this hardware type.

One of inverter

id string

Filter statistics to only include a specific entity. Hardware category of the entity must match the type parameter.

utcOffset number

Offset (in hours) from UTC of the timezone from which the statistics should be viewed. By default, all returned timestamps are in UTC, and period boundaries (day, week, month, year) used in the aggregation are calculated in UTC. Providing utcOffset instead aligns these to the viewer's timezone so that the timestamps and period boundaries fall where the viewer expects them to. Positive, negative, and fractional values are valid.

chargingLocationId string

Filter statistics to only include this charging location.

Response

200
Attributes
List of object array of object
object object
object

Aggregate statistics for charge rate in kW

kwhSum number

Total power consumption in kWh

object

Aggregate statistics for power price (<CURRENCY> per kWh)

earningsSum number

Total earnings in <CURRENCY>

date string<date-time>

The start date of this sample within the timeseries

Sample
[
  {
    "kw": {
      "min": 0,
      "max": 78,
      "mean": 61
    },
    "kwhSum": 120,
    "price": {
      "min": 13.8,
      "max": 14.4,
      "mean": 14.1
    },
    "earningsSum": 3.14,
    "date": "2021-01-19T09:37:36.845Z"
  }
]
Was this section helpful?

Tariffs

Endpoints used to submit pricing information to Enode.

Send Tariff information

PUT /tariffs/{tariffId}

Set a list of rates for a given tariffId. If previous data exists for a given tariffId, it will be overwritten. These tariffs are used in our Statistics and Smart Charging features.

Request

Path parameters
tariffId string Required

ID of the Tariff

Attributes
List of object array of object

A list of rates with unique name and price.

object object
name string

Per-tariff unique interval name

cost string

Rate cost (decimal string)

Sample
[
  {
    "name": "PEAK",
    "cost": "13.37"
  },
  {
    "name": "OFF-PEAK",
    "cost": "12.34"
  }
]

Response

204

Successfully updated.

Was this section helpful?

User Management

Endpoints used to link and unlink users or vendors.

POST /users/{userId}/link

Creates an Enode Link session attached to the provided User ID. If this User does not exist, it will be created. The returned linkState gives the User short-lived (24hs) access to Enode Link. A URL for Enode Link for the user to initiate asset linking is also returned.

Request

Path parameters
userId string Required

ID of the User

Attributes
s, t, r, i, n, or g

Skip the vendor selection screen and present the credential input for a specific vendor immediately.

vendorType string

Sets the type of vendors available for connection in a Link UI session. If absent, this defaults to vehicle.

One of vehicle, charger, hvac, or inverter

s, t, r, i, n, or g
scopes array of string

The scope(s) you wish to request access to when linking an asset.

One of offline_access, all, vehicle:smart_charging_policy, vehicle:charge_state, vehicle:location, vehicle:odometer, vehicle:information, control:vehicle:charging, charger:charge_state, charger:information, control:charger:charging, charging_location, schedule, hvac:information, control:hvac:temperature, or hvac:temperature_state

redirectUri string

A URI to redirect the user to after successfully linking an asset.

Sample
{
  "vendor": "string",
  "vendorType": "string",
  "forceLanguage": "nb",
  "scopes": [
    "offline_access",
    "all"
  ],
  "redirectUri": "myapp://integrations/enode"
}

Response

200
Attributes
linkState string
linkUrl string
Sample
{
  "linkState": "ZjE2MzMxMGFiYmU4MzcxOTU1ZmRjMTU5NGU2ZmE4YTU3NjViMzIwY2YzNG",
  "linkUrl": "https://link.production.enode.io?link_state=YzIwZThhYjYtMjMzMi00ZTAyLTg0OTYtYzdjOTlhZTY3Zjc3QDI2YzI1MDExLTdhYTctNGE2NS1iNjBmLTZmMzc5NmRhODUyMDowNDViYjFiYmE0M2Y5NDU5YTc5OTgxZmEyYTg1NmI4YzhkOGU4YjgyNmNmMzQzZmFmMGNhZTlmNDBjMmZmOTgy&requested_scope=vehicle%3Alocation%20vehicle%3Aodometer&redirect_uri=myapp%3A%2F%2Fintegrations%2Fenode"
}

Other responses

Response 403

Connections limit reached for this clients

Attributes
type string
title string
detail string
Sample
{
  "type": "string",
  "title": "string",
  "detail": "string"
}
Was this section helpful?

Unlink User

DELETE /users/{userId}

Deletes a User and all of their data permanently and invalidates any associated sessions, authorization codes, and access/refresh tokens.

Request

Path parameters
userId string Required

ID of the User

Response

204

No Content

Was this section helpful?

Deauthorize User

DELETE /users/{userId}/authorization

Deletes the User's stored vendor authorizations and credentials, invalidates any associated sessions, authorization codes, and access/refresh tokens.

All other User data is retained, and if the User is sent through the Link User flow in the future, their account will be just as they left it.

No webhook events will be generated for a deauthorized user.

Request

Path parameters
userId string Required

ID of the User

Response

204

No Content

Was this section helpful?

Vehicles

EVs provide charge, location, and odometer data. Vehicles can be controlled either directly using the Control Charging endpoint, or through Smart Charging and Schedules.

List Vehicles

GET /vehicles

List all available Vehicles for the User.

If you already know the ID of a vehicle you want to fetch, it is recommended to fetch it using the more performant Get Vehicle method.

Request

Query parameters
a, r, r, a, y, ,, s, t, r, i, n, or g

If you specify any fields here, we make a request to the Vehicle's OEM APIs and return the updated data.

This will slow down your integration. In cases of vendor downtime requests with fields may take up to a minute to complete, while requests without fields will always be fast. Enode polls all devices connected to our platform, so any cached data returned will not be older than 10 minutes (unless the vendor APIs are unavailable, in which case you can consult the lastSeen & isReachable fields on the vehicle).

Note that the field values capabilities & smartChargingPolicy are deprecated and will always be returned.

If no fields are included, and the latest cached full Vehicle object will be returned.

Response

200
Attributes
List of object array of object
object object
id string

Vehicle ID

vendor string

Vehicle Vendor

One of AUDI, BMW, HONDA, HYUNDAI, JAGUAR, KIA, MERCEDES, MINI, NISSAN, PEUGEOT, PORSCHE, RENAULT, SEAT, SKODA, TESLA, VOLKSWAGEN, VOLVO, FORD, OPEL, DS, TOYOTA, CITROEN, CUPRA, VAUXHALL, or FIAT

lastSeen s, t, r, i, n, g, ,, n, u, l, or l<date-time>

ISO8601 UTC timestamp at which live data was last available from Enode's perspective.

isReachable b, o, o, l, e, a, n, ,, n, u, l, or l

Whether live data from the vehicle is currently available from Enode's perspective. This 'reachability' may refer to reading from a cache operated by the vehicle's cloud service if that service has determined that its cache is valid.

chargingLocationId s, t, r, i, n, g, ,, n, u, l, or l

ID of the charging location the vehicle is currently positioned at (if any).

object

Descriptive information about the Vehicle.

object

Information about the electric or hybrid battery.

object

Smart Charging configuration properties. Configured via the Update Smart Charging Policy endpoint.

object

Vehicle's GPS coordinates with timestamp

object

Vehicle's odometer with timestamp

object

A collection of descriptors that describe the capabilities of this specific vehicle

Sample
[
  {
    "id": "string",
    "vendor": "TESLA",
    "lastSeen": "2019-08-24T14:15:22Z",
    "isReachable": true,
    "chargingLocationId": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
    "information": {
      "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
      "vin": "5YJYGDEF2LFR00942",
      "brand": "Tesla",
      "model": "Model S P85",
      "year": 2020
    },
    "chargeState": {
      "batteryLevel": 38,
      "range": 127.5,
      "isPluggedIn": true,
      "isCharging": false,
      "isFullyCharged": false,
      "batteryCapacity": 73.21,
      "chargeLimit": 80,
      "chargeRate": 40.1,
      "chargeTimeRemaining": 319,
      "lastUpdated": "2020-01-07T16:21:76Z",
      "isChargingReasons": [
        "DEFAULT"
      ]
    },
    "smartChargingPolicy": {
      "isEnabled": true,
      "deadline": "08:00",
      "minimumChargeLimit": 0
    },
    "location": {
      "longitude": 10.757933,
      "latitude": 59.911491,
      "lastUpdated": "2020-04-07T17:04:26Z"
    },
    "odometer": {
      "distance": 24650,
      "lastUpdated": "2020-01-07T16:21:76Z"
    },
    "capabilities": {
      "chargeState": {
        "isCapable": true,
        "interventionIds": [
          "0defa374-8a1a-4eb1-a85f-b7cb09501097"
        ]
      },
      "location": {
        "isCapable": true,
        "interventionIds": [
          "0defa374-8a1a-4eb1-a85f-b7cb09501097"
        ]
      },
      "information": {
        "isCapable": true,
        "interventionIds": [
          "0defa374-8a1a-4eb1-a85f-b7cb09501097"
        ]
      },
      "odometer": {
        "isCapable": true,
        "interventionIds": [
          "0defa374-8a1a-4eb1-a85f-b7cb09501097"
        ]
      },
      "startCharging": {
        "isCapable": true,
        "interventionIds": [
          "0defa374-8a1a-4eb1-a85f-b7cb09501097"
        ]
      },
      "stopCharging": {
        "isCapable": true,
        "interventionIds": [
          "0defa374-8a1a-4eb1-a85f-b7cb09501097"
        ]
      },
      "smartCharging": {
        "isCapable": true,
        "interventionIds": [
          "0defa374-8a1a-4eb1-a85f-b7cb09501097"
        ]
      }
    }
  }
]
Was this section helpful?

Get Vehicle

GET /vehicles/{vehicleId}

Request

Path parameters
vehicleId string Required

ID of the Vehicle.

Query parameters
a, r, r, a, y, ,, s, t, r, i, n, or g

If you specify any fields here, we make a request to the Vehicle's OEM APIs and return the updated data.

This will slow down your integration. In cases of vendor downtime requests with fields may take up to a minute to complete, while requests without fields will always be fast. Enode polls all devices connected to our platform, so any cached data returned will not be older than 10 minutes (unless the vendor APIs are unavailable, in which case you can consult the lastSeen & isReachable fields on the vehicle).

Note that the field values capabilities & smartChargingPolicy are deprecated and will always be returned.

If no fields are included, and the latest cached full Vehicle object will be returned.

Response

200
Attributes
id string

Vehicle ID

vendor string

Vehicle Vendor

One of AUDI, BMW, HONDA, HYUNDAI, JAGUAR, KIA, MERCEDES, MINI, NISSAN, PEUGEOT, PORSCHE, RENAULT, SEAT, SKODA, TESLA, VOLKSWAGEN, VOLVO, FORD, OPEL, DS, TOYOTA, CITROEN, CUPRA, VAUXHALL, or FIAT

lastSeen s, t, r, i, n, g, ,, n, u, l, or l<date-time>

ISO8601 UTC timestamp at which live data was last available from Enode's perspective.

isReachable b, o, o, l, e, a, n, ,, n, u, l, or l

Whether live data from the vehicle is currently available from Enode's perspective. This 'reachability' may refer to reading from a cache operated by the vehicle's cloud service if that service has determined that its cache is valid.

chargingLocationId s, t, r, i, n, g, ,, n, u, l, or l

ID of the charging location the vehicle is currently positioned at (if any).

object

Descriptive information about the Vehicle.

object

Information about the electric or hybrid battery.

object

Smart Charging configuration properties. Configured via the Update Smart Charging Policy endpoint.

object

Vehicle's GPS coordinates with timestamp

object

Vehicle's odometer with timestamp

object

A collection of descriptors that describe the capabilities of this specific vehicle

Sample
{
  "id": "string",
  "vendor": "TESLA",
  "lastSeen": "2019-08-24T14:15:22Z",
  "isReachable": true,
  "chargingLocationId": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "information": {
    "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
    "vin": "5YJYGDEF2LFR00942",
    "brand": "Tesla",
    "model": "Model S P85",
    "year": 2020
  },
  "chargeState": {
    "batteryLevel": 38,
    "range": 127.5,
    "isPluggedIn": true,
    "isCharging": false,
    "isFullyCharged": false,
    "batteryCapacity": 73.21,
    "chargeLimit": 80,
    "chargeRate": 40.1,
    "chargeTimeRemaining": 319,
    "lastUpdated": "2020-01-07T16:21:76Z",
    "isChargingReasons": [
      "DEFAULT"
    ]
  },
  "smartChargingPolicy": {
    "isEnabled": true,
    "deadline": "08:00",
    "minimumChargeLimit": 0
  },
  "location": {
    "longitude": 10.757933,
    "latitude": 59.911491,
    "lastUpdated": "2020-04-07T17:04:26Z"
  },
  "odometer": {
    "distance": 24650,
    "lastUpdated": "2020-01-07T16:21:76Z"
  },
  "capabilities": {
    "chargeState": {
      "isCapable": true,
      "interventionIds": [
        "0defa374-8a1a-4eb1-a85f-b7cb09501097"
      ]
    },
    "location": {
      "isCapable": true,
      "interventionIds": [
        "0defa374-8a1a-4eb1-a85f-b7cb09501097"
      ]
    },
    "information": {
      "isCapable": true,
      "interventionIds": [
        "0defa374-8a1a-4eb1-a85f-b7cb09501097"
      ]
    },
    "odometer": {
      "isCapable": true,
      "interventionIds": [
        "0defa374-8a1a-4eb1-a85f-b7cb09501097"
      ]
    },
    "startCharging": {
      "isCapable": true,
      "interventionIds": [
        "0defa374-8a1a-4eb1-a85f-b7cb09501097"
      ]
    },
    "stopCharging": {
      "isCapable": true,
      "interventionIds": [
        "0defa374-8a1a-4eb1-a85f-b7cb09501097"
      ]
    },
    "smartCharging": {
      "isCapable": true,
      "interventionIds": [
        "0defa374-8a1a-4eb1-a85f-b7cb09501097"
      ]
    }
  }
}
Was this section helpful?

Control Charging

POST /vehicles/{vehicleId}/charging

Register a request for a vehicle to start or stop charging. We retry sending the command until the vehicle's chargeStateIsCharging field transitions to the expected state. Note that this API request will complete before any commands are sent to the vehicle. There can only be one vendor action active for any one target id at a time. If a new action is created, the old action transitions to the CANCELLED state. You may react to transitions by listening for the user:vendor-action:updated webhook event or polling the vehicle action endpoint.

This endpoint returns an error with status code 422 if the vehicle is controlled by a schedule or has an active smart charging plan. To restore user control, either disable the schedule, disable smart charging, or use our Smart Override API to temporarily enable charging.

Request

Path parameters
vehicleId string Required

ID of the Vehicle.

Attributes
action string

Kind of action

One of START or STOP

Sample
{
  "action": "START"
}

Response

200
Attributes
id string<uuid>

The ID of the action.

targetId string

ID of the chargeable entity asset (Vehicle or Charger) which this action is controlling.

targetType string

One of vehicle or charger

kind string

Kind of action

One of START or STOP

createdAt string<date-time>

ISO8601 UTC timestamp

updatedAt string<date-time>

ISO8601 UTC timestamp

completedAt string<date-time>

ISO8601 UTC timestamp at which the action transitioned to a non-pending state. If this value is set, then we are no longer sending commands to the chargeable.

s, t, r, i, n, or g

Current state of the charge action.

entityId string Deprecated
entityType string Deprecated
chargeableId string Deprecated
chargeableType string Deprecated
Sample
{
  "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "targetId": "8d90101b3f2f",
  "targetType": "vehicle",
  "kind": "START",
  "createdAt": "2020-04-07T17:04:26Z",
  "updatedAt": "2020-04-07T17:04:26Z",
  "completedAt": "2020-04-07T17:04:26Z",
  "state": "string",
  "entityId": "string",
  "entityType": "string",
  "chargeableId": "string",
  "chargeableType": "string"
}

Other responses

Response 422

Vehicle controlled by a Schedule or has active Smart Charging Plan

Attributes
type string
title string
detail string
Sample
{
  "type": "string",
  "title": "string",
  "detail": "string"
}
Was this section helpful?

Get Charge Action

GET /vehicles/actions/{vendorActionId}

Returns the current state of the requested action.

Request

Path parameters
vendorActionId string Required

ID of the Action

Response

200
Attributes
id string<uuid>

The ID of the action.

targetId string

ID of the chargeable entity asset (Vehicle or Charger) which this action is controlling.

targetType string

One of vehicle or charger

kind string

Kind of action

One of START or STOP

createdAt string<date-time>

ISO8601 UTC timestamp

updatedAt string<date-time>

ISO8601 UTC timestamp

completedAt string<date-time>

ISO8601 UTC timestamp at which the action transitioned to a non-pending state. If this value is set, then we are no longer sending commands to the chargeable.

s, t, r, i, n, or g

Current state of the charge action.

entityId string Deprecated
entityType string Deprecated
chargeableId string Deprecated
chargeableType string Deprecated
Sample
{
  "id": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "targetId": "8d90101b3f2f",
  "targetType": "vehicle",
  "kind": "START",
  "createdAt": "2020-04-07T17:04:26Z",
  "updatedAt": "2020-04-07T17:04:26Z",
  "completedAt": "2020-04-07T17:04:26Z",
  "state": "string",
  "entityId": "string",
  "entityType": "string",
  "chargeableId": "string",
  "chargeableType": "string"
}

Other responses

Response 404

Action not found.

Was this section helpful?

Get Vehicle Smart Charging Policy

GET /vehicles/{vehicleId}/smart-charging-policy

Get a vehicle's Smart Charging policy

Request

Path parameters
vehicleId string Required

ID of the Vehicle.

Response

200
Attributes
isEnabled b, o, o, l, e, a, n, ,, n, u, l, or l

When enabled, this vehicle's charging status may be controlled by Smart Charging

deadline s, t, r, i, n, g, ,, n, u, l, or l

The hour-minute deadline for fully charging the vehicle. Smart charging does not work without setting a deadline. If a timezone is set on the charging location at which the smart charging ocurrs, the deadline is interpreted in that timezone, otherwise UTC is used.

minimumChargeLimit number

Immediately charge without regard for energy prices until the vehicle reaches this minimum limit. The hasChargeAboveThreshold Smart Charge consideration uses this value. Defaults to zero.

Sample
{
  "isEnabled": true,
  "deadline": "08:00",
  "minimumChargeLimit": 0
}
Was this section helpful?

Update Vehicle Smart Charging Policy

PUT /vehicles/{vehicleId}/smart-charging-policy

Updates the Smart Charging policy for a vehicle

Request

Path parameters
vehicleId string Required

ID of the Vehicle.

Attributes
isEnabled b, o, o, l, e, a, n, ,, n, u, l, or l

When enabled, this vehicle's charging status may be controlled by Smart Charging

deadline s, t, r, i, n, g, ,, n, u, l, or l

The hour-minute deadline for fully charging the vehicle. Smart charging does not work without setting a deadline. If a timezone is set on the charging location at which the smart charging ocurrs, the deadline is interpreted in that timezone, otherwise UTC is used.

minimumChargeLimit number

Immediately charge without regard for energy prices until the vehicle reaches this minimum limit. The hasChargeAboveThreshold Smart Charge consideration uses this value. Defaults to zero.

Sample
{
  "isEnabled": true,
  "deadline": "08:00",
  "minimumChargeLimit": 0
}

Response

200
Attributes
isEnabled b, o, o, l, e, a, n, ,, n, u, l, or l

When enabled, this vehicle's charging status may be controlled by Smart Charging

deadline s, t, r, i, n, g, ,, n, u, l, or l

The hour-minute deadline for fully charging the vehicle. Smart charging does not work without setting a deadline. If a timezone is set on the charging location at which the smart charging ocurrs, the deadline is interpreted in that timezone, otherwise UTC is used.

minimumChargeLimit number

Immediately charge without regard for energy prices until the vehicle reaches this minimum limit. The hasChargeAboveThreshold Smart Charge consideration uses this value. Defaults to zero.

Sample
{
  "isEnabled": true,
  "deadline": "08:00",
  "minimumChargeLimit": 0
}
Was this section helpful?

Get Vehicle Smart Charging Status

GET /vehicles/{vehicleId}/smart-charging-status

Every vehicle in Enode has a SmartChargingStatus object that describes the vehicle in terms of smart charging.

Request

Path parameters
vehicleId string Required

ID of the Vehicle.

Response

200
Attributes
updatedAt string<date-time>

Time at which the SmartChargingStatus object was recalculated, whether or not any values actually changed

vehicleId string

Vehicle ID

userId string

User ID

vendor string

Vendor of the Vehicle

state string

An enum value that describes the current SmartCharging state of the vehicle. Every vehicle is in exactly one state, at all times

One of DISABLED, CONSIDERING, UNKNOWN, PLAN:EXECUTING:STOPPING, PLAN:EXECUTING:STOP_FAILED, PLAN:EXECUTING:STOPPED, PLAN:EXECUTING:STOPPED:AWAITING_PRICES, PLAN:EXECUTING:STARTING, PLAN:EXECUTING:START_FAILED, PLAN:EXECUTING:STARTED, PLAN:EXECUTING:CHARGE_INTERRUPTED, PLAN:EXECUTING:OVERRIDDEN, PLAN:ENDED:FINISHED, PLAN:ENDED:UNPLUGGED, PLAN:ENDED:FAILED, PLAN:ENDED:DISABLED, or PLAN:ENDED:DEADLINE_CHANGED

stateChangedAt string<date-time>

Time at which the the 'state' property transitioned to its current value

o, b, j, e, c, t, ,, n, u, l, or l
o, b, j, e, c, t, ,, n, u, l, or l

null by default, but during all of the PLAN:* states, the value is populated with a description of the active plan

o, b, j, e, c, t, ,, n, u, l, or l

This field is only populated after calling the vehicle or charger smart override APIs. While this parameter is populated, the parent charge controller will remain in an overridden state and will not attempt to send actions to the target. The smart override remains in place until the target stops charging for any reason, or until the smart override is ended via the Delete vehicle or charger smart override APIs.

Sample
{
  "updatedAt": "2019-08-24T14:15:22Z",
  "vehicleId": "string",
  "userId": "string",
  "vendor": "string",
  "state": "DISABLED",
  "stateChangedAt": "2019-08-24T14:15:22Z",
  "consideration": {
    "isSmartChargeCapable": true,
    "isPluggedIn": true,
    "isCharging": true,
    "recentlyAtChargingLocation": true,
    "hasTimeEstimate": true,
    "needsSignificantCharge": true,
    "hasChargeAboveThreshold": true,
    "singleUser": true,
    "wontStopExistingChargingSession": true,
    "likelyToGenerateSavings": true
  },
  "plan": {
    "id": "string",
    "chargingLocationId": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
    "vehicleId": "string",
    "userId": "string",
    "vendor": "string",
    "currency": "NOK",
    "nonSmartCost": 0,
    "smartCost": 0,
    "stopAt": "2019-08-24T14:15:22Z",
    "startAt": "2019-08-24T14:15:22Z",
    "estimatedFinishAt": "2019-08-24T14:15:22Z",
    "stopConfirmedAt": "2019-08-24T14:15:22Z",
    "startConfirmedAt": "2019-08-24T14:15:22Z",
    "endedAt": "2019-08-24T14:15:22Z",
    "finalState": "PLAN:ENDED:FINISHED",
    "failureCondition": "STOP_FAILED",
    "externalStart": {
      "createdAt": "2020-04-07T17:04:26Z",
      "endedAt": "2020-04-07T17:04:26Z",
      "targetType": "vehicle",
      "targetId": "8d90101b3f2f",
      "vendorActionId": "string"
    }
  },
  "smartOverride": {
    "createdAt": "2020-04-07T17:04:26Z",
    "endedAt": "2020-04-07T17:04:26Z",
    "targetType": "vehicle",
    "targetId": "string",
    "vendorActionId": "string"
  }
}
Was this section helpful?

Get Smart Charging Plan

GET /vehicles/{vehicleId}/smart-charging-plans/{smartChargingPlanId}

Check status of current or historical Smart Charging Plan for a Vehicle. Returns a Smart Charging Plan for this vehicle.

To fetch the most recently created plan, call the endpoint with smartChargingPlanId set to latest.

Request

Path parameters
vehicleId string Required

ID of the Vehicle.

smartChargingPlanId string Required

ID of the Smart Charging Plan

Response

200
Attributes
id string

ID of the Plan

chargingLocationId s, t, r, i, n, g, ,, n, u, l, or l

ID of the charging location at which the plan is being executed. Null for plans started before March 2022.

vehicleId string

ID of the Vehicle to which the Plan belongs

userId string

ID of the User to which the Plan belongs

vendor string

Vendor of the Vehicle to which the Plan belongs

currency string

Currency in which monetary amounts are denominated (ISO 4217 3-character Alpha code)

nonSmartCost number

Estimated cost of default charging behavior

smartCost n, u, m, b, e, r, ,, n, u, l, or l

Estimated cost achieved by this Smart Charge plan

stopAt string<date-time>

Time at which the vehicle will stop charging

startAt s, t, r, i, n, g, ,, n, u, l, or l<date-time>

Time at which the vehicle will start charging

estimatedFinishAt string<date-time>

Time at which charging is estimated to be complete

stopConfirmedAt s, t, r, i, n, g, ,, n, u, l, or l<date-time>

Time at which the vehicle's charging was confirmed as stopped.

startConfirmedAt s, t, r, i, n, g, ,, n, u, l, or l<date-time>

Time at which the vehicle's charging was confirmed as started.

endedAt s, t, r, i, n, g, ,, n, u, l, or l<date-time>

The actual time at which the plan ended

finalState s, t, r, i, n, g, ,, n, u, l, or l

The final state of the plan when it ended

One of PLAN:ENDED:FINISHED, PLAN:ENDED:UNPLUGGED, PLAN:ENDED:FAILED, PLAN:ENDED:DISABLED, or PLAN:ENDED:DEADLINE_CHANGED

failureCondition s, t, r, i, n, g, ,, n, u, l, or l

If the finalState was PLAN:ENDED:FAILED, failureCondition is populated with the condition in which the plan failed.

One of STOP_FAILED, START_FAILED, FINISHED_LATE, or UNKNOWN

o, b, j, e, c, t, ,, n, u, l, or l Deprecated

Deprecated, replaced by the smartOverride field.

Sample
{
  "id": "string",
  "chargingLocationId": "8d90101b-3f2f-462a-bbb4-1ed320d33bbe",
  "vehicleId": "string",
  "userId": "string",
  "vendor": "string",
  "currency": "NOK",
  "nonSmartCost": 0,
  "smartCost": 0,
  "stopAt": "2019-08-24T14:15:22Z",
  "startAt": "2019-08-24T14:15:22Z",
  "estimatedFinishAt": "2019-08-24T14:15:22Z",
  "stopConfirmedAt": "2019-08-24T14:15:22Z",
  "startConfirmedAt": "2019-08-24T14:15:22Z",
  "endedAt": "2019-08-24T14:15:22Z",
  "finalState": "PLAN:ENDED:FINISHED",
  "failureCondition": "STOP_FAILED",
  "externalStart": {
    "createdAt": "2020-04-07T17:04:26Z",
    "endedAt": "2020-04-07T17:04:26Z",
    "targetType": "vehicle",
    "targetId": "8d90101b3f2f",
    "vendorActionId": "string"
  }
}
Was this section helpful?

Create Smart Override

POST /vehicles/{vehicleId}/smart-override

Overrides an active smart feature by forcing the vehicle to start charging. This feature is meant to be used in situations where the user wants to charge immediately without disabling other smart features. The override remains active until the vehicle stops charging, or until the Delete Smart Override endpoint is called. When the override ends, the overriden smart feature will regain control of the vehicle. This endpoint should not be used for standard charge control, use the Control Charging endpoint instead.

Request

Path parameters
vehicleId string Required

ID of the Vehicle.

Response

200
Attributes
userId string

ID of the User

createdAt string<date-time>

ISO8601 UTC timestamp at which the smart override was created.

endedAt s, t, r, i, n, g, ,, n, u, l, or l<date-time>

ISO8601 UTC timestamp at which the smart override was ended. If null, the smart override is still active.

targetType string

One of vehicle or charger

s, t, r, i, n, or g
targetId string

ID of the asset (Vehicle or Charger) to which this smart override applies.

vendorActionId string

The ID of Vendor Action responsible for starting charging on the target. Use the Vehicle Get Action or the Charger Get Action endpoints to monitor action results.

Sample
{
  "userId": "string",
  "createdAt": "2020-04-07T17:04:26Z",
  "endedAt": "2020-04-07T17:04:26Z",
  "targetType": "vehicle",
  "vendor": "TESLA",
  "targetId": "8d90101b3f2f",
  "vendorActionId": "string"
}
Was this section helpful?

End Smart Override

DELETE /vehicles/{vehicleId}/smart-override

Ends any active Smart Override for the vehicle specified by vehicleId. If previously configured, Schedules or Smart Charging will resume control over the target vehicle. Note that this does not mean the vehicle will stop charging, only that it will return to the state expected by the active Schedule or Smart Charging Plan.

Request

Path parameters
vehicleId string Required

ID of the Vehicle.

Response

200
Attributes
userId string

ID of the User

createdAt string<date-time>

ISO8601 UTC timestamp at which the smart override was created.

endedAt s, t, r, i, n, g, ,, n, u, l, or l<date-time>

ISO8601 UTC timestamp at which the smart override was ended. If null, the smart override is still active.

targetType string

One of vehicle or charger

s, t, r, i, n, or g
targetId string

ID of the asset (Vehicle or Charger) to which this smart override applies.

vendorActionId string

The ID of Vendor Action responsible for starting charging on the target. Use the Vehicle Get Action or the Charger Get Action endpoints to monitor action results.

Sample
{
  "userId": "string",
  "createdAt": "2020-04-07T17:04:26Z",
  "endedAt": "2020-04-07T17:04:26Z",
  "targetType": "vehicle",
  "vendor": "TESLA",
  "targetId": "8d90101b3f2f",
  "vendorActionId": "string"
}

Other responses

Response 404

No Active Smart Override Exists

Attributes
type string
title string
detail string
Sample
{
  "type": "string",
  "title": "string",
  "detail": "string"
}
Was this section helpful?

Create External Start

Deprecated
POST /vehicles/{vehicleId}/external-start

Deprecated. Replaced by Create Smart Override. The new name better reflects the functionality this endpoint offers.

Request

Path parameters
vehicleId string Required

ID of the Vehicle.

Response

200
Attributes
userId string

ID of the User

createdAt string<date-time>

ISO8601 UTC timestamp at which the smart override was created.

endedAt s, t, r, i, n, g, ,, n, u, l, or l<date-time>

ISO8601 UTC timestamp at which the smart override was ended. If null, the smart override is still active.

targetType string

One of vehicle or charger

s, t, r, i, n, or g
targetId string

ID of the asset (Vehicle or Charger) to which this smart override applies.

vendorActionId string

The ID of Vendor Action responsible for starting charging on the target. Use the Vehicle Get Action or the Charger Get Action endpoints to monitor action results.

Sample
{
  "userId": "string",
  "createdAt": "2020-04-07T17:04:26Z",
  "endedAt": "2020-04-07T17:04:26Z",
  "targetType": "vehicle",
  "vendor": "TESLA",
  "targetId": "8d90101b3f2f",
  "vendorActionId": "string"
}
Was this section helpful?

End External Start

Deprecated
DELETE /vehicles/{vehicleId}/external-start

Deprecated. Replaced by Delete Smart Override. The new name better reflects the functionality this endpoint offers.

Request

Path parameters
vehicleId string Required

ID of the Vehicle.

Response

200
Attributes
userId string

ID of the User

createdAt string<date-time>

ISO8601 UTC timestamp at which the smart override was created.

endedAt s, t, r, i, n, g, ,, n, u, l, or l<date-time>

ISO8601 UTC timestamp at which the smart override was ended. If null, the smart override is still active.

targetType string

One of vehicle or charger

s, t, r, i, n, or g
targetId string

ID of the asset (Vehicle or Charger) to which this smart override applies.

vendorActionId string

The ID of Vendor Action responsible for starting charging on the target. Use the Vehicle Get Action or the Charger Get Action endpoints to monitor action results.

Sample
{
  "userId": "string",
  "createdAt": "2020-04-07T17:04:26Z",
  "endedAt": "2020-04-07T17:04:26Z",
  "targetType": "vehicle",
  "vendor": "TESLA",
  "targetId": "8d90101b3f2f",
  "vendorActionId": "string"
}

Other responses

Response 404

No External Start Exists

Attributes
type string
title string
detail string
Sample
{
  "type": "string",
  "title": "string",
  "detail": "string"
}
Was this section helpful?

Webhooks

Webhooks are a mechanism that allows your server to receive notifications of events from the Enode system.

Currently, there is only one webhook available - a preconfigured webhook called Firehose that reports all supported events occurring within the system. You can configure it using the Update Firehose Webhook endpoint.

See the related guide for more information about timeouts, failures, and retry logic: Using Webhooks

Test Firehose Webhook

POST /webhooks/firehose/test

Trigger a "enode:firehose:test" payload to be sent to your configured Firehose Webhook URL. This will reset your webhook to a healthy state on success.

Response

200
Attributes
status string

Indicates if the test webhook event was delivered successfully to your configured webhook endpoint.

description string

Human readable description of the test outcome.

object
Sample
{
  "status": "SUCCESS",
  "description": "Successful",
  "response": {
    "code": 200,
    "body": "{}",
    "headers": [
      "content-type: application/json; charset=utf-8"
    ]
  }
}
Was this section helpful?

Update Firehose Webhook

PUT /webhooks/firehose

Request

Attributes
secret string Required

A cryptographically secure secret, generated and provided by your client.

url string Required

The HTTPS url to which Enode should POST the event payload when a watched property changes.

Sample
{
  "secret": "0Kvs1tAUQ69FOMBiWlt5XJSrruXMhWDiVbyrWaNm",
  "url": "https://brainpower.co/enode-webhooks/firehose"
}

Response

204

No Content

Other responses

Response 404

Webhook not found

Was this section helpful?

Delete Firehose Webhook

DELETE /webhooks/firehose

Request

Attributes
url string Required

The HTTPS url of the webhook to be deleted

Sample
{
  "url": "https://brainpower.co/enode-webhooks/firehose"
}

Response

204

No Content

Other responses

Response 404

Webhook not found

Was this section helpful?