This reference provides a comprehensive overview of the Enode API endpoints for accessing and controlling its hardware and features. The API follows REST principles, and uses OAuth 2.0.
This page features detailed documentation for each of our endpoints. You can also explore our API through our updated OpenAPI specifications or Postman collection.
The API is versioned, and all documentation on this page, including the links to the OpenAPI specifications and Postman collection is specific to the selected version.
Environments
We provide multiple environments, each with unique data access policies, and live/mocked vendors.
Environments are isolated from each other. Client credentials are tied to a specific environment and cannot be reused across environments.
Enode API access begins with a client and its corresponding client ID and client secret. Clients organize data, are separate, and relate to a specific environmentAPI.
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, you'll receive an access token in the response. Cache this token on your server until it expires and needs refreshingAPI. Keep the access token secret.
For resources specific to a user, include an additional header with the user ID along with the general authorization header. For versions newer than 2023-08-01, this is no longer required.
curl https://enode-api.{YOUR_CLIENT_ENVIRONMENT}.enode.io/me \-X GET \-H"Authorization: Bearer {YOUR_ACCESS_TOKEN}"\-H"Enode-User-Id: {USER_ID}"\
Response times
Enode resources like Schedules and Locations have response times of <200ms. However, vehicle interactions involve various delays and timing characteristics.
Understanding the range of possible timings without diving into vendor-specific causes, helps you account for these factors in your UX design.
Get Vehicles and List Vehicles are fast operations since all data is prefetched by Enode and shared from a cache.
On API versions prior to 2023-08-01 it is possible to request a synchronous update where data is fetched directly from the vendor. Such requests have longer response times, sometimes 30 seconds or more, depending on the characteristics of the underlying vendor APIs. From 2023-08-01 onwards this has been replaced by the refresh hintAPI mechanism.
The Login step usually takes <2 seconds, but can rarely take up to 30 seconds due to background negotiations, retries, and initial vehicle data fetching.
The final Accept step experiences similar delays as List Vehicles.
Charging commands show significant timing variability among vendors. Initiating the action is instant, but the updated charging state typically takes 20 seconds to appear. Occasionally the action may take 5 minutes or more to confirm.
Webhooks typically involve polling and dynamically adjust the polling rate based on various factors to balance prompt updates with avoiding unnecessary load on the vehicle.
The maximum baseline delay between a real-world change (e.g., a vehicle being plugged in) and the resulting webhook notification is typically 7 minutes. However, actual delays can vary depending on factors such as vehicle activity and network conditions. Below is a general guide for typical webhook delays:
Vehicle context
Typical delay
default
~7 minutes
charging
~2-5 minutes
smartcharge PLAN:*
~2 minutes
sleeping
~20 minutes
If you'd like to request a faster refresh, you can call the various /refresh-hint endpoints found on devices to queue an accelerated data refresh.
Scopes
Access to the data and controls of a device are scoped by an inclusive scopes structure. The scopes are requested in the Link user endpoint via the scopes parameter. Scopes are presented to your user in Link UI, and explained through example data and examples of features enabled by each scope. Your user is not able to de-select or configure scopes themselves in Link UI.
Data scopes include all data and states we fetch from the device, excluding location data, and is always required (e.g vehicle:read:data)
Location scopes include the location coordinates of the device (e.g. vehicle:read:location)
Control scopes are always explicit to the type of control that is requested (e.g. vehicle:control:charging)
The applied scopes are surfaced through the scopes object in device responses (see example below).
Copy linkThe relationship between scopes and capabilities
If a device is missing a scope, e.g. a charger that does not have the charger:control:charging scope set, will always have the charging related capabilities will always be set as isCapable: false with no intervention specified.
Example charger response
{"id":"2211e263-0362-4235-83f4-887bdf3ee414","userId":"17d9f847-8a1c-4158-adaa-4911a7acd5f9","vendor":"ZAPTEC","lastSeen":"2023-03-21T21:08:27.596Z","isReachable":true,"locationId":"2211e263-d6d4-d6d4-d6d4-dbdd77ec82b6","scopes":["charger:read:data"],// Scopes applied to the device"chargeState":{ ... },"information":{ ... },"capabilities":{"information":{"isCapable":true,// Capable via the charger:read:data scope"interventionIds":[]},"chargeState":{"isCapable":true,// Capable via the charger:read:data scope"interventionIds":[]},"startCharging":{"isCapable":false,// Missing charger:control:charging scope"interventionIds":[]},"stopCharging":{"isCapable":false,// Missing charger:control:charging scope"interventionIds":[]},"setMaxCurrent":{"isCapable":false,// Missing charger:control:charging scope"interventionIds":[]}}}
Copy linkResponses when the location scope is excluded
Devices with a missing location scopes will respond with longitude: null and latitude: null as part of their location object.
Copy linkResponses when a control scopes is excluded
Devices with missing control scopes will respond with a 403 error, and the action or command will not go through to the device.
HTTP/1.1400 Bad Request
Content-Type: application/problem+json
{"type":"https://developers.enode.com/problems/bad-request","title":"Payload validation failed","detail":"\"authorizationRequest.scope\" is required",}
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 APIAPI.
Entity Not Found
The requested entity was not found on the user's account.
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.
Server Error
A critical error has ocurred. An employee has been alerted and will work to remedy the situation
Service Unavailable
The service is currently unavailable. Most likely the service was slow to respond, might be overloaded or down for maintenance. Other endpoints might still be available.
You may want to retry the request using a randomized backoff delay.
Check the Enode Status page if this problem persists.
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.
Versioning
Enode's REST API is versioned. A dated version is released when breaking changes occur, while new features and bug fixes (additive changes) are available in all supported API versions.
You can view all available versions and updates in the changelog.
API clients are pinned to the latest API version upon creation, affecting all API requests and webhook events. API responses include an Enode-Version header, and webhook events have a version field.
You can override the API version on a specific request by sending an Enode-Version in the request header.
Breaking changes will be released as a new version. When a new version is released, the previous version is supported for six months before deactivation. Enode staff will notify you in advance. Each API version comes with a migration guide explaining changes and upgrade suggestions.
We consider the following breaking changes
Changing a request’s authorization or authentication requirements
Adding a new required input parameter
Changing input validation
Removing an HTTP route or method
Removing or renaming a response parameter
All other additive changes are considered backwards compatible.
This is the latest API version, recommended for all customers.
It is the default version for new clients and the default version documented in our API Reference.
There is only ever one Current API version.
Deprecated
This version has been superseded by a newer version. Multiple Deprecated versions can exist.
Customers can still choose this version for new clients or webhook subscriptions at developers.enode.com.
Documentation will be marked as Deprecated.
New functionality may not be released to Deprecated versions and supported exclusively on the Current API version.
We recommend you to upgrade to the Current version as soon as possible.
Legacy
This version has been deprecated for 6 months. Multiple Legacy versions can exist.
Customers cannot select this version for new clients or webhook subscriptions.
Documentation will not be accessible from the API Reference. You can review Legacy documentation by logging in to your organization dashboard and selecting a client with a Legacy version.
Functionality may be degraded, and no new features will be added.
4 weeks after entering Legacy status, we will begin preparations for automatically upgrading clients on this version. Enode will conduct API brownouts for clients still using Legacy versions at this time. During these brownouts, we will randomly reject API requests using the Legacy API version.
8 weeks after entering Legacy status, clients using this version will be automatically upgraded to the Current API version.
This product or endpoint is now feature complete and the implementation will not change. There may be bugs or stability issues but they are actively being worked on. We are still open to receiving feedback before delivering a stable release.
This product or endpoint is being released in an early stage to get feedback. There are likely bugs or other issues that may not necessarily be prioritized. The whole implementation may be completely changed or removed.
Individual features, endpoints, or fields tagged as Deprecated will be removed in a future version of the API. If you are using deprecated functionality you should update your application to use alternative features or methods we provide.
Pagination
Enode endpoints returning collections of a specific type of resource, such as GET /vehicles, will return a paginated response. Each response will consist of a subset of the resources, called a page. To retrieve the entire collection, subsequent pages need to be fetched.
Each response includes two properties: data and pagination. The data property contains the records of the current page and the pagination property contains cursors that can be used to fetch additional pages. These cursors, before and after, are unique identifiers for specific records in the dataset that help you keep track of your position and navigate through the pages.
All of these pagination query parameters are optional. If pageSize is not provided, the default page size of 50 is used. If neither before nor after are provided, the returned page will contain the first set of resources in the collection.
The before and after parameters are mutually exclusive. If both are supplied, the API will return an error.
Responses from most paginated endpoints are sorted in descending order according to when the resource was created. Hence, for a request like GET /vehicles, the most recently linked vehicles appear on the first page.
Copy linkHow to navigate through paginated API responses
The pagination property in a paginated response typically looks like this:
In this example, the data array includes the resource records for the current page. The pagination object provides the cursors for navigating to adjacent pages.
Batteries
The Battery object represents a residential energy storage unit, like a Tesla Powerwall or Enphase IQ. It offers detailed insights into the battery's operation and allows you to instruct the battery on handling its stored energy.
List batteriesBeta
GET /batteries
Returns a paginated list of all Batteries.
Request
Query parameters
afterstringOptional
beforestringOptional
pageSizeintegerOptional
Default value: 50
Request example
curl--request GET \--url'https://enode-api.production.enode.io/batteries?after=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&before=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&pageSize=50'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
dataarray of object
Paginated list of batteries
Show child attributes
data[].idstring<uuid>
Unique identifier for the battery object
data[].userIdstring
The ID of the user that linked this battery.
data[].vendorstring
Machine-friendly name of the vendor. Use this in API requests.
Possible enum values:
TESLAENPHASEHUAWEISOLAREDGESMA
data[].lastSeenstring<date-time>
The last time Enode successfully communicated with the vendor or when the battery was initially linked.
data[].isReachableboolean
Whether live data from the battery is currently reachable from Enode's perspective. This 'reachability' may refer to reading from a cache operated by the battery's cloud service if that service has determined that its cache is valid.
data[].chargeStateobject
Latest information about the battery. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
data[].chargeState.statusstring or null
The power delivery state of the battery.
Possible enum values:
CHARGINGDISCHARGINGIDLEFAULTUNKNOWN
data[].chargeState.batteryCapacitynumber or null
Battery capacity in kWh.
data[].chargeState.batteryLevelnumber or null
Remaining battery charge level in percent.
data[].chargeState.chargeRatenumber or null
The current charge rate in kW. A positive value indicates that the battery is charging.
data[].chargeState.dischargeLimitnumber or null
Minimum charge level for a battery, expressed as a percentage. Batteries will not discharge below this user-set reserve level except in emergency power situations.
data[].chargeState.lastUpdatedstring<date-time> or null
Time of last received charge state update
data[].configobject
Show child attributes
data[].config.operationModestring or null
The current operation mode of the battery.
IMPORT_FOCUS: Prioritizes charging the battery. Draws power from the grid and any excess solar energy for charging. Leveraged energy sources depend on the configuration of the battery. Note: Focus modes target a certain battery behavior but are ultimately internal to the battery. Actual behavior might differ from the focus mode.
EXPORT_FOCUS: Prioritizes discharging energy stored in the battery back to the household and any excess to the grid. Grid exports often depend on local regulation and might require agreements with grid providers to be supported. Note: Focus modes target a certain battery behavior but are ultimately internal to the battery. Actual behavior might differ from the focus mode.
TIME_OF_USE: Maximizes energy cost savings in accordance with a user-defined schedule matching a utility rate plan. Energy may be consumed from solar, battery, or grid sources, depending on the current prices and your user's settings in the OEM app. Energy may be exported to the grid from solar or battery sources, depending on current prices and your user's settings in the OEM app.
SELF_RELIANCE: Minimizes household reliance on the grid. Prioritizes using own energy from solar or battery for household consumption before importing from grid. Energy may be exported to the grid from solar, depending on excess solar and your user's settings in the OEM app.
Possible enum values:
IMPORT_FOCUSEXPORT_FOCUSTIME_OF_USESELF_RELIANCE
data[].config.lastUpdatedstring<date-time> or null
Time of last received configuration update
data[].informationobject
Descriptive information about the battery
Show child attributes
data[].information.idstring
Battery vendor ID
data[].information.brandstring
A formatted and properly cased OEM brand name, suitable for reading by humans. May contain special characters.
Possible enum values:
TeslaEnphaseHUAWEISolarEdgeSMA
data[].information.modelstring
Battery model
data[].information.siteNamestring
Name of the site, as set by the user on the device/vendor. If no user-specified name is available, we construct a fallback name using the vendor/device/model names.
Returns a paginated list of batteries for the given userId.
Request
Path parameters
userIdstringRequired
ID of the User.
Query parameters
afterstringOptional
beforestringOptional
pageSizeintegerOptional
Default value: 50
Request example
curl--request GET \--url'https://enode-api.production.enode.io/users/%7BuserId%7D/batteries?after=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&before=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&pageSize=50'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
dataarray of object
Paginated list of batteries
Show child attributes
data[].idstring<uuid>
Unique identifier for the battery object
data[].userIdstring
The ID of the user that linked this battery.
data[].vendorstring
Machine-friendly name of the vendor. Use this in API requests.
Possible enum values:
TESLAENPHASEHUAWEISOLAREDGESMA
data[].lastSeenstring<date-time>
The last time Enode successfully communicated with the vendor or when the battery was initially linked.
data[].isReachableboolean
Whether live data from the battery is currently reachable from Enode's perspective. This 'reachability' may refer to reading from a cache operated by the battery's cloud service if that service has determined that its cache is valid.
data[].chargeStateobject
Latest information about the battery. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
data[].chargeState.statusstring or null
The power delivery state of the battery.
Possible enum values:
CHARGINGDISCHARGINGIDLEFAULTUNKNOWN
data[].chargeState.batteryCapacitynumber or null
Battery capacity in kWh.
data[].chargeState.batteryLevelnumber or null
Remaining battery charge level in percent.
data[].chargeState.chargeRatenumber or null
The current charge rate in kW. A positive value indicates that the battery is charging.
data[].chargeState.dischargeLimitnumber or null
Minimum charge level for a battery, expressed as a percentage. Batteries will not discharge below this user-set reserve level except in emergency power situations.
data[].chargeState.lastUpdatedstring<date-time> or null
Time of last received charge state update
data[].configobject
Show child attributes
data[].config.operationModestring or null
The current operation mode of the battery.
IMPORT_FOCUS: Prioritizes charging the battery. Draws power from the grid and any excess solar energy for charging. Leveraged energy sources depend on the configuration of the battery. Note: Focus modes target a certain battery behavior but are ultimately internal to the battery. Actual behavior might differ from the focus mode.
EXPORT_FOCUS: Prioritizes discharging energy stored in the battery back to the household and any excess to the grid. Grid exports often depend on local regulation and might require agreements with grid providers to be supported. Note: Focus modes target a certain battery behavior but are ultimately internal to the battery. Actual behavior might differ from the focus mode.
TIME_OF_USE: Maximizes energy cost savings in accordance with a user-defined schedule matching a utility rate plan. Energy may be consumed from solar, battery, or grid sources, depending on the current prices and your user's settings in the OEM app. Energy may be exported to the grid from solar or battery sources, depending on current prices and your user's settings in the OEM app.
SELF_RELIANCE: Minimizes household reliance on the grid. Prioritizes using own energy from solar or battery for household consumption before importing from grid. Energy may be exported to the grid from solar, depending on excess solar and your user's settings in the OEM app.
Possible enum values:
IMPORT_FOCUSEXPORT_FOCUSTIME_OF_USESELF_RELIANCE
data[].config.lastUpdatedstring<date-time> or null
Time of last received configuration update
data[].informationobject
Descriptive information about the battery
Show child attributes
data[].information.idstring
Battery vendor ID
data[].information.brandstring
A formatted and properly cased OEM brand name, suitable for reading by humans. May contain special characters.
Possible enum values:
TeslaEnphaseHUAWEISolarEdgeSMA
data[].information.modelstring
Battery model
data[].information.siteNamestring
Name of the site, as set by the user on the device/vendor. If no user-specified name is available, we construct a fallback name using the vendor/device/model names.
curl--request GET \--url https://enode-api.production.enode.io/batteries/54d827e1-8355-4fed-97b5-55940d1d09ba
Response 200
Attributes
idstring<uuid>
Unique identifier for the battery object
userIdstring
The ID of the user that linked this battery.
vendorstring
Machine-friendly name of the vendor. Use this in API requests.
Possible enum values:
TESLAENPHASEHUAWEISOLAREDGESMA
lastSeenstring<date-time>
The last time Enode successfully communicated with the vendor or when the battery was initially linked.
isReachableboolean
Whether live data from the battery is currently reachable from Enode's perspective. This 'reachability' may refer to reading from a cache operated by the battery's cloud service if that service has determined that its cache is valid.
chargeStateobject
Latest information about the battery. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
chargeState.statusstring or null
The power delivery state of the battery.
Possible enum values:
CHARGINGDISCHARGINGIDLEFAULTUNKNOWN
chargeState.batteryCapacitynumber or null
Battery capacity in kWh.
chargeState.batteryLevelnumber or null
Remaining battery charge level in percent.
chargeState.chargeRatenumber or null
The current charge rate in kW. A positive value indicates that the battery is charging.
chargeState.dischargeLimitnumber or null
Minimum charge level for a battery, expressed as a percentage. Batteries will not discharge below this user-set reserve level except in emergency power situations.
chargeState.lastUpdatedstring<date-time> or null
Time of last received charge state update
configobject
Show child attributes
config.operationModestring or null
The current operation mode of the battery.
IMPORT_FOCUS: Prioritizes charging the battery. Draws power from the grid and any excess solar energy for charging. Leveraged energy sources depend on the configuration of the battery. Note: Focus modes target a certain battery behavior but are ultimately internal to the battery. Actual behavior might differ from the focus mode.
EXPORT_FOCUS: Prioritizes discharging energy stored in the battery back to the household and any excess to the grid. Grid exports often depend on local regulation and might require agreements with grid providers to be supported. Note: Focus modes target a certain battery behavior but are ultimately internal to the battery. Actual behavior might differ from the focus mode.
TIME_OF_USE: Maximizes energy cost savings in accordance with a user-defined schedule matching a utility rate plan. Energy may be consumed from solar, battery, or grid sources, depending on the current prices and your user's settings in the OEM app. Energy may be exported to the grid from solar or battery sources, depending on current prices and your user's settings in the OEM app.
SELF_RELIANCE: Minimizes household reliance on the grid. Prioritizes using own energy from solar or battery for household consumption before importing from grid. Energy may be exported to the grid from solar, depending on excess solar and your user's settings in the OEM app.
Possible enum values:
IMPORT_FOCUSEXPORT_FOCUSTIME_OF_USESELF_RELIANCE
config.lastUpdatedstring<date-time> or null
Time of last received configuration update
informationobject
Descriptive information about the battery
Show child attributes
information.idstring
Battery vendor ID
information.brandstring
A formatted and properly cased OEM brand name, suitable for reading by humans. May contain special characters.
Possible enum values:
TeslaEnphaseHUAWEISolarEdgeSMA
information.modelstring
Battery model
information.siteNamestring
Name of the site, as set by the user on the device/vendor. If no user-specified name is available, we construct a fallback name using the vendor/device/model names.
information.installationDatestring<date-time>
Battery installation date
capabilitiesobject
A collection of descriptors that describe the capabilities of this specific battery
Show child attributes
capabilities.exportFocusobject
Supports EXPORT_FOCUS operation mode.
Show child attributes
capabilities.exportFocus.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.exportFocus.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
capabilities.importFocusobject
Supports IMPORT_FOCUS operation mode.
Show child attributes
capabilities.importFocus.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.importFocus.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
capabilities.timeOfUseobject
Supports TIME_OF_USE operation mode.
Show child attributes
capabilities.timeOfUse.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.timeOfUse.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
capabilities.selfRelianceobject
Supports SELF_RELIANCE operation mode.
Show child attributes
capabilities.selfReliance.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.selfReliance.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
scopesarray of string
Scopes that the user has granted for this battery.
locationIdstring<uuid> or null
ID of the location the battery is currently positioned at (if any).
Request an operationMode change for a battery. This request creates an Action that will retry until the battery's operationMode matches the expected value. The Action must complete before any further commands can be sent to the battery. Only one Action can be active for a specific battery at a time. If a new Action is created, the previous Action will be automatically cancelled and transitioned to the CANCELLED state. Regardless of operation mode, the battery's charge limit will not fall below dischargeLimit except in emergency power situations. Transitions can be tracked via the user:vendor-action:updated webhook event or Get Operation Mode ActionAPI.
Request
Path parameters
batteryIdstring<uuid>Required
The ID of the battery being targeted.
Attributes
operationModestringRequired
Desired operation mode of the battery.
IMPORT_FOCUS: Prioritizes charging the battery. Draws power from the grid and any excess solar energy for charging. Leveraged energy sources depend on the configuration of the battery. Note: Focus modes target a certain battery behavior but are ultimately internal to the battery. Actual behavior might differ from the focus mode.
EXPORT_FOCUS: Prioritizes discharging energy stored in the battery back to the household and any excess to the grid. Grid exports often depend on local regulation and might require agreements with grid providers to be supported. Note: Focus modes target a certain battery behavior but are ultimately internal to the battery. Actual behavior might differ from the focus mode.
TIME_OF_USE: Maximizes energy cost savings in accordance with a user-defined schedule matching a utility rate plan. Energy may be consumed from solar, battery, or grid sources, depending on the current prices and your user's settings in the OEM app. Energy may be exported to the grid from solar or battery sources, depending on current prices and your user's settings in the OEM app.
SELF_RELIANCE: Minimizes household reliance on the grid. Prioritizes using own energy from solar or battery for household consumption before importing from grid. Energy may be exported to the grid from solar, depending on excess solar and your user's settings in the OEM app.
Possible enum values:
IMPORT_FOCUSEXPORT_FOCUSTIME_OF_USESELF_RELIANCE
Request example
curl--request POST \--url https://enode-api.production.enode.io/batteries/54d827e1-8355-4fed-97b5-55940d1d09ba/operation-mode \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'\--header'content-type: application/json'\--data'{"operationMode":"IMPORT_FOCUS"}'
Response 200
Attributes
idstring<uuid>
The ID of the action.
userIdstring
The ID of the user that owns the target of this action.
createdAtstring<date-time>
Time when this action was created
updatedAtstring<date-time>
Time when this action was last updated
completedAtstring<date-time> or null
Time when the action transitioned to a non-pending state.
statestring
The real-time status of an action executed on a target.
PENDING: The initial state. Enode is actively sending commands and monitoring the target for changes.
CONFIRMED: Successful transition of the target to the desired state.
FAILED: The target did not respond to the action before timing out. Enode has ceased sending additional commands.
CANCELLED: A required precondition was not met during the action's timeout window or another action has been sent to the target, overriding this one.
Possible enum values:
PENDINGCONFIRMEDFAILEDCANCELLED
targetIdstring
ID of the battery which this action is controlling.
targetTypestring
Possible enum values:
battery
targetStateobject
Target battery operation mode
Show child attributes
targetState.operationModestring
Desired operation mode of the battery.
IMPORT_FOCUS: Prioritizes charging the battery. Draws power from the grid and any excess solar energy for charging. Leveraged energy sources depend on the configuration of the battery. Note: Focus modes target a certain battery behavior but are ultimately internal to the battery. Actual behavior might differ from the focus mode.
EXPORT_FOCUS: Prioritizes discharging energy stored in the battery back to the household and any excess to the grid. Grid exports often depend on local regulation and might require agreements with grid providers to be supported. Note: Focus modes target a certain battery behavior but are ultimately internal to the battery. Actual behavior might differ from the focus mode.
TIME_OF_USE: Maximizes energy cost savings in accordance with a user-defined schedule matching a utility rate plan. Energy may be consumed from solar, battery, or grid sources, depending on the current prices and your user's settings in the OEM app. Energy may be exported to the grid from solar or battery sources, depending on current prices and your user's settings in the OEM app.
SELF_RELIANCE: Minimizes household reliance on the grid. Prioritizes using own energy from solar or battery for household consumption before importing from grid. Energy may be exported to the grid from solar, depending on excess solar and your user's settings in the OEM app.
Returns the current state of the requested Action.
Request
Path parameters
actionIdstring<uuid>Required
ID of the Action.
Request example
curl--request GET \--url https://enode-api.production.enode.io/batteries/actions/4eaeb363-296d-4ccc-a973-7805e6f400bd \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
idstring<uuid>
The ID of the action.
userIdstring
The ID of the user that owns the target of this action.
createdAtstring<date-time>
Time when this action was created
updatedAtstring<date-time>
Time when this action was last updated
completedAtstring<date-time> or null
Time when the action transitioned to a non-pending state.
statestring
The real-time status of an action executed on a target.
PENDING: The initial state. Enode is actively sending commands and monitoring the target for changes.
CONFIRMED: Successful transition of the target to the desired state.
FAILED: The target did not respond to the action before timing out. Enode has ceased sending additional commands.
CANCELLED: A required precondition was not met during the action's timeout window or another action has been sent to the target, overriding this one.
Possible enum values:
PENDINGCONFIRMEDFAILEDCANCELLED
targetIdstring
ID of the battery which this action is controlling.
targetTypestring
Possible enum values:
battery
targetStateobject
Target battery operation mode
Show child attributes
targetState.operationModestring
Desired operation mode of the battery.
IMPORT_FOCUS: Prioritizes charging the battery. Draws power from the grid and any excess solar energy for charging. Leveraged energy sources depend on the configuration of the battery. Note: Focus modes target a certain battery behavior but are ultimately internal to the battery. Actual behavior might differ from the focus mode.
EXPORT_FOCUS: Prioritizes discharging energy stored in the battery back to the household and any excess to the grid. Grid exports often depend on local regulation and might require agreements with grid providers to be supported. Note: Focus modes target a certain battery behavior but are ultimately internal to the battery. Actual behavior might differ from the focus mode.
TIME_OF_USE: Maximizes energy cost savings in accordance with a user-defined schedule matching a utility rate plan. Energy may be consumed from solar, battery, or grid sources, depending on the current prices and your user's settings in the OEM app. Energy may be exported to the grid from solar or battery sources, depending on current prices and your user's settings in the OEM app.
SELF_RELIANCE: Minimizes household reliance on the grid. Prioritizes using own energy from solar or battery for household consumption before importing from grid. Energy may be exported to the grid from solar, depending on excess solar and your user's settings in the OEM app.
Cancels a pending battery Action, halting any further attempts by Enode to execute it.
Note: This only updates the Action's status to CANCELLED within Enode and does not reflect a change in the vendor's cloud. Thus any pending Action in the vendor's cloud might still be executed.
Request
Path parameters
actionIdstring<uuid>Required
ID of the Action.
Request example
curl--request POST \--url https://enode-api.production.enode.io/batteries/actions/4eaeb363-296d-4ccc-a973-7805e6f400bd/cancel \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
idstring<uuid>
The ID of the action.
userIdstring
The ID of the user that owns the target of this action.
createdAtstring<date-time>
Time when this action was created
updatedAtstring<date-time>
Time when this action was last updated
completedAtstring<date-time> or null
Time when the action transitioned to a non-pending state.
statestring
The real-time status of an action executed on a target.
PENDING: The initial state. Enode is actively sending commands and monitoring the target for changes.
CONFIRMED: Successful transition of the target to the desired state.
FAILED: The target did not respond to the action before timing out. Enode has ceased sending additional commands.
CANCELLED: A required precondition was not met during the action's timeout window or another action has been sent to the target, overriding this one.
Possible enum values:
PENDINGCONFIRMEDFAILEDCANCELLED
targetIdstring
ID of the battery which this action is controlling.
targetTypestring
Possible enum values:
battery
targetStateobject
Target battery operation mode
Show child attributes
targetState.operationModestring
Desired operation mode of the battery.
IMPORT_FOCUS: Prioritizes charging the battery. Draws power from the grid and any excess solar energy for charging. Leveraged energy sources depend on the configuration of the battery. Note: Focus modes target a certain battery behavior but are ultimately internal to the battery. Actual behavior might differ from the focus mode.
EXPORT_FOCUS: Prioritizes discharging energy stored in the battery back to the household and any excess to the grid. Grid exports often depend on local regulation and might require agreements with grid providers to be supported. Note: Focus modes target a certain battery behavior but are ultimately internal to the battery. Actual behavior might differ from the focus mode.
TIME_OF_USE: Maximizes energy cost savings in accordance with a user-defined schedule matching a utility rate plan. Energy may be consumed from solar, battery, or grid sources, depending on the current prices and your user's settings in the OEM app. Energy may be exported to the grid from solar or battery sources, depending on current prices and your user's settings in the OEM app.
SELF_RELIANCE: Minimizes household reliance on the grid. Prioritizes using own energy from solar or battery for household consumption before importing from grid. Energy may be exported to the grid from solar, depending on excess solar and your user's settings in the OEM app.
Action already in a resolved state and can therefore not be cancelled.
Attributes
idstring<uuid>
The ID of the action.
userIdstring
The ID of the user that owns the target of this action.
createdAtstring<date-time>
Time when this action was created
updatedAtstring<date-time>
Time when this action was last updated
completedAtstring<date-time> or null
Time when the action transitioned to a non-pending state.
targetIdstring
ID of the battery which this action is controlling.
targetTypestring
Possible enum values:
battery
targetStateobject
Target battery operation mode
Show child attributes
targetState.operationModestring
Desired operation mode of the battery.
IMPORT_FOCUS: Prioritizes charging the battery. Draws power from the grid and any excess solar energy for charging. Leveraged energy sources depend on the configuration of the battery. Note: Focus modes target a certain battery behavior but are ultimately internal to the battery. Actual behavior might differ from the focus mode.
EXPORT_FOCUS: Prioritizes discharging energy stored in the battery back to the household and any excess to the grid. Grid exports often depend on local regulation and might require agreements with grid providers to be supported. Note: Focus modes target a certain battery behavior but are ultimately internal to the battery. Actual behavior might differ from the focus mode.
TIME_OF_USE: Maximizes energy cost savings in accordance with a user-defined schedule matching a utility rate plan. Energy may be consumed from solar, battery, or grid sources, depending on the current prices and your user's settings in the OEM app. Energy may be exported to the grid from solar or battery sources, depending on current prices and your user's settings in the OEM app.
SELF_RELIANCE: Minimizes household reliance on the grid. Prioritizes using own energy from solar or battery for household consumption before importing from grid. Energy may be exported to the grid from solar, depending on excess solar and your user's settings in the OEM app.
Possible enum values:
IMPORT_FOCUSEXPORT_FOCUSTIME_OF_USESELF_RELIANCE
statestring
The real-time status of an action executed on a target.
CONFIRMED: Successful transition of the target to the desired state.
FAILED: The target did not respond to the action before timing out. Enode has ceased sending additional commands.
CANCELLED: A required precondition was not met during the action's timeout window or another action has been sent to the target, overriding this one.
Use this endpoint to initiate an expedited data refresh for the specified battery.
Note: The Enode platform keeps data automatically up-to-date and detects changes in the OEM APIs within seconds to a few minutes. We change the refresh interval dynamically based on a number of heuristics. This ensures we find the best trade-off between the stability of the connection to the OEM and freshness of the data. This method overrides most of our heuristics and should therefore be used with caution. You may use it when you have a strong reason to believe the data might be stale.
Request
Path parameters
batteryIdstring<uuid>Required
The ID of the battery being targeted.
Request example
curl--request POST \--url https://enode-api.production.enode.io/batteries/54d827e1-8355-4fed-97b5-55940d1d09ba/refresh-hint \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
curl--request GET \--url'https://enode-api.production.enode.io/chargers?after=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&before=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&pageSize=50'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
dataarray of object
Paginated list of chargers
Show child attributes
data[].idstring
Charger ID
data[].userIdstring
The ID of the user that linked this charger.
data[].vendorstring
Machine-friendly name of the vendor. Use this in API requests.
The last time Enode communicated with the charger.
data[].isReachableboolean
Whether live data from the charger is currently reachable 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.
data[].chargeStateobject
Latest information about the charger. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
data[].chargeState.isPluggedInboolean or null
Indicates whether the charger has a vehicle plugged into it (regardless of whether that vehicle is actually charging)
data[].chargeState.isChargingboolean or null
Indicates whether the charger is currently delivering power to the vehicle and actively charging its battery.
data[].chargeState.chargeRatenumber or null
The current charge rate in kW.
This property is only available when the charger is actively charging a vehicle, and is null any other time.
data[].chargeState.lastUpdatedstring<date-time> or null
Time of latest charge state update
data[].chargeState.maxCurrentnumber or null
Desired max current in amperes, if set
data[].chargeState.powerDeliveryStatestring
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown.
UNPLUGGED: The vehicle is not connected to the charger.
PLUGGED_IN:INITIALIZING: The charging station is preparing to deliver power to the vehicle. It is expected for this state to shortly transition into PLUGGED_IN:CHARGING.
PLUGGED_IN:CHARGING: The charger is actively delivering power to the vehicle, causing the battery level to increase.
PLUGGED_IN:STOPPED: The vehicle is plugged in, but the charger has been stopped. It is possible to transition into a charging state by sending a start command.
PLUGGED_IN:NO_POWER: The charger attempted to initialize charging, however no external power was accepted by the vehicle. It is not possible to transition into a charging state with a remote command until there is some user intervention to resolve the issue.
PLUGGED_IN:FAULT: A malfunction in the charging process is preventing power from being delivered. Possible causes include a charging cable not being properly locked, extreme temperatures, or malfunctions in either the charging station or the vehicle's internal system. It is not possible to transition into a charging state with a remote command until there is some user intervention to resolve the issue.
Returns a paginated list of chargers for the given userId.
Request
Path parameters
userIdstringRequired
ID of the User.
Query parameters
afterstringOptional
beforestringOptional
pageSizeintegerOptional
Default value: 50
Request example
curl--request GET \--url'https://enode-api.production.enode.io/users/%7BuserId%7D/chargers?after=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&before=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&pageSize=50'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
dataarray of object
Paginated list of chargers
Show child attributes
data[].idstring
Charger ID
data[].userIdstring
The ID of the user that linked this charger.
data[].vendorstring
Machine-friendly name of the vendor. Use this in API requests.
The last time Enode communicated with the charger.
data[].isReachableboolean
Whether live data from the charger is currently reachable 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.
data[].chargeStateobject
Latest information about the charger. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
data[].chargeState.isPluggedInboolean or null
Indicates whether the charger has a vehicle plugged into it (regardless of whether that vehicle is actually charging)
data[].chargeState.isChargingboolean or null
Indicates whether the charger is currently delivering power to the vehicle and actively charging its battery.
data[].chargeState.chargeRatenumber or null
The current charge rate in kW.
This property is only available when the charger is actively charging a vehicle, and is null any other time.
data[].chargeState.lastUpdatedstring<date-time> or null
Time of latest charge state update
data[].chargeState.maxCurrentnumber or null
Desired max current in amperes, if set
data[].chargeState.powerDeliveryStatestring
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown.
UNPLUGGED: The vehicle is not connected to the charger.
PLUGGED_IN:INITIALIZING: The charging station is preparing to deliver power to the vehicle. It is expected for this state to shortly transition into PLUGGED_IN:CHARGING.
PLUGGED_IN:CHARGING: The charger is actively delivering power to the vehicle, causing the battery level to increase.
PLUGGED_IN:STOPPED: The vehicle is plugged in, but the charger has been stopped. It is possible to transition into a charging state by sending a start command.
PLUGGED_IN:NO_POWER: The charger attempted to initialize charging, however no external power was accepted by the vehicle. It is not possible to transition into a charging state with a remote command until there is some user intervention to resolve the issue.
PLUGGED_IN:FAULT: A malfunction in the charging process is preventing power from being delivered. Possible causes include a charging cable not being properly locked, extreme temperatures, or malfunctions in either the charging station or the vehicle's internal system. It is not possible to transition into a charging state with a remote command until there is some user intervention to resolve the issue.
The last time Enode communicated with the charger.
isReachableboolean
Whether live data from the charger is currently reachable 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.
chargeStateobject
Latest information about the charger. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
chargeState.isPluggedInboolean or null
Indicates whether the charger has a vehicle plugged into it (regardless of whether that vehicle is actually charging)
chargeState.isChargingboolean or null
Indicates whether the charger is currently delivering power to the vehicle and actively charging its battery.
chargeState.chargeRatenumber or null
The current charge rate in kW.
This property is only available when the charger is actively charging a vehicle, and is null any other time.
chargeState.lastUpdatedstring<date-time> or null
Time of latest charge state update
chargeState.maxCurrentnumber or null
Desired max current in amperes, if set
chargeState.powerDeliveryStatestring
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown.
UNPLUGGED: The vehicle is not connected to the charger.
PLUGGED_IN:INITIALIZING: The charging station is preparing to deliver power to the vehicle. It is expected for this state to shortly transition into PLUGGED_IN:CHARGING.
PLUGGED_IN:CHARGING: The charger is actively delivering power to the vehicle, causing the battery level to increase.
PLUGGED_IN:STOPPED: The vehicle is plugged in, but the charger has been stopped. It is possible to transition into a charging state by sending a start command.
PLUGGED_IN:NO_POWER: The charger attempted to initialize charging, however no external power was accepted by the vehicle. It is not possible to transition into a charging state with a remote command until there is some user intervention to resolve the issue.
PLUGGED_IN:FAULT: A malfunction in the charging process is preventing power from being delivered. Possible causes include a charging cable not being properly locked, extreme temperatures, or malfunctions in either the charging station or the vehicle's internal system. It is not possible to transition into a charging state with a remote command until there is some user intervention to resolve the issue.
The last time Enode communicated with the charger.
isReachableboolean
Whether live data from the charger is currently reachable 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.
chargeStateobject
Latest information about the charger. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
chargeState.isPluggedInboolean or null
Indicates whether the charger has a vehicle plugged into it (regardless of whether that vehicle is actually charging)
chargeState.isChargingboolean or null
Indicates whether the charger is currently delivering power to the vehicle and actively charging its battery.
chargeState.chargeRatenumber or null
The current charge rate in kW.
This property is only available when the charger is actively charging a vehicle, and is null any other time.
chargeState.lastUpdatedstring<date-time> or null
Time of latest charge state update
chargeState.maxCurrentnumber or null
Desired max current in amperes, if set
chargeState.powerDeliveryStatestring
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown.
UNPLUGGED: The vehicle is not connected to the charger.
PLUGGED_IN:INITIALIZING: The charging station is preparing to deliver power to the vehicle. It is expected for this state to shortly transition into PLUGGED_IN:CHARGING.
PLUGGED_IN:CHARGING: The charger is actively delivering power to the vehicle, causing the battery level to increase.
PLUGGED_IN:STOPPED: The vehicle is plugged in, but the charger has been stopped. It is possible to transition into a charging state by sending a start command.
PLUGGED_IN:NO_POWER: The charger attempted to initialize charging, however no external power was accepted by the vehicle. It is not possible to transition into a charging state with a remote command until there is some user intervention to resolve the issue.
PLUGGED_IN:FAULT: A malfunction in the charging process is preventing power from being delivered. Possible causes include a charging cable not being properly locked, extreme temperatures, or malfunctions in either the charging station or the vehicle's internal system. It is not possible to transition into a charging state with a remote command until there is some user intervention to resolve the issue.
Request for a charger to start or stop charging. This request creates an Action that will retry until the charger's powerDeliveryState matches the expected value. The Action must complete before any further commands are sent to the charger. Only one Action can be active for a specific charger at a time. If a new Action is created, the previous Action will be automatically cancelled and transitioned to the CANCELLED state. Transitions can be tracked via the user:vendor-action:updated webhook event or Get Charger ActionAPI.
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 Create Smart OverrideAPI to temporarily enable charging.
Request
Path parameters
chargerIdstringRequired
ID of the Charger.
Attributes
actionstringRequired
Charging action to perform
Possible enum values:
STARTSTOP
Request example
curl--request POST \--url https://enode-api.production.enode.io/chargers/ad84e742-0f46-4cf4-b0db-7d890f8f23f5/charging \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'\--header'content-type: application/json'\--data'{"action":"START"}'
Response 200
Resulting charge action
Attributes
idstring<uuid>
The ID of the action.
userIdstring
The ID of the user that owns the target of this action.
createdAtstring<date-time>
Time when this action was created
updatedAtstring<date-time>
Time when this action was last updated
completedAtstring<date-time> or null
Time when the action transitioned to a non-pending state.
statestring
The real-time status of an action executed on a target.
PENDING: The initial state. Enode is actively sending commands and monitoring the target for changes.
CONFIRMED: Successful transition of the target to the desired state.
FAILED: The target did not respond to the action before timing out. Enode has ceased sending additional commands.
CANCELLED: A required precondition was not met during the action's timeout window or another action has been sent to the target, overriding this one.
Possible enum values:
PENDINGCONFIRMEDFAILEDCANCELLED
targetIdstring
ID of the target which this action is controlling.
targetTypestring
Possible enum values:
vehiclecharger
kindstring
The charging action to perform
Possible enum values:
STARTSTOP
failureReasonobject or null
Information about why was this action not executed successfully.
Show child attributes
failureReason.typestring
A machine-readable high level error category.
NO_RESPONSE: The chargeable device did not react to our charge commands within the action's timeout window.
FAILED_PRECONDITION: The chargeable device did not meet all required preconditions for this action to be executed during the action's timeout window.
UNNECESSARY: The action was not carried out given that the device was already in the desired state.
CONFLICT: A newer action for this chargeable has been created. This action is now abandoned.
REQUESTED_CANCELLATION: This action was cancelled by request of the controlling owner. The controlling owner may refer to another Enode entity which initiated the command, such as a schedule or smart override.
NOT_FOUND: The chargeable was deleted while the action was PENDING.
A human-readable explanation of why the charging action was unsuccessful.
Response example
{"id":"4eaeb363-296d-4ccc-a973-7805e6f400bd","userId":"d5bd4771-864e-4ae5-b913-dfb5cdcd5772","createdAt":"2020-04-07T17:04:26Z","updatedAt":"2020-04-07T17:04:26Z","completedAt":"2020-04-07T17:04:26Z","state":"PENDING","targetId":"bfbccded-8a1c-45a8-bbda-dcaeef29977a","targetType":"vehicle","kind":"START","failureReason":{"type":"NO_RESPONSE","detail":"The chargeable device remained unreachable."}}
Response 400
A precondition check failed that is unlikely to change within the action's timeout window. This occurs if the charger cannot perform the action, is fully charged, or is already in the desired state.
Attributes
typestring
A URI reference that identifies the problem type.
titlestring
A short, human-readable summary of the problem type.
detailstring
A human-readable explanation specific to this occurrence of the problem.
Register for a change of the maxCurrent field on a charger. This request creates an Action that will retry until the charger's maxCurrent matches the expected value. The Action must complete before any further commands are sent to the charger. Only one Action can be active for a specific charger at a time. If a new Action is created, the previous Action will be automatically cancelled and transitioned to the CANCELLED state. Transitions can be tracked via the user:vendor-action:updated webhook event or Get Charger ActionAPI.
Request
Path parameters
chargerIdstringRequired
ID of the Charger.
Attributes
maxCurrentnumberRequired
Desired max current in ampere
Request example
curl--request POST \--url https://enode-api.production.enode.io/chargers/ad84e742-0f46-4cf4-b0db-7d890f8f23f5/max-current \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'\--header'content-type: application/json'\--data'{"maxCurrent":10}'
Response 200
Attributes
idstring<uuid>
The ID of the action.
userIdstring
The ID of the user that owns the target of this action.
createdAtstring<date-time>
Time when this action was created
updatedAtstring<date-time>
Time when this action was last updated
completedAtstring<date-time> or null
Time when the action transitioned to a non-pending state.
statestring
The real-time status of an action executed on a target.
PENDING: The initial state. Enode is actively sending commands and monitoring the target for changes.
CONFIRMED: Successful transition of the target to the desired state.
FAILED: The target did not respond to the action before timing out. Enode has ceased sending additional commands.
CANCELLED: A required precondition was not met during the action's timeout window or another action has been sent to the target, overriding this one.
Possible enum values:
PENDINGCONFIRMEDFAILEDCANCELLED
targetIdstring
ID of the entity which this action is controlling.
targetTypestring
Possible enum values:
vehiclecharger
targetStateobject
Target maximum current for entity
Show child attributes
targetState.maxCurrentnumber
Desired max current in ampere
failureReasonobject or null
Information about why was this action not executed successfully.
Show child attributes
failureReason.typestring
A machine-readable high level error category.
NO_RESPONSE: The chargeable device did not react to our charge commands within the action's timeout window.
FAILED_PRECONDITION: The chargeable device did not meet all required preconditions for this action to be executed during the action's timeout window.
UNNECESSARY: The action was not carried out given that the device was already in the desired state.
CONFLICT: A newer action for this chargeable has been created. This action is now abandoned.
REQUESTED_CANCELLATION: This action was cancelled by request of the controlling owner. The controlling owner may refer to another Enode entity which initiated the command, such as a schedule or smart override.
NOT_FOUND: The chargeable was deleted while the action was PENDING.
A human-readable explanation of why the charging action was unsuccessful.
Response example
{"id":"4eaeb363-296d-4ccc-a973-7805e6f400bd","userId":"d5bd4771-864e-4ae5-b913-dfb5cdcd5772","createdAt":"2020-04-07T17:04:26Z","updatedAt":"2020-04-07T17:04:26Z","completedAt":"2020-04-07T17:04:26Z","state":"PENDING","targetId":"string","targetType":"vehicle","targetState":{"maxCurrent":10},"failureReason":{"type":"NO_RESPONSE","detail":"The chargeable device remained unreachable."}}
Response 400
A precondition check failed that is unlikely to change within the action's timeout window. This occurs if the charger cannot perform the action.
Attributes
typestring
A URI reference that identifies the problem type.
titlestring
A short, human-readable summary of the problem type.
detailstring
A human-readable explanation specific to this occurrence of the problem.
Returns the current state of the requested Action.
Request
Path parameters
actionIdstring<uuid>Required
ID of the Action.
Request example
curl--request GET \--url https://enode-api.production.enode.io/chargers/actions/4eaeb363-296d-4ccc-a973-7805e6f400bd \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
idstring<uuid>
The ID of the action.
userIdstring
The ID of the user that owns the target of this action.
createdAtstring<date-time>
Time when this action was created
updatedAtstring<date-time>
Time when this action was last updated
completedAtstring<date-time> or null
Time when the action transitioned to a non-pending state.
statestring
The real-time status of an action executed on a target.
PENDING: The initial state. Enode is actively sending commands and monitoring the target for changes.
CONFIRMED: Successful transition of the target to the desired state.
FAILED: The target did not respond to the action before timing out. Enode has ceased sending additional commands.
CANCELLED: A required precondition was not met during the action's timeout window or another action has been sent to the target, overriding this one.
Possible enum values:
PENDINGCONFIRMEDFAILEDCANCELLED
targetIdstring
ID of the target which this action is controlling.
targetTypestring
Possible enum values:
vehiclecharger
kindstring
The charging action to perform
Possible enum values:
STARTSTOP
failureReasonobject or null
Information about why was this action not executed successfully.
Show child attributes
failureReason.typestring
A machine-readable high level error category.
NO_RESPONSE: The chargeable device did not react to our charge commands within the action's timeout window.
FAILED_PRECONDITION: The chargeable device did not meet all required preconditions for this action to be executed during the action's timeout window.
UNNECESSARY: The action was not carried out given that the device was already in the desired state.
CONFLICT: A newer action for this chargeable has been created. This action is now abandoned.
REQUESTED_CANCELLATION: This action was cancelled by request of the controlling owner. The controlling owner may refer to another Enode entity which initiated the command, such as a schedule or smart override.
NOT_FOUND: The chargeable was deleted while the action was PENDING.
A human-readable explanation of why the charging action was unsuccessful.
Response example
{"id":"4eaeb363-296d-4ccc-a973-7805e6f400bd","userId":"d5bd4771-864e-4ae5-b913-dfb5cdcd5772","createdAt":"2020-04-07T17:04:26Z","updatedAt":"2020-04-07T17:04:26Z","completedAt":"2020-04-07T17:04:26Z","state":"PENDING","targetId":"bfbccded-8a1c-45a8-bbda-dcaeef29977a","targetType":"vehicle","kind":"START","failureReason":{"type":"NO_RESPONSE","detail":"The chargeable device remained unreachable."}}
Response 404
Action not found.
Cancel charger action
POST /chargers/actions/{actionId}/cancel
Cancels a pending Action, halting any further attempts by Enode to execute it.
Note: This only updates the Action's status to CANCELLED within Enode and does not reflect a change in the vendor's cloud. Thus any pending Action in the vendor's cloud might still be executed.
Request
Path parameters
actionIdstring<uuid>Required
ID of the Action.
Request example
curl--request POST \--url https://enode-api.production.enode.io/chargers/actions/4eaeb363-296d-4ccc-a973-7805e6f400bd/cancel \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
idstring<uuid>
The ID of the action.
userIdstring
The ID of the user that owns the target of this action.
createdAtstring<date-time>
Time when this action was created
updatedAtstring<date-time>
Time when this action was last updated
completedAtstring<date-time> or null
Time when the action transitioned to a non-pending state.
statestring
The real-time status of an action executed on a target.
PENDING: The initial state. Enode is actively sending commands and monitoring the target for changes.
CONFIRMED: Successful transition of the target to the desired state.
FAILED: The target did not respond to the action before timing out. Enode has ceased sending additional commands.
CANCELLED: A required precondition was not met during the action's timeout window or another action has been sent to the target, overriding this one.
Possible enum values:
PENDINGCONFIRMEDFAILEDCANCELLED
targetIdstring
ID of the target which this action is controlling.
targetTypestring
Possible enum values:
vehiclecharger
kindstring
The charging action to perform
Possible enum values:
STARTSTOP
failureReasonobject or null
Information about why was this action not executed successfully.
Show child attributes
failureReason.typestring
A machine-readable high level error category.
NO_RESPONSE: The chargeable device did not react to our charge commands within the action's timeout window.
FAILED_PRECONDITION: The chargeable device did not meet all required preconditions for this action to be executed during the action's timeout window.
UNNECESSARY: The action was not carried out given that the device was already in the desired state.
CONFLICT: A newer action for this chargeable has been created. This action is now abandoned.
REQUESTED_CANCELLATION: This action was cancelled by request of the controlling owner. The controlling owner may refer to another Enode entity which initiated the command, such as a schedule or smart override.
NOT_FOUND: The chargeable was deleted while the action was PENDING.
A human-readable explanation of why the charging action was unsuccessful.
Response example
{"id":"4eaeb363-296d-4ccc-a973-7805e6f400bd","userId":"d5bd4771-864e-4ae5-b913-dfb5cdcd5772","createdAt":"2020-04-07T17:04:26Z","updatedAt":"2020-04-07T17:04:26Z","completedAt":"2020-04-07T17:04:26Z","state":"PENDING","targetId":"bfbccded-8a1c-45a8-bbda-dcaeef29977a","targetType":"vehicle","kind":"START","failureReason":{"type":"NO_RESPONSE","detail":"The chargeable device remained unreachable."}}
Response 404
Action not found.
Response 409
Action already in a resolved state.
Attributes
idstring<uuid>
The ID of the action.
userIdstring
The ID of the user that owns the target of this action.
createdAtstring<date-time>
Time when this action was created
updatedAtstring<date-time>
Time when this action was last updated
completedAtstring<date-time> or null
Time when the action transitioned to a non-pending state.
statestring
The real-time status of an action executed on a target.
PENDING: The initial state. Enode is actively sending commands and monitoring the target for changes.
CONFIRMED: Successful transition of the target to the desired state.
FAILED: The target did not respond to the action before timing out. Enode has ceased sending additional commands.
CANCELLED: A required precondition was not met during the action's timeout window or another action has been sent to the target, overriding this one.
Possible enum values:
PENDINGCONFIRMEDFAILEDCANCELLED
targetIdstring
ID of the target which this action is controlling.
targetTypestring
Possible enum values:
vehiclecharger
kindstring
The charging action to perform
Possible enum values:
STARTSTOP
failureReasonobject or null
Information about why was this action not executed successfully.
Show child attributes
failureReason.typestring
A machine-readable high level error category.
NO_RESPONSE: The chargeable device did not react to our charge commands within the action's timeout window.
FAILED_PRECONDITION: The chargeable device did not meet all required preconditions for this action to be executed during the action's timeout window.
UNNECESSARY: The action was not carried out given that the device was already in the desired state.
CONFLICT: A newer action for this chargeable has been created. This action is now abandoned.
REQUESTED_CANCELLATION: This action was cancelled by request of the controlling owner. The controlling owner may refer to another Enode entity which initiated the command, such as a schedule or smart override.
NOT_FOUND: The chargeable was deleted while the action was PENDING.
A human-readable explanation of why the charging action was unsuccessful.
Response example
{"id":"4eaeb363-296d-4ccc-a973-7805e6f400bd","userId":"d5bd4771-864e-4ae5-b913-dfb5cdcd5772","createdAt":"2020-04-07T17:04:26Z","updatedAt":"2020-04-07T17:04:26Z","completedAt":"2020-04-07T17:04:26Z","state":"PENDING","targetId":"bfbccded-8a1c-45a8-bbda-dcaeef29977a","targetType":"vehicle","kind":"START","failureReason":{"type":"NO_RESPONSE","detail":"The chargeable device remained unreachable."}}
Refresh charger data
POST /chargers/{chargerId}/refresh-hint
Use this endpoint to initiate an expedited data refresh for the specified charger.
Note: The Enode platform keeps data automatically up-to-date and detects changes in the OEM APIs within seconds to a few minutes. We change the refresh interval dynamically based on a number of heuristics. This ensures we find the best trade-off between the stability of the connection to the OEM and freshness of the data. This method overrides most of our heuristics and should therefore be used with caution. You may use it when you have a strong reason to believe the data might be stale.
Request
Path parameters
chargerIdstringRequired
ID of the Charger.
Request example
curl--request POST \--url https://enode-api.production.enode.io/chargers/ad84e742-0f46-4cf4-b0db-7d890f8f23f5/refresh-hint \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 204
Refresh hint registered successfully.
Response 404
The specified charger was not found.
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 HoldAPI endpoint, Return to ScheduleAPI, or via Schedules.
List HVAC units
GET /hvacs
Paginated list of HVAC units
Request
Query parameters
afterstringOptional
beforestringOptional
pageSizeintegerOptional
Default value: 50
Request example
curl--request GET \--url'https://enode-api.production.enode.io/hvacs?after=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&before=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&pageSize=50'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
dataarray of object
List of paginated HVAC units
Show child attributes
data[].idstring
HVAC unit ID
data[].userIdstring
The ID of the user that linked this hvac.
data[].vendorstring
Machine-friendly name of the vendor. Use this in API requests.
The last time Enode successfully communicated with the vendor or when the HVAC unit was initially linked.
data[].isReachableboolean
Whether live data from the HVAC unit is currently reachable 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.
data[].consumptionRatenumber or null
The current rate of energy consumption in kW. An inactive HVAC will have a consumption rate of 0. HVACs not supporting consumption rate will report null. This value is currently only supported by a small number of devices.
Name of the device, as set by the user on the device/vendor. If no user-specified name is available, we construct a fallback name using the vendor/device/model names.
data[].information.groupNamestring or null
Name of the group the device belongs to, as set by the user on the device/vendor. Groups are typically presented as "rooms" or "zones".
data[].information.categorystring
Classification of the connected HVAC device.
HEATING: A direct heating device, such as an electric panel heater
COOLING: A direct cooling device, such as an air conditioner
HEAT_PUMP: An air-to-air heat pump capable of both heating and cooling
AGGREGATOR: A device that is capable of controlling various HVAC systems behind it, such as a smart thermostat
Possible enum values:
HEATINGCOOLINGHEAT_PUMPAGGREGATOR
data[].temperatureStateobject
Latest information about temperature. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
data[].temperatureState.currentTemperaturenumber or null
Current air temperature reported by device in degrees Celsius.
data[].temperatureState.isActiveboolean
Whether the HVAC unit is actively heating or cooling.
data[].temperatureState.lastUpdatedstring<date-time> or null
Time of last temperature state update. Reflects when the OEM reported a change or Enode recorded a change in any field, whichever is newer
data[].thermostatStateobject
Latest information about the thermostat state. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
data[].thermostatState.modestring or null
The current state of the HVAC unit.
OFF: The HVAC unit is turned off.
AUTO: The HVAC unit will try to maintain the given setpoint by alternating between cooling and heating based on the ambient temperature
COOL: The HVAC unit will only cool to the given setpoint.
HEAT: The HVAC unit will only heat to the given setpoint
null: The mode of the HVAC unit is currently not available from the vendor or not supported by enode.
Possible enum values:
OFFAUTOCOOLHEAT
data[].thermostatState.heatSetpointnumber or null
If mode allows, heat when currentTemperature falls below this point.
data[].thermostatState.coolSetpointnumber or null
If mode allows, cool when currentTemperature rises above this point.
data[].thermostatState.holdTypestring or null
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.
Possible enum values:
PERMANENTSCHEDULED
data[].thermostatState.lastUpdatedstring<date-time> or null
Time of last thermostat state update. Reflects when the OEM reported a change or Enode recorded a change in any field, whichever is newer.
data[].scopesarray of string
Scopes that the user has granted for this HVAC unit.
data[].modestring or nullDeprecated
The current state of the HVAC unit.
OFF: The HVAC unit is turned off.
AUTO: The HVAC unit will try to maintain the given setpoint by alternating between cooling and heating based on the ambient temperature
COOL: The HVAC unit will only cool to the given setpoint.
HEAT: The HVAC unit will only heat to the given setpoint
null: The mode of the HVAC unit is currently not available from the vendor or not supported by enode.
Replaced by thermostatState.mode. The HVAC's mode.
Possible enum values:
OFFAUTOCOOLHEAT
data[].heatSetpointnumber or nullDeprecated
Replaced by thermostatState.heatSetpoint. If mode allows, heat when currentTemperature falls below this point.
data[].coolSetpointnumber or nullDeprecated
Replaced by thermostatState.coolSetpoint. If mode allows, cool when currentTemperature rises above this point.
data[].holdTypestring or nullDeprecated
Replaced by thermostatState.holdType. 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.
Possible enum values:
PERMANENTSCHEDULED
data[].isActivebooleanDeprecated
Replaced by temperatureState.isActive. Whether the HVAC unit is actively heating or cooling.
data[].currentTemperaturenumber or nullDeprecated
Replaced by temperatureState.currentTemperature. Current air temperature reported by device in degrees Celsius.
data[].capabilitiesobject
An object describing valid states for this HVAC unit.
Show child attributes
data[].capabilities.capableModesarray of string,null or null
A list of valid modes for this HVAC unit.
data[].capabilities.coolSetpointRangeobject or null
The range of allowable values for coolSetpoint.
Show child attributes
data[].capabilities.coolSetpointRange.minnumber or null
The minimum allowable temperature, inclusive.
data[].capabilities.coolSetpointRange.maxnumber or null
The maximum allowable temperature, inclusive.
data[].capabilities.heatSetpointRangeobject or null
The range of allowable values for heatSetpoint.
Show child attributes
data[].capabilities.heatSetpointRange.minnumber or null
The minimum allowable temperature, inclusive.
data[].capabilities.heatSetpointRange.maxnumber or null
The maximum allowable temperature, inclusive.
data[].capabilities.setpointDifferenceRangeobject or null
A constraint specifying the minimum and maximum allowable difference between heatSetpoint and coolSetpoint. Only applicable in AUTO mode.
Show child attributes
data[].capabilities.setpointDifferenceRange.minnumber or null
The minimum allowable difference, inclusive.
data[].capabilities.setpointDifferenceRange.maxnumber or null
curl--request GET \--url'https://enode-api.production.enode.io/users/%7BuserId%7D/hvacs?after=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&before=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&pageSize=50'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
dataarray of object
List of paginated HVAC units
Show child attributes
data[].idstring
HVAC unit ID
data[].userIdstring
The ID of the user that linked this hvac.
data[].vendorstring
Machine-friendly name of the vendor. Use this in API requests.
The last time Enode successfully communicated with the vendor or when the HVAC unit was initially linked.
data[].isReachableboolean
Whether live data from the HVAC unit is currently reachable 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.
data[].consumptionRatenumber or null
The current rate of energy consumption in kW. An inactive HVAC will have a consumption rate of 0. HVACs not supporting consumption rate will report null. This value is currently only supported by a small number of devices.
Name of the device, as set by the user on the device/vendor. If no user-specified name is available, we construct a fallback name using the vendor/device/model names.
data[].information.groupNamestring or null
Name of the group the device belongs to, as set by the user on the device/vendor. Groups are typically presented as "rooms" or "zones".
data[].information.categorystring
Classification of the connected HVAC device.
HEATING: A direct heating device, such as an electric panel heater
COOLING: A direct cooling device, such as an air conditioner
HEAT_PUMP: An air-to-air heat pump capable of both heating and cooling
AGGREGATOR: A device that is capable of controlling various HVAC systems behind it, such as a smart thermostat
Possible enum values:
HEATINGCOOLINGHEAT_PUMPAGGREGATOR
data[].temperatureStateobject
Latest information about temperature. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
data[].temperatureState.currentTemperaturenumber or null
Current air temperature reported by device in degrees Celsius.
data[].temperatureState.isActiveboolean
Whether the HVAC unit is actively heating or cooling.
data[].temperatureState.lastUpdatedstring<date-time> or null
Time of last temperature state update. Reflects when the OEM reported a change or Enode recorded a change in any field, whichever is newer
data[].thermostatStateobject
Latest information about the thermostat state. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
data[].thermostatState.modestring or null
The current state of the HVAC unit.
OFF: The HVAC unit is turned off.
AUTO: The HVAC unit will try to maintain the given setpoint by alternating between cooling and heating based on the ambient temperature
COOL: The HVAC unit will only cool to the given setpoint.
HEAT: The HVAC unit will only heat to the given setpoint
null: The mode of the HVAC unit is currently not available from the vendor or not supported by enode.
Possible enum values:
OFFAUTOCOOLHEAT
data[].thermostatState.heatSetpointnumber or null
If mode allows, heat when currentTemperature falls below this point.
data[].thermostatState.coolSetpointnumber or null
If mode allows, cool when currentTemperature rises above this point.
data[].thermostatState.holdTypestring or null
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.
Possible enum values:
PERMANENTSCHEDULED
data[].thermostatState.lastUpdatedstring<date-time> or null
Time of last thermostat state update. Reflects when the OEM reported a change or Enode recorded a change in any field, whichever is newer.
data[].scopesarray of string
Scopes that the user has granted for this HVAC unit.
data[].modestring or nullDeprecated
The current state of the HVAC unit.
OFF: The HVAC unit is turned off.
AUTO: The HVAC unit will try to maintain the given setpoint by alternating between cooling and heating based on the ambient temperature
COOL: The HVAC unit will only cool to the given setpoint.
HEAT: The HVAC unit will only heat to the given setpoint
null: The mode of the HVAC unit is currently not available from the vendor or not supported by enode.
Replaced by thermostatState.mode. The HVAC's mode.
Possible enum values:
OFFAUTOCOOLHEAT
data[].heatSetpointnumber or nullDeprecated
Replaced by thermostatState.heatSetpoint. If mode allows, heat when currentTemperature falls below this point.
data[].coolSetpointnumber or nullDeprecated
Replaced by thermostatState.coolSetpoint. If mode allows, cool when currentTemperature rises above this point.
data[].holdTypestring or nullDeprecated
Replaced by thermostatState.holdType. 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.
Possible enum values:
PERMANENTSCHEDULED
data[].isActivebooleanDeprecated
Replaced by temperatureState.isActive. Whether the HVAC unit is actively heating or cooling.
data[].currentTemperaturenumber or nullDeprecated
Replaced by temperatureState.currentTemperature. Current air temperature reported by device in degrees Celsius.
data[].capabilitiesobject
An object describing valid states for this HVAC unit.
Show child attributes
data[].capabilities.capableModesarray of string,null or null
A list of valid modes for this HVAC unit.
data[].capabilities.coolSetpointRangeobject or null
The range of allowable values for coolSetpoint.
Show child attributes
data[].capabilities.coolSetpointRange.minnumber or null
The minimum allowable temperature, inclusive.
data[].capabilities.coolSetpointRange.maxnumber or null
The maximum allowable temperature, inclusive.
data[].capabilities.heatSetpointRangeobject or null
The range of allowable values for heatSetpoint.
Show child attributes
data[].capabilities.heatSetpointRange.minnumber or null
The minimum allowable temperature, inclusive.
data[].capabilities.heatSetpointRange.maxnumber or null
The maximum allowable temperature, inclusive.
data[].capabilities.setpointDifferenceRangeobject or null
A constraint specifying the minimum and maximum allowable difference between heatSetpoint and coolSetpoint. Only applicable in AUTO mode.
Show child attributes
data[].capabilities.setpointDifferenceRange.minnumber or null
The minimum allowable difference, inclusive.
data[].capabilities.setpointDifferenceRange.maxnumber or null
The last time Enode successfully communicated with the vendor or when the HVAC unit was initially linked.
isReachableboolean
Whether live data from the HVAC unit is currently reachable 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.
consumptionRatenumber or null
The current rate of energy consumption in kW. An inactive HVAC will have a consumption rate of 0. HVACs not supporting consumption rate will report null. This value is currently only supported by a small number of devices.
Name of the device, as set by the user on the device/vendor. If no user-specified name is available, we construct a fallback name using the vendor/device/model names.
information.groupNamestring or null
Name of the group the device belongs to, as set by the user on the device/vendor. Groups are typically presented as "rooms" or "zones".
information.categorystring
Classification of the connected HVAC device.
HEATING: A direct heating device, such as an electric panel heater
COOLING: A direct cooling device, such as an air conditioner
HEAT_PUMP: An air-to-air heat pump capable of both heating and cooling
AGGREGATOR: A device that is capable of controlling various HVAC systems behind it, such as a smart thermostat
Possible enum values:
HEATINGCOOLINGHEAT_PUMPAGGREGATOR
temperatureStateobject
Latest information about temperature. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
temperatureState.currentTemperaturenumber or null
Current air temperature reported by device in degrees Celsius.
temperatureState.isActiveboolean
Whether the HVAC unit is actively heating or cooling.
temperatureState.lastUpdatedstring<date-time> or null
Time of last temperature state update. Reflects when the OEM reported a change or Enode recorded a change in any field, whichever is newer
thermostatStateobject
Latest information about the thermostat state. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
thermostatState.modestring or null
The current state of the HVAC unit.
OFF: The HVAC unit is turned off.
AUTO: The HVAC unit will try to maintain the given setpoint by alternating between cooling and heating based on the ambient temperature
COOL: The HVAC unit will only cool to the given setpoint.
HEAT: The HVAC unit will only heat to the given setpoint
null: The mode of the HVAC unit is currently not available from the vendor or not supported by enode.
Possible enum values:
OFFAUTOCOOLHEAT
thermostatState.heatSetpointnumber or null
If mode allows, heat when currentTemperature falls below this point.
thermostatState.coolSetpointnumber or null
If mode allows, cool when currentTemperature rises above this point.
thermostatState.holdTypestring or null
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.
Possible enum values:
PERMANENTSCHEDULED
thermostatState.lastUpdatedstring<date-time> or null
Time of last thermostat state update. Reflects when the OEM reported a change or Enode recorded a change in any field, whichever is newer.
scopesarray of string
Scopes that the user has granted for this HVAC unit.
modestring or nullDeprecated
The current state of the HVAC unit.
OFF: The HVAC unit is turned off.
AUTO: The HVAC unit will try to maintain the given setpoint by alternating between cooling and heating based on the ambient temperature
COOL: The HVAC unit will only cool to the given setpoint.
HEAT: The HVAC unit will only heat to the given setpoint
null: The mode of the HVAC unit is currently not available from the vendor or not supported by enode.
Replaced by thermostatState.mode. The HVAC's mode.
Possible enum values:
OFFAUTOCOOLHEAT
heatSetpointnumber or nullDeprecated
Replaced by thermostatState.heatSetpoint. If mode allows, heat when currentTemperature falls below this point.
coolSetpointnumber or nullDeprecated
Replaced by thermostatState.coolSetpoint. If mode allows, cool when currentTemperature rises above this point.
holdTypestring or nullDeprecated
Replaced by thermostatState.holdType. 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.
Possible enum values:
PERMANENTSCHEDULED
isActivebooleanDeprecated
Replaced by temperatureState.isActive. Whether the HVAC unit is actively heating or cooling.
currentTemperaturenumber or nullDeprecated
Replaced by temperatureState.currentTemperature. Current air temperature reported by device in degrees Celsius.
capabilitiesobject
An object describing valid states for this HVAC unit.
Show child attributes
capabilities.capableModesarray of string,null or null
A list of valid modes for this HVAC unit.
capabilities.coolSetpointRangeobject or null
The range of allowable values for coolSetpoint.
Show child attributes
capabilities.coolSetpointRange.minnumber or null
The minimum allowable temperature, inclusive.
capabilities.coolSetpointRange.maxnumber or null
The maximum allowable temperature, inclusive.
capabilities.heatSetpointRangeobject or null
The range of allowable values for heatSetpoint.
Show child attributes
capabilities.heatSetpointRange.minnumber or null
The minimum allowable temperature, inclusive.
capabilities.heatSetpointRange.maxnumber or null
The maximum allowable temperature, inclusive.
capabilities.setpointDifferenceRangeobject or null
A constraint specifying the minimum and maximum allowable difference between heatSetpoint and coolSetpoint. Only applicable in AUTO mode.
Show child attributes
capabilities.setpointDifferenceRange.minnumber or null
The minimum allowable difference, inclusive.
capabilities.setpointDifferenceRange.maxnumber or null
The maximum allowable difference, inclusive.
capabilities.setFollowScheduleobject
Supports following a schedule set on the device.
Show child attributes
capabilities.setFollowSchedule.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.setFollowSchedule.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
capabilities.setPermanentHoldobject
Supports setting a permanent hold.
Show child attributes
capabilities.setPermanentHold.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.setPermanentHold.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
capabilities.capableHoldTypesarray of string or nullDeprecated
A list of valid hold types for this HVAC unit.
Deprecated: Check the setFollowSchedule and setPermanentHold capabilities instead.
locationIdstring<uuid> or null
ID of the location the HVAC unit is housed at (if any)
The last time Enode successfully communicated with the vendor or when the HVAC unit was initially linked.
isReachableboolean
Whether live data from the HVAC unit is currently reachable 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.
consumptionRatenumber or null
The current rate of energy consumption in kW. An inactive HVAC will have a consumption rate of 0. HVACs not supporting consumption rate will report null. This value is currently only supported by a small number of devices.
Name of the device, as set by the user on the device/vendor. If no user-specified name is available, we construct a fallback name using the vendor/device/model names.
information.groupNamestring or null
Name of the group the device belongs to, as set by the user on the device/vendor. Groups are typically presented as "rooms" or "zones".
information.categorystring
Classification of the connected HVAC device.
HEATING: A direct heating device, such as an electric panel heater
COOLING: A direct cooling device, such as an air conditioner
HEAT_PUMP: An air-to-air heat pump capable of both heating and cooling
AGGREGATOR: A device that is capable of controlling various HVAC systems behind it, such as a smart thermostat
Possible enum values:
HEATINGCOOLINGHEAT_PUMPAGGREGATOR
temperatureStateobject
Latest information about temperature. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
temperatureState.currentTemperaturenumber or null
Current air temperature reported by device in degrees Celsius.
temperatureState.isActiveboolean
Whether the HVAC unit is actively heating or cooling.
temperatureState.lastUpdatedstring<date-time> or null
Time of last temperature state update. Reflects when the OEM reported a change or Enode recorded a change in any field, whichever is newer
thermostatStateobject
Latest information about the thermostat state. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
thermostatState.modestring or null
The current state of the HVAC unit.
OFF: The HVAC unit is turned off.
AUTO: The HVAC unit will try to maintain the given setpoint by alternating between cooling and heating based on the ambient temperature
COOL: The HVAC unit will only cool to the given setpoint.
HEAT: The HVAC unit will only heat to the given setpoint
null: The mode of the HVAC unit is currently not available from the vendor or not supported by enode.
Possible enum values:
OFFAUTOCOOLHEAT
thermostatState.heatSetpointnumber or null
If mode allows, heat when currentTemperature falls below this point.
thermostatState.coolSetpointnumber or null
If mode allows, cool when currentTemperature rises above this point.
thermostatState.holdTypestring or null
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.
Possible enum values:
PERMANENTSCHEDULED
thermostatState.lastUpdatedstring<date-time> or null
Time of last thermostat state update. Reflects when the OEM reported a change or Enode recorded a change in any field, whichever is newer.
scopesarray of string
Scopes that the user has granted for this HVAC unit.
modestring or nullDeprecated
The current state of the HVAC unit.
OFF: The HVAC unit is turned off.
AUTO: The HVAC unit will try to maintain the given setpoint by alternating between cooling and heating based on the ambient temperature
COOL: The HVAC unit will only cool to the given setpoint.
HEAT: The HVAC unit will only heat to the given setpoint
null: The mode of the HVAC unit is currently not available from the vendor or not supported by enode.
Replaced by thermostatState.mode. The HVAC's mode.
Possible enum values:
OFFAUTOCOOLHEAT
heatSetpointnumber or nullDeprecated
Replaced by thermostatState.heatSetpoint. If mode allows, heat when currentTemperature falls below this point.
coolSetpointnumber or nullDeprecated
Replaced by thermostatState.coolSetpoint. If mode allows, cool when currentTemperature rises above this point.
holdTypestring or nullDeprecated
Replaced by thermostatState.holdType. 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.
Possible enum values:
PERMANENTSCHEDULED
isActivebooleanDeprecated
Replaced by temperatureState.isActive. Whether the HVAC unit is actively heating or cooling.
currentTemperaturenumber or nullDeprecated
Replaced by temperatureState.currentTemperature. Current air temperature reported by device in degrees Celsius.
capabilitiesobject
An object describing valid states for this HVAC unit.
Show child attributes
capabilities.capableModesarray of string,null or null
A list of valid modes for this HVAC unit.
capabilities.coolSetpointRangeobject or null
The range of allowable values for coolSetpoint.
Show child attributes
capabilities.coolSetpointRange.minnumber or null
The minimum allowable temperature, inclusive.
capabilities.coolSetpointRange.maxnumber or null
The maximum allowable temperature, inclusive.
capabilities.heatSetpointRangeobject or null
The range of allowable values for heatSetpoint.
Show child attributes
capabilities.heatSetpointRange.minnumber or null
The minimum allowable temperature, inclusive.
capabilities.heatSetpointRange.maxnumber or null
The maximum allowable temperature, inclusive.
capabilities.setpointDifferenceRangeobject or null
A constraint specifying the minimum and maximum allowable difference between heatSetpoint and coolSetpoint. Only applicable in AUTO mode.
Show child attributes
capabilities.setpointDifferenceRange.minnumber or null
The minimum allowable difference, inclusive.
capabilities.setpointDifferenceRange.maxnumber or null
The maximum allowable difference, inclusive.
capabilities.setFollowScheduleobject
Supports following a schedule set on the device.
Show child attributes
capabilities.setFollowSchedule.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.setFollowSchedule.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
capabilities.setPermanentHoldobject
Supports setting a permanent hold.
Show child attributes
capabilities.setPermanentHold.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.setPermanentHold.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
capabilities.capableHoldTypesarray of string or nullDeprecated
A list of valid hold types for this HVAC unit.
Deprecated: Check the setFollowSchedule and setPermanentHold capabilities instead.
locationIdstring<uuid> or null
ID of the location the HVAC unit is housed at (if any)
Cancels a pending HVAC action, halting any further attempts by Enode to execute it.
Note: This only updates the action's status to CANCELLED within Enode and does not reflect a change in the vendor's cloud. Thus any pending action in the vendor's cloud might still be executed.
Request
Path parameters
actionIdstring<uuid>Required
ID of the Action.
Request example
curl--request POST \--url https://enode-api.production.enode.io/hvacs/actions/4eaeb363-296d-4ccc-a973-7805e6f400bd/cancel \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
idstring<uuid>
The ID of the action.
userIdstring
The ID of the user that owns the target of this action.
createdAtstring<date-time>
Time when this action was created
updatedAtstring<date-time>
Time when this action was last updated
completedAtstring<date-time> or null
Time when the action transitioned to a non-pending state.
statestring
The real-time status of an action executed on a target.
PENDING: The initial state. Enode is actively sending commands and monitoring the target for changes.
CONFIRMED: Successful transition of the target to the desired state.
FAILED: The target did not respond to the action before timing out. Enode has ceased sending additional commands.
CANCELLED: A required precondition was not met during the action's timeout window or another action has been sent to the target, overriding this one.
Possible enum values:
PENDINGCONFIRMEDFAILEDCANCELLED
targetIdstring
ID of the entity asset (HVAC) which this action is controlling.
Tell an HVAC unit to follow the schedule set on the device. Only available if the target's capabilities.setFollowSchedule.isCapable is set to true. 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 endpointAPI.
Request
Path parameters
hvacIdstringRequired
ID of the HVAC unit.
Request example
curl--request POST \--url https://enode-api.production.enode.io/hvacs/8f39fa8d-8f10-4984-a319-741dc23848c0/follow-schedule \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Resulting HVAC action
Attributes
idstring<uuid>
The ID of the action.
userIdstring
The ID of the user that owns the target of this action.
createdAtstring<date-time>
Time when this action was created
updatedAtstring<date-time>
Time when this action was last updated
completedAtstring<date-time> or null
Time when the action transitioned to a non-pending state.
statestring
The real-time status of an action executed on a target.
PENDING: The initial state. Enode is actively sending commands and monitoring the target for changes.
CONFIRMED: Successful transition of the target to the desired state.
FAILED: The target did not respond to the action before timing out. Enode has ceased sending additional commands.
CANCELLED: A required precondition was not met during the action's timeout window or another action has been sent to the target, overriding this one.
Possible enum values:
PENDINGCONFIRMEDFAILEDCANCELLED
targetIdstring
ID of the entity asset (HVAC) which this action is controlling.
Use this endpoint to initiate an expedited data refresh for the specified HVAC unit.
Note: The Enode platform keeps data automatically up-to-date and detects changes in the OEM APIs within seconds to a few minutes. We change the refresh interval dynamically based on a number of heuristics. This ensures we find the best trade-off between the stability of the connection to the OEM and freshness of the data. This method overrides most of our heuristics and should therefore be used with caution. You may use it when you have a strong reason to believe the data might be stale.
Request
Path parameters
hvacIdstringRequired
ID of the HVAC unit.
Request example
curl--request POST \--url https://enode-api.production.enode.io/hvacs/8f39fa8d-8f10-4984-a319-741dc23848c0/refresh-hint \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 204
Refresh hint registered successfully.
Response 404
The specified hvac was not found.
Set HVAC unit mode as permanent hold
POST /hvacs/{hvacId}/permanent-hold
Tell an HVAC unit to enter a permanent hold. Only available if the target's capabilities.setPermanentHold.isCapable is set to true. 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 endpointAPI.
Request
Path parameters
hvacIdstringRequired
ID of the HVAC unit.
Attributes
coolSetpointnumberRequired
modestringRequired
Possible enum values:
COOL
Request example
curl--request POST \--url https://enode-api.production.enode.io/hvacs/8f39fa8d-8f10-4984-a319-741dc23848c0/permanent-hold \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'\--header'content-type: application/json'\--data'{"coolSetpoint":0,"mode":"COOL"}'
Response 200
Resulting action
Attributes
idstring<uuid>
The ID of the action.
userIdstring
The ID of the user that owns the target of this action.
createdAtstring<date-time>
Time when this action was created
updatedAtstring<date-time>
Time when this action was last updated
completedAtstring<date-time> or null
Time when the action transitioned to a non-pending state.
statestring
The real-time status of an action executed on a target.
PENDING: The initial state. Enode is actively sending commands and monitoring the target for changes.
CONFIRMED: Successful transition of the target to the desired state.
FAILED: The target did not respond to the action before timing out. Enode has ceased sending additional commands.
CANCELLED: A required precondition was not met during the action's timeout window or another action has been sent to the target, overriding this one.
Possible enum values:
PENDINGCONFIRMEDFAILEDCANCELLED
targetIdstring
ID of the entity asset (HVAC) which this action is controlling.
A precondition check failed that is unlikely to change within the action's timeout window. This occurs if the HVAC unit cannot perform the action or the setpoints are invalid.
Attributes
typestring
A URI reference that identifies the problem type.
titlestring
A short, human-readable summary of the problem type.
detailstring
A human-readable explanation specific to this occurrence of the problem.
Endpoints that return information about interventions. More information and examples are available in the Interventions guide.
List interventions
GET /interventions
Returns a list of all supported interventions.
The language parameter can be used to specify the language of the resolution title and description.
Request
Query parameters
languagestringOptional
Preferred BCP47 language code - Request translation for the specified language. Falls back to en-US if not provided or provided language code is unsupported.
curl--request GET \--url'https://enode-api.production.enode.io/interventions?language=SOME_STRING_VALUE&vendorType=SOME_undefined_VALUE&vendor=TESLA'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes (list of object)
idstring<uuid>
vendorstring
Machine-friendly representation of the OEM's name.
ISO 8601 timestamp of when the intervention was introduced.
domainstring
The domain the intervention is related to. i.e. Is the intervention related to the vendor service account or a setting on the device.
Possible enum values:
AccountDevice
resolutionobject
Show child attributes
resolution.titlestring
A localized title for the intervention.
resolution.descriptionstring
A localized description of how to resolve the intervention. Formatted as Markdown.
resolution.accessstring
Where the intervention needs to be resolved. i.e. remotely using the vendor's app or directly on the device.
Possible enum values:
RemotePhysical
resolution.agentstring
Who can resolve the intervention. i.e. a user can resolve the intervention themselves, or a licensed service retailer is needed.
Possible enum values:
UserThirdParty
Response example
[{"id":"9d90a9ad-9b24-4ce0-94e9-e888b1b877f4","vendor":"AUDI","vendorType":"string","brand":"Audi","introducedAt":"2023-03-16T00:00:00","domain":"Account","resolution":{"title":"Accept the Audi terms and conditions","description":"To gain access to your vehicle's telemetry data, it's necessary to accept Audi's terms and conditions. Follow these steps to proceed:<br><br>1. Open the **myAudi app** on your phone<br>2. Follow the prompts to accept Audi's terms and conditions","access":"Remote","agent":"User"}}]
Get intervention
GET /interventions/{interventionId}
Returns a single intervention.
The language parameter can be used to specify the language of the resolution title and description.
Request
Path parameters
interventionIdstring<uuid>Required
ID of the intervention.
Query parameters
languagestringOptional
Preferred BCP47 language code - Request translation for the specified language. Falls back to en-US if not provided or provided language code is unsupported.
curl--request GET \--url'https://enode-api.production.enode.io/interventions/ad84e742-0f46-4cf4-b0db-7d890f8f23f5?language=SOME_STRING_VALUE&vendorType=SOME_undefined_VALUE&vendor=TESLA'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
idstring<uuid>
vendorstring
Machine-friendly representation of the OEM's name.
ISO 8601 timestamp of when the intervention was introduced.
domainstring
The domain the intervention is related to. i.e. Is the intervention related to the vendor service account or a setting on the device.
Possible enum values:
AccountDevice
resolutionobject
Show child attributes
resolution.titlestring
A localized title for the intervention.
resolution.descriptionstring
A localized description of how to resolve the intervention. Formatted as Markdown.
resolution.accessstring
Where the intervention needs to be resolved. i.e. remotely using the vendor's app or directly on the device.
Possible enum values:
RemotePhysical
resolution.agentstring
Who can resolve the intervention. i.e. a user can resolve the intervention themselves, or a licensed service retailer is needed.
Possible enum values:
UserThirdParty
Response example
{"id":"9d90a9ad-9b24-4ce0-94e9-e888b1b877f4","vendor":"AUDI","vendorType":"string","brand":"Audi","introducedAt":"2023-03-16T00:00:00","domain":"Account","resolution":{"title":"Accept the Audi terms and conditions","description":"To gain access to your vehicle's telemetry data, it's necessary to accept Audi's terms and conditions. Follow these steps to proceed:<br><br>1. Open the **myAudi app** on your phone<br>2. Follow the prompts to accept Audi's terms and conditions","access":"Remote","agent":"User"}}
Response 404
Intervention not found.
Locations
Locations are used to assign devices to a geographical group. This is useful when running schedules, smart charging, or smart heating, as target behavior usually depends on a common locality of demand (charging, heating, cooling, etc.) and supply (tariff, battery, inverter, etc.) of energy.
List locations
GET /locations
Returns a paginated list of all Locations.
Request
Query parameters
afterstringOptional
beforestringOptional
pageSizeintegerOptional
Default value: 50
Request example
curl--request GET \--url'https://enode-api.production.enode.io/locations?after=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&before=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&pageSize=50'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
dataarray of object
Paginated list of locations
Show child attributes
data[].idstring<uuid>
The ID of the Location.
data[].userIdstring
User ID the location belongs to
data[].namestring
User-supplied name for the Location
data[].latitudenumber
Latitude in degrees
data[].longitudenumber
Longitude in degrees
data[].timezoneNamestring
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.
Default value: UTC
paginationobject
Cursors to the pages before and after current page. See the PaginationAPI section for reference.
Returns a paginated list of Locations for the given user.
Request
Path parameters
userIdstringRequired
ID of the User.
Query parameters
afterstringOptional
beforestringOptional
pageSizeintegerOptional
Default value: 50
Request example
curl--request GET \--url'https://enode-api.production.enode.io/users/%7BuserId%7D/locations?after=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&before=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&pageSize=50'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
dataarray of object
Paginated list of locations
Show child attributes
data[].idstring<uuid>
The ID of the Location.
data[].userIdstring
User ID the location belongs to
data[].namestring
User-supplied name for the Location
data[].latitudenumber
Latitude in degrees
data[].longitudenumber
Longitude in degrees
data[].timezoneNamestring
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.
Default value: UTC
paginationobject
Cursors to the pages before and after current page. See the PaginationAPI section for reference.
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.
Default value: UTC
Request example
curl--request POST \--url https://enode-api.production.enode.io/users/%7BuserId%7D/locations \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'\--header'content-type: application/json'\--data'{"name":"Enode","latitude":59.9165915,"longitude":10.7582268,"timezoneName":"Europe/Oslo"}'
Response 200
Created
Attributes
idstring<uuid>
The ID of the Location.
userIdstring
User ID the location belongs to
namestring
User-supplied name for the Location
latitudenumber
Latitude in degrees
longitudenumber
Longitude in degrees
timezoneNamestring
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.
curl--request GET \--url https://enode-api.production.enode.io/locations/4eaeb363-296d-4ccc-a973-7805e6f400bd \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
idstring<uuid>
The ID of the Location.
userIdstring
User ID the location belongs to
namestring
User-supplied name for the Location
latitudenumber
Latitude in degrees
longitudenumber
Longitude in degrees
timezoneNamestring
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.
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.
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.
Default value: UTC
Request example
curl--request PUT \--url https://enode-api.production.enode.io/locations/4eaeb363-296d-4ccc-a973-7805e6f400bd \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'\--header'content-type: application/json'\--data'{"name":"Enode","latitude":59.9165915,"longitude":10.7582268,"timezoneName":"Europe/Oslo"}'
Response 200
Attributes
idstring<uuid>
The ID of the Location.
userIdstring
User ID the location belongs to
namestring
User-supplied name for the Location
latitudenumber
Latitude in degrees
longitudenumber
Longitude in degrees
timezoneNamestring
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.
The Meter object represents a unit responsible for measuring energy usage. It provides detailed information about the meter itself and the energy consumption data it records.
Get meterBeta
GET /meters/{meterId}
Request
Path parameters
meterIdstring<uuid>Required
The ID of the meter you are looking up
Request example
curl--request GET \--url https://enode-api.production.enode.io/meters/54d827e1-8355-4fed-97b5-55940d1d09ba
Response 200
Attributes
idstring<uuid>
Unique identifier for the meter object
userIdstring
The ID of the user that linked this meter.
vendorstring
Machine-friendly name of the vendor. Use this in API requests.
Possible enum values:
ENPHASEHUAWEITESLASMASOLAREDGE
lastSeenstring<date-time>
The last time Enode successfully communicated with the vendor or when the meter was initially linked.
isReachableboolean
Whether live data from the meter is currently reachable from Enode's perspective. This 'reachability' may refer to reading from a cache operated by the meter's cloud service if that service has determined that its cache is valid.
informationobject
Descriptive information about the meter
Show child attributes
information.brandstring
A formatted and properly cased OEM brand name, suitable for reading by humans. May contain special characters.
Possible enum values:
EnphaseHuaweiTeslaSMASolarEdge
information.modelstring
Meter model
information.siteNamestring
Name of the site, as set by the user on the device/vendor. If no user-specified name is available, we construct a fallback name using the vendor/device/model names.
information.installationDatestring<date-time>
Meter installation date
energyStateobject
Latest information about meter load. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
energyState.powernumber or null
Indicates the current load on the meter.
Positive value: Power is imported from the grid to the site, indicating consumption.
Negative value: Power is exported back to the grid, typically when the site generates excess electricity (e.g. from solar panels, or battery discharge).
energyState.lastUpdatedstring<date-time> or null
Time of last received energy state update.
locationobject
Meter's GPS coordinates
Show child attributes
location.idstring<uuid> or null
ID of the location the solar battery is currently positioned at (if any).
location.longitudenumber or null
Longitude in degrees
location.latitudenumber or null
Latitude in degrees
location.lastUpdatedstring<date-time> or null
Time of last received location state update
capabilitiesobject
The specific meter's capabilities for recording energy consumption and production data.
Show child attributes
capabilities.measuresConsumptionobject
Indicates if the meter can measure consumed energy.
Show child attributes
capabilities.measuresConsumption.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.measuresConsumption.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
capabilities.measuresProductionobject
Indicates if the meter can measure energy produced or generated.
Show child attributes
capabilities.measuresProduction.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.measuresProduction.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
Use this endpoint to initiate an expedited data refresh for the specified meter.
Note: The Enode platform keeps data automatically up-to-date and detects changes in the OEM APIs within seconds to a few minutes. We change the refresh interval dynamically based on a number of heuristics. This ensures we find the best trade-off between the stability of the connection to the OEM and freshness of the data. This method overrides most of our heuristics and should therefore be used with caution. You may use it when you have a strong reason to believe the data might be stale.
Request
Path parameters
meterIdstring<uuid>Required
The ID of the meter you are looking up
Request example
curl--request POST \--url https://enode-api.production.enode.io/meters/54d827e1-8355-4fed-97b5-55940d1d09ba/refresh-hint \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 204
Refresh hint registered successfully.
Response 404
The specified meter was not found.
List user metersBeta
GET /users/{userId}/meters
Returns a paginated list of meters for the given userId.
Request
Path parameters
userIdstringRequired
ID of the User.
Query parameters
afterstringOptional
beforestringOptional
pageSizeintegerOptional
Default value: 50
Request example
curl--request GET \--url'https://enode-api.production.enode.io/users/%7BuserId%7D/meters?after=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&before=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&pageSize=50'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
dataarray of object
Paginated list of meters
Show child attributes
data[].idstring<uuid>
Unique identifier for the meter object
data[].userIdstring
The ID of the user that linked this meter.
data[].vendorstring
Machine-friendly name of the vendor. Use this in API requests.
Possible enum values:
ENPHASEHUAWEITESLASMASOLAREDGE
data[].lastSeenstring<date-time>
The last time Enode successfully communicated with the vendor or when the meter was initially linked.
data[].isReachableboolean
Whether live data from the meter is currently reachable from Enode's perspective. This 'reachability' may refer to reading from a cache operated by the meter's cloud service if that service has determined that its cache is valid.
data[].informationobject
Descriptive information about the meter
Show child attributes
data[].information.brandstring
A formatted and properly cased OEM brand name, suitable for reading by humans. May contain special characters.
Possible enum values:
EnphaseHuaweiTeslaSMASolarEdge
data[].information.modelstring
Meter model
data[].information.siteNamestring
Name of the site, as set by the user on the device/vendor. If no user-specified name is available, we construct a fallback name using the vendor/device/model names.
Latest information about meter load. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
data[].energyState.powernumber or null
Indicates the current load on the meter.
Positive value: Power is imported from the grid to the site, indicating consumption.
Negative value: Power is exported back to the grid, typically when the site generates excess electricity (e.g. from solar panels, or battery discharge).
data[].energyState.lastUpdatedstring<date-time> or null
Time of last received energy state update.
data[].locationobject
Meter's GPS coordinates
Show child attributes
data[].location.idstring<uuid> or null
ID of the location the solar battery is currently positioned at (if any).
data[].location.longitudenumber or null
Longitude in degrees
data[].location.latitudenumber or null
Latitude in degrees
data[].location.lastUpdatedstring<date-time> or null
Time of last received location state update
data[].capabilitiesobject
The specific meter's capabilities for recording energy consumption and production data.
Show child attributes
data[].capabilities.measuresConsumptionobject
Indicates if the meter can measure consumed energy.
curl--request GET \--url'https://enode-api.production.enode.io/meters?after=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&before=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&pageSize=50'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
dataarray of object
Paginated list of meters
Show child attributes
data[].idstring<uuid>
Unique identifier for the meter object
data[].userIdstring
The ID of the user that linked this meter.
data[].vendorstring
Machine-friendly name of the vendor. Use this in API requests.
Possible enum values:
ENPHASEHUAWEITESLASMASOLAREDGE
data[].lastSeenstring<date-time>
The last time Enode successfully communicated with the vendor or when the meter was initially linked.
data[].isReachableboolean
Whether live data from the meter is currently reachable from Enode's perspective. This 'reachability' may refer to reading from a cache operated by the meter's cloud service if that service has determined that its cache is valid.
data[].informationobject
Descriptive information about the meter
Show child attributes
data[].information.brandstring
A formatted and properly cased OEM brand name, suitable for reading by humans. May contain special characters.
Possible enum values:
EnphaseHuaweiTeslaSMASolarEdge
data[].information.modelstring
Meter model
data[].information.siteNamestring
Name of the site, as set by the user on the device/vendor. If no user-specified name is available, we construct a fallback name using the vendor/device/model names.
Latest information about meter load. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
data[].energyState.powernumber or null
Indicates the current load on the meter.
Positive value: Power is imported from the grid to the site, indicating consumption.
Negative value: Power is exported back to the grid, typically when the site generates excess electricity (e.g. from solar panels, or battery discharge).
data[].energyState.lastUpdatedstring<date-time> or null
Time of last received energy state update.
data[].locationobject
Meter's GPS coordinates
Show child attributes
data[].location.idstring<uuid> or null
ID of the location the solar battery is currently positioned at (if any).
data[].location.longitudenumber or null
Longitude in degrees
data[].location.latitudenumber or null
Latitude in degrees
data[].location.lastUpdatedstring<date-time> or null
Time of last received location state update
data[].capabilitiesobject
The specific meter's capabilities for recording energy consumption and production data.
Show child attributes
data[].capabilities.measuresConsumptionobject
Indicates if the meter can measure consumed energy.
Endpoints to manage schedules for Vehicles, Chargers and HVACs.
More information and examples are available in the Scheduling guide.
List schedules
GET /users/{userId}/schedules
Returns a list of Schedules registered to the User.
Request
Path parameters
userIdstringRequired
ID of the User.
Query parameters
afterstringOptional
beforestringOptional
pageSizeintegerOptional
Default value: 50
Request example
curl--request GET \--url'https://enode-api.production.enode.io/users/%7BuserId%7D/schedules?after=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&before=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&pageSize=50'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
dataarray
Paginated list of schedules
paginationobject
Cursors to the pages before and after current page. See the PaginationAPI section for reference.
Whether this Schedule should be attempting to control the target's charge state.
Default value: true
defaultShouldChargebooleanRequired
When no rule is active, the default charge state for the target.
rulesarray of objectRequired
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.
Show child attributes
rules[].hourMinuteobjectOptional
An interval composed of two clock times during which this rule applies each day. to always resolves to a timestamp after from, and thus may span across midnight and fall on the next day.
Show child attributes
rules[].hourMinute.fromstringRequired
Clock time from which this rule should apply each day.
rules[].hourMinute.tostringRequired
Clock time until which this rule should apply each day.
rules[].fromTimestampstring<date-time>Optional
UTC timestamp from which this rule should apply.
rules[].toTimestampstring<date-time>Optional
UTC timestamp until which this rule should apply.
rules[].weekdaysarray of integerOptional
An array of weekdays to which this rule should apply. A weekday starts with 0 for Monday and ends with 6 for Sunday.
rules[].shouldChargebooleanRequired
Whether a chargeable asset should want to charge while this rule is active.
targetIdstringRequired
ID of the asset (Vehicle/Charger) to which this schedule applies
targetTypestringRequired
Possible enum values:
vehiclecharger
locationIdstring<uuid> or nullRequired
ID of the Location to which this schedule applies. The behavior of a null value differs 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 location. This is designed to prevent schedules from controlling vehicles at public chargers where the user doesn't pay for electricity.
Request example
curl--request POST \--url https://enode-api.production.enode.io/users/%7BuserId%7D/schedules \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'\--header'content-type: application/json'\--data'{"isEnabled":true,"defaultShouldCharge":true,"rules":[{"hourMinute":{"from":"08:00","to":"09:00"},"fromTimestamp":"2020-04-07T17:04:26Z","toTimestamp":"2020-04-07T17:04:26Z","weekdays":[0,1,2,3,4,5],"shouldCharge":true}],"targetId":"string","targetType":"vehicle","locationId":"4eaeb363-296d-4ccc-a973-7805e6f400bd"}'
Response 200
Attributes
isEnabledboolean
Whether this Schedule should be attempting to control the target's charge state.
Default value: true
defaultShouldChargeboolean
When no rule is active, the default charge state for the target.
rulesarray of object
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.
Show child attributes
rules[].hourMinuteobject
An interval composed of two clock times during which this rule applies each day. to always resolves to a timestamp after from, and thus may span across midnight and fall on the next day.
Show child attributes
rules[].hourMinute.fromstring
Clock time from which this rule should apply each day.
rules[].hourMinute.tostring
Clock time until which this rule should apply each day.
rules[].fromTimestampstring<date-time>
UTC timestamp from which this rule should apply.
rules[].toTimestampstring<date-time>
UTC timestamp until which this rule should apply.
rules[].weekdaysarray of integer
An array of weekdays to which this rule should apply. A weekday starts with 0 for Monday and ends with 6 for Sunday.
rules[].shouldChargeboolean
Whether a chargeable asset should want to charge while this rule is active.
targetIdstring
ID of the asset (Vehicle/Charger) to which this schedule applies
targetTypestring
Possible enum values:
vehiclecharger
locationIdstring<uuid> or null
ID of the Location to which this schedule applies. The behavior of a null value differs 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 location. This is designed to prevent schedules from controlling vehicles at public chargers where the user doesn't pay for electricity.
curl--request GET \--url https://enode-api.production.enode.io/schedules/4eaeb363-296d-4ccc-a973-7805e6f400bd \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
isEnabledboolean
Whether this Schedule should be attempting to control the target's charge state.
Default value: true
defaultShouldChargeboolean
When no rule is active, the default charge state for the target.
rulesarray of object
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.
Show child attributes
rules[].hourMinuteobject
An interval composed of two clock times during which this rule applies each day. to always resolves to a timestamp after from, and thus may span across midnight and fall on the next day.
Show child attributes
rules[].hourMinute.fromstring
Clock time from which this rule should apply each day.
rules[].hourMinute.tostring
Clock time until which this rule should apply each day.
rules[].fromTimestampstring<date-time>
UTC timestamp from which this rule should apply.
rules[].toTimestampstring<date-time>
UTC timestamp until which this rule should apply.
rules[].weekdaysarray of integer
An array of weekdays to which this rule should apply. A weekday starts with 0 for Monday and ends with 6 for Sunday.
rules[].shouldChargeboolean
Whether a chargeable asset should want to charge while this rule is active.
targetIdstring
ID of the asset (Vehicle/Charger) to which this schedule applies
targetTypestring
Possible enum values:
vehiclecharger
locationIdstring<uuid> or null
ID of the Location to which this schedule applies. The behavior of a null value differs 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 location. This is designed to prevent schedules from controlling vehicles at public chargers where the user doesn't pay for electricity.
Whether this Schedule should be attempting to control the target's charge state.
Default value: true
defaultShouldChargebooleanOptional
When no rule is active, the default charge state for the target.
rulesarray of objectOptional
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.
Show child attributes
rules[].hourMinuteobjectOptional
An interval composed of two clock times during which this rule applies each day. to always resolves to a timestamp after from, and thus may span across midnight and fall on the next day.
Show child attributes
rules[].hourMinute.fromstringRequired
Clock time from which this rule should apply each day.
rules[].hourMinute.tostringRequired
Clock time until which this rule should apply each day.
rules[].fromTimestampstring<date-time>Optional
UTC timestamp from which this rule should apply.
rules[].toTimestampstring<date-time>Optional
UTC timestamp until which this rule should apply.
rules[].weekdaysarray of integerOptional
An array of weekdays to which this rule should apply. A weekday starts with 0 for Monday and ends with 6 for Sunday.
rules[].shouldChargebooleanRequired
Whether a chargeable asset should want to charge while this rule is active.
targetIdstringOptional
ID of the asset (Vehicle/Charger) to which this schedule applies
targetTypestringOptional
Possible enum values:
vehiclecharger
locationIdstring<uuid> or nullOptional
ID of the Location to which this schedule applies. The behavior of a null value differs 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 location. This is designed to prevent schedules from controlling vehicles at public chargers where the user doesn't pay for electricity.
Request example
curl--request PUT \--url https://enode-api.production.enode.io/schedules/4eaeb363-296d-4ccc-a973-7805e6f400bd \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'\--header'content-type: application/json'\--data'{"isEnabled":true,"defaultShouldCharge":true,"rules":[{"hourMinute":{"from":"08:00","to":"09:00"},"fromTimestamp":"2020-04-07T17:04:26Z","toTimestamp":"2020-04-07T17:04:26Z","weekdays":[0,1,2,3,4,5],"shouldCharge":true}],"targetId":"string","targetType":"vehicle","locationId":"4eaeb363-296d-4ccc-a973-7805e6f400bd"}'
Response 200
Attributes
isEnabledboolean
Whether this Schedule should be attempting to control the target's charge state.
Default value: true
defaultShouldChargeboolean
When no rule is active, the default charge state for the target.
rulesarray of object
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.
Show child attributes
rules[].hourMinuteobject
An interval composed of two clock times during which this rule applies each day. to always resolves to a timestamp after from, and thus may span across midnight and fall on the next day.
Show child attributes
rules[].hourMinute.fromstring
Clock time from which this rule should apply each day.
rules[].hourMinute.tostring
Clock time until which this rule should apply each day.
rules[].fromTimestampstring<date-time>
UTC timestamp from which this rule should apply.
rules[].toTimestampstring<date-time>
UTC timestamp until which this rule should apply.
rules[].weekdaysarray of integer
An array of weekdays to which this rule should apply. A weekday starts with 0 for Monday and ends with 6 for Sunday.
rules[].shouldChargeboolean
Whether a chargeable asset should want to charge while this rule is active.
targetIdstring
ID of the asset (Vehicle/Charger) to which this schedule applies
targetTypestring
Possible enum values:
vehiclecharger
locationIdstring<uuid> or null
ID of the Location to which this schedule applies. The behavior of a null value differs 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 location. This is designed to prevent schedules from controlling vehicles at public chargers where the user doesn't pay for electricity.
Whether the target is currently expected to be charging
isChargingExpectedPartsobject
Collection of booleans that - when combined via AND operator - forms the isChargingExpected value
Show child attributes
isChargingExpectedParts.needsChargeboolean
isChargingExpectedParts.isPluggedInboolean
isChargingExpectedParts.shouldChargeboolean
upcomingTransitionsarray of object
List of upcoming transitions of the shouldCharge or targetTemperature value. A maximum of 2 items are returned.
Show child attributes
upcomingTransitions[].atstring<date-time>
ISO8601 UTC timestamp
upcomingTransitions[].shouldChargeboolean
smartOverrideobject or null
This field populates after using Vehicle Create Smart OverrideAPI or Charger Create Smart OverrideAPI. Once populated, the target enters an overridden state, stopping Enode from sending Smart Charging actions. The Smart Override persists until the target ceases charging for any reason or is manually ended via Vehicle End Smart OverrideAPI or Charger End Smart OverrideAPI.
Show child attributes
smartOverride.createdAtstring<date-time>
Time at which the smart override was created.
smartOverride.endedAtstring<date-time> or null
Time at which the smart override was ended. If null, the smart override is still active.
smartOverride.targetTypestring
Possible enum values:
vehiclecharger
smartOverride.targetIdstring
ID of the target which this smart override is affecting.
Gets the combined health status of the service and all functionalities and dependencies.
Response 204
All functionalities are operating nominally.
Response 503
At least one functionality of the system is not operating nominally.
Solar inverters
Solar inverters can be queried for current production state
List solar inverters
GET /inverters
Returns a paginated list of all available Solar Inverters
Request
Query parameters
afterstringOptional
beforestringOptional
pageSizeintegerOptional
Default value: 50
Request example
curl--request GET \--url'https://enode-api.production.enode.io/inverters?after=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&before=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&pageSize=50'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
dataarray of object
Paginated list of solar inverters
Show child attributes
data[].idstring<uuid>
Solar Inverter ID
data[].userIdstring
The ID of the user that linked this inverter.
data[].vendorstring
Machine-friendly name of the vendor. Use this in API requests.
The last time Enode received live data or when the solar inverter was initially linked.
data[].isReachableboolean
Whether live data from the solar inverter is currently reachable 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.
data[].productionStateobject
Latest information about solar production. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
data[].productionState.productionRatenumber or null
The current production rate in kW.
data[].productionState.isProducingboolean or null
Whether the solar inverter is actively producing energy or not.
data[].productionState.totalLifetimeProductionnumber or null
The total lifetime production in kWh.
data[].productionState.lastUpdatedstring<date-time> or null
Time of last received production state update
data[].timezonestring or null
IANA TZ database timezone name representing the location of this inverter.
data[].scopesarray of string
Scopes that the user has granted for this inverter.
data[].capabilitiesobject
A collection of descriptors that describe the capabilities of this specific inverter.
Note: Sample-based statisticsAPI collected by Enode rely on the productionState capability and are not affected by this capability.
Name of the site, as set by the user on the device/vendor. If no user-specified name is available, we construct a fallback name using the vendor/device/model names.
curl--request GET \--url'https://enode-api.production.enode.io/users/%7BuserId%7D/inverters?after=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&before=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&pageSize=50'
Response 200
Attributes
dataarray of object
Paginated list of solar inverters
Show child attributes
data[].idstring<uuid>
Solar Inverter ID
data[].userIdstring
The ID of the user that linked this inverter.
data[].vendorstring
Machine-friendly name of the vendor. Use this in API requests.
The last time Enode received live data or when the solar inverter was initially linked.
data[].isReachableboolean
Whether live data from the solar inverter is currently reachable 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.
data[].productionStateobject
Latest information about solar production. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
data[].productionState.productionRatenumber or null
The current production rate in kW.
data[].productionState.isProducingboolean or null
Whether the solar inverter is actively producing energy or not.
data[].productionState.totalLifetimeProductionnumber or null
The total lifetime production in kWh.
data[].productionState.lastUpdatedstring<date-time> or null
Time of last received production state update
data[].timezonestring or null
IANA TZ database timezone name representing the location of this inverter.
data[].scopesarray of string
Scopes that the user has granted for this inverter.
data[].capabilitiesobject
A collection of descriptors that describe the capabilities of this specific inverter.
Note: Sample-based statisticsAPI collected by Enode rely on the productionState capability and are not affected by this capability.
Name of the site, as set by the user on the device/vendor. If no user-specified name is available, we construct a fallback name using the vendor/device/model names.
The last time Enode received live data or when the solar inverter was initially linked.
isReachableboolean
Whether live data from the solar inverter is currently reachable 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.
productionStateobject
Latest information about solar production. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
productionState.productionRatenumber or null
The current production rate in kW.
productionState.isProducingboolean or null
Whether the solar inverter is actively producing energy or not.
productionState.totalLifetimeProductionnumber or null
The total lifetime production in kWh.
productionState.lastUpdatedstring<date-time> or null
Time of last received production state update
timezonestring or null
IANA TZ database timezone name representing the location of this inverter.
scopesarray of string
Scopes that the user has granted for this inverter.
capabilitiesobject
A collection of descriptors that describe the capabilities of this specific inverter.
Note: Sample-based statisticsAPI collected by Enode rely on the productionState capability and are not affected by this capability.
Show child attributes
capabilities.productionStateobject
Full availability of productionState data.
Show child attributes
capabilities.productionState.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.productionState.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
capabilities.productionStatisticsobject
Availability of production statistics directly from the vendor.
Name of the site, as set by the user on the device/vendor. If no user-specified name is available, we construct a fallback name using the vendor/device/model names.
information.installationDatestring<date-time>
Solar inverter installation date
chargingLocationIdstring<uuid> or null
ID of the location the solar inverter is currently positioned at (if any).
Use this endpoint to initiate an expedited data refresh for the specified inverter.
Note: The Enode platform keeps data automatically up-to-date and detects changes in the OEM APIs within seconds to a few minutes. We change the refresh interval dynamically based on a number of heuristics. This ensures we find the best trade-off between the stability of the connection to the OEM and freshness of the data. This method overrides most of our heuristics and should therefore be used with caution. You may use it when you have a strong reason to believe the data might be stale.
Request
Path parameters
inverterIdstring<uuid>Required
ID of the solar inverter
Request example
curl--request POST \--url https://enode-api.production.enode.io/inverters/54d827e1-8355-4fed-97b5-55940d1d09ba/refresh-hint \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 204
Refresh hint registered successfully.
Response 404
The specified inverter was not found.
Statistics
Endpoints returning timeseries data collected from linked devices.
Get user statistics on charging sessions
GET /users/{userId}/statistics/charging/sessions
Returns statistics about power consumption and price, binned by sessions for a single user and device, at a location. A session is defined by consecutive readings from the device showing consumption. It can typically take up to 15 minutes between a session ending in reality, and being reflected by this endpoint.
Request
Path parameters
userIdstringRequired
The ID of the user
Query parameters
startDatestring<date-time>Required
Earliest date to include in the response. Example: 2021-03-21T00:15:00.000Z
endDatestring<date-time>Optional
Latest date to include in the response. Example: 2021-03-21T00:30:00.000Z
locationIdstring<uuid>Optional
The ID of the location for which to fetch statistics
idstringOptional
The ID of the device for which to fetch statistics. The type of the device must match the type parameter.
typestringRequired
The device types for which statistics can be obtained.
Possible enum values:
chargervehiclehvac
Request example
curl--request GET \--url'https://enode-api.production.enode.io/users/%7BuserId%7D/statistics/charging/sessions?startDate=2020-04-07T17%3A04%3A26Z&endDate=2020-04-07T17%3A04%3A26Z&locationId=4eaeb363-296d-4ccc-a973-7805e6f400bd&id=SOME_STRING_VALUE&type=SOME_STRING_VALUE'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes (list of object)
kwobject
Aggregate statistics in kW for the session
Show child attributes
kw.minnumber
The minimum amount for this period.
kw.maxnumber
The maximum amount for this period.
kw.meannumber
The average for this period.
kwhSumnumber
Total power consumption in kWh for the session
priceobject
Aggregate per kWh price statistics for the session. Currency is NOK for Norway, Sweden, Denmark, Finland, Estonia, Latvia, Lithuania; and EUR for Austria, Belgium, Germany, France, Netherlands, Poland, Spain. Unless different price data has been provided via the Tariffs endpoints
Show child attributes
price.minnumber
The minimum amount for this period.
price.maxnumber
The maximum amount for this period.
price.meannumber
The average for this period.
costSumnumber
Total cost for the consumed kWh for this session
idstring
ID of the asset for this session.
locationIdstring<uuid> or null
Location ID for this session.
fromstring<date-time>
Start time of the session.
tostring<date-time>
End time of the session.
nonSmartPriceobject
If Smart Charging has actively stopped the charging session from happening at another time; these fields show the aggregate per kWh price statistics that would have occurred without Smart Charging. This can be used to show the potential price if Smart Charging had not been active. This is expressed in NOK unless different price data has been provided via the Tariffs endpoints
Show child attributes
nonSmartPrice.minnumber or null
The minimum amount for this period.
nonSmartPrice.maxnumber or null
The maximum amount for this period.
nonSmartPrice.meannumber or null
The average for this period.
estimatedSavingsnumber or null
Total estimated savings achieved by Smart Charging for this session. If null, no part of this session was impacted by Smart Charging. This is expressed in NOK unless different price data has been provided via the Tariffs endpoints
Get statistics about power consumption and price in the form of a time series for a single device.
If Smart Charging has shifted the consumption, the nonSmartPrice fields will show what the consumption would have cost if it had happened at the default time. If Smart Charging has resulted in savings, the value is reported in the estimatedSavings field.
Request
Path parameters
userIdstringRequired
The ID of the User
Query parameters
startDatestring<date-time>Required
Earliest date to include in the response. Example: 2021-03-21T00:15:00.000Z
endDatestring<date-time>Optional
Latest date to include in the response. Example: 2021-03-21T00:30:00.000Z
locationIdstring<uuid>Optional
The ID of the location for which to fetch statistics
idstringOptional
The ID of the device for which to fetch statistics. The type of the device must match the type parameter.
typestringRequired
The device types for which statistics can be obtained.
Possible enum values:
chargervehiclehvac
utcOffsetstring<float>Optional
Offset (in hours) from UTC to adjust the timezone for viewing statistics. By default, all timestamps are in UTC, and period boundaries (day, week, month, year) are calculated in UTC. Providing utcOffset aligns these to the viewer's timezone. Accepts positive, negative, and fractional values. Note: utcOffset has no effect with resolutions QUARTER_HOUR, HALF_HOUR, or HOUR.
Deprecated: The use of utcOffset is discouraged as it doesn't handle time zones adequately. All data will be bucketed in UTC if utcOffset is not provided.
resolutionstringOptional
The unit of time the data will be bucketed into. Each entry in the response array corresponds to aggregated data of the time range specified.
Default value: DAY
Possible enum values:
QUARTER_HOURHALF_HOURHOURDAYWEEKMONTHYEAR
Request example
curl--request GET \--url'https://enode-api.production.enode.io/users/%7BuserId%7D/statistics/charging?startDate=2020-04-07T17%3A04%3A26Z&endDate=2020-04-07T17%3A04%3A26Z&locationId=4eaeb363-296d-4ccc-a973-7805e6f400bd&id=SOME_STRING_VALUE&type=SOME_STRING_VALUE&utcOffset=-8&resolution=SOME_STRING_VALUE'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes (list of object)
kwobject
Aggregate statistics in kW for the time bucket
Show child attributes
kw.minnumber
The minimum amount for this period.
kw.maxnumber
The maximum amount for this period.
kw.meannumber
The average for this period.
kwhSumnumber
Total power consumption in kWh for the time bucket
priceobject
Aggregate per kWh price statistics for the time bucket. Currency is NOK for Norway, Sweden, Denmark, Finland, Estonia, Latvia, Lithuania; and EUR for Austria, Belgium, Germany, France, Netherlands, Poland, Spain. Unless different price data has been provided via the Tariffs endpoints
Show child attributes
price.minnumber
The minimum amount for this period.
price.maxnumber
The maximum amount for this period.
price.meannumber
The average for this period.
costSumnumber
Total cost for the consumed kWh for the time bucket
nonSmartPriceobject
Aggregate per kWh price statistics for the time bucket if Smart Charging has actively stopped consumption from occurring during this resolution. This can be used to show the potential price if Smart Charging had not been active. Currency is NOK for Norway, Sweden, Denmark, Finland, Estonia, Latvia, Lithuania; and EUR for Austria, Belgium, Germany, France, Netherlands, Poland, Spain. Unless different price data has been provided via the Tariffs endpoints
Show child attributes
nonSmartPrice.minnumber or null
The minimum amount for this period.
nonSmartPrice.maxnumber or null
The maximum amount for this period.
nonSmartPrice.meannumber or null
The average for this period.
estimatedSavingsnumber or null
Total estimated savings achieved by Smart Charging for this resolution. If null, no part of this resolution was impacted by Smart Charging. Currency is NOK for Norway, Sweden, Denmark, Finland, Estonia, Latvia, Lithuania; and EUR for Austria, Belgium, Germany, France, Netherlands, Poland, Spain. Unless different price data has been provided via the Tariffs endpoints
datestring<date-time>
The timestamp that represents the start of this resolution
Returns statistics about power production for the given inverter in the form of a time series, collected from vendor APIs.
This endpoint has been deprecated in favor of the 2024-10-01 Inverter StatisticsAPI endpoint.
Please be aware that errors, inaccuracies, and breaking changes may occur without prior notice.
We only support querying for a maximum of 1 month of data at once.
It is not possible to select a timezone for the aggregated daily stats; the timezone reported by the inverter is used. To aggregate data in other timezones, we recommend fetching hourly data. Inverters in non-integer timezone offsets have not been tested, and may not return correct data.
Please note that currently, requests may take a long time to complete. Fetching shorter intervals, such as a week or a few days at a time, is the recommended workaround if you experience timeouts.
Data for the current day/hour (not available for all vendors) is cached for up to 15 minutes. Older data is cached indefinitely, so retroactive updates to existing data by the vendor are not reflected in the API. This could happen, for instance, if the inverter is actually an array of inverters, and an inverter is added or removed.
Request
Path parameters
userIdstringRequired
The ID of the User
Query parameters
resolutionstringRequired
The duration of each time bucket the returned time series is divided into. Each entry in the response array corresponds to aggregated data of the specified time range.
Possible enum values:
HOURDAY
startDatestring<date-time>Required
The earliest date (UTC) to include in the response. Cannot be greater than endDate. Example: 2021-03-21T02:00:00Z
endDatestring<date-time>Optional
The latest date (UTC) to include in the response. Defaults to the current date/time. Example: 2021-03-21T05:00:00Z
inverterIdstring<uuid>Required
ID of the Inverter.
Request example
curl--request GET \--url'https://enode-api.production.enode.io/users/%7BuserId%7D/vendor-statistics?resolution=DAY&startDate=2021-03-21T02%3A00%3A00Z&endDate=2021-03-21T05%3A00%3A00Z&inverterId=99a4a9a6-f015-450c-ab78-39fe8d13edae'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
productionobject
Contains information about power production statistics.
Show child attributes
production.unitstring
The unit of measurement for power production data. Always kWh.
Possible enum values:
kWh
production.dataarray of object
An array of data points representing the power production statistics.
Show child attributes
production.data[].datestring<date-time>
Date (UTC) at the start of the data point.
production.data[].valuenumber
The energy produced (kWh) in the specified interval.
Returns statistics about power production and price for a single device and location, in the form of a time series. Data is only available from after the asset was linked.
This endpoint has been deprecated in favor of the 2024-10-01 Inverter StatisticsAPI endpoint.
Request
Path parameters
userIdstringRequired
The ID of the User
Query parameters
startDatestring<date-time>Required
Earliest date to include in the response. Example: 2021-03-21T00:15:00.000Z
endDatestring<date-time>Optional
Latest date to include in the response. Example: 2021-03-21T00:30:00.000Z
locationIdstring<uuid>Optional
The ID of the location for which to fetch statistics
idstringOptional
The ID of the device for which to fetch statistics. The type of the device must match the type parameter.
typestringRequired
Get statistics for this hardware type.
Possible enum values:
inverter
resolutionstringOptional
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.
Default value: DAY
Possible enum values:
QUARTER_HOURHALF_HOURHOURDAYWEEKMONTHYEAR
utcOffsetstring<float>Optional
Offset (in hours) from UTC to adjust the timezone for viewing statistics. By default, all timestamps are in UTC, and period boundaries (day, week, month, year) are calculated in UTC. Providing utcOffset aligns these to the viewer's timezone. Accepts positive, negative, and fractional values. Note: utcOffset has no effect with resolutions QUARTER_HOUR, HALF_HOUR, or HOUR.
Deprecated: The use of utcOffset is discouraged as it doesn't handle time zones adequately. All data will be bucketed in UTC if utcOffset is not provided.
Request example
curl--request GET \--url'https://enode-api.production.enode.io/users/%7BuserId%7D/statistics/production?startDate=2020-04-07T17%3A04%3A26Z&endDate=2020-04-07T17%3A04%3A26Z&locationId=4eaeb363-296d-4ccc-a973-7805e6f400bd&id=SOME_STRING_VALUE&type=SOME_STRING_VALUE&resolution=SOME_STRING_VALUE&utcOffset=-8'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes (list of object)
kwobject
Aggregate statistics for production rate in kW
Show child attributes
kw.minnumber
The minimum amount for this period.
kw.maxnumber
The maximum amount for this period.
kw.meannumber
The average for this period.
kwhSumnumber
Total power production in kWh
priceobject
Aggregate per kWh price statistics for the time bucket. Currency is NOK for Norway, Sweden, Denmark, Finland, Estonia, Latvia, Lithuania; and EUR for Austria, Belgium, Germany, France, Netherlands, Poland, Spain. Unless different price data has been provided via the Tariffs endpoints
Show child attributes
price.minnumber
The minimum amount for this period.
price.maxnumber
The maximum amount for this period.
price.meannumber
The average for this period.
earningsSumnumber
Uses the local day ahead market price to determine the total value of the energy produced during the time bucket. Requires the user to have a LocationAPI at the same geo coordinates as the inverter itself. This is expressed in NOK unless different price data has been provided via the Tariffs endpoints
datestring<date-time>
The start timestamp of this sample. If utcOffset has been defined, this value will be offset accordingly.
Use the Tariffs API to submit pricing information to Enode. These prices will be preferred over market prices in Enode's smart products, like Smart HVACAPI, and will be used to calculate costs in StatisticsAPI.
Get tariff
GET /tariffs/{tariffId}
Get a tariff using its ID.
Request
Path parameters
tariffIdstringRequired
Request example
curl--request GET \--url https://enode-api.production.enode.io/tariffs/%7BtariffId%7D \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Create a tariff using a list of names and prices. Before the tariff can be used in Enode products, it must be linked to a locationAPI.
Request
Path parameters
tariffIdstringRequired
Attributes (list of object)
namestringRequired
Per-tariff unique interval name
coststringRequired
Rate cost (decimal string)
Request example
curl--request PUT \--url https://enode-api.production.enode.io/tariffs/%7BtariffId%7D \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'\--header'content-type: application/json'\--data'[{"name":"PEAK","cost":"13.37"},{"name":"OFF-PEAK","cost":"12.34"}]'
Response 204
Successfully updated.
Link tariff to location
PUT /locations/{locationId}/tariff
Link a tariff to a LocationAPI using a daily schedule. Each new schedule overwrites any previous requests. Devices positioned at this location will use the schedule to calculate electricity costs. The schedule must ensure that there are no overlapping intervals, although gaps are permissible. In case of gaps, the system will default to market prices.
Request
Path parameters
locationIdstring<uuid>Required
ID of the Location.
Attributes
tariffIdstringRequired
The Tariff ID
tariffIntervalsarray of objectRequired
List of time intervals at which to apply the specified tariff rates.
Show child attributes
tariffIntervals[].namestringRequired
Rate name
tariffIntervals[].weekdaysarray of integerOptional
An array of weekdays 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
tariffIntervals[].fromstringRequired
Interval from time (inclusive), format HH:mm. Interpreted in the timezone specified in the timezoneName field of the Location.
tariffIntervals[].tostringRequired
Interval to time (exclusive), format HH:mm. Interpreted in the timezone specified in the timezoneName field of the Location.
Request example
curl--request PUT \--url https://enode-api.production.enode.io/locations/4eaeb363-296d-4ccc-a973-7805e6f400bd/tariff \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'\--header'content-type: application/json'\--data'{"tariffId":"string","tariffIntervals":[{"name":"OFF-PEAK-WEEKDAY","from":"00:00","to":"12:00","weekdays":[0,1,2,3,4]},{"name":"PEAK-WEEKDAY","from":"12:00","to":"24:00","weekdays":[0,1,2,3,4]},{"name":"OFF-PEAK-WEEKEND","weekdays":[5,6],"from":"00:00","to":"06:00"},{"name":"PEAK-WEEKEND","weekdays":[5,6],"from":"06:00","to":"24:00"}]}'
Response 204
Response 400
Overlapping tariff schedule. Ensure that the schedule has no overlaps.
Attributes
typestring
A URI reference that identifies the problem type.
titlestring
A short, human-readable summary of the problem type.
detailstring
A human-readable explanation specific to this occurrence of the problem.
curl--request GET \--url https://enode-api.production.enode.io/locations/4eaeb363-296d-4ccc-a973-7805e6f400bd/tariff \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes (list of object)
weekdayinteger
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
Endpoints used to link and unlink users or vendors.
List users
GET /users
Returns a paginated list of all users.
Request
Query parameters
afterstringOptional
beforestringOptional
pageSizeintegerOptional
Default value: 50
Request example
curl--request GET \--url'https://enode-api.production.enode.io/users?after=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&before=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&pageSize=50'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Paginated list of users. Use query parameters to retrieve more results.
Attributes
dataarray of object
Paginated list of users.
Show child attributes
data[].idstring
ID of the user.
data[].createdAtstring<date-time> or null
ISO8601 UTC timestamp
data[].scopesarray of stringDeprecated
Scopes for the user.
paginationobject
Cursors to the pages before and after current page. See the PaginationAPI section for reference.
Whether the provided credentials are currently valid. A false value here indicates that a credential has become invalidated, and Link UserAPI should be used to get new credentials from this user.
Disconnect a specific vendor type from the User's account. Assets of this type from that Vendor will be removed. If no other types from that vendor remain, all its stored data will be deleted.
Creates a short-lived (24 hours), single-use device linking session. Use the returned linkUrl to present Link UI to your user via mobile in-app browsers or web redirects, or use the linkToken to present Link UI via the Link SDKs.
Request
Path parameters
userIdstringRequired
A unique identifier of your choice representing your user, e.g. a stable UUID you keep in your datastore. If a user entity matching the provided userId does not exist in your client, it will be created before the link session is created.
Sets the asset type your user can link through Link UI within the linking session. The brand selection step selection step will show vendors available for the specified asset type.
Possible enum values:
vehiclechargerhvacinverterbatterymeter
languagestringRequired
Sets the language for Link UI. We recommend matching this to the language of your application. If your language is not yet supported, you can specify browser which will assess your user's browser language via the Accept-Language header (learn more). Passing in browser will fall back to en-US if no match is found.
The scope(s) you wish to request access to when linking an asset (learn more). The scopes will be presented for user consent in Link UI in the review data access step. The <vendorType>:read:data scope is required for any asset type (e.g. if you wish to link a battery, you must request battery:read:data).
redirectUristring<uri>Required
The URI your user will be redirected to after clicking "Complete" at the linking flow (from the last step in the Link UI flow). Only used in Link UI sessions that were not opened via the Link SDKs.
colorSchemestringOptional
Sets the color scheme (light or dark) of Link UI. If your UI is only available in one of the color schemes, and does not follow the operating system color scheme, we recommend setting either light or dark. Defaults to system, which follows the users operating system settings.
Default value: system
Possible enum values:
systemlightdark
Request example
curl--request POST \--url https://enode-api.production.enode.io/users/%7BuserId%7D/link \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'\--header'content-type: application/json'\--data'{"vendor":"VOLKSWAGEN","vendorType":"vehicle","language":"en-GB","scopes":["vehicle:read:data","vehicle:control:charging"],"redirectUri":"https://myapp.com/callback/enode","colorScheme":"light"}'
A short, human-readable summary of the problem type.
detailstring
A human-readable explanation specific to this occurrence of the problem.
Response example
{"type":"https://docs.enode.io/api/problems/forbidden","title":"Connections limit reached.","detail":"Unable to create more connections for ClientID: a7bedf14-c3eb-4c2b-a08f-b34a1f70808d"}
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.
EVs provide charge, location, and odometer data. Vehicles can be controlled either directly using the Control ChargingAPI endpoint, or through Smart Charging and Schedules.
List vehicles
GET /vehicles
Returns a paginated list of all available Vehicles
Request
Query parameters
afterstringOptional
beforestringOptional
pageSizeintegerOptional
Default value: 50
Request example
curl--request GET \--url'https://enode-api.production.enode.io/vehicles?after=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&before=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&pageSize=50'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
dataarray of object
Show child attributes
data[].idstring
Vehicle ID
data[].userIdstring
The ID of the user that linked this vehicle.
data[].vendorstring
Machine-friendly name of the vendor. Use this in API requests.
The last time Enode received live data or when the vehicle was initially linked.
data[].isReachableboolean or null
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.
Latest information about the electric or hybrid battery. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
data[].chargeState.batteryLevelnumber or null
Remaining battery in percent
data[].chargeState.rangenumber or null
Estimated remaining kilometers
data[].chargeState.isPluggedInboolean or null
Indicates whether the vehicle is connected to a charging box (regardless of whether it is actually charging)
data[].chargeState.isChargingboolean or null
Indicates whether the vehicle is currently receiving power from the charger and actively charging its battery.
data[].chargeState.isFullyChargedboolean or null
Indicates whether the vehicle is fully charged. 'Fully charged' may be a batteryLevel of less than 100 if a chargeLimit has been configured in the vehicle.
data[].chargeState.batteryCapacitynumber or null
Vehicle's usable battery capacity in kWh.
data[].chargeState.chargeLimitnumber or null
Charge limit, as a percent of batteryCapacity.
data[].chargeState.chargeRatenumber or null
The current charge rate in kW.
This property is only available when the vehicle is charging, and is null any other time.
data[].chargeState.chargeTimeRemainingnumber or null
Estimated time until the current charging intent is completed, in minutes.
This property is only available when the vehicle is charging, and is null any other time.
data[].chargeState.lastUpdatedstring<date-time> or null
Time of last received charge state update
data[].chargeState.maxCurrentnumber or null
The maximum current that the vehicle can draw from the charger, in amps.
data[].chargeState.powerDeliveryStatestring
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown.
UNPLUGGED: The vehicle is not connected to the charger.
PLUGGED_IN:INITIALIZING: The charging station is preparing to deliver power to the vehicle. It is expected for this state to shortly transition into PLUGGED_IN:CHARGING.
PLUGGED_IN:CHARGING: The vehicle is actively receiving power from the charger, causing the battery level to increase.
PLUGGED_IN:COMPLETE: The charging process has finished and the vehicle's battery has reached the target charge limit.
PLUGGED_IN:STOPPED: The charging process has been intentionally stopped by either the vehicle or the charger. The vehicle is still plugged in and waiting for the charging process to resume.
PLUGGED_IN:NO_POWER: The vehicle attempted to initialize charging, however no external power was available. It is not possible to transition into a charging state with a remote command until there is some user intervention to resolve the issue.
PLUGGED_IN:FAULT: A malfunction in the charging process is preventing power from being delivered. Possible causes include a charging cable not being properly locked, extreme temperatures, or malfunctions in either the charging station or the vehicle's internal system. It is not possible to transition into a charging state with a remote command until there is some user intervention to resolve the issue.
When enabled, this vehicle's charging status may be controlled by Smart Charging
data[].smartChargingPolicy.deadlinestring or null
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 location at which the smart charging occurs, the deadline is interpreted in that timezone, otherwise UTC is used.
Proceed to charge promptly, disregarding energy prices, until the vehicle achieves this preset minimum limit. Please note that this limit cannot exceed the vehicle's maximum charge limit. The default setting is zero. The unit of measure is percentage.
data[].odometerobject
Vehicle's odometer reading in kilometers with timestamp
Show child attributes
data[].odometer.distancenumber or null
Odometer in kilometers
data[].odometer.lastUpdatedstring<date-time> or null
Time of the last odometer update, in kilometers
data[].capabilitiesobject
A collection of descriptors that describe the capabilities of this specific vehicle
Show child attributes
data[].capabilities.informationobject
Full availability of information data.
Show child attributes
data[].capabilities.information.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
data[].capabilities.information.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
data[].capabilities.chargeStateobject
Full availability of chargeState data.
Show child attributes
data[].capabilities.chargeState.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
data[].capabilities.chargeState.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
data[].capabilities.locationobject
Full availability of location data.
Show child attributes
data[].capabilities.location.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
data[].capabilities.location.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
data[].capabilities.odometerobject
Full availability of odometer data.
Show child attributes
data[].capabilities.odometer.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
data[].capabilities.odometer.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
data[].capabilities.smartCharging.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
data[].scopesarray of string
Scopes that the user has granted for this vehicle.
data[].locationobject
Vehicle's GPS coordinates with timestamp
Show child attributes
data[].location.longitudenumber or null
Longitude in degrees
data[].location.latitudenumber or null
Latitude in degrees
data[].location.lastUpdatedstring<date-time> or null
Time of last received location
data[].locationIdstring<uuid> or null
ID of the location the vehicle is currently positioned at (if any).
paginationobject
Cursors to the pages before and after current page. See the PaginationAPI section for reference.
Show child attributes
pagination.afterstring or null
pagination.beforestring or null
Response example
{"data":[{"id":"05ee9df5-d072-4ee8-b773-399dec8f5693","userId":"bb28471e-cde6-4eff-ace4-9a7f4f50882a","vendor":"TESLA","lastSeen":"2024-01-07T17:04:26.000Z","isReachable":true,"information":{"vin":"2HGFB2F5XEH542858","brand":"string","model":"Model S P85","year":2020,"displayName":"Batmobile"},"chargeState":{"batteryLevel":66,"range":228,"isPluggedIn":true,"isCharging":true,"isFullyCharged":false,"batteryCapacity":48.1,"chargeLimit":90,"chargeRate":2,"chargeTimeRemaining":285,"lastUpdated":"2020-04-07T17:04:26Z","maxCurrent":16,"powerDeliveryState":"PLUGGED_IN:CHARGING"},"smartChargingPolicy":{"isEnabled":true,"deadline":"07:00","minimumChargeLimit":0},"odometer":{"distance":65393,"lastUpdated":"2024-01-07T17:04:26.000Z"},"capabilities":{"information":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"chargeState":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"location":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"odometer":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"setMaxCurrent":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"startCharging":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"stopCharging":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"smartCharging":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]}},"scopes":["vehicle:control:charging","vehicle:read:data","vehicle:read:location"],"location":{"longitude":10.7197486,"latitude":59.9173985,"lastUpdated":"2024-01-07T17:04:26.000Z"},"locationId":"07f8368d-be7e-4dbd-8cf0-94d00dd67ad3"}],"pagination":{"after":"MjAyMy0wNy0xOFQxMDowODowMi4zNzNa","before":"MjAyMy0wNi0xNlQwOTowMzowMS4yNjJa"}}
List user vehicles
GET /users/{userId}/vehicles
Paginated list of user vehicles.
Request
Path parameters
userIdstringRequired
ID of the User.
Query parameters
afterstringOptional
beforestringOptional
pageSizeintegerOptional
Default value: 50
Request example
curl--request GET \--url'https://enode-api.production.enode.io/users/%7BuserId%7D/vehicles?after=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&before=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&pageSize=50'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
dataarray of object
Show child attributes
data[].idstring
Vehicle ID
data[].userIdstring
The ID of the user that linked this vehicle.
data[].vendorstring
Machine-friendly name of the vendor. Use this in API requests.
The last time Enode received live data or when the vehicle was initially linked.
data[].isReachableboolean or null
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.
Latest information about the electric or hybrid battery. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
data[].chargeState.batteryLevelnumber or null
Remaining battery in percent
data[].chargeState.rangenumber or null
Estimated remaining kilometers
data[].chargeState.isPluggedInboolean or null
Indicates whether the vehicle is connected to a charging box (regardless of whether it is actually charging)
data[].chargeState.isChargingboolean or null
Indicates whether the vehicle is currently receiving power from the charger and actively charging its battery.
data[].chargeState.isFullyChargedboolean or null
Indicates whether the vehicle is fully charged. 'Fully charged' may be a batteryLevel of less than 100 if a chargeLimit has been configured in the vehicle.
data[].chargeState.batteryCapacitynumber or null
Vehicle's usable battery capacity in kWh.
data[].chargeState.chargeLimitnumber or null
Charge limit, as a percent of batteryCapacity.
data[].chargeState.chargeRatenumber or null
The current charge rate in kW.
This property is only available when the vehicle is charging, and is null any other time.
data[].chargeState.chargeTimeRemainingnumber or null
Estimated time until the current charging intent is completed, in minutes.
This property is only available when the vehicle is charging, and is null any other time.
data[].chargeState.lastUpdatedstring<date-time> or null
Time of last received charge state update
data[].chargeState.maxCurrentnumber or null
The maximum current that the vehicle can draw from the charger, in amps.
data[].chargeState.powerDeliveryStatestring
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown.
UNPLUGGED: The vehicle is not connected to the charger.
PLUGGED_IN:INITIALIZING: The charging station is preparing to deliver power to the vehicle. It is expected for this state to shortly transition into PLUGGED_IN:CHARGING.
PLUGGED_IN:CHARGING: The vehicle is actively receiving power from the charger, causing the battery level to increase.
PLUGGED_IN:COMPLETE: The charging process has finished and the vehicle's battery has reached the target charge limit.
PLUGGED_IN:STOPPED: The charging process has been intentionally stopped by either the vehicle or the charger. The vehicle is still plugged in and waiting for the charging process to resume.
PLUGGED_IN:NO_POWER: The vehicle attempted to initialize charging, however no external power was available. It is not possible to transition into a charging state with a remote command until there is some user intervention to resolve the issue.
PLUGGED_IN:FAULT: A malfunction in the charging process is preventing power from being delivered. Possible causes include a charging cable not being properly locked, extreme temperatures, or malfunctions in either the charging station or the vehicle's internal system. It is not possible to transition into a charging state with a remote command until there is some user intervention to resolve the issue.
When enabled, this vehicle's charging status may be controlled by Smart Charging
data[].smartChargingPolicy.deadlinestring or null
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 location at which the smart charging occurs, the deadline is interpreted in that timezone, otherwise UTC is used.
Proceed to charge promptly, disregarding energy prices, until the vehicle achieves this preset minimum limit. Please note that this limit cannot exceed the vehicle's maximum charge limit. The default setting is zero. The unit of measure is percentage.
data[].odometerobject
Vehicle's odometer reading in kilometers with timestamp
Show child attributes
data[].odometer.distancenumber or null
Odometer in kilometers
data[].odometer.lastUpdatedstring<date-time> or null
Time of the last odometer update, in kilometers
data[].capabilitiesobject
A collection of descriptors that describe the capabilities of this specific vehicle
Show child attributes
data[].capabilities.informationobject
Full availability of information data.
Show child attributes
data[].capabilities.information.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
data[].capabilities.information.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
data[].capabilities.chargeStateobject
Full availability of chargeState data.
Show child attributes
data[].capabilities.chargeState.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
data[].capabilities.chargeState.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
data[].capabilities.locationobject
Full availability of location data.
Show child attributes
data[].capabilities.location.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
data[].capabilities.location.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
data[].capabilities.odometerobject
Full availability of odometer data.
Show child attributes
data[].capabilities.odometer.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
data[].capabilities.odometer.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
data[].capabilities.smartCharging.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
data[].scopesarray of string
Scopes that the user has granted for this vehicle.
data[].locationobject
Vehicle's GPS coordinates with timestamp
Show child attributes
data[].location.longitudenumber or null
Longitude in degrees
data[].location.latitudenumber or null
Latitude in degrees
data[].location.lastUpdatedstring<date-time> or null
Time of last received location
data[].locationIdstring<uuid> or null
ID of the location the vehicle is currently positioned at (if any).
paginationobject
Cursors to the pages before and after current page. See the PaginationAPI section for reference.
Show child attributes
pagination.afterstring or null
pagination.beforestring or null
Response example
{"data":[{"id":"05ee9df5-d072-4ee8-b773-399dec8f5693","userId":"bb28471e-cde6-4eff-ace4-9a7f4f50882a","vendor":"TESLA","lastSeen":"2024-01-07T17:04:26.000Z","isReachable":true,"information":{"vin":"2HGFB2F5XEH542858","brand":"string","model":"Model S P85","year":2020,"displayName":"Batmobile"},"chargeState":{"batteryLevel":66,"range":228,"isPluggedIn":true,"isCharging":true,"isFullyCharged":false,"batteryCapacity":48.1,"chargeLimit":90,"chargeRate":2,"chargeTimeRemaining":285,"lastUpdated":"2020-04-07T17:04:26Z","maxCurrent":16,"powerDeliveryState":"PLUGGED_IN:CHARGING"},"smartChargingPolicy":{"isEnabled":true,"deadline":"07:00","minimumChargeLimit":0},"odometer":{"distance":65393,"lastUpdated":"2024-01-07T17:04:26.000Z"},"capabilities":{"information":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"chargeState":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"location":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"odometer":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"setMaxCurrent":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"startCharging":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"stopCharging":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"smartCharging":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]}},"scopes":["vehicle:control:charging","vehicle:read:data","vehicle:read:location"],"location":{"longitude":10.7197486,"latitude":59.9173985,"lastUpdated":"2024-01-07T17:04:26.000Z"},"locationId":"07f8368d-be7e-4dbd-8cf0-94d00dd67ad3"}],"pagination":{"after":"MjAyMy0wNy0xOFQxMDowODowMi4zNzNa","before":"MjAyMy0wNi0xNlQwOTowMzowMS4yNjJa"}}
Get vehicle
GET /vehicles/{vehicleId}
Request
Path parameters
vehicleIdstringRequired
ID of the Vehicle.
Request example
curl--request GET \--url https://enode-api.production.enode.io/vehicles/ad84e742-0f46-4cf4-b0db-7d890f8f23f5 \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
idstring
Vehicle ID
userIdstring
The ID of the user that linked this vehicle.
vendorstring
Machine-friendly name of the vendor. Use this in API requests.
The last time Enode received live data or when the vehicle was initially linked.
isReachableboolean or null
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.
Latest information about the electric or hybrid battery. null values indicate we are unable to determine a value for the field based on the information coming from the vendor.
Show child attributes
chargeState.batteryLevelnumber or null
Remaining battery in percent
chargeState.rangenumber or null
Estimated remaining kilometers
chargeState.isPluggedInboolean or null
Indicates whether the vehicle is connected to a charging box (regardless of whether it is actually charging)
chargeState.isChargingboolean or null
Indicates whether the vehicle is currently receiving power from the charger and actively charging its battery.
chargeState.isFullyChargedboolean or null
Indicates whether the vehicle is fully charged. 'Fully charged' may be a batteryLevel of less than 100 if a chargeLimit has been configured in the vehicle.
chargeState.batteryCapacitynumber or null
Vehicle's usable battery capacity in kWh.
chargeState.chargeLimitnumber or null
Charge limit, as a percent of batteryCapacity.
chargeState.chargeRatenumber or null
The current charge rate in kW.
This property is only available when the vehicle is charging, and is null any other time.
chargeState.chargeTimeRemainingnumber or null
Estimated time until the current charging intent is completed, in minutes.
This property is only available when the vehicle is charging, and is null any other time.
chargeState.lastUpdatedstring<date-time> or null
Time of last received charge state update
chargeState.maxCurrentnumber or null
The maximum current that the vehicle can draw from the charger, in amps.
chargeState.powerDeliveryStatestring
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown.
UNPLUGGED: The vehicle is not connected to the charger.
PLUGGED_IN:INITIALIZING: The charging station is preparing to deliver power to the vehicle. It is expected for this state to shortly transition into PLUGGED_IN:CHARGING.
PLUGGED_IN:CHARGING: The vehicle is actively receiving power from the charger, causing the battery level to increase.
PLUGGED_IN:COMPLETE: The charging process has finished and the vehicle's battery has reached the target charge limit.
PLUGGED_IN:STOPPED: The charging process has been intentionally stopped by either the vehicle or the charger. The vehicle is still plugged in and waiting for the charging process to resume.
PLUGGED_IN:NO_POWER: The vehicle attempted to initialize charging, however no external power was available. It is not possible to transition into a charging state with a remote command until there is some user intervention to resolve the issue.
PLUGGED_IN:FAULT: A malfunction in the charging process is preventing power from being delivered. Possible causes include a charging cable not being properly locked, extreme temperatures, or malfunctions in either the charging station or the vehicle's internal system. It is not possible to transition into a charging state with a remote command until there is some user intervention to resolve the issue.
When enabled, this vehicle's charging status may be controlled by Smart Charging
smartChargingPolicy.deadlinestring or null
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 location at which the smart charging occurs, the deadline is interpreted in that timezone, otherwise UTC is used.
smartChargingPolicy.minimumChargeLimitnumber
Proceed to charge promptly, disregarding energy prices, until the vehicle achieves this preset minimum limit. Please note that this limit cannot exceed the vehicle's maximum charge limit. The default setting is zero. The unit of measure is percentage.
odometerobject
Vehicle's odometer reading in kilometers with timestamp
Show child attributes
odometer.distancenumber or null
Odometer in kilometers
odometer.lastUpdatedstring<date-time> or null
Time of the last odometer update, in kilometers
capabilitiesobject
A collection of descriptors that describe the capabilities of this specific vehicle
Show child attributes
capabilities.informationobject
Full availability of information data.
Show child attributes
capabilities.information.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.information.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
capabilities.chargeStateobject
Full availability of chargeState data.
Show child attributes
capabilities.chargeState.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.chargeState.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
capabilities.locationobject
Full availability of location data.
Show child attributes
capabilities.location.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.location.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
capabilities.odometerobject
Full availability of odometer data.
Show child attributes
capabilities.odometer.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.odometer.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
capabilities.setMaxCurrentobject
Supports setting the maximum charge current.
Show child attributes
capabilities.setMaxCurrent.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.setMaxCurrent.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
capabilities.startChargingobject
Supports START charging command.
Show child attributes
capabilities.startCharging.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.startCharging.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
capabilities.stopChargingobject
Supports STOP charging command.
Show child attributes
capabilities.stopCharging.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.stopCharging.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
capabilities.smartChargingobject
Support for smartCharging. This value is dynamic and may change over time.
Show child attributes
capabilities.smartCharging.isCapableboolean
The entity is fully capable of providing this data or functionality. If false, support is partial or missing.
capabilities.smartCharging.interventionIdsarray of string
IDs of interventions the user can make to alter the availability of this capability. Please refer to the interventions guide for more information.
scopesarray of string
Scopes that the user has granted for this vehicle.
locationobject
Vehicle's GPS coordinates with timestamp
Show child attributes
location.longitudenumber or null
Longitude in degrees
location.latitudenumber or null
Latitude in degrees
location.lastUpdatedstring<date-time> or null
Time of last received location
locationIdstring<uuid> or null
ID of the location the vehicle is currently positioned at (if any).
Response example
{"id":"05ee9df5-d072-4ee8-b773-399dec8f5693","userId":"bb28471e-cde6-4eff-ace4-9a7f4f50882a","vendor":"TESLA","lastSeen":"2024-01-07T17:04:26.000Z","isReachable":true,"information":{"vin":"2HGFB2F5XEH542858","brand":"string","model":"Model S P85","year":2020,"displayName":"Batmobile"},"chargeState":{"batteryLevel":66,"range":228,"isPluggedIn":true,"isCharging":true,"isFullyCharged":false,"batteryCapacity":48.1,"chargeLimit":90,"chargeRate":2,"chargeTimeRemaining":285,"lastUpdated":"2020-04-07T17:04:26Z","maxCurrent":16,"powerDeliveryState":"PLUGGED_IN:CHARGING"},"smartChargingPolicy":{"isEnabled":true,"deadline":"07:00","minimumChargeLimit":0},"odometer":{"distance":65393,"lastUpdated":"2024-01-07T17:04:26.000Z"},"capabilities":{"information":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"chargeState":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"location":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"odometer":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"setMaxCurrent":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"startCharging":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"stopCharging":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]},"smartCharging":{"isCapable":false,"interventionIds":["4eaeb363-296d-4ccc-a973-7805e6f400bd"]}},"scopes":["vehicle:control:charging","vehicle:read:data","vehicle:read:location"],"location":{"longitude":10.7197486,"latitude":59.9173985,"lastUpdated":"2024-01-07T17:04:26.000Z"},"locationId":"07f8368d-be7e-4dbd-8cf0-94d00dd67ad3"}
Control charging
POST /vehicles/{vehicleId}/charging
Request for a vehicle to start or stop charging. This request creates an Action that will retry until the vehicle's powerDeliveryState matches the expected value. The Action must complete before any further commands are sent to the vehicle. If a PENDING action for the same target and type already exists, it will be reused and a new action will not be created. If the new Action has a different target or type, the existing Action will be automatically transitioned to the CANCELLED state and a new Action will be created. Transitions can be tracked via the user:vendor-action:updated webhook event or Get Vehicle ActionAPI.
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 Create Smart OverrideAPI to temporarily enable charging.
Request
Path parameters
vehicleIdstringRequired
ID of the Vehicle.
Attributes
actionstringRequired
Charging action to perform
Possible enum values:
STARTSTOP
Request example
curl--request POST \--url https://enode-api.production.enode.io/vehicles/ad84e742-0f46-4cf4-b0db-7d890f8f23f5/charging \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'\--header'content-type: application/json'\--data'{"action":"START"}'
Response 200
Resulting charge action
Attributes
idstring<uuid>
The ID of the action.
userIdstring
The ID of the user that owns the target of this action.
createdAtstring<date-time>
Time when this action was created
updatedAtstring<date-time>
Time when this action was last updated
completedAtstring<date-time> or null
Time when the action transitioned to a non-pending state.
statestring
The real-time status of an action executed on a target.
PENDING: The initial state. Enode is actively sending commands and monitoring the target for changes.
CONFIRMED: Successful transition of the target to the desired state.
FAILED: The target did not respond to the action before timing out. Enode has ceased sending additional commands.
CANCELLED: A required precondition was not met during the action's timeout window or another action has been sent to the target, overriding this one.
Possible enum values:
PENDINGCONFIRMEDFAILEDCANCELLED
targetIdstring
ID of the target which this action is controlling.
targetTypestring
Possible enum values:
vehiclecharger
kindstring
The charging action to perform
Possible enum values:
STARTSTOP
failureReasonobject or null
Information about why was this action not executed successfully.
Show child attributes
failureReason.typestring
A machine-readable high level error category.
NO_RESPONSE: The chargeable device did not react to our charge commands within the action's timeout window.
FAILED_PRECONDITION: The chargeable device did not meet all required preconditions for this action to be executed during the action's timeout window.
UNNECESSARY: The action was not carried out given that the device was already in the desired state.
CONFLICT: A newer action for this chargeable has been created. This action is now abandoned.
REQUESTED_CANCELLATION: This action was cancelled by request of the controlling owner. The controlling owner may refer to another Enode entity which initiated the command, such as a schedule or smart override.
NOT_FOUND: The chargeable was deleted while the action was PENDING.
A human-readable explanation of why the charging action was unsuccessful.
Response example
{"id":"4eaeb363-296d-4ccc-a973-7805e6f400bd","userId":"d5bd4771-864e-4ae5-b913-dfb5cdcd5772","createdAt":"2020-04-07T17:04:26Z","updatedAt":"2020-04-07T17:04:26Z","completedAt":"2020-04-07T17:04:26Z","state":"PENDING","targetId":"bfbccded-8a1c-45a8-bbda-dcaeef29977a","targetType":"vehicle","kind":"START","failureReason":{"type":"NO_RESPONSE","detail":"The chargeable device remained unreachable."}}
Response 400
A precondition check failed that is unlikely to change within the action's timeout window. This occurs if the vehicle cannot perform the action, is fully charged, or is already in the desired state.
Attributes
typestring
A URI reference that identifies the problem type.
titlestring
A short, human-readable summary of the problem type.
detailstring
A human-readable explanation specific to this occurrence of the problem.
Experimental: Set the max current the vehicle is allowed to consume during charging. Currently only supported for Tesla vehicles and behind a feature flag. Reach out to Customer Success to get access.
This request creates an Action that will retry until the vehicles's maxCurrent matches the expected value. The Action must complete before any further commands are sent to the vehicle. Only one Action can be active for a specific vehicle at a time. If a new Action is created, the previous Action will be automatically cancelled and transitioned to the CANCELLED state. Transitions can be tracked via the user:vendor-action:updated webhook event or Get Vehicle ActionAPI.
Request
Path parameters
vehicleIdstringRequired
ID of the Vehicle.
Attributes
maxCurrentnumberRequired
Desired max current in ampere
Request example
curl--request POST \--url https://enode-api.production.enode.io/vehicles/ad84e742-0f46-4cf4-b0db-7d890f8f23f5/max-current \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'\--header'content-type: application/json'\--data'{"maxCurrent":10}'
Response 200
Attributes
idstring<uuid>
The ID of the action.
userIdstring
The ID of the user that owns the target of this action.
createdAtstring<date-time>
Time when this action was created
updatedAtstring<date-time>
Time when this action was last updated
completedAtstring<date-time> or null
Time when the action transitioned to a non-pending state.
statestring
The real-time status of an action executed on a target.
PENDING: The initial state. Enode is actively sending commands and monitoring the target for changes.
CONFIRMED: Successful transition of the target to the desired state.
FAILED: The target did not respond to the action before timing out. Enode has ceased sending additional commands.
CANCELLED: A required precondition was not met during the action's timeout window or another action has been sent to the target, overriding this one.
Possible enum values:
PENDINGCONFIRMEDFAILEDCANCELLED
targetIdstring
ID of the entity which this action is controlling.
targetTypestring
Possible enum values:
vehiclecharger
targetStateobject
Target maximum current for entity
Show child attributes
targetState.maxCurrentnumber
Desired max current in ampere
failureReasonobject or null
Information about why was this action not executed successfully.
Show child attributes
failureReason.typestring
A machine-readable high level error category.
NO_RESPONSE: The chargeable device did not react to our charge commands within the action's timeout window.
FAILED_PRECONDITION: The chargeable device did not meet all required preconditions for this action to be executed during the action's timeout window.
UNNECESSARY: The action was not carried out given that the device was already in the desired state.
CONFLICT: A newer action for this chargeable has been created. This action is now abandoned.
REQUESTED_CANCELLATION: This action was cancelled by request of the controlling owner. The controlling owner may refer to another Enode entity which initiated the command, such as a schedule or smart override.
NOT_FOUND: The chargeable was deleted while the action was PENDING.
A human-readable explanation of why the charging action was unsuccessful.
Response example
{"id":"4eaeb363-296d-4ccc-a973-7805e6f400bd","userId":"d5bd4771-864e-4ae5-b913-dfb5cdcd5772","createdAt":"2020-04-07T17:04:26Z","updatedAt":"2020-04-07T17:04:26Z","completedAt":"2020-04-07T17:04:26Z","state":"PENDING","targetId":"string","targetType":"vehicle","targetState":{"maxCurrent":10},"failureReason":{"type":"NO_RESPONSE","detail":"The chargeable device remained unreachable."}}
Response 400
A precondition check failed that is unlikely to change within the action's timeout window. This occurs if the vehicle cannot perform the action.
Attributes
typestring
A URI reference that identifies the problem type.
titlestring
A short, human-readable summary of the problem type.
detailstring
A human-readable explanation specific to this occurrence of the problem.
Returns the current state of the requested Action.
Request
Path parameters
actionIdstring<uuid>Required
ID of the Action.
Request example
curl--request GET \--url https://enode-api.production.enode.io/vehicles/actions/4eaeb363-296d-4ccc-a973-7805e6f400bd \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
idstring<uuid>
The ID of the action.
userIdstring
The ID of the user that owns the target of this action.
createdAtstring<date-time>
Time when this action was created
updatedAtstring<date-time>
Time when this action was last updated
completedAtstring<date-time> or null
Time when the action transitioned to a non-pending state.
statestring
The real-time status of an action executed on a target.
PENDING: The initial state. Enode is actively sending commands and monitoring the target for changes.
CONFIRMED: Successful transition of the target to the desired state.
FAILED: The target did not respond to the action before timing out. Enode has ceased sending additional commands.
CANCELLED: A required precondition was not met during the action's timeout window or another action has been sent to the target, overriding this one.
Possible enum values:
PENDINGCONFIRMEDFAILEDCANCELLED
targetIdstring
ID of the target which this action is controlling.
kindstring
The charging action to perform
Possible enum values:
STARTSTOP
failureReasonobject or null
Information about why was this action not executed successfully.
Show child attributes
failureReason.typestring
A machine-readable high level error category.
NO_RESPONSE: The chargeable device did not react to our charge commands within the action's timeout window.
FAILED_PRECONDITION: The chargeable device did not meet all required preconditions for this action to be executed during the action's timeout window.
UNNECESSARY: The action was not carried out given that the device was already in the desired state.
CONFLICT: A newer action for this chargeable has been created. This action is now abandoned.
REQUESTED_CANCELLATION: This action was cancelled by request of the controlling owner. The controlling owner may refer to another Enode entity which initiated the command, such as a schedule or smart override.
NOT_FOUND: The chargeable was deleted while the action was PENDING.
A human-readable explanation of why the charging action was unsuccessful.
targetTypestring
Possible enum values:
vehicle
Response example
{"id":"4eaeb363-296d-4ccc-a973-7805e6f400bd","userId":"d5bd4771-864e-4ae5-b913-dfb5cdcd5772","createdAt":"2020-04-07T17:04:26Z","updatedAt":"2020-04-07T17:04:26Z","completedAt":"2020-04-07T17:04:26Z","state":"PENDING","targetId":"bfbccded-8a1c-45a8-bbda-dcaeef29977a","kind":"START","failureReason":{"type":"NO_RESPONSE","detail":"The chargeable device remained unreachable."},"targetType":"vehicle"}
Response 404
Action not found.
Cancel vehicle action
POST /vehicles/actions/{actionId}/cancel
Cancels a pending vehicle action, halting any further attempts by Enode to execute it.
Note: This only updates the action's status to CANCELLED within Enode and does not reflect a change in the vendor's cloud. Thus any pending action in the vendor's cloud might still be executed.
Request
Path parameters
actionIdstring<uuid>Required
ID of the Action.
Request example
curl--request POST \--url https://enode-api.production.enode.io/vehicles/actions/4eaeb363-296d-4ccc-a973-7805e6f400bd/cancel \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
idstring<uuid>
The ID of the action.
userIdstring
The ID of the user that owns the target of this action.
createdAtstring<date-time>
Time when this action was created
updatedAtstring<date-time>
Time when this action was last updated
completedAtstring<date-time> or null
Time when the action transitioned to a non-pending state.
statestring
The real-time status of an action executed on a target.
PENDING: The initial state. Enode is actively sending commands and monitoring the target for changes.
CONFIRMED: Successful transition of the target to the desired state.
FAILED: The target did not respond to the action before timing out. Enode has ceased sending additional commands.
CANCELLED: A required precondition was not met during the action's timeout window or another action has been sent to the target, overriding this one.
Possible enum values:
PENDINGCONFIRMEDFAILEDCANCELLED
targetIdstring
ID of the target which this action is controlling.
targetTypestring
Possible enum values:
vehiclecharger
kindstring
The charging action to perform
Possible enum values:
STARTSTOP
failureReasonobject or null
Information about why was this action not executed successfully.
Show child attributes
failureReason.typestring
A machine-readable high level error category.
NO_RESPONSE: The chargeable device did not react to our charge commands within the action's timeout window.
FAILED_PRECONDITION: The chargeable device did not meet all required preconditions for this action to be executed during the action's timeout window.
UNNECESSARY: The action was not carried out given that the device was already in the desired state.
CONFLICT: A newer action for this chargeable has been created. This action is now abandoned.
REQUESTED_CANCELLATION: This action was cancelled by request of the controlling owner. The controlling owner may refer to another Enode entity which initiated the command, such as a schedule or smart override.
NOT_FOUND: The chargeable was deleted while the action was PENDING.
A human-readable explanation of why the charging action was unsuccessful.
Response example
{"id":"4eaeb363-296d-4ccc-a973-7805e6f400bd","userId":"d5bd4771-864e-4ae5-b913-dfb5cdcd5772","createdAt":"2020-04-07T17:04:26Z","updatedAt":"2020-04-07T17:04:26Z","completedAt":"2020-04-07T17:04:26Z","state":"PENDING","targetId":"bfbccded-8a1c-45a8-bbda-dcaeef29977a","targetType":"vehicle","kind":"START","failureReason":{"type":"NO_RESPONSE","detail":"The chargeable device remained unreachable."}}
Response 404
Action not found.
Response 409
Action already in a resolved state.
Attributes
idstring<uuid>
The ID of the action.
userIdstring
The ID of the user that owns the target of this action.
createdAtstring<date-time>
Time when this action was created
updatedAtstring<date-time>
Time when this action was last updated
completedAtstring<date-time> or null
Time when the action transitioned to a non-pending state.
statestring
The real-time status of an action executed on a target.
PENDING: The initial state. Enode is actively sending commands and monitoring the target for changes.
CONFIRMED: Successful transition of the target to the desired state.
FAILED: The target did not respond to the action before timing out. Enode has ceased sending additional commands.
CANCELLED: A required precondition was not met during the action's timeout window or another action has been sent to the target, overriding this one.
Possible enum values:
PENDINGCONFIRMEDFAILEDCANCELLED
targetIdstring
ID of the target which this action is controlling.
targetTypestring
Possible enum values:
vehiclecharger
kindstring
The charging action to perform
Possible enum values:
STARTSTOP
failureReasonobject or null
Information about why was this action not executed successfully.
Show child attributes
failureReason.typestring
A machine-readable high level error category.
NO_RESPONSE: The chargeable device did not react to our charge commands within the action's timeout window.
FAILED_PRECONDITION: The chargeable device did not meet all required preconditions for this action to be executed during the action's timeout window.
UNNECESSARY: The action was not carried out given that the device was already in the desired state.
CONFLICT: A newer action for this chargeable has been created. This action is now abandoned.
REQUESTED_CANCELLATION: This action was cancelled by request of the controlling owner. The controlling owner may refer to another Enode entity which initiated the command, such as a schedule or smart override.
NOT_FOUND: The chargeable was deleted while the action was PENDING.
A human-readable explanation of why the charging action was unsuccessful.
Response example
{"id":"4eaeb363-296d-4ccc-a973-7805e6f400bd","userId":"d5bd4771-864e-4ae5-b913-dfb5cdcd5772","createdAt":"2020-04-07T17:04:26Z","updatedAt":"2020-04-07T17:04:26Z","completedAt":"2020-04-07T17:04:26Z","state":"PENDING","targetId":"bfbccded-8a1c-45a8-bbda-dcaeef29977a","targetType":"vehicle","kind":"START","failureReason":{"type":"NO_RESPONSE","detail":"The chargeable device remained unreachable."}}
Refresh vehicle data
POST /vehicles/{vehicleId}/refresh-hint
Use this endpoint to initiate an expedited data refresh for the specified vehicle.
Note: The Enode platform keeps data automatically up-to-date and detects changes in the OEM APIs within seconds to a few minutes. We change the refresh interval dynamically based on a number of heuristics. This ensures we find the best trade-off between the stability of the connection to the OEM and freshness of the data. This method overrides most of our heuristics and should therefore be used with caution. You may use it when you have a strong reason to believe the data might be stale.
Request
Path parameters
vehicleIdstringRequired
ID of the Vehicle.
Request example
curl--request POST \--url https://enode-api.production.enode.io/vehicles/ad84e742-0f46-4cf4-b0db-7d890f8f23f5/refresh-hint \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 204
Refresh hint registered successfully.
Response 404
The specified vehicle was not found.
Get smart charging plan
GET /vehicles/{vehicleId}/smart-charging-plans/{smartChargingPlanId}
Check status of current or historical Smart Charging Plans 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
vehicleIdstringRequired
ID of the Vehicle.
smartChargingPlanIdobject<uuid>Required
ID of the Smart Charging Plan
Possible enum values:
latest
Request example
curl--request GET \--url https://enode-api.production.enode.io/vehicles/ad84e742-0f46-4cf4-b0db-7d890f8f23f5/smart-charging-plans/latest \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
idstring
ID of the Smart Charging Plan
vehicleIdstring
ID of the Vehicle to which the Smart Charging Plan belongs
userIdstring
ID of the User to which the Smart Charging Plan belongs
locationIdstring<uuid> or null
ID of the location at which the Smart Charging Plan is being executed. Null for Smart Charging Plans started before March 2022.
vendorstring
Vendor of the Vehicle to which the Smart Charging Plan belongs
Currency in which monetary amounts are denominated (ISO 4217 3-character Alpha code)
nonSmartCostnumber
Estimated cost of charging, if smart charging were not on for the vehicle
smartCostnumber or null
Estimated cost of charging, achieved by this Smart Charging Plan
stopAtstring<date-time>
Time at which the current Smart Charging Plan will stop the vehicle's charging. The charging will be resumed when prices are optimal.
startAtstring<date-time> or null
Time at which the current Smart Charging Plan will resume the vehicle's charging, when prices are optimal.
estimatedFinishAtstring<date-time>
Time at which charging is estimated to be complete, due to the current Smart Charging Plan
stopConfirmedAtstring<date-time> or null
During a Smart Charging Plan, the first time at which the vehicle's charging was confirmed as stopped. If a vehicle stops charging outside of smart charging's control (e.g., via a 3rd party app), this will be populated with that timestamp.
startConfirmedAtstring<date-time> or null
During a Smart Charging Plan, the first time at which the vehicle's charging was confirmed as started. If a vehicle starts charging outside of smart charging's control (e.g., via a 3rd party app), this will be populated with that timestamp.
endedAtstring<date-time> or null
The time at which the Smart Charging Plan ended
finalStatestring or null
The final state of the Smart Charging Plan when it ended
If the finalState was PLAN:ENDED:FAILED, failureCondition is populated with the condition in which the Smart Charging Plan failed. If the finalState was PLAN:ENDED:FINISHED, failureCondition is populated with FINISHED_LATE if the plan was more than 15% late.
This field populates after using Vehicle Create Smart OverrideAPI or Charger Create Smart OverrideAPI. Once populated, the target enters an overridden state, stopping Enode from sending Smart Charging actions. The Smart Override persists until the target ceases charging for any reason or is manually ended via Vehicle End Smart OverrideAPI or Charger End Smart OverrideAPI.
Deprecated. Replaced by locationId. ID of the location at which the Smart Charging Plan is being executed. Null for Smart Charging Plans started before March 2022.
curl--request GET \--url https://enode-api.production.enode.io/vehicles/ad84e742-0f46-4cf4-b0db-7d890f8f23f5/smart-charging-policy \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
isEnabledboolean
When enabled, this vehicle's charging status may be controlled by Smart Charging
deadlinestring or null
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 location at which the smart charging occurs, the deadline is interpreted in that timezone, otherwise UTC is used.
minimumChargeLimitnumber
Proceed to charge promptly, disregarding energy prices, until the vehicle achieves this preset minimum limit. Please note that this limit cannot exceed the vehicle's maximum charge limit. The default setting is zero. The unit of measure is percentage.
When enabled, this vehicle's charging status may be controlled by Smart Charging
Default value: false
deadlinestringOptional
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 location at which the smart charging occurs, the deadline is interpreted in that timezone, otherwise UTC is used.
minimumChargeLimitnumberOptional
Proceed to charge promptly, disregarding energy prices, until the vehicle achieves this preset minimum limit. Please note that this limit cannot exceed the vehicle's maximum charge limit. The default setting is zero. The unit of measure is percentage.
Default value: 0
Request example
curl--request PUT \--url https://enode-api.production.enode.io/vehicles/ad84e742-0f46-4cf4-b0db-7d890f8f23f5/smart-charging-policy \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'\--header'content-type: application/json'\--data'{"isEnabled":false,"deadline":"07:00","minimumChargeLimit":0}'
Response 200
Attributes
isEnabledboolean
When enabled, this vehicle's charging status may be controlled by Smart Charging
deadlinestring or null
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 location at which the smart charging occurs, the deadline is interpreted in that timezone, otherwise UTC is used.
minimumChargeLimitnumber
Proceed to charge promptly, disregarding energy prices, until the vehicle achieves this preset minimum limit. Please note that this limit cannot exceed the vehicle's maximum charge limit. The default setting is zero. The unit of measure is percentage.
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 End Smart OverrideAPI 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 Control ChargingAPI instead.
Request
Path parameters
vehicleIdstringRequired
ID of the Vehicle.
Request example
curl--request POST \--url https://enode-api.production.enode.io/vehicles/ad84e742-0f46-4cf4-b0db-7d890f8f23f5/smart-override \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
createdAtstring<date-time>
Time at which the smart override was created.
endedAtstring<date-time> or null
Time at which the smart override was ended. If null, the smart override is still active.
targetTypestring
Possible enum values:
vehiclecharger
targetIdstring
ID of the target which this smart override is affecting.
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.
An enum value that describes the current Smart Charging state of the vehicle. Every vehicle is in exactly one state, at all times. If the returned state is UNKNOWN, this might indicate that the vehicle is no longer capable of smart charging. In this case we recommend that you check the capabilities of the vehicle to determine what should be communicated to users. If we don't have pricing data or tariffs for the location of the vehicle, the state will also be UNKNOWN. In this case, we recommend that you contact Enode staff.
Currency in which monetary amounts are denominated (ISO 4217 3-character Alpha code)
plan.nonSmartCostnumber
Estimated cost of charging, if smart charging were not on for the vehicle
plan.smartCostnumber or null
Estimated cost of charging, achieved by this Smart Charging Plan
plan.stopAtstring<date-time>
Time at which the current Smart Charging Plan will stop the vehicle's charging. The charging will be resumed when prices are optimal.
plan.startAtstring<date-time> or null
Time at which the current Smart Charging Plan will resume the vehicle's charging, when prices are optimal.
plan.estimatedFinishAtstring<date-time>
Time at which charging is estimated to be complete, due to the current Smart Charging Plan
plan.stopConfirmedAtstring<date-time> or null
During a Smart Charging Plan, the first time at which the vehicle's charging was confirmed as stopped. If a vehicle stops charging outside of smart charging's control (e.g., via a 3rd party app), this will be populated with that timestamp.
plan.startConfirmedAtstring<date-time> or null
During a Smart Charging Plan, the first time at which the vehicle's charging was confirmed as started. If a vehicle starts charging outside of smart charging's control (e.g., via a 3rd party app), this will be populated with that timestamp.
plan.endedAtstring<date-time> or null
The time at which the Smart Charging Plan ended
plan.finalStatestring or null
The final state of the Smart Charging Plan when it ended
If the finalState was PLAN:ENDED:FAILED, failureCondition is populated with the condition in which the Smart Charging Plan failed. If the finalState was PLAN:ENDED:FINISHED, failureCondition is populated with FINISHED_LATE if the plan was more than 15% late.
This field populates after using Vehicle Create Smart OverrideAPI or Charger Create Smart OverrideAPI. Once populated, the target enters an overridden state, stopping Enode from sending Smart Charging actions. The Smart Override persists until the target ceases charging for any reason or is manually ended via Vehicle End Smart OverrideAPI or Charger End Smart OverrideAPI.
plan.chargingLocationIdstring<uuid> or nullDeprecated
Deprecated. Replaced by locationId. ID of the location at which the Smart Charging Plan is being executed. Null for Smart Charging Plans started before March 2022.
smartOverrideobject or null
This field populates after using Vehicle Create Smart OverrideAPI or Charger Create Smart OverrideAPI. Once populated, the target enters an overridden state, stopping Enode from sending Smart Charging actions. The Smart Override persists until the target ceases charging for any reason or is manually ended via Vehicle End Smart OverrideAPI or Charger End Smart OverrideAPI.
Show child attributes
smartOverride.createdAtstring<date-time>
Time at which the smart override was created.
smartOverride.endedAtstring<date-time> or null
Time at which the smart override was ended. If null, the smart override is still active.
smartOverride.targetTypestring
Possible enum values:
vehiclecharger
smartOverride.targetIdstring
ID of the target which this smart override is affecting.
A short, human-readable summary of the problem type.
detailstring
A human-readable explanation specific to this occurrence of the problem.
Response example
{"type":"https://docs.enode.io/api/problems/not-found","title":"Webhook not found","detail":"Could not find webhook 0ec3d927-0100-44ff-bb53-edfe3ce64a57"}
Test firehose webhookDeprecated
POST /webhooks/firehose/test
Trigger a enode:firehose:test payload to be sent to your configured Webhook URL. This will reset your webhook to a healthy state on success.
Response 200
Attributes
statusstring
Indicates if the test webhook event was delivered successfully to your configured webhook endpoint.
Possible enum values:
SUCCESSFAILURE
descriptionstring
Human readable description of the test outcome.
responseobject or null
Null if status is FAILED.
Show child attributes
response.codenumber
Status code returned by your configured webhook endpoint
response.bodystring
Body returned by your configured webhook endpoint
response.headersarray of string or null
Headers returned by your configured webhook endpoint
The HTTPS URL that webhook payloads should be sent to.
secretstringRequired
A cryptographically secure secret, generated and provided by your client. Refer to Generating a secret for details on how to do this.
eventsarray of stringOptional
The events which will trigger the webhook. Available events: *, user:vehicle:discovered, user:vehicle:updated, user:vehicle:deleted, user:vehicle:smart-charging-status-updated, user:charge-action:updated, user:vendor-action:updated, user:schedule:execution-updated, user:charger:discovered, user:charger:updated, user:charger:deleted, user:hvac:discovered, user:hvac:updated, user:hvac:deleted, user:inverter:discovered, user:inverter:updated, user:inverter:deleted, user:credentials:invalidated, user:battery:discovered, user:battery:updated, user:battery:deleted, enode:webhook:test, user:meter:discovered, user:meter:updated, user:meter:deleted
Default value: ["*"]
apiVersionstring or nullOptional
If provided, webhook payloads will be generated for this version. If not provided or null, the default API version of the client will be used when generating webhook payloads. Valid versions: 2024-10-01, 2024-01-01, 2023-08-01, 2023-05-01, 2023-04-15, 2023-04-01, 2023-03-01, 2023-02-01
authenticationobjectOptional
If provided, the authentication header will be sent with each webhook request.
Show child attributes
authentication.headerNamestringRequired
Authentication header name.
authentication.headerValuestringRequired
Authentication header value.
Request example
curl--request POST \--url https://enode-api.production.enode.io/webhooks \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'\--header'content-type: application/json'\--data'{"url":"https://example.com/enode-webhooks/firehose","secret":"0Kvs1tAUQ69FOMBiWlt5XJSrruXMhWDiVbyrWaNm","events":["user:vehicle:discovered","user:vehicle:updated","user:vehicle:deleted"],"apiVersion":"2023-08-01","authentication":{"headerName":"x-api-key","headerValue":"AOIxcVLKxR2VpzlN5HIk14oPu80"}}'
Response 200
Attributes
idstring
Unique identifier for the webhook.
urlstring
The HTTPS URL that webhook payloads should be sent to.
eventsarray of string
The events which will trigger the webhook.
Default value: ["*"]
lastSuccessstring
Time when a delivery to this webhook was last successful.
isActiveboolean
Indicates whether the webhook is active or not.
createdAtstring
Time when the webhook was created.
apiVersionstring or null
API version of the payload. If null, the default API version of the client will be used when generating webhook payloads.
A short, human-readable summary of the problem type.
detailstring
A human-readable explanation specific to this occurrence of the problem.
Response example
{"type":"https://docs.enode.io/api/problems/bad-request","title":"Webhook already exists.","detail":"A webhook with the specified URL and API version already exists."}
List webhooks
GET /webhooks
Returns a paginated list of webhooks.
Request
Query parameters
afterstringOptional
beforestringOptional
pageSizeintegerOptional
Default value: 50
Request example
curl--request GET \--url'https://enode-api.production.enode.io/webhooks?after=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&before=MjAyMy0wNy0xOFQxMDowODowMi4zNzNa&pageSize=50'\--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
dataarray of object
Paginated list of webhooks.
Show child attributes
data[].idstring
Unique identifier for the webhook.
data[].urlstring
The HTTPS URL that webhook payloads should be sent to.
data[].eventsarray of string
The events which will trigger the webhook.
Default value: ["*"]
data[].lastSuccessstring
Time when a delivery to this webhook was last successful.
data[].isActiveboolean
Indicates whether the webhook is active or not.
data[].createdAtstring
Time when the webhook was created.
data[].apiVersionstring or null
API version of the payload. If null, the default API version of the client will be used when generating webhook payloads.
data[].authenticationobject or null
Show child attributes
data[].authentication.headerNamestring
paginationobject
Cursors to the pages before and after current page. See the PaginationAPI section for reference.
The HTTPS URL that webhook payloads should be sent to.
secretstringOptional
A cryptographically secure secret, generated and provided by your client. Refer to Generating a secret for details on how to do this.
eventsarray of stringOptional
The events which will trigger the webhook. Available events: *, user:vehicle:discovered, user:vehicle:updated, user:vehicle:deleted, user:vehicle:smart-charging-status-updated, user:charge-action:updated, user:vendor-action:updated, user:schedule:execution-updated, user:charger:discovered, user:charger:updated, user:charger:deleted, user:hvac:discovered, user:hvac:updated, user:hvac:deleted, user:inverter:discovered, user:inverter:updated, user:inverter:deleted, user:credentials:invalidated, user:battery:discovered, user:battery:updated, user:battery:deleted, enode:webhook:test, user:meter:discovered, user:meter:updated, user:meter:deleted
Default value: ["*"]
apiVersionstring or nullOptional
If provided, webhook payloads will be generated for this version. If not provided or null, the default API version of the client will be used when generating webhook payloads. Valid versions: 2024-10-01, 2024-01-01, 2023-08-01, 2023-05-01, 2023-04-15, 2023-04-01, 2023-03-01, 2023-02-01
authenticationobject or nullOptional
If provided, the authentication header will be sent with each webhook request.
A short, human-readable summary of the problem type.
detailstring
A human-readable explanation specific to this occurrence of the problem.
Response example
{"type":"https://docs.enode.io/api/problems/not-found","title":"Webhook not found","detail":"Could not find webhook 0ec3d927-0100-44ff-bb53-edfe3ce64a57"}
Get webhook
GET /webhooks/{webhookId}
Returns webhook with the given ID, if it exists.
Request
Path parameters
webhookIdstring<uuid>Required
ID of the Webhook.
Request example
curl--request GET \--url https://enode-api.production.enode.io/webhooks/4eaeb363-296d-4ccc-a973-7805e6f400bd \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
idstring
Unique identifier for the webhook.
urlstring
The HTTPS URL that webhook payloads should be sent to.
eventsarray of string
The events which will trigger the webhook.
Default value: ["*"]
lastSuccessstring
Time when a delivery to this webhook was last successful.
isActiveboolean
Indicates whether the webhook is active or not.
createdAtstring
Time when the webhook was created.
apiVersionstring or null
API version of the payload. If null, the default API version of the client will be used when generating webhook payloads.
A short, human-readable summary of the problem type.
detailstring
A human-readable explanation specific to this occurrence of the problem.
Response example
{"type":"https://docs.enode.io/api/problems/not-found","title":"Webhook not found","detail":"Could not find webhook 0ec3d927-0100-44ff-bb53-edfe3ce64a57"}
A short, human-readable summary of the problem type.
detailstring
A human-readable explanation specific to this occurrence of the problem.
Response example
{"type":"https://docs.enode.io/api/problems/not-found","title":"Webhook not found","detail":"Could not find webhook 0ec3d927-0100-44ff-bb53-edfe3ce64a57"}
Test webhook
POST /webhooks/{webhookId}/test
Send a enode:webhook:test payload to the webhook. If the webhook is inactive, it'll be reactivated on success.
Request
Path parameters
webhookIdstring<uuid>Required
ID of the Webhook.
Request example
curl--request POST \--url https://enode-api.production.enode.io/webhooks/4eaeb363-296d-4ccc-a973-7805e6f400bd/test \--header'Authorization: Bearer REPLACE_BEARER_TOKEN'
Response 200
Attributes
statusstring
Indicates if the test webhook event was delivered successfully to your configured webhook endpoint.
Possible enum values:
SUCCESSFAILURE
descriptionstring
Human readable description of the test outcome.
responseobject or null
Null if status is FAILED.
Show child attributes
response.codenumber
Status code returned by your configured webhook endpoint
response.bodystring
Body returned by your configured webhook endpoint
response.headersarray of string or null
Headers returned by your configured webhook endpoint
A short, human-readable summary of the problem type.
detailstring
A human-readable explanation specific to this occurrence of the problem.
Response example
{"type":"https://docs.enode.io/api/problems/not-found","title":"Webhook not found","detail":"Could not find webhook 0ec3d927-0100-44ff-bb53-edfe3ce64a57"}