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.
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.
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.
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 occurred. 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 and webhooks 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.
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.
Images
Enode provides product images for vehicles and other assets. Image URLs are returned in the imageUrl field of API responses, such as GET /vehicles/{vehicleId} and webhook payloads.
Images are served through a global CDN with on-the-fly transformations including resizing, format conversion, and quality adjustment.
Images are served with long-lived cache headers. Transformed images are cached on the CDN, so subsequent requests for the same transformation are served directly from cache.
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.
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.
Copy linkdata[].chargeState.batteryCapacitynumber or null
Battery capacity in kWh.
Copy linkdata[].chargeState.batteryLevelnumber or null
Remaining battery charge level in percent.
Copy linkdata[].chargeState.chargeRatenumber or null
The current charge rate in kW. A positive value indicates that the battery is charging.
Copy linkdata[].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.
Copy linkdata[].chargeState.lastUpdatedstring<date-time> or null
Copy linkdata[].config.operationModestring or null
The current operation mode of the battery.
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.
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.
IMPORT_FOCUS: Prioritizes charging the battery. Uses excess solar energy for charging and will charge from grid if possible. 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.
IDLE: Prevents the battery from charging or discharging. The battery remains inactive and maintains its current state of charge, even if there is available solar generation or energy demand from household consumption.
UNKNOWN: The mode of the battery is currently unknown. It might be possible to switch out of this mode and into one of the known modes. Actively returning to this mode is not possible.
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.
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
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.
Copy linkdata[].chargeState.batteryCapacitynumber or null
Battery capacity in kWh.
Copy linkdata[].chargeState.batteryLevelnumber or null
Remaining battery charge level in percent.
Copy linkdata[].chargeState.chargeRatenumber or null
The current charge rate in kW. A positive value indicates that the battery is charging.
Copy linkdata[].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.
Copy linkdata[].chargeState.lastUpdatedstring<date-time> or null
Copy linkdata[].config.operationModestring or null
The current operation mode of the battery.
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.
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.
IMPORT_FOCUS: Prioritizes charging the battery. Uses excess solar energy for charging and will charge from grid if possible. 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.
IDLE: Prevents the battery from charging or discharging. The battery remains inactive and maintains its current state of charge, even if there is available solar generation or energy demand from household consumption.
UNKNOWN: The mode of the battery is currently unknown. It might be possible to switch out of this mode and into one of the known modes. Actively returning to this mode is not possible.
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.
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
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.
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.
Copy linkchargeState.lastUpdatedstring<date-time> or null
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.
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.
IMPORT_FOCUS: Prioritizes charging the battery. Uses excess solar energy for charging and will charge from grid if possible. 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.
IDLE: Prevents the battery from charging or discharging. The battery remains inactive and maintains its current state of charge, even if there is available solar generation or energy demand from household consumption.
UNKNOWN: The mode of the battery is currently unknown. It might be possible to switch out of this mode and into one of the known modes. Actively returning to this mode is not possible.
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.
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
Set operation mode for batteryBeta
POST /batteries/{batteryId}/operation-mode
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.
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.
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.
IMPORT_FOCUS: Prioritizes charging the battery. Uses excess solar energy for charging and will charge from grid if possible. 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.
IDLE: Prevents the battery from charging or discharging. The battery remains inactive and maintains its current state of charge, even if there is available solar generation or energy demand from household consumption.
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.
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.
IMPORT_FOCUS: Prioritizes charging the battery. Uses excess solar energy for charging and will charge from grid if possible. 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.
IDLE: Prevents the battery from charging or discharging. The battery remains inactive and maintains its current state of charge, even if there is available solar generation or energy demand from household consumption.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
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.
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.
IMPORT_FOCUS: Prioritizes charging the battery. Uses excess solar energy for charging and will charge from grid if possible. 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.
IDLE: Prevents the battery from charging or discharging. The battery remains inactive and maintains its current state of charge, even if there is available solar generation or energy demand from household consumption.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
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.
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.
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.
IMPORT_FOCUS: Prioritizes charging the battery. Uses excess solar energy for charging and will charge from grid if possible. 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.
IDLE: Prevents the battery from charging or discharging. The battery remains inactive and maintains its current state of charge, even if there is available solar generation or energy demand from household consumption.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
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.
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.
IMPORT_FOCUS: Prioritizes charging the battery. Uses excess solar energy for charging and will charge from grid if possible. 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.
IDLE: Prevents the battery from charging or discharging. The battery remains inactive and maintains its current state of charge, even if there is available solar generation or energy demand from household consumption.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
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.
Possible enum values:
CONFIRMEDFAILEDCANCELLED
Refresh battery dataBeta
POST /batteries/{batteryId}/refresh-hint
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.
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
Copy linkdata[].chargeState.isPluggedInboolean or null
Indicates whether the charger has a vehicle plugged into it (regardless of whether that vehicle is actually charging)
Copy linkdata[].chargeState.isChargingboolean or null
Indicates whether the charger is currently delivering power to the vehicle and actively charging its battery.
Copy linkdata[].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.
Copy linkdata[].chargeState.lastUpdatedstring<date-time> or null
Time of latest charge state update
Copy linkdata[].chargeState.maxCurrentnumber or null
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown or chargeState.lastUpdated is more than 7 days ago.
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.
PLUGGED_IN:DISCHARGING: The charger is actively discharging by giving power to the home/grid, causing the battery level to decrease.
Charger serial number. Most chargers have this, but some do not expose it. When missing we default to a vendor provided ID, which may be visible to the end user in their app.
Copy linkdata[].information.imageUrlstring or null
URL to an image of the charger model. null when not available.
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
Copy linkdata[].chargeState.isPluggedInboolean or null
Indicates whether the charger has a vehicle plugged into it (regardless of whether that vehicle is actually charging)
Copy linkdata[].chargeState.isChargingboolean or null
Indicates whether the charger is currently delivering power to the vehicle and actively charging its battery.
Copy linkdata[].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.
Copy linkdata[].chargeState.lastUpdatedstring<date-time> or null
Time of latest charge state update
Copy linkdata[].chargeState.maxCurrentnumber or null
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown or chargeState.lastUpdated is more than 7 days ago.
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.
PLUGGED_IN:DISCHARGING: The charger is actively discharging by giving power to the home/grid, causing the battery level to decrease.
Charger serial number. Most chargers have this, but some do not expose it. When missing we default to a vendor provided ID, which may be visible to the end user in their app.
Copy linkdata[].information.imageUrlstring or null
URL to an image of the charger model. null when not available.
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.
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown or chargeState.lastUpdated is more than 7 days ago.
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.
PLUGGED_IN:DISCHARGING: The charger is actively discharging by giving power to the home/grid, causing the battery level to decrease.
Charger serial number. Most chargers have this, but some do not expose it. When missing we default to a vendor provided ID, which may be visible to the end user in their app.
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.
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown or chargeState.lastUpdated is more than 7 days ago.
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.
PLUGGED_IN:DISCHARGING: The charger is actively discharging by giving power to the home/grid, causing the battery level to decrease.
Charger serial number. Most chargers have this, but some do not expose it. When missing we default to a vendor provided ID, which may be visible to the end user in their app.
ID of the location the charger is currently positioned at (if any).
Copy linklocation.lastUpdatedstring<date-time> or null
Time of last received location state update
Control charging
POST /chargers/{chargerId}/charging
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.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
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.
A list of validation issues which occurred while validating some component of the network payload.
Show child attributes
Set max current
POST /chargers/{chargerId}/max-current
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.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
A list of validation issues which occurred while validating some component of the network payload.
Show child attributes
Set charge rate limitEarly Adopter
POST /chargers/{chargerId}/charge-rate-limit
Sets the charge rate limit for a charger in kW. Creates an Action that retries until the charger's chargeRateLimit matches the target value. Setting chargeRateLimit also changes maxCurrent.
Only one Action can be active per charger - creating a new one cancels the previous action (state: CANCELLED). The Action must complete before sending further commands. Track transitions via the user:vendor-action:updated webhook or Get Charger ActionAPI.
If you are interested in joining the Early Adopter program, please reach out to Enode with a short description of your use case.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
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.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
A human-readable explanation of why the action was unsuccessful.
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.
HEM Systems (Home Energy Management Systems) track flows between various assets such as solar inverters, batteries, and meters. They provide information and status details for the system and also support historical metrics through statistics for solar generation, household consumption, grid import/export, battery levels, and charge/discharge. Refer to the Guide for details on how to enable this functionality on your account.
Returns time-bucketed metrics for a specific HEM System, including solar generation, household consumption, grid import/export, battery level, and charge/discharge.
The endpoint supports querying by DAY (YYYY-MM-DD) and MONTH (YYYY-MM) intervals from the system’s installation date up to the current date. DAY queries return the most granular available resolution, while MONTH queries report daily buckets. All timestamps are localized to the HEM system’s configured timezone. Buckets < 1 hour (e.g., PT5M, PT15M) report average power (kW); buckets ≥ 1 hour report energy (kWh). When data is not available, isAvailable will be false with a reason. Note: Battery level is only available for DAY interval queries.
Copy linktimeseries.generation.dataarray of object
Timeseries of HEM System statistics per timezone of the system. The first bucket of a day starts at midnight, localtime and the final bucket of a day ends at midnight, local time. Example: For data with a PT5M resolution and a timezone offset of +02:00, the first and last bucket would be 2025-05-05T00:00:00+02:00 and 2025-05-05T23:55:00+02:00.
Copy linktimeseries.consumption.dataarray of object
Timeseries of HEM System statistics per timezone of the system. The first bucket of a day starts at midnight, localtime and the final bucket of a day ends at midnight, local time. Example: For data with a PT5M resolution and a timezone offset of +02:00, the first and last bucket would be 2025-05-05T00:00:00+02:00 and 2025-05-05T23:55:00+02:00.
Timeseries of HEM System statistics per timezone of the system. The first bucket of a day starts at midnight, localtime and the final bucket of a day ends at midnight, local time. Example: For data with a PT5M resolution and a timezone offset of +02:00, the first and last bucket would be 2025-05-05T00:00:00+02:00 and 2025-05-05T23:55:00+02:00.
Timeseries of HEM System statistics per timezone of the system. The first bucket of a day starts at midnight, localtime and the final bucket of a day ends at midnight, local time. Example: For data with a PT5M resolution and a timezone offset of +02:00, the first and last bucket would be 2025-05-05T00:00:00+02:00 and 2025-05-05T23:55:00+02:00.
Timeseries of HEM System statistics per timezone of the system. The first bucket of a day starts at midnight, localtime and the final bucket of a day ends at midnight, local time. Example: For data with a PT5M resolution and a timezone offset of +02:00, the first and last bucket would be 2025-05-05T00:00:00+02:00 and 2025-05-05T23:55:00+02:00.
Timeseries of HEM System statistics per timezone of the system. The first bucket of a day starts at midnight, localtime and the final bucket of a day ends at midnight, local time. Example: For data with a PT5M resolution and a timezone offset of +02:00, the first and last bucket would be 2025-05-05T00:00:00+02:00 and 2025-05-05T23:55:00+02:00.
Copy linktimeseries.batteryLevel.dataarray of object
Timeseries of HEM System statistics per timezone of the system. The first bucket of a day starts at midnight, localtime and the final bucket of a day ends at midnight, local time. Example: For data with a PT5M resolution and a timezone offset of +02:00, the first and last bucket would be 2025-05-05T00:00:00+02:00 and 2025-05-05T23:55:00+02:00.
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.
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.
Copy linkdata[].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".
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
Copy linkdata[].temperatureState.currentTemperaturenumber or null
Current air temperature reported by device in degrees Celsius.
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.
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.
Copy linkdata[].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".
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
Copy linkdata[].temperatureState.currentTemperaturenumber or null
Current air temperature reported by device in degrees Celsius.
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.
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.
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
Copy linktemperatureState.currentTemperaturenumber or null
Current air temperature reported by device in degrees Celsius.
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.
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.
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
Copy linktemperatureState.currentTemperaturenumber or null
Current air temperature reported by device in degrees Celsius.
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.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
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.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
A human-readable explanation of why the action was unsuccessful.
Set HVAC unit to follow device schedule
POST /hvacs/{hvacId}/follow-schedule
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.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
A list of validation issues which occurred while validating some component of the network payload.
Show child attributes
Refresh HVAC unit data
POST /hvacs/{hvacId}/refresh-hint
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.
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.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
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.
Preferred BCP47 language code - Request translation for the specified language. Falls back to en-US if not provided or provided language code is unsupported.
Preferred BCP47 language code - Request translation for the specified language. Falls back to en-US if not provided or provided language code is unsupported.
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.
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.
Create a Location for a User. Each Location defines a geofence with a 200 m enter radius and a 270 m exit radius. A user's Locations must be at least 200 m apart. The API rejects any new Location whose coordinates fall within the geofence of an existing one.
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.
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.
Updates a Location. Note: the API does not re-validate the minimum distance constraint on update. If you move a Location's coordinates, ensure they remain at least 200 m from any other Location belonging to the same user.
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.
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.
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.
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
Refresh meter dataBeta
POST /meters/{meterId}/refresh-hint
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.
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.
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
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.
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Endpoints that return information about the health of Enode and our integrations.
List supported vendors per asset type
GET /integrations
Lists available vendors across asset types. The list of available vendors can be customized in your client. Learn more about vendors requiring activation.
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
Copy linkdata[].productionState.productionRatenumber or null
The current production rate in kW.
Copy linkdata[].productionState.isProducingboolean or null
Whether the solar inverter is actively producing energy or not.
Copy linkdata[].productionState.totalLifetimeProductionnumber or null
The total lifetime production in kWh.
Copy linkdata[].productionState.lastUpdatedstring<date-time> or null
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.
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
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
Copy linkdata[].productionState.productionRatenumber or null
The current production rate in kW.
Copy linkdata[].productionState.isProducingboolean or null
Whether the solar inverter is actively producing energy or not.
Copy linkdata[].productionState.totalLifetimeProductionnumber or null
The total lifetime production in kWh.
Copy linkdata[].productionState.lastUpdatedstring<date-time> or null
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.
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
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
Copy linkproductionState.productionRatenumber or null
The current production rate in kW.
Copy linkproductionState.isProducingboolean or null
Whether the solar inverter is actively producing energy or not.
Copy linkproductionState.totalLifetimeProductionnumber or null
The total lifetime production in kWh.
Copy linkproductionState.lastUpdatedstring<date-time> or null
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.
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
Refresh inverter data
POST /inverters/{inverterId}/refresh-hint
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.
Returns statistics about power production for the given inverter in the form of a time series, collected from vendor APIs.
Request a day of data by specifying year, month, and day, or a month of data by specifying only year and month.
Intervals are given in the local time of the inverter. For example, year=2024&month=05&day=05 for an inverter in the Australia/Adelaide timezone will return data between 2024-05-05T00:00:00+09:30 and 2024-05-06T00:00:00+09:30.
The resolutions in the response depend on the interval size requested. For a month interval, the resolution is DAY. For a day interval, the resolution is QUARTER_HOUR.
Pre-linking data is available shortly after linking. 30 days before the linking date at QUARTER_HOUR resolution. 3 months before linking date at DAY resolution.
Webhooks: Whenever data is backfilled or updated a user:inverter:statistics-updated webhook event will be emitted.
Time bucket start as a RFC3339 timestamp. Offset may be Z or ±hh:mm. In the unlikely event that an inverter changes timezone, the offset from when the data was retrieved is used, not the inverter's current timezone.
Copy linkresolutions.QUARTER_HOUR.data[].valuenumber or null
The energy produced (kWh) in the specified interval. Null if no data is available.
Time bucket start as a RFC3339 timestamp. Offset may be Z or ±hh:mm. In the unlikely event that an inverter changes timezone, the offset from when the data was retrieved is used, not the inverter's current timezone.
Copy linkresolutions.DAY.data[].valuenumber or null
The energy produced (kWh) in the specified interval. Null if no data is available.
Success. Some of the returned data is likely to change in the future. For example, if you request an interval ending in the future. Persist the data, and retry after the specified time. You'll also receive a webhook user:inverter:statistics-updated event when the data changes.
Time bucket start as a RFC3339 timestamp. Offset may be Z or ±hh:mm. In the unlikely event that an inverter changes timezone, the offset from when the data was retrieved is used, not the inverter's current timezone.
Copy linkresolutions.QUARTER_HOUR.data[].valuenumber or null
The energy produced (kWh) in the specified interval. Null if no data is available.
Time bucket start as a RFC3339 timestamp. Offset may be Z or ±hh:mm. In the unlikely event that an inverter changes timezone, the offset from when the data was retrieved is used, not the inverter's current timezone.
Copy linkresolutions.DAY.data[].valuenumber or null
The energy produced (kWh) in the specified interval. Null if no data is available.
Endpoints returning timeseries data collected from linked devices.
Get HEM system statisticsBeta
GET /hem-systems/{hemSystemId}/statistics
Returns time-bucketed metrics for a specific HEM System, including solar generation, household consumption, grid import/export, battery level, and charge/discharge.
The endpoint supports querying by DAY (YYYY-MM-DD) and MONTH (YYYY-MM) intervals from the system’s installation date up to the current date. DAY queries return the most granular available resolution, while MONTH queries report daily buckets. All timestamps are localized to the HEM system’s configured timezone. Buckets < 1 hour (e.g., PT5M, PT15M) report average power (kW); buckets ≥ 1 hour report energy (kWh). When data is not available, isAvailable will be false with a reason. Note: Battery level is only available for DAY interval queries.
Copy linktimeseries.generation.dataarray of object
Timeseries of HEM System statistics per timezone of the system. The first bucket of a day starts at midnight, localtime and the final bucket of a day ends at midnight, local time. Example: For data with a PT5M resolution and a timezone offset of +02:00, the first and last bucket would be 2025-05-05T00:00:00+02:00 and 2025-05-05T23:55:00+02:00.
Copy linktimeseries.consumption.dataarray of object
Timeseries of HEM System statistics per timezone of the system. The first bucket of a day starts at midnight, localtime and the final bucket of a day ends at midnight, local time. Example: For data with a PT5M resolution and a timezone offset of +02:00, the first and last bucket would be 2025-05-05T00:00:00+02:00 and 2025-05-05T23:55:00+02:00.
Timeseries of HEM System statistics per timezone of the system. The first bucket of a day starts at midnight, localtime and the final bucket of a day ends at midnight, local time. Example: For data with a PT5M resolution and a timezone offset of +02:00, the first and last bucket would be 2025-05-05T00:00:00+02:00 and 2025-05-05T23:55:00+02:00.
Timeseries of HEM System statistics per timezone of the system. The first bucket of a day starts at midnight, localtime and the final bucket of a day ends at midnight, local time. Example: For data with a PT5M resolution and a timezone offset of +02:00, the first and last bucket would be 2025-05-05T00:00:00+02:00 and 2025-05-05T23:55:00+02:00.
Timeseries of HEM System statistics per timezone of the system. The first bucket of a day starts at midnight, localtime and the final bucket of a day ends at midnight, local time. Example: For data with a PT5M resolution and a timezone offset of +02:00, the first and last bucket would be 2025-05-05T00:00:00+02:00 and 2025-05-05T23:55:00+02:00.
Timeseries of HEM System statistics per timezone of the system. The first bucket of a day starts at midnight, localtime and the final bucket of a day ends at midnight, local time. Example: For data with a PT5M resolution and a timezone offset of +02:00, the first and last bucket would be 2025-05-05T00:00:00+02:00 and 2025-05-05T23:55:00+02:00.
Copy linktimeseries.batteryLevel.dataarray of object
Timeseries of HEM System statistics per timezone of the system. The first bucket of a day starts at midnight, localtime and the final bucket of a day ends at midnight, local time. Example: For data with a PT5M resolution and a timezone offset of +02:00, the first and last bucket would be 2025-05-05T00:00:00+02:00 and 2025-05-05T23:55:00+02:00.
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.
Only include sessions intersecting with [startDate, endDate].
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
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. 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
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
A list of validation issues which occurred while validating some component of the network payload.
Show child attributes
Get user charging statistics
GET /users/{userId}/statistics/charging
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.
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.
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
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
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
A list of validation issues which occurred while validating some component of the network payload.
Show child attributes
Tariffs
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 ChargingAPI, and will be used to calculate costs in StatisticsAPI.
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.
Copy linktariffIntervals[].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
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
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.
Unlink user
DELETE /users/{userId}
Deletes a User and all of their data permanently and invalidates any associated sessions, authorization codes, and access/refresh tokens.
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.
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. If absent, the type(s) of assets that will be linked are inferred from the scope(s) requested.
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 <assetType>:read:data scope is required for any asset type (e.g. if you wish to link a battery, you must request battery:read:data).
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 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.
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.
A list of validation issues which occurred while validating some component of the network payload.
Show child attributes
Relink asset
POST /assets/{assetId}/relink
Creates a short-lived (24 hours), single-use device linking session specifically tailored for relinking. See our relinking guide for more details. 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.
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 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.
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.
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
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
Copy linkdata[].chargeState.batteryLevelnumber or null
Copy linkdata[].chargeState.isPluggedInboolean or null
Indicates whether the vehicle is connected to a charging box (regardless of whether it is actually charging)
Copy linkdata[].chargeState.isChargingboolean or null
Indicates whether the vehicle is currently receiving power from the charger and actively charging its battery.
Copy linkdata[].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. This will be null when powerDeliveryState is UNKNOWN.
Copy linkdata[].chargeState.batteryCapacitynumber or null
Vehicle's usable battery capacity in kWh.
Copy linkdata[].chargeState.chargeLimitnumber or null
Charge limit, as a percent of batteryCapacity.
When null, the vendor did not report a charge limit when we last received data from them. We recommend assuming the limit is 100%.
Copy linkdata[].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.
Copy linkdata[].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.
Copy linkdata[].chargeState.lastUpdatedstring<date-time> or null
Time of last received charge state update
Copy linkdata[].chargeState.maxCurrentnumber or null
The maximum current that the vehicle can draw from the charger, in amps.
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown or chargeState.lastUpdated is more than 7 days ago.
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.
PLUGGED_IN:DISCHARGING: The vehicle is actively discharging by giving power to the home/grid, causing the battery level to decrease.
When enabled, this vehicle's charging status may be controlled by Smart Charging
Copy linkdata[].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.
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
Copy linkdata[].chargeState.batteryLevelnumber or null
Copy linkdata[].chargeState.isPluggedInboolean or null
Indicates whether the vehicle is connected to a charging box (regardless of whether it is actually charging)
Copy linkdata[].chargeState.isChargingboolean or null
Indicates whether the vehicle is currently receiving power from the charger and actively charging its battery.
Copy linkdata[].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. This will be null when powerDeliveryState is UNKNOWN.
Copy linkdata[].chargeState.batteryCapacitynumber or null
Vehicle's usable battery capacity in kWh.
Copy linkdata[].chargeState.chargeLimitnumber or null
Charge limit, as a percent of batteryCapacity.
When null, the vendor did not report a charge limit when we last received data from them. We recommend assuming the limit is 100%.
Copy linkdata[].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.
Copy linkdata[].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.
Copy linkdata[].chargeState.lastUpdatedstring<date-time> or null
Time of last received charge state update
Copy linkdata[].chargeState.maxCurrentnumber or null
The maximum current that the vehicle can draw from the charger, in amps.
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown or chargeState.lastUpdated is more than 7 days ago.
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.
PLUGGED_IN:DISCHARGING: The vehicle is actively discharging by giving power to the home/grid, causing the battery level to decrease.
When enabled, this vehicle's charging status may be controlled by Smart Charging
Copy linkdata[].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.
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.
Indicates whether the vehicle is currently receiving power from the charger and actively charging its battery.
Copy linkchargeState.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. This will be null when powerDeliveryState is UNKNOWN.
Copy linkchargeState.batteryCapacitynumber or null
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown or chargeState.lastUpdated is more than 7 days ago.
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.
PLUGGED_IN:DISCHARGING: The vehicle is actively discharging by giving power to the home/grid, causing the battery level to decrease.
When enabled, this vehicle's charging status may be controlled by Smart Charging
Copy linksmartChargingPolicy.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.
ID of the location the vehicle is currently positioned at (if any).
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.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
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.
A list of validation issues which occurred while validating some component of the network payload.
Show child attributes
Set max currentEarly Adopter
POST /vehicles/{vehicleId}/max-current
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 vehicle'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.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
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.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
A human-readable explanation of why the action was unsuccessful.
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.
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.
Copy linkstartConfirmedAtstring<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.
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.
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.
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.
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.
Bad Request. For example: another user has activated smart charging for the same vehicle, missing deadline, maxChargeLimit < minChargeLimit, minChargeLimit below threshold for vendor or user does not have a price area or tariffs.
A list of validation issues which occurred while validating some component of the network payload.
Show child attributes
Create smart override
POST /vehicles/{vehicleId}/smart-override
Overrides an active smart feature by forcing the vehicle to start charging. This feature is meant to be used in situations where the user wants to charge immediately without disabling other smart features. The override remains active until the vehicle stops charging, or until 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.
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.
Time at which charging is estimated to be complete, due to the current Smart Charging Plan
Copy linkplan.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.
Copy linkplan.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.
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.
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
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
A list of validation issues which occurred while validating some component of the network payload.
Show child attributes
Webhook events
user:vehicle:discovered
Occurs whenever a new vehicle is discovered for a user. Only information properties will be populated. All other properties will be null. Shortly after discovery, you'll receive an :updated event that contains additional data.
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
Copy linkvehicle.chargeState.batteryLevelnumber or nullRequired
Remaining battery in percent
Copy linkvehicle.chargeState.rangenumber or nullRequired
Estimated remaining kilometers
Copy linkvehicle.chargeState.isPluggedInboolean or nullRequired
Indicates whether the vehicle is connected to a charging box (regardless of whether it is actually charging)
Copy linkvehicle.chargeState.isChargingboolean or nullRequired
Indicates whether the vehicle is currently receiving power from the charger and actively charging its battery.
Copy linkvehicle.chargeState.isFullyChargedboolean or nullRequired
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. This will be null when powerDeliveryState is UNKNOWN.
Copy linkvehicle.chargeState.batteryCapacitynumber or nullRequired
Vehicle's usable battery capacity in kWh.
Copy linkvehicle.chargeState.chargeLimitnumber or nullRequired
Charge limit, as a percent of batteryCapacity.
When null, the vendor did not report a charge limit when we last received data from them. We recommend assuming the limit is 100%.
Copy linkvehicle.chargeState.chargeRatenumber or nullRequired
The current charge rate in kW.
This property is only available when the vehicle is charging, and is null any other time.
Copy linkvehicle.chargeState.chargeTimeRemainingnumber or nullRequired
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.
Copy linkvehicle.chargeState.lastUpdatedstring<date-time> or nullRequired
Time of last received charge state update
Copy linkvehicle.chargeState.maxCurrentnumber or nullRequired
The maximum current that the vehicle can draw from the charger, in amps.
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown or chargeState.lastUpdated is more than 7 days ago.
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.
PLUGGED_IN:DISCHARGING: The vehicle is actively discharging by giving power to the home/grid, causing the battery level to decrease.
When enabled, this vehicle's charging status may be controlled by Smart Charging
Copy linkvehicle.smartChargingPolicy.deadlinestring or nullRequired
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.
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
Copy linkvehicle.chargeState.batteryLevelnumber or nullRequired
Remaining battery in percent
Copy linkvehicle.chargeState.rangenumber or nullRequired
Estimated remaining kilometers
Copy linkvehicle.chargeState.isPluggedInboolean or nullRequired
Indicates whether the vehicle is connected to a charging box (regardless of whether it is actually charging)
Copy linkvehicle.chargeState.isChargingboolean or nullRequired
Indicates whether the vehicle is currently receiving power from the charger and actively charging its battery.
Copy linkvehicle.chargeState.isFullyChargedboolean or nullRequired
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. This will be null when powerDeliveryState is UNKNOWN.
Copy linkvehicle.chargeState.batteryCapacitynumber or nullRequired
Vehicle's usable battery capacity in kWh.
Copy linkvehicle.chargeState.chargeLimitnumber or nullRequired
Charge limit, as a percent of batteryCapacity.
When null, the vendor did not report a charge limit when we last received data from them. We recommend assuming the limit is 100%.
Copy linkvehicle.chargeState.chargeRatenumber or nullRequired
The current charge rate in kW.
This property is only available when the vehicle is charging, and is null any other time.
Copy linkvehicle.chargeState.chargeTimeRemainingnumber or nullRequired
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.
Copy linkvehicle.chargeState.lastUpdatedstring<date-time> or nullRequired
Time of last received charge state update
Copy linkvehicle.chargeState.maxCurrentnumber or nullRequired
The maximum current that the vehicle can draw from the charger, in amps.
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown or chargeState.lastUpdated is more than 7 days ago.
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.
PLUGGED_IN:DISCHARGING: The vehicle is actively discharging by giving power to the home/grid, causing the battery level to decrease.
When enabled, this vehicle's charging status may be controlled by Smart Charging
Copy linkvehicle.smartChargingPolicy.deadlinestring or nullRequired
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.
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
Copy linkvehicle.chargeState.batteryLevelnumber or nullRequired
Remaining battery in percent
Copy linkvehicle.chargeState.rangenumber or nullRequired
Estimated remaining kilometers
Copy linkvehicle.chargeState.isPluggedInboolean or nullRequired
Indicates whether the vehicle is connected to a charging box (regardless of whether it is actually charging)
Copy linkvehicle.chargeState.isChargingboolean or nullRequired
Indicates whether the vehicle is currently receiving power from the charger and actively charging its battery.
Copy linkvehicle.chargeState.isFullyChargedboolean or nullRequired
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. This will be null when powerDeliveryState is UNKNOWN.
Copy linkvehicle.chargeState.batteryCapacitynumber or nullRequired
Vehicle's usable battery capacity in kWh.
Copy linkvehicle.chargeState.chargeLimitnumber or nullRequired
Charge limit, as a percent of batteryCapacity.
When null, the vendor did not report a charge limit when we last received data from them. We recommend assuming the limit is 100%.
Copy linkvehicle.chargeState.chargeRatenumber or nullRequired
The current charge rate in kW.
This property is only available when the vehicle is charging, and is null any other time.
Copy linkvehicle.chargeState.chargeTimeRemainingnumber or nullRequired
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.
Copy linkvehicle.chargeState.lastUpdatedstring<date-time> or nullRequired
Time of last received charge state update
Copy linkvehicle.chargeState.maxCurrentnumber or nullRequired
The maximum current that the vehicle can draw from the charger, in amps.
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown or chargeState.lastUpdated is more than 7 days ago.
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.
PLUGGED_IN:DISCHARGING: The vehicle is actively discharging by giving power to the home/grid, causing the battery level to decrease.
When enabled, this vehicle's charging status may be controlled by Smart Charging
Copy linkvehicle.smartChargingPolicy.deadlinestring or nullRequired
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.
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.
Time at which charging is estimated to be complete, due to the current Smart Charging Plan
Copy linksmartChargingStatus.plan.stopConfirmedAtstring<date-time> or nullRequired
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.
Copy linksmartChargingStatus.plan.startConfirmedAtstring<date-time> or nullRequired
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.
Copy linksmartChargingStatus.plan.endedAtstring<date-time> or nullRequired
The time at which the Smart Charging Plan ended
Copy linksmartChargingStatus.plan.finalStatestring or nullRequired
The final state of the Smart Charging Plan when it ended
Copy linksmartChargingStatus.plan.failureConditionstring or nullRequired
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.
Copy linksmartChargingStatus.smartOverrideobject or nullRequired
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.
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
Copy linkcharger.chargeState.isPluggedInboolean or nullRequired
Indicates whether the charger has a vehicle plugged into it (regardless of whether that vehicle is actually charging)
Copy linkcharger.chargeState.isChargingboolean or nullRequired
Indicates whether the charger is currently delivering power to the vehicle and actively charging its battery.
Copy linkcharger.chargeState.chargeRatenumber or nullRequired
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.
Copy linkcharger.chargeState.lastUpdatedstring<date-time> or nullRequired
Time of latest charge state update
Copy linkcharger.chargeState.maxCurrentnumber or nullRequired
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown or chargeState.lastUpdated is more than 7 days ago.
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.
PLUGGED_IN:DISCHARGING: The charger is actively discharging by giving power to the home/grid, causing the battery level to decrease.
Charger serial number. Most chargers have this, but some do not expose it. When missing we default to a vendor provided ID, which may be visible to the end user in their app.
Copy linkcharger.information.imageUrlstring or nullRequired
URL to an image of the charger model. null when not available.
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
Copy linkcharger.chargeState.isPluggedInboolean or nullRequired
Indicates whether the charger has a vehicle plugged into it (regardless of whether that vehicle is actually charging)
Copy linkcharger.chargeState.isChargingboolean or nullRequired
Indicates whether the charger is currently delivering power to the vehicle and actively charging its battery.
Copy linkcharger.chargeState.chargeRatenumber or nullRequired
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.
Copy linkcharger.chargeState.lastUpdatedstring<date-time> or nullRequired
Time of latest charge state update
Copy linkcharger.chargeState.maxCurrentnumber or nullRequired
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown or chargeState.lastUpdated is more than 7 days ago.
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.
PLUGGED_IN:DISCHARGING: The charger is actively discharging by giving power to the home/grid, causing the battery level to decrease.
Charger serial number. Most chargers have this, but some do not expose it. When missing we default to a vendor provided ID, which may be visible to the end user in their app.
Copy linkcharger.information.imageUrlstring or nullRequired
URL to an image of the charger model. null when not available.
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
Copy linkcharger.chargeState.isPluggedInboolean or nullRequired
Indicates whether the charger has a vehicle plugged into it (regardless of whether that vehicle is actually charging)
Copy linkcharger.chargeState.isChargingboolean or nullRequired
Indicates whether the charger is currently delivering power to the vehicle and actively charging its battery.
Copy linkcharger.chargeState.chargeRatenumber or nullRequired
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.
Copy linkcharger.chargeState.lastUpdatedstring<date-time> or nullRequired
Time of latest charge state update
Copy linkcharger.chargeState.maxCurrentnumber or nullRequired
The current state of power delivery between the vehicle and charger.
UNKNOWN: The state of power delivery is currently unknown or chargeState.lastUpdated is more than 7 days ago.
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.
PLUGGED_IN:DISCHARGING: The charger is actively discharging by giving power to the home/grid, causing the battery level to decrease.
Charger serial number. Most chargers have this, but some do not expose it. When missing we default to a vendor provided ID, which may be visible to the end user in their app.
Copy linkcharger.information.imageUrlstring or nullRequired
URL to an image of the charger model. null when not available.
The subscriber should return 200 OK to acknowledge the webhook has been received
user:hvac:discovered
Occurs whenever a new HVAC is discovered for a user. Only information properties will be populated. All other properties will be null. Shortly after discovery, you'll receive an :updated event that contains additional data.
Indicates whether Enode can currently access live data from the HVAC. If the HVAC is not reachable, data updates will be delayed.
Copy linkhvac.consumptionRatenumber or nullRequired
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.
Copy linkhvac.information.groupNamestring or nullRequired
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".
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
Copy linkhvac.temperatureState.currentTemperaturenumber or nullRequired
Current air temperature reported by device in degrees Celsius.
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.
Indicates whether Enode can currently access live data from the HVAC. If the HVAC is not reachable, data updates will be delayed.
Copy linkhvac.consumptionRatenumber or nullRequired
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.
Copy linkhvac.information.groupNamestring or nullRequired
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".
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
Copy linkhvac.temperatureState.currentTemperaturenumber or nullRequired
Current air temperature reported by device in degrees Celsius.
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.
Indicates whether Enode can currently access live data from the HVAC. If the HVAC is not reachable, data updates will be delayed.
Copy linkhvac.consumptionRatenumber or nullRequired
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.
Copy linkhvac.information.groupNamestring or nullRequired
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".
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
Copy linkhvac.temperatureState.currentTemperaturenumber or nullRequired
Current air temperature reported by device in degrees Celsius.
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.
The subscriber should return 200 OK to acknowledge the webhook has been received
user:inverter:discovered
Occurs whenever a new inverter is discovered for a user. Only information properties will be populated. All other properties will be null. Shortly after discovery, you'll receive an :updated event that contains additional data.
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
Copy linkinverter.productionState.productionRatenumber or nullRequired
The current production rate in kW.
Copy linkinverter.productionState.isProducingboolean or nullRequired
Whether the solar inverter is actively producing energy or not.
Copy linkinverter.productionState.totalLifetimeProductionnumber or nullRequired
The total lifetime production in kWh.
Copy linkinverter.productionState.lastUpdatedstring<date-time> or nullRequired
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.
Copy linkinverter.location.idstring<uuid> or nullRequired
ID of the location the solar inverter is currently positioned at (if any).
Copy linkinverter.location.longitudenumber or nullRequired
Longitude in degrees
Copy linkinverter.location.latitudenumber or nullRequired
Latitude in degrees
Copy linkinverter.location.lastUpdatedstring<date-time> or nullRequired
Time of last received location state update
Copy linkinverter.hemSystemIdstring<uuid> or nullRequired
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
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
Copy linkinverter.productionState.productionRatenumber or nullRequired
The current production rate in kW.
Copy linkinverter.productionState.isProducingboolean or nullRequired
Whether the solar inverter is actively producing energy or not.
Copy linkinverter.productionState.totalLifetimeProductionnumber or nullRequired
The total lifetime production in kWh.
Copy linkinverter.productionState.lastUpdatedstring<date-time> or nullRequired
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.
Copy linkinverter.location.idstring<uuid> or nullRequired
ID of the location the solar inverter is currently positioned at (if any).
Copy linkinverter.location.longitudenumber or nullRequired
Longitude in degrees
Copy linkinverter.location.latitudenumber or nullRequired
Latitude in degrees
Copy linkinverter.location.lastUpdatedstring<date-time> or nullRequired
Time of last received location state update
Copy linkinverter.hemSystemIdstring<uuid> or nullRequired
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
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
Copy linkinverter.productionState.productionRatenumber or nullRequired
The current production rate in kW.
Copy linkinverter.productionState.isProducingboolean or nullRequired
Whether the solar inverter is actively producing energy or not.
Copy linkinverter.productionState.totalLifetimeProductionnumber or nullRequired
The total lifetime production in kWh.
Copy linkinverter.productionState.lastUpdatedstring<date-time> or nullRequired
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.
Copy linkinverter.location.idstring<uuid> or nullRequired
ID of the location the solar inverter is currently positioned at (if any).
Copy linkinverter.location.longitudenumber or nullRequired
Longitude in degrees
Copy linkinverter.location.latitudenumber or nullRequired
Latitude in degrees
Copy linkinverter.location.lastUpdatedstring<date-time> or nullRequired
Time of last received location state update
Copy linkinverter.hemSystemIdstring<uuid> or nullRequired
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
Time bucket start as a RFC3339 timestamp. Offset may be Z or ±hh:mm. In the unlikely event that an inverter changes timezone, the offset from when the data was retrieved is used, not the inverter's current timezone.
Copy linkstatistics.resolutions.QUARTER_HOUR.data[].valuenumber or nullRequired
The energy produced (kWh) in the specified interval. Null if no data is available.
Time bucket start as a RFC3339 timestamp. Offset may be Z or ±hh:mm. In the unlikely event that an inverter changes timezone, the offset from when the data was retrieved is used, not the inverter's current timezone.
Copy linkstatistics.resolutions.DAY.data[].valuenumber or nullRequired
The energy produced (kWh) in the specified interval. Null if no data is available.
The subscriber should return 200 OK to acknowledge the webhook has been received
user:battery:discovered
Occurs whenever a new battery is discovered for a user. Only information properties will be populated. All other properties will be null. Shortly after discovery, you'll receive an :updated event that contains additional data.
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
Copy linkbattery.chargeState.statusstring or nullRequired
The power delivery state of the battery.
Possible enum values:
CHARGINGDISCHARGINGIDLEFAULTUNKNOWN
Copy linkbattery.chargeState.batteryCapacitynumber or nullRequired
Battery capacity in kWh.
Copy linkbattery.chargeState.batteryLevelnumber or nullRequired
Remaining battery charge level in percent.
Copy linkbattery.chargeState.chargeRatenumber or nullRequired
The current charge rate in kW. A positive value indicates that the battery is charging.
Copy linkbattery.chargeState.dischargeLimitnumber or nullRequired
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.
Copy linkbattery.chargeState.lastUpdatedstring<date-time> or nullRequired
Copy linkbattery.config.operationModestring or nullRequired
The current operation mode of the battery.
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.
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.
IMPORT_FOCUS: Prioritizes charging the battery. Uses excess solar energy for charging and will charge from grid if possible. 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.
IDLE: Prevents the battery from charging or discharging. The battery remains inactive and maintains its current state of charge, even if there is available solar generation or energy demand from household consumption.
UNKNOWN: The mode of the battery is currently unknown. It might be possible to switch out of this mode and into one of the known modes. Actively returning to this mode is not possible.
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.
Copy linkbattery.location.idstring<uuid> or nullRequired
ID of the location the battery is currently positioned at (if any).
Copy linkbattery.location.longitudenumber or nullRequired
Longitude in degrees
Copy linkbattery.location.latitudenumber or nullRequired
Latitude in degrees
Copy linkbattery.location.lastUpdatedstring<date-time> or nullRequired
Time of last received location state update
Copy linkbattery.hemSystemIdstring<uuid> or nullRequired
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
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
Copy linkbattery.chargeState.statusstring or nullRequired
The power delivery state of the battery.
Possible enum values:
CHARGINGDISCHARGINGIDLEFAULTUNKNOWN
Copy linkbattery.chargeState.batteryCapacitynumber or nullRequired
Battery capacity in kWh.
Copy linkbattery.chargeState.batteryLevelnumber or nullRequired
Remaining battery charge level in percent.
Copy linkbattery.chargeState.chargeRatenumber or nullRequired
The current charge rate in kW. A positive value indicates that the battery is charging.
Copy linkbattery.chargeState.dischargeLimitnumber or nullRequired
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.
Copy linkbattery.chargeState.lastUpdatedstring<date-time> or nullRequired
Copy linkbattery.config.operationModestring or nullRequired
The current operation mode of the battery.
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.
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.
IMPORT_FOCUS: Prioritizes charging the battery. Uses excess solar energy for charging and will charge from grid if possible. 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.
IDLE: Prevents the battery from charging or discharging. The battery remains inactive and maintains its current state of charge, even if there is available solar generation or energy demand from household consumption.
UNKNOWN: The mode of the battery is currently unknown. It might be possible to switch out of this mode and into one of the known modes. Actively returning to this mode is not possible.
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.
Copy linkbattery.location.idstring<uuid> or nullRequired
ID of the location the battery is currently positioned at (if any).
Copy linkbattery.location.longitudenumber or nullRequired
Longitude in degrees
Copy linkbattery.location.latitudenumber or nullRequired
Latitude in degrees
Copy linkbattery.location.lastUpdatedstring<date-time> or nullRequired
Time of last received location state update
Copy linkbattery.hemSystemIdstring<uuid> or nullRequired
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
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
Copy linkbattery.chargeState.statusstring or nullRequired
The power delivery state of the battery.
Possible enum values:
CHARGINGDISCHARGINGIDLEFAULTUNKNOWN
Copy linkbattery.chargeState.batteryCapacitynumber or nullRequired
Battery capacity in kWh.
Copy linkbattery.chargeState.batteryLevelnumber or nullRequired
Remaining battery charge level in percent.
Copy linkbattery.chargeState.chargeRatenumber or nullRequired
The current charge rate in kW. A positive value indicates that the battery is charging.
Copy linkbattery.chargeState.dischargeLimitnumber or nullRequired
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.
Copy linkbattery.chargeState.lastUpdatedstring<date-time> or nullRequired
Copy linkbattery.config.operationModestring or nullRequired
The current operation mode of the battery.
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.
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.
IMPORT_FOCUS: Prioritizes charging the battery. Uses excess solar energy for charging and will charge from grid if possible. 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.
IDLE: Prevents the battery from charging or discharging. The battery remains inactive and maintains its current state of charge, even if there is available solar generation or energy demand from household consumption.
UNKNOWN: The mode of the battery is currently unknown. It might be possible to switch out of this mode and into one of the known modes. Actively returning to this mode is not possible.
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.
Copy linkbattery.location.idstring<uuid> or nullRequired
ID of the location the battery is currently positioned at (if any).
Copy linkbattery.location.longitudenumber or nullRequired
Longitude in degrees
Copy linkbattery.location.latitudenumber or nullRequired
Latitude in degrees
Copy linkbattery.location.lastUpdatedstring<date-time> or nullRequired
Time of last received location state update
Copy linkbattery.hemSystemIdstring<uuid> or nullRequired
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
The subscriber should return 200 OK to acknowledge the webhook has been received
user:meter:discovered
Occurs whenever a new meter is discovered for a user. Only information properties will be populated. All other properties will be null. Shortly after discovery, you'll receive an :updated event that contains additional data.
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
Copy linkmeter.energyState.powernumber or nullRequired
The current power measured by the meter in kW.
Positive value: Power is imported from the grid to the site, indicating consumption.
Negative value: Power is exported to the grid, typically when the site generates excess electricity (e.g. from solar panels, or battery discharge).
Copy linkmeter.energyState.lastUpdatedstring<date-time> or nullRequired
Copy linkmeter.hemSystemIdstring<uuid> or nullRequired
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
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
Copy linkmeter.energyState.powernumber or nullRequired
The current power measured by the meter in kW.
Positive value: Power is imported from the grid to the site, indicating consumption.
Negative value: Power is exported to the grid, typically when the site generates excess electricity (e.g. from solar panels, or battery discharge).
Copy linkmeter.energyState.lastUpdatedstring<date-time> or nullRequired
Copy linkmeter.hemSystemIdstring<uuid> or nullRequired
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
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
Copy linkmeter.energyState.powernumber or nullRequired
The current power measured by the meter in kW.
Positive value: Power is imported from the grid to the site, indicating consumption.
Negative value: Power is exported to the grid, typically when the site generates excess electricity (e.g. from solar panels, or battery discharge).
Copy linkmeter.energyState.lastUpdatedstring<date-time> or nullRequired
Copy linkmeter.hemSystemIdstring<uuid> or nullRequired
ID of the HEM system the asset is associated with. This field is present when the HEM System feature is enabled and the asset is linked to a HEM system.
NO_RESPONSE: The device did not react to our commands within the action's timeout window.
FAILED_PRECONDITION: The 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 device 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 device was deleted while the action was PENDING.
Copy linkstatus.smartOverrideobject or nullRequired
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.
ID of the asset (Vehicle/Charger) to which this schedule applies
Copy linkschedule.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.
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.
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.
The subscriber should return 200 OK to acknowledge the webhook has been received
user:hem-system:discovered
Occurs whenever a new HEM System is discovered for a user. Only information properties will be populated. All other properties will be null. Shortly after discovery, you'll receive an :updated event that contains additional data.
curl https://enode-api.{YOUR_CLIENT_ENVIRONMENT}.enode.io/me \-X GET \-H"Authorization: Bearer {YOUR_ACCESS_TOKEN}"\-H"Enode-User-Id: {USER_ID}"\
{"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":[]}}}
HTTP/1.1400Bad RequestContent-Type:application/problem+json{"type":"https://developers.enode.com/problems/bad-request","title":"Payload validation failed","detail":"\"authorizationRequest.scope\" is required",}