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.
Flex price signals
Price signals are the value signal that an energy retailer sends to influence optimization. They are always scoped to an area within a zone. Each push may trigger re-optimization of affected assets.
Push price signal
PUT /flex/price-signals/{zoneId}/areas/{areaId}
Push a price signal for a specific area within a zone. Replaces all existing data in the window [firstValue.at, to) with the provided values. Each push may trigger re-optimization of all assets at locations in that area.
Request
Path parameters
zoneIdstringRequired
The zone identifier. Corresponds to a market bidding zone (e.g., NO1, BE, SE3).
areaIdstringRequired
The area identifier. A customer-defined subdivision within a zone (e.g., a forecast area or grid area).
Attributes
currencystringRequired
ISO 4217 currency code. Must match the zone's configured currency. Acts as a confirmation to prevent misconfiguration.
tostring<date-time>Required
End of the replacement window (exclusive). All existing data in [firstValue.at, to) is replaced with the provided values.
valuesarray of objectRequired
The price signal values. At least one value is required. Values must be ordered chronologically. Each value defines the price from its timestamp until the next value (step function). The first value's 'at' defines the start of the replacement window.
Show child attributes
values[].atstring<date-time>Required
UTC timestamp when this price becomes effective. The price applies from this point until the next value (or until the window end).
values[].pricenumberRequired
The price value in the zone's configured currency per kWh.
Response 204
Price signal accepted.
Response 400
Zone is not activated, or the currency does not match the zone's configured currency.
Get price signal
GET /flex/price-signals/{zoneId}/areas/{areaId}
Retrieve the current price signal for a specific area over a time range.
Request
Path parameters
zoneIdstringRequired
The zone identifier. Corresponds to a market bidding zone (e.g., NO1, BE, SE3).
areaIdstringRequired
The area identifier. A customer-defined subdivision within a zone (e.g., a forecast area or grid area).
Query parameters
fromstring<date-time>Required
Start of the time range (UTC).
tostring<date-time>Required
End of the time range (UTC).
Response 200
Successful.
Attributes
zoneIdstring
The zone this price signal belongs to.
areaIdstring
The area this price signal belongs to.
currencystring
The currency of the price values.
fromstring<date-time>
Start of the queried time range.
tostring<date-time>
End of the queried time range.
valuesarray of object
The price signal values within the queried range.
Show child attributes
values[].atstring<date-time>
UTC timestamp when this price becomes effective. The price applies from this point until the next value (or until the window end).
values[].pricenumber
The price value in the zone's configured currency per kWh.
Response 400
Invalid query parameters.
Response 404
Zone not found or no price signal exists for this area.
Push price signal (bulk)
PUT /flex/price-signals/{zoneId}/areas
Push the same price signal to multiple areas in one call. Each area gets its own stored price signal — this is a convenience to reduce HTTP calls when many areas share the same price.
Request
Path parameters
zoneIdstringRequired
The zone identifier. Corresponds to a market bidding zone (e.g., NO1, BE, SE3).
Attributes
areasarray of stringRequired
The area identifiers to push the price signal to. All listed areas receive the same values.
currencystringRequired
ISO 4217 currency code. Must match the zone's configured currency.
tostring<date-time>Required
End of the replacement window (exclusive).
valuesarray of objectRequired
The price signal values. Applied identically to all listed areas.
Show child attributes
values[].atstring<date-time>Required
UTC timestamp when this price becomes effective. The price applies from this point until the next value (or until the window end).
values[].pricenumberRequired
The price value in the zone's configured currency per kWh.
Response 204
Price signals accepted for all listed areas.
Response 400
Zone is not activated, or the currency does not match the zone's configured currency.
Flex segments
Segments partition households by their asset type composition (e.g., EV-only, EV+solar). Segment definitions are zone-agnostic and apply across all zones for a client. Segments are provably disjoint — no household can match more than one segment.
Create segment
POST /flex/segments
Create a segment definition. Segments partition households by their asset type composition. The system validates that the new segment does not overlap with any existing segment — if any possible household profile would match multiple segments, the request is rejected with an explanation.
Request
Attributes
namestringRequired
Human-readable name for the segment. Must be unique per client.
householdobjectRequired
Filter that determines which households match this segment based on asset type composition.
Show child attributes
household.includesarray of stringRequired
Asset types the household must have (AND — all must be present).
household.excludesarray of stringOptional
Asset types the household must not have (none may be present). Omit for no restriction.
Response 201
Segment created.
Attributes
idstring<uuid>
Unique identifier for the segment.
namestring
Human-readable name for the segment.
householdobject
Filter that determines which households match this segment.
Show child attributes
household.includesarray of string
Asset types the household must have (AND — all must be present).
household.excludesarray of string
Asset types the household must not have (none may be present).
createdAtstring<date-time>
When the segment was created.
updatedAtstring<date-time>
When the segment was last updated.
Response 409
Segment overlaps with an existing segment, or a segment with this name already exists.
List segments
GET /flex/segments
List all segment definitions for the client. Segments are zone-agnostic — the same definitions apply across all zones.
Response 200
Successful.
Attributes (list of object)
idstring<uuid>
Unique identifier for the segment.
namestring
Human-readable name for the segment.
householdobject
Filter that determines which households match this segment.
Show child attributes
household.includesarray of string
Asset types the household must have (AND — all must be present).
household.excludesarray of string
Asset types the household must not have (none may be present).
createdAtstring<date-time>
When the segment was created.
updatedAtstring<date-time>
When the segment was last updated.
Get segment
GET /flex/segments/{segmentId}
Get a segment definition by ID.
Request
Path parameters
segmentIdstring<uuid>Required
The segment identifier.
Response 200
Successful.
Attributes
idstring<uuid>
Unique identifier for the segment.
namestring
Human-readable name for the segment.
householdobject
Filter that determines which households match this segment.
Show child attributes
household.includesarray of string
Asset types the household must have (AND — all must be present).
household.excludesarray of string
Asset types the household must not have (none may be present).
createdAtstring<date-time>
When the segment was created.
updatedAtstring<date-time>
When the segment was last updated.
Response 404
Segment not found.
Replace segment
PUT /flex/segments/{segmentId}
Replace a segment definition. The disjointness check runs against all other existing segments. If the update would create an overlap, it is rejected. Changes take effect on the next shape computation.
Request
Path parameters
segmentIdstring<uuid>Required
The segment identifier.
Attributes
namestringRequired
Human-readable name for the segment. Must be unique per client.
householdobjectRequired
Filter that determines which households match this segment based on asset type composition.
Show child attributes
household.includesarray of stringRequired
Asset types the household must have (AND — all must be present).
household.excludesarray of stringOptional
Asset types the household must not have (none may be present). Omit for no restriction.
Response 200
Segment replaced.
Attributes
idstring<uuid>
Unique identifier for the segment.
namestring
Human-readable name for the segment.
householdobject
Filter that determines which households match this segment.
Show child attributes
household.includesarray of string
Asset types the household must have (AND — all must be present).
household.excludesarray of string
Asset types the household must not have (none may be present).
createdAtstring<date-time>
When the segment was created.
updatedAtstring<date-time>
When the segment was last updated.
Response 404
Segment not found.
Response 409
Updated segment would overlap with an existing segment, or the new name conflicts with another segment.
Delete segment
DELETE /flex/segments/{segmentId}
Delete a segment definition. Assets at households previously in this segment will appear in 'unassigned' on the next shape computation.
Request
Path parameters
segmentIdstring<uuid>Required
The segment identifier.
Response 204
Segment deleted.
Response 404
Segment not found.
Flex shape
The Flex Shape API exposes an aggregated controllable energy load per zone, broken down by segment. Trading algorithms use the shape to construct bid curves. The additivity guarantee holds: total = sum(segments) + unassigned.
Get flex shape
GET /flex/shape/{zoneId}
Get the flex shape for a zone, broken down by segment. Returns all segments in a single response — one HTTP request per zone returns everything needed to construct bid curves. The additivity guarantee holds: for every chunk, total = sum(segments) + unassigned.
Request
Path parameters
zoneIdstringRequired
The zone identifier. Corresponds to a market bidding zone (e.g., NO1, BE, SE3).
Query parameters
areastringOptional
Comma-separated list of area identifiers. When provided, only households at locations in one of the listed areas are included.
Response 200
Shape retrieved.
Attributes
zoneIdstring
The zone this shape belongs to.
computedAtstring<date-time>
When this shape was computed.
chunkSizeMinutesnumber
The size of each chunk in minutes.
revisionIdstring
Revision identifier. Changes when the shape is recomputed.
totalobject
Aggregate across all assets in the zone, regardless of segment. The additivity guarantee holds: total = sum(segments) + unassigned.
Show child attributes
total.assetCountinteger
The total number of assets in the zone.
total.startAtstring<date-time>
The timestamp of the first chunk.
total.endAtstring<date-time>
The timestamp after the last chunk.
total.chunksarray of object
The forecast chunks aggregated across all assets in the zone.
Show child attributes
total.chunks[].timestampstring<date-time>
The start timestamp of the chunk.
total.chunks[].forecastobject
Forecast attributes for this chunk, with a confidence score.
Show child attributes
total.chunks[].forecast.expectedKwnumber
The expected mean load in kW.
total.chunks[].forecast.minimumKwnumber
The achievable minimum mean load in kW.
total.chunks[].forecast.maximumKwnumber
The achievable maximum mean load in kW.
total.chunks[].forecast.confidencenumber
Probability that the expectedKw forecast is within a small (configurable) margin of the realized load (0.0-1.0).
segmentsarray of object
One entry per defined segment that has matched households in this zone.
Show child attributes
segments[].segmentIdstring<uuid>
The segment this shape belongs to.
segments[].namestring
Human-readable segment name.
segments[].assetCountinteger
The number of assets at households matching this segment.
segments[].chunksarray of object
The forecast chunks for this segment.
Show child attributes
segments[].chunks[].timestampstring<date-time>
The start timestamp of the chunk.
segments[].chunks[].forecastobject
Forecast attributes for this chunk, with a confidence score.
Show child attributes
segments[].chunks[].forecast.expectedKwnumber
The expected mean load in kW.
segments[].chunks[].forecast.minimumKwnumber
The achievable minimum mean load in kW.
segments[].chunks[].forecast.maximumKwnumber
The achievable maximum mean load in kW.
segments[].chunks[].forecast.confidencenumber
Probability that the expectedKw forecast is within a small (configurable) margin of the realized load (0.0-1.0).
unassignedobject
Assets at households that matched no segment definition.
Show child attributes
unassigned.assetCountinteger
The number of assets at households that matched no segment.
unassigned.chunksarray of object
The forecast chunks for unassigned households.
Show child attributes
unassigned.chunks[].timestampstring<date-time>
The start timestamp of the chunk.
unassigned.chunks[].forecastobject
Forecast attributes for this chunk, with a confidence score.
Show child attributes
unassigned.chunks[].forecast.expectedKwnumber
The expected mean load in kW.
unassigned.chunks[].forecast.minimumKwnumber
The achievable minimum mean load in kW.
unassigned.chunks[].forecast.maximumKwnumber
The achievable maximum mean load in kW.
unassigned.chunks[].forecast.confidencenumber
Probability that the expectedKw forecast is within a small (configurable) margin of the realized load (0.0-1.0).
Response 400
Invalid request parameters.
Response 404
Zone not found or not activated.
Get segment shape
GET /flex/shape/{zoneId}/segments/{segmentId}
Get the flex shape for a single segment within a zone. Useful for integrations that poll one segment on a tight loop or for webhook-driven updates that reference a specific segment.
Request
Path parameters
zoneIdstringRequired
The zone identifier. Corresponds to a market bidding zone (e.g., NO1, BE, SE3).
segmentIdstring<uuid>Required
The segment identifier.
Query parameters
areastringOptional
Comma-separated list of area identifiers. When provided, only households at locations in one of the listed areas are included.
Response 200
Shape retrieved.
Attributes
startAtstring<date-time>
The timestamp of the first chunk.
endAtstring<date-time>
The timestamp after the last chunk.
chunkSizeMinutesnumber
The size of each chunk in minutes.
computedAtstring<date-time>
When this shape was computed.
assetCountinteger
The number of assets at households matching this segment.
revisionIdstring
Revision identifier. Changes when the shape is recomputed.
chunksarray of object
The forecast chunks for this segment.
Show child attributes
chunks[].timestampstring<date-time>
The start timestamp of the chunk.
chunks[].forecastobject
Forecast attributes for this chunk, with a confidence score.
Show child attributes
chunks[].forecast.expectedKwnumber
The expected mean load in kW.
chunks[].forecast.minimumKwnumber
The achievable minimum mean load in kW.
chunks[].forecast.maximumKwnumber
The achievable maximum mean load in kW.
chunks[].forecast.confidencenumber
Probability that the expectedKw forecast is within a small (configurable) margin of the realized load (0.0-1.0).
Response 400
Invalid request parameters.
Response 404
Zone or segment not found.
Get flex status
GET /flex/shape/{zoneId}/status
Health indicators for a zone with a per-segment breakdown. Trading systems use these as circuit-breaker inputs to detect unusual or unpredictable behavior.
Request
Path parameters
zoneIdstringRequired
The zone identifier. Corresponds to a market bidding zone (e.g., NO1, BE, SE3).
Response 200
Status retrieved.
Attributes
zoneIdstring
The zone this status belongs to.
computedAtstring<date-time>
When this status was computed.
isForecastStableboolean
Whether the forecast revision variance of near-term horizons is within configured bounds.
isSolventboolean
Whether the execution engine has sufficient inventory of asset flexibility to fulfill its plans.
isControlNominalboolean
Whether the success rate of asset control actions is within typical expectations.
segmentsarray of object
Per-segment health breakdown.
Show child attributes
segments[].segmentIdstring<uuid>
The segment this status belongs to.
segments[].namestring
Human-readable segment name.
segments[].isForecastStableboolean
Whether the forecast revision variance of near-term horizons is within configured bounds.
segments[].isSolventboolean
Whether the execution engine has sufficient inventory of asset flexibility to fulfill its plans for this segment.
segments[].isControlNominalboolean
Whether the success rate of asset control actions is within typical expectations for this segment.
Response 404
Zone not found or not activated.
Flex zones
Zones represent market bidding zones (e.g., NO1, BE, SE3). A zone must be activated before price signals can be pushed or optimization can run. Each zone has a configured currency and contains areas — customer-defined subdivisions used for price signal scoping.
Activate zone
POST /flex/zones/{zoneId}
Activate a zone for flex optimization. Sets the currency used for all price signals and tariff validation in this zone. The zone must have at least one location, and all locations must have an area assigned.
Request
Path parameters
zoneIdstringRequired
The zone identifier. Corresponds to a market bidding zone (e.g., NO1, BE, SE3).
Attributes
currencystringRequired
The currency for this zone. Both tariffs and price signals must match this currency.
Response 201
Zone activated.
Attributes
idstring
The zone identifier. Corresponds to a market bidding zone.
currencystring
The configured currency for this zone.
createdAtstring<date-time>
When the zone was activated.
updatedAtstring<date-time>
When the zone was last updated.
Response 400
Zone cannot be activated. Either no locations exist in the zone, or some locations are missing an area.
Response 409
Zone is already activated.
Get zone
GET /flex/zones/{zoneId}
Get an activated zone by ID.
Request
Path parameters
zoneIdstringRequired
The zone identifier. Corresponds to a market bidding zone (e.g., NO1, BE, SE3).
Response 200
Successful.
Attributes
idstring
The zone identifier. Corresponds to a market bidding zone.
currencystring
The configured currency for this zone.
createdAtstring<date-time>
When the zone was activated.
updatedAtstring<date-time>
When the zone was last updated.
Response 404
Zone not found or not activated.
Delete zone
DELETE /flex/zones/{zoneId}
Deactivate a zone. Price signals and optimization will stop for this zone.
Request
Path parameters
zoneIdstringRequired
The zone identifier. Corresponds to a market bidding zone (e.g., NO1, BE, SE3).
Response 204
Zone deactivated.
Response 404
Zone not found or not activated.
List zones
GET /flex/zones
List all activated zones.
Response 200
Successful.
Attributes (list of object)
idstring
The zone identifier. Corresponds to a market bidding zone.
currencystring
The configured currency for this zone.
createdAtstring<date-time>
When the zone was activated.
updatedAtstring<date-time>
When the zone was last updated.
List areas in zone
GET /flex/zones/{zoneId}/areas
List all areas in a zone, aggregated from location data. Each area includes a location count and whether a price signal has been pushed. Useful for discovering misconfigured areas or areas missing price signals.
Request
Path parameters
zoneIdstringRequired
The zone identifier. Corresponds to a market bidding zone (e.g., NO1, BE, SE3).
Response 200
Successful.
Attributes
zoneIdstring
The zone these areas belong to.
areasarray of object
The areas in this zone.
Show child attributes
areas[].areaIdstring
The area identifier.
areas[].locationCountinteger
The number of locations in this area.
areas[].hasPriceSignalboolean
Whether a price signal has been pushed for this area.
Response 404
Zone not found or not activated.
Flexible ev charging
Flexible EV Charging allows you to setup constraints for local optimization for your EVs, while providing flexibility to the Flex Shape API.
Create policy
POST /flex/vehicle-policies
Create a new Flexible EV Charging Policy, associated with one location and vehicle pair. Only one policy can be created per unique pair of location and vehicle. A Flex Policy cannot be enabled on a vehicle controlled by other Enode features, like Schedules or Smart Charging.
The ID of the location at which this policy is applied.
vehicleIdstringRequired
The ID of the vehicle for which this policy applies.
batteryReservenumberRequired
Upon arrival at the location, the vehicle will immediately charge to this battery level without regard to prices or flexibility demands. This charging is reflected in the Policy Status State as SCHEDULE:BATTERY_RESERVE. Must be between 0% and 20%. Note: For Mercedes-Benz vehicles, batteryReserve must be set to 50, as these vehicles always charge to 50% SOC upon plug-in.
scheduleobjectRequired
The weekly schedule of Policy settings. The upcoming schedule settings should be read from the Policy Status object, under settings.regularSchedule.
Show child attributes
schedule.mondayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
schedule.monday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.monday.minimumChargeTargetnumberRequired
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.tuesdayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
schedule.tuesday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.wednesdayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
schedule.wednesday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.thursdayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
schedule.thursday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.fridayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
schedule.friday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.friday.minimumChargeTargetnumberRequired
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.saturdayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
schedule.saturday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.sundayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
schedule.sunday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.sunday.minimumChargeTargetnumberRequired
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
Response 200
Policy created
Attributes
idstring
The ID of the flex policy.
vehicleIdstring
The ID of the vehicle for which this policy applies.
locationIdstring
The ID of the location at which this policy is applied. When the vehicle is not at this location, the Policy Status State will be UNAVAILABLE.
batteryReservenumber
Upon arrival at the location, the vehicle will immediately charge to this battery level without regard to prices or flexibility demands. This charging is reflected in the Policy Status State as SCHEDULE:BATTERY_RESERVE. Must be between 0% and 20%. Note: For Mercedes-Benz vehicles, batteryReserve must be set to 50, as these vehicles always charge to 50% SOC upon plug-in.
lastObservedLocationChargeLimitnumber
The vehicle's charge limit as last observed at this policy's location. Defaults to 100 until first observed. Used for validating that targets do not exceed the vehicle's charge limit at this location.
scheduleobject
The weekly schedule of Policy settings. The upcoming schedule settings should be read from the Policy Status object, under settings.regularSchedule.
Show child attributes
schedule.mondayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.monday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.monday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.tuesdayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.tuesday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.tuesday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.wednesdayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.wednesday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.wednesday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.thursdayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.thursday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.thursday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.fridayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.friday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.friday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.saturdayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.saturday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.saturday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.sundayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.sunday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.sunday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
Response 400
Invalid policy configuration
Response 409
A policy already exists for this vehicle and location pair.
List policies
GET /flex/vehicle-policies
Lists all Flexible EV Charging Policies, optionally filtered by location and/or user. See our Pagination documentationAPI for information on how to paginate the results.
Request
Query parameters
afterstringOptional
Opaque cursor used to fetch next page. Cannot be set together with before. Refer to PaginationAPI for more information.
beforestringOptional
Opaque cursor used to fetch previous page. Cannot be used together with after. Refer to PaginationAPI for more information.
pageSizeintegerOptional
Number of records to return per page. Default page size is 50.
locationIdstringOptional
userIdstringOptional
Response 200
Policies retrieved
Attributes
dataarray of object
Show child attributes
data[].idstring
The ID of the flex policy.
data[].vehicleIdstring
The ID of the vehicle for which this policy applies.
data[].locationIdstring
The ID of the location at which this policy is applied. When the vehicle is not at this location, the Policy Status State will be UNAVAILABLE.
data[].batteryReservenumber
Upon arrival at the location, the vehicle will immediately charge to this battery level without regard to prices or flexibility demands. This charging is reflected in the Policy Status State as SCHEDULE:BATTERY_RESERVE. Must be between 0% and 20%. Note: For Mercedes-Benz vehicles, batteryReserve must be set to 50, as these vehicles always charge to 50% SOC upon plug-in.
data[].lastObservedLocationChargeLimitnumber
The vehicle's charge limit as last observed at this policy's location. Defaults to 100 until first observed. Used for validating that targets do not exceed the vehicle's charge limit at this location.
data[].scheduleobject
The weekly schedule of Policy settings. The upcoming schedule settings should be read from the Policy Status object, under settings.regularSchedule.
Show child attributes
data[].schedule.mondayobject
The schedule settings for a particular day of the week.
Show child attributes
data[].schedule.monday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
data[].schedule.monday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
data[].schedule.tuesdayobject
The schedule settings for a particular day of the week.
Show child attributes
data[].schedule.tuesday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
data[].schedule.tuesday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
data[].schedule.wednesdayobject
The schedule settings for a particular day of the week.
Show child attributes
data[].schedule.wednesday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
data[].schedule.thursdayobject
The schedule settings for a particular day of the week.
Show child attributes
data[].schedule.thursday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
data[].schedule.fridayobject
The schedule settings for a particular day of the week.
Show child attributes
data[].schedule.friday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
data[].schedule.friday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
data[].schedule.saturdayobject
The schedule settings for a particular day of the week.
Show child attributes
data[].schedule.saturday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
data[].schedule.sundayobject
The schedule settings for a particular day of the week.
Show child attributes
data[].schedule.sunday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
data[].schedule.sunday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
paginationobject
Cursors to the pages before and after current page. See the PaginationAPI section for reference.
Show child attributes
pagination.afterstring or null
pagination.beforestring or null
Response 400
Invalid query parameters
Get policy
GET /flex/vehicle-policies/{policyId}
Get a Flexible EV Charging Policy
Request
Path parameters
policyIdstring<uuid>Required
The ID of the flex policy.
Response 200
Policy retrieved
Attributes
idstring
The ID of the flex policy.
vehicleIdstring
The ID of the vehicle for which this policy applies.
locationIdstring
The ID of the location at which this policy is applied. When the vehicle is not at this location, the Policy Status State will be UNAVAILABLE.
batteryReservenumber
Upon arrival at the location, the vehicle will immediately charge to this battery level without regard to prices or flexibility demands. This charging is reflected in the Policy Status State as SCHEDULE:BATTERY_RESERVE. Must be between 0% and 20%. Note: For Mercedes-Benz vehicles, batteryReserve must be set to 50, as these vehicles always charge to 50% SOC upon plug-in.
lastObservedLocationChargeLimitnumber
The vehicle's charge limit as last observed at this policy's location. Defaults to 100 until first observed. Used for validating that targets do not exceed the vehicle's charge limit at this location.
scheduleobject
The weekly schedule of Policy settings. The upcoming schedule settings should be read from the Policy Status object, under settings.regularSchedule.
Show child attributes
schedule.mondayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.monday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.monday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.tuesdayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.tuesday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.tuesday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.wednesdayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.wednesday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.wednesday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.thursdayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.thursday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.thursday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.fridayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.friday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.friday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.saturdayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.saturday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.saturday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.sundayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.sunday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.sunday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
Response 404
Policy not found
Update policy
PATCH /flex/vehicle-policies/{policyId}
Performs a partial update of a Flexible EV Charging Policy. The update will first emit a Flex Policy UpdatedAPI event, then a Flex Policy StatusAPI event as the Policy Status gets re-calculated.
Request
Path parameters
policyIdstring<uuid>Required
The ID of the flex policy.
Attributes
batteryReservenumberOptional
Upon arrival at the location, the vehicle will immediately charge to this battery level without regard to prices or flexibility demands. This charging is reflected in the Policy Status State as SCHEDULE:BATTERY_RESERVE. Must be between 0% and 20%. Note: For Mercedes-Benz vehicles, batteryReserve must be set to 50, as these vehicles always charge to 50% SOC upon plug-in.
scheduleobjectOptional
Show child attributes
schedule.mondayobjectOptional
The schedule settings for a particular day of the week.
Show child attributes
schedule.monday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.monday.minimumChargeTargetnumberRequired
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.tuesdayobjectOptional
The schedule settings for a particular day of the week.
Show child attributes
schedule.tuesday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.wednesdayobjectOptional
The schedule settings for a particular day of the week.
Show child attributes
schedule.wednesday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.thursdayobjectOptional
The schedule settings for a particular day of the week.
Show child attributes
schedule.thursday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.fridayobjectOptional
The schedule settings for a particular day of the week.
Show child attributes
schedule.friday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.friday.minimumChargeTargetnumberRequired
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.saturdayobjectOptional
The schedule settings for a particular day of the week.
Show child attributes
schedule.saturday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.sundayobjectOptional
The schedule settings for a particular day of the week.
Show child attributes
schedule.sunday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.sunday.minimumChargeTargetnumberRequired
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
Response 200
Policy updated
Attributes
idstring
The ID of the flex policy.
vehicleIdstring
The ID of the vehicle for which this policy applies.
locationIdstring
The ID of the location at which this policy is applied. When the vehicle is not at this location, the Policy Status State will be UNAVAILABLE.
batteryReservenumber
Upon arrival at the location, the vehicle will immediately charge to this battery level without regard to prices or flexibility demands. This charging is reflected in the Policy Status State as SCHEDULE:BATTERY_RESERVE. Must be between 0% and 20%. Note: For Mercedes-Benz vehicles, batteryReserve must be set to 50, as these vehicles always charge to 50% SOC upon plug-in.
lastObservedLocationChargeLimitnumber
The vehicle's charge limit as last observed at this policy's location. Defaults to 100 until first observed. Used for validating that targets do not exceed the vehicle's charge limit at this location.
scheduleobject
The weekly schedule of Policy settings. The upcoming schedule settings should be read from the Policy Status object, under settings.regularSchedule.
Show child attributes
schedule.mondayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.monday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.monday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.tuesdayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.tuesday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.tuesday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.wednesdayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.wednesday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.wednesday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.thursdayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.thursday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.thursday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.fridayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.friday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.friday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.saturdayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.saturday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.saturday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
schedule.sundayobject
The schedule settings for a particular day of the week.
Show child attributes
schedule.sunday.deadlinestring
The time of day the user wants their vehicle to be charged by on a specific day of the week.
schedule.sunday.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
Response 400
Invalid policy update
Response 404
Policy not found
Delete policy
DELETE /flex/vehicle-policies/{policyId}
Deletes a Flexible EV Charging Policy. The deletion will first emit a Flex Policy DeletedAPI event, then a Flex Policy StatusAPI event as the Policy Status gets re-calculated.
Request
Path parameters
policyIdstring<uuid>Required
The ID of the flex policy.
Response 204
Policy deleted
Response 404
Policy not found
Get policy status
GET /flex/vehicle-policies/{policyId}/status
Read the latest status of a Policy. The Policy Status object is a realtime representation of a Policy and the associated vehicle's state. Flex Policy StatusAPI events are emitted when the status changes, which can happen at any time.
Request
Path parameters
policyIdstring<uuid>Required
The ID of the flex policy.
Response 200
Status retrieved
Attributes
updatedAtstring<date-time>
The timestamp of the last update to the flex policy.
policyIdstring
The ID of the policy.
locationIdstring
The ID of the location.
vehicleIdstring
The ID of the vehicle.
statestring
The state of the flex policy.
UNAVAILABLE: The vehicle is unavailable for Flexible EV Charging for some reason, for example, because it is not plugged in, or not the Policy's location.
IMMEDIATE:OVERRIDE: The vehicle is charging to some target battery level because of a temporary override.
SCHEDULE:BATTERY_RESERVE: The vehicle is charging to a battery reserve level, and will stop after reaching that level.
SCHEDULE:REGULAR: The vehicle is following the regular schedule and actively participating in Flexible EV Charging.
SCHEDULE:OVERRIDE: The vehicle is following a schedule override, and is still actively participating in Flexible EV Charging.
SCHEDULE:INFLEXIBLE: The vehicle doesn't have enough time to charge to the target battery level, so there isn't any opportunity to flex the charging.
Upon arrival at the location, the vehicle will immediately charge to this battery level without regard to prices or flexibility demands. This charging is reflected in the Policy Status State as SCHEDULE:BATTERY_RESERVE. Must be between 0% and 20%. Note: For Mercedes-Benz vehicles, batteryReserve must be set to 50, as these vehicles always charge to 50% SOC upon plug-in.
settingsobject
Show child attributes
settings.regularScheduleobject
Today's schedule settings, resolved from the weekly schedule.
Show child attributes
settings.regularSchedule.deadlinestring or null
The time of day the user wants their vehicle to be charged by on a specific day of the week.
settings.regularSchedule.readyBystring<date-time>
The upcoming deadline represented as a RFC3339 UTC timestamp.
settings.regularSchedule.minimumChargeTargetnumber or null
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
settings.override
An override applied to a Flex Policy, shown as a part of the Flex Status entity. The override is either a next-day schedule override or an immediate start override.
Show child attributes
settings.override.typestring
Possible enum values:
UPCOMING_SCHEDULE
settings.override.readyBystring<date-time>
The timestamp at which the user wants their vehicle to be charged by. Overrides the upcoming deadline set in the Flex Policy. Must be in the future.
settings.override.minimumChargeTargetnumber
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
sessionobject
An object containing information about the vehicle's current plug session.
Show child attributes
session.blocksarray of object
Show child attributes
session.blocks[].statusStatestring
The state of the Policy Status during this charging block.
Policy not found, or the status has not been computed yet.
Create policy override
POST /flex/vehicle-policies/{policyId}/overrides
Creates a new Policy Override.
Overrides are temporary, and automatically expire when the vehicle reaches the target battery level.
An immediate start override forces a car to immediately start charging to the specified target battery level.
An upcoming schedule override allows the user to set a custom ready-by time and/or target for the upcoming session. Either one or both of the fields (readyBy and minimumChargeTarget) must be set.
The target batteryLevel to immediately charge up to. Must be less than or equal to the vehicle's chargeLimit. Charging sessions resulting from this override are reflected in the Policy Status State as IMMEDIATE:OVERRIDE.
Response 204
Override created
Response 400
Invalid override
Response 404
Policy not found
Response 409
An override for this policy already exists.
Get policy override
GET /flex/vehicle-policies/{policyId}/overrides
Get the active override for a Flexible EV Charging Policy.
Request
Path parameters
policyIdstring<uuid>Required
The ID of the flex policy.
Response 200
Override retrieved
Attributes
typestring
Possible enum values:
IMMEDIATE_START
targetnumber
The target batteryLevel to immediately charge up to. Must be less than or equal to the vehicle's chargeLimit. Charging sessions resulting from this override are reflected in the Policy Status State as IMMEDIATE:OVERRIDE.
Deletes a Policy Override. The deletion will emit a Flex Policy StatusAPI event as the Policy Status gets re-calculated.
Request
Path parameters
policyIdstring<uuid>Required
The ID of the flex policy.
Response 204
Override deleted
Response 404
Override not found
Get charging report
GET /flex/vehicle-policies/charging-report
Generates a report of kWh charged per Policy Status State, intended to be used for end-user invoice creation. Includes all charging sessions for policies specified by the filters.
Request
Query parameters
startDatestring<date-time>Required
Start day of the report in local time, inclusive. RFC3339 timestamp. Hour, minute, and second components are ignored.
endDatestring<date-time>Required
End day of the report in local time, exclusive. RFC3339 timestamp. Hour, minute, and second components are ignored.
resolutionstringOptional
The resolution of the report. Default is 'DAY'.
Default value: DAY
Possible enum values:
DAYMONTH
locationIdstring<uuid>Required
The locationId of the policies to be included in the report.
vehicleIdstringRequired
The vehicleId to generate the report for.
Response 200
Charging report retrieved
Attributes (list of object)
datestring<date-time>
Day or month (depending on the report resolution) in local time. RFC3339 timestamp.
statesobject
An object describing the amount of energy consumed in each state for this day.
Show child attributes
states.UNAVAILABLEnumber
states.IMMEDIATE:OVERRIDEnumber
states.SCHEDULE:BATTERY_RESERVEnumber
states.SCHEDULE:REGULARnumber
states.SCHEDULE:OVERRIDEnumber
states.SCHEDULE:INFLEXIBLEnumber
Response 400
Invalid report parameters
Response 404
No policies found matching the specified filters.
Get policy charging report
GET /flex/vehicle-policies/{policyId}/charging-report
Generates a report of kWh charged per Policy Status State, intended to be used for end-user invoice creation. Includes all charging sessions for the specified policy.
Request
Path parameters
policyIdstring<uuid>Required
The ID of the flex policy.
Query parameters
startDatestring<date-time>Required
Start day of the report in local time, inclusive. RFC3339 timestamp. Hour, minute, and second components are ignored.
endDatestring<date-time>Required
End day of the report in local time, exclusive. RFC3339 timestamp. Hour, minute, and second components are ignored.
resolutionstringOptional
The resolution of the report. Default is 'DAY'.
Default value: DAY
Possible enum values:
DAYMONTH
Response 200
Charging report retrieved
Attributes (list of object)
datestring<date-time>
Day or month (depending on the report resolution) in local time. RFC3339 timestamp.
statesobject
An object describing the amount of energy consumed in each state for this day.
Show child attributes
states.UNAVAILABLEnumber
states.IMMEDIATE:OVERRIDEnumber
states.SCHEDULE:BATTERY_RESERVEnumber
states.SCHEDULE:REGULARnumber
states.SCHEDULE:OVERRIDEnumber
states.SCHEDULE:INFLEXIBLEnumber
Response 400
Invalid report parameters
Response 404
Policy not found
Flexible ev charging sessions
Flexible EV Charging Sessions provide visibility into a vehicle's charging session lifecycle, including real-time targets, outcomes, charge blocks, and energy delivery statistics.
List settled sessions
GET /flex/vehicle-policies/sessions
Lists settled Flexible EV Charging Sessions, optionally filtered by policy, location, or vehicle. When filtering by vehicleId, each real-world charging event appears once — the managed session is returned if one exists, otherwise the unmanaged session. See our Pagination documentationAPI for information on how to paginate the results.
Request
Query parameters
afterstringOptional
Opaque cursor used to fetch next page. Cannot be set together with before. Refer to PaginationAPI for more information.
beforestringOptional
Opaque cursor used to fetch previous page. Cannot be used together with after. Refer to PaginationAPI for more information.
pageSizeintegerOptional
Number of records to return per page. Default page size is 50.
fromstring<date-time>Optional
Return sessions with a pluggedInAt at or after this time.
tostring<date-time>Optional
Return sessions with a pluggedOutAt at or before this time.
policyIdstring<uuid>Optional
Filter sessions by policy ID.
locationIdstring<uuid>Optional
Filter sessions by location ID.
vehicleIdstring<uuid>Optional
Filter sessions by vehicle ID. Each real-world charging event appears once — the managed session is returned if one exists, otherwise the unmanaged session.
Response 200
Sessions retrieved
Attributes
dataarray of object
Show child attributes
data[].idstring<uuid>
The unique identifier for this session.
data[].statestring
Possible enum values:
SETTLED
data[].policyIdstring<uuid> or null
The unique identifier for the policy associated with this session.
data[].pluggedInAtstring<date-time>
The date and time when the vehicle was plugged in.
data[].pluggedOutAtstring<date-time>
The date and time when the vehicle was unplugged.
data[].blocksarray of object
Discrete windows of active charging that occurred during the session.
Show child attributes
data[].blocks[].typestring
The type of charge block.
Possible enum values:
BATTERY_RESERVEREGULARIMMEDIATE_START
data[].blocks[].kwhSumnumber
The total energy delivered during this block in kWh. For completed and in-progress blocks, this is the actual energy delivered. For future (tentative) blocks, this is the system's estimate.
data[].blocks[].startAtstring<date-time>
While ACTIVE, this is when the block started (if past) or is tentatively planned to start (if future). While SETTLED, this is when the block actually started.
data[].blocks[].endAtstring<date-time>
While ACTIVE, this is when the block ended (if past) or is tentatively planned to end (if future). While SETTLED, this is when the block actually ended.
data[].statisticsobject
Energy delivery statistics for the session.
Show child attributes
data[].statistics.aggregatedobject
Aggregated statistics for the session.
Show child attributes
data[].statistics.aggregated.kwhSumnumber or null
The total amount of energy charged in kWh.
data[].statistics.aggregated.batteryFromnumber
The battery percentage at the start of the session.
data[].statistics.aggregated.batteryTonumber
The final battery percentage.
data[].statistics.timeseriesarray of object
15-minute interval energy delivery data for the session.
The energy delivered in kWh over this 15-minute interval.
data[].targetobject
What the system is charging towards for this session.
Show child attributes
data[].target.latest
The latest target configuration. Null for unmanaged sessions (e.g. public charging) where the system did not control the charge. Use type to distinguish between REGULAR and IMMEDIATE_START targets.
Show child attributes
data[].target.latest.idinteger
Incrementing identifier for this target within the session.
data[].target.latest.typestring
Possible enum values:
REGULAR
data[].target.latest.sourcestring
Whether this target follows the default policy or a user override.
Possible enum values:
POLICYUSER_OVERRIDE
data[].target.latest.batteryReservenumber
The battery reserve percentage. Charging to this level is always prioritised.
data[].target.latest.minimumChargeTargetnumber
The minimum charge target as a battery percentage.
data[].target.latest.readyBystring<date-time>
The time by which the minimum charge target should be reached.
data[].outcomeobject
Whether the target will be met for this session.
Show child attributes
data[].outcome.latest
The final outcome assessment. Null for unmanaged sessions. Use type to distinguish between REGULAR and IMMEDIATE_START outcomes, then state to distinguish ON_TARGET from OFF_TARGET within regular outcomes.
Show child attributes
data[].errorobject
Error state for this session.
Show child attributes
data[].error.latest
The latest error state. Null when there is no active error. Use type to identify the error kind.
Show child attributes
data[].error.latest.typestring
Possible enum values:
START_FAIL
paginationobject
Cursors to the pages before and after current page. See the PaginationAPI section for reference.
Show child attributes
pagination.afterstring or null
pagination.beforestring or null
Response 400
Invalid query parameters
Get active session
GET /flex/vehicle-policies/{policyId}/session
Get the current active or upcoming Flexible EV Charging Session for a policy. The session provides real-time visibility into what the system is charging towards (target), whether it will succeed (outcome), the actual charge windows (blocks), and energy delivery data (statistics).
Request
Path parameters
policyIdstring<uuid>Required
The ID of the vehicle policy.
Response 200
Session retrieved
Attributes
statestring
The current state of the session.
UPCOMING: Initial state, created shortly after the previous session has settled.
ACTIVE:BATTERY_RESERVE: Vehicle is plugged in, charging to maintain battery reserve.
ACTIVE:REGULAR: Vehicle is plugged in, smart charging according to schedule.
ACTIVE:IMMEDIATE_START: Vehicle is plugged in, charging immediately.
The unique identifier for the policy associated with this session.
pluggedInAtstring<date-time>
The date and time when the vehicle was plugged in.
pluggedOutAtnull
Always null. The vehicle has not been unplugged yet.
blocksarray of object
Discrete windows of active charging within the session. Empty while UPCOMING. While ACTIVE, blocks represent a mix of past charging and planned future charging — past blocks are final, future blocks are tentative and may shift as the schedule re-optimizes.
Show child attributes
blocks[].typestring
The type of charge block.
Possible enum values:
BATTERY_RESERVEREGULARIMMEDIATE_START
blocks[].kwhSumnumber
The total energy delivered during this block in kWh. For completed and in-progress blocks, this is the actual energy delivered. For future (tentative) blocks, this is the system's estimate.
blocks[].startAtstring<date-time>
While ACTIVE, this is when the block started (if past) or is tentatively planned to start (if future). While SETTLED, this is when the block actually started.
blocks[].endAtstring<date-time>
While ACTIVE, this is when the block ended (if past) or is tentatively planned to end (if future). While SETTLED, this is when the block actually ended.
statisticsobject
Energy delivery statistics for the session.
Show child attributes
statistics.aggregatedobject or null
Aggregated statistics for the session. Null while UPCOMING.
Show child attributes
statistics.aggregated.kwhSumnumber or null
The total amount of energy charged in kWh.
statistics.aggregated.batteryFromnumber
The battery percentage at the start of the session.
statistics.aggregated.batteryTonumber
The current battery percentage while ACTIVE, or the final battery percentage when SETTLED.
statistics.timeseriesarray of object
15-minute interval energy delivery data. Empty while UPCOMING.
Show child attributes
statistics.timeseries[].startAtstring<date-time>
The start of this 15-minute interval.
statistics.timeseries[].kwhnumber
The energy delivered in kWh over this 15-minute interval.
targetobject
What the system is charging towards for this session.
Show child attributes
target.latest
The latest target configuration. Null for unmanaged sessions (e.g. public charging) where the system did not control the charge. Use type to distinguish between REGULAR and IMMEDIATE_START targets.
Show child attributes
target.latest.idinteger
Incrementing identifier for this target within the session.
target.latest.typestring
Possible enum values:
REGULAR
target.latest.sourcestring
Whether this target follows the default policy or a user override.
Possible enum values:
POLICYUSER_OVERRIDE
target.latest.batteryReservenumber
The battery reserve percentage. Charging to this level is always prioritised.
target.latest.minimumChargeTargetnumber
The minimum charge target as a battery percentage.
target.latest.readyBystring<date-time>
The time by which the minimum charge target should be reached.
outcomeobject
Whether the target will be met for this session.
Show child attributes
outcome.latest
The latest outcome assessment. Null before the first estimate is available. Use type to distinguish between REGULAR and IMMEDIATE_START outcomes, then state to distinguish ON_TARGET from OFF_TARGET within regular outcomes.
Show child attributes
errorobject
Error state for this session.
Show child attributes
error.latest
The latest error state. Null when there is no active error. Use type to identify the error kind.
Show child attributes
error.latest.typestring
Possible enum values:
START_FAIL
Response 404
Session not found
Get settled session
GET /flex/vehicle-policies/{policyId}/sessions/{sessionId}
Get a settled Flexible EV Charging Session, either managed or unmanaged. The session provides the actual charge windows (blocks), energy delivery data (statistics), and final outcome.
Request
Path parameters
policyIdstring<uuid>Required
The ID of the vehicle policy.
sessionIdstring<uuid>Required
The ID of the session.
Response 200
Session retrieved
Attributes
idstring<uuid>
The unique identifier for this session.
statestring
Possible enum values:
SETTLED
policyIdstring<uuid> or null
The unique identifier for the policy associated with this session.
pluggedInAtstring<date-time>
The date and time when the vehicle was plugged in.
pluggedOutAtstring<date-time>
The date and time when the vehicle was unplugged.
blocksarray of object
Discrete windows of active charging that occurred during the session.
Show child attributes
blocks[].typestring
The type of charge block.
Possible enum values:
BATTERY_RESERVEREGULARIMMEDIATE_START
blocks[].kwhSumnumber
The total energy delivered during this block in kWh. For completed and in-progress blocks, this is the actual energy delivered. For future (tentative) blocks, this is the system's estimate.
blocks[].startAtstring<date-time>
While ACTIVE, this is when the block started (if past) or is tentatively planned to start (if future). While SETTLED, this is when the block actually started.
blocks[].endAtstring<date-time>
While ACTIVE, this is when the block ended (if past) or is tentatively planned to end (if future). While SETTLED, this is when the block actually ended.
statisticsobject
Energy delivery statistics for the session.
Show child attributes
statistics.aggregatedobject
Aggregated statistics for the session.
Show child attributes
statistics.aggregated.kwhSumnumber or null
The total amount of energy charged in kWh.
statistics.aggregated.batteryFromnumber
The battery percentage at the start of the session.
statistics.aggregated.batteryTonumber
The final battery percentage.
statistics.timeseriesarray of object
15-minute interval energy delivery data for the session.
Show child attributes
statistics.timeseries[].startAtstring<date-time>
The start of this 15-minute interval.
statistics.timeseries[].kwhnumber
The energy delivered in kWh over this 15-minute interval.
targetobject
What the system is charging towards for this session.
Show child attributes
target.latest
The latest target configuration. Null for unmanaged sessions (e.g. public charging) where the system did not control the charge. Use type to distinguish between REGULAR and IMMEDIATE_START targets.
Show child attributes
target.latest.idinteger
Incrementing identifier for this target within the session.
target.latest.typestring
Possible enum values:
REGULAR
target.latest.sourcestring
Whether this target follows the default policy or a user override.
Possible enum values:
POLICYUSER_OVERRIDE
target.latest.batteryReservenumber
The battery reserve percentage. Charging to this level is always prioritised.
target.latest.minimumChargeTargetnumber
The minimum charge target as a battery percentage.
target.latest.readyBystring<date-time>
The time by which the minimum charge target should be reached.
outcomeobject
Whether the target will be met for this session.
Show child attributes
outcome.latest
The final outcome assessment. Null for unmanaged sessions. Use type to distinguish between REGULAR and IMMEDIATE_START outcomes, then state to distinguish ON_TARGET from OFF_TARGET within regular outcomes.
Show child attributes
errorobject
Error state for this session.
Show child attributes
error.latest
The latest error state. Null when there is no active error. Use type to identify the error kind.
Show child attributes
error.latest.typestring
Possible enum values:
START_FAIL
Response 404
Session not found
Solar configurations
Solar Configurations describe the physical characteristics of a solar installation. These characteristics are used to forecast solar generation and to enable solar charging of vehicles.
Create solar configuration
POST /solar-configurations
Create a Solar Configuration for a given location. A location may have multiple Solar Configurations to represent individual arrays of panels (for example, varying azimuths or tilt).
Request
Attributes
capacitynumberRequired
Peak capacity in kilowatts (kWp) of the solar system
azimuthnumber or nullRequired
Compass direction the solar panels face, measured in degrees relative to true north. Valid values are 0–359, where 0 = north, 90 = east, 180 = south, and 270 = west.
tiltnumber or nullRequired
Vertical angle of the solar panels in degrees from the horizontal plane. Values range from 0–90, where 0 = horizontal and 90 = vertical.
userIdstringRequired
The userId associated with this solar configuration
locationIdstring<uuid>Required
The locationId associated with this solar configuration
Response 201
Created
Attributes
capacitynumber
Peak capacity in kilowatts (kWp) of the solar system
azimuthnumber or null
Compass direction the solar panels face, measured in degrees relative to true north. Valid values are 0–359, where 0 = north, 90 = east, 180 = south, and 270 = west.
tiltnumber or null
Vertical angle of the solar panels in degrees from the horizontal plane. Values range from 0–90, where 0 = horizontal and 90 = vertical.
idstring<uuid>
The ID of this Solar Configuration
userIdstring
The userId associated with this solar configuration
locationIdstring<uuid>
The locationId associated with this solar configuration
createdAtstring<date-time>
Time when this Solar Configuration was created
updatedAtstring<date-time>
Time when this Solar Configuration was last updated
Response 400
Location does not belong to user
Response 404
User or location not found
Response 409
A solar configuration with the same parameters already exists
List solar configurations
GET /solar-configurations
Returns a paginated list of all Solar Configurations.
Request
Query parameters
afterstringOptional
Opaque cursor used to fetch next page. Cannot be set together with before. Refer to PaginationAPI for more information.
beforestringOptional
Opaque cursor used to fetch previous page. Cannot be used together with after. Refer to PaginationAPI for more information.
pageSizeintegerOptional
Number of records to return per page. Default page size is 50.
Response 200
Attributes
dataarray of object
List of solar configurations
Show child attributes
data[].capacitynumber
Peak capacity in kilowatts (kWp) of the solar system
data[].azimuthnumber or null
Compass direction the solar panels face, measured in degrees relative to true north. Valid values are 0–359, where 0 = north, 90 = east, 180 = south, and 270 = west.
data[].tiltnumber or null
Vertical angle of the solar panels in degrees from the horizontal plane. Values range from 0–90, where 0 = horizontal and 90 = vertical.
data[].idstring<uuid>
The ID of this Solar Configuration
data[].userIdstring
The userId associated with this solar configuration
data[].locationIdstring<uuid>
The locationId associated with this solar configuration
data[].createdAtstring<date-time>
Time when this Solar Configuration was created
data[].updatedAtstring<date-time>
Time when this Solar Configuration was last updated
paginationobject
Cursors to the pages before and after current page. See the PaginationAPI section for reference.
Show child attributes
pagination.afterstring or null
pagination.beforestring or null
Response 400
Invalid pagination parameters
Get solar configuration
GET /solar-configurations/{solarConfigurationId}
Get a Solar Configuration by ID.
Request
Path parameters
solarConfigurationIdstring<uuid>Required
ID of the Solar Configuration.
Response 200
Attributes
capacitynumber
Peak capacity in kilowatts (kWp) of the solar system
azimuthnumber or null
Compass direction the solar panels face, measured in degrees relative to true north. Valid values are 0–359, where 0 = north, 90 = east, 180 = south, and 270 = west.
tiltnumber or null
Vertical angle of the solar panels in degrees from the horizontal plane. Values range from 0–90, where 0 = horizontal and 90 = vertical.
idstring<uuid>
The ID of this Solar Configuration
userIdstring
The userId associated with this solar configuration
locationIdstring<uuid>
The locationId associated with this solar configuration
createdAtstring<date-time>
Time when this Solar Configuration was created
updatedAtstring<date-time>
Time when this Solar Configuration was last updated
Peak capacity in kilowatts (kWp) of the solar system
azimuthnumber or nullOptional
Compass direction the solar panels face, measured in degrees relative to true north. Valid values are 0–359, where 0 = north, 90 = east, 180 = south, and 270 = west.
tiltnumber or nullOptional
Vertical angle of the solar panels in degrees from the horizontal plane. Values range from 0–90, where 0 = horizontal and 90 = vertical.
Response 200
Attributes
capacitynumber
Peak capacity in kilowatts (kWp) of the solar system
azimuthnumber or null
Compass direction the solar panels face, measured in degrees relative to true north. Valid values are 0–359, where 0 = north, 90 = east, 180 = south, and 270 = west.
tiltnumber or null
Vertical angle of the solar panels in degrees from the horizontal plane. Values range from 0–90, where 0 = horizontal and 90 = vertical.
idstring<uuid>
The ID of this Solar Configuration
userIdstring
The userId associated with this solar configuration
locationIdstring<uuid>
The locationId associated with this solar configuration
createdAtstring<date-time>
Time when this Solar Configuration was created
updatedAtstring<date-time>
Time when this Solar Configuration was last updated
Tariffs combine a schedule with a set of rates to define the cost of energy usage based on the time of day and day of the week.
List tariffs
GET /flex/tariffs
List all tariffs. Supports pagination.
Request
Query parameters
afterstringOptional
Opaque cursor used to fetch next page. Cannot be set together with before. Refer to PaginationAPI for more information.
beforestringOptional
Opaque cursor used to fetch previous page. Cannot be used together with after. Refer to PaginationAPI for more information.
pageSizeintegerOptional
Number of records to return per page. Default page size is 50.
Response 200
Attributes
dataarray of object
Show child attributes
data[].idstring
Unique identifier for the tariff.
data[].directionstring
The direction of energy flow. 'import' is for electricity consumption costs, 'export' is for feed-in/selling electricity back to the grid.
Possible enum values:
importexport
data[].currencystring
ISO 4217 currency code. Present for tariffs with per 'kWh', absent for scalar tariffs.
data[].perstring
The unit of the tariff. 'kWh' indicates a rate in currency per kilowatt-hour (e.g., 0.28 EUR/kWh). 'scalar' indicates a dimensionless multiplier used in formulas (e.g., 1.15 for a 15% markup).
Possible enum values:
kWhscalar
data[].createdAtstring<date-time>
When the tariff was created.
data[].updatedAtstring<date-time>
When the tariff was last updated.
paginationobject
Cursors to the pages before and after current page. See the PaginationAPI section for reference.
Show child attributes
pagination.afterstring or null
pagination.beforestring or null
Create tariff
POST /flex/tariffs/{tariffId}
Create a tariff. The tariff ID is client-provided. If a tariff with the same ID and definition already exists, the existing tariff is returned. A newly created tariff is empty — push rate data separately via the timeseries endpoint.
Request
Path parameters
tariffIdstringRequired
Unique identifier for the tariff.
Attributes
directionstringRequired
The direction of energy flow. 'import' is for electricity consumption costs, 'export' is for feed-in/selling electricity back to the grid.
Possible enum values:
importexport
currencystringOptional
ISO 4217 currency code. Required when 'per' is 'kWh'. Omit when 'per' is 'scalar'.
perstringRequired
The unit of the tariff. 'kWh' indicates a rate in currency per kilowatt-hour (e.g., 0.28 EUR/kWh). 'scalar' indicates a dimensionless multiplier used in formulas (e.g., 1.15 for a 15% markup).
Possible enum values:
kWhscalar
Response 200
A tariff with this ID and definition already exists. The existing tariff is returned.
Attributes
idstring
Unique identifier for the tariff.
directionstring
The direction of energy flow. 'import' is for electricity consumption costs, 'export' is for feed-in/selling electricity back to the grid.
Possible enum values:
importexport
currencystring
ISO 4217 currency code. Present for tariffs with per 'kWh', absent for scalar tariffs.
perstring
The unit of the tariff. 'kWh' indicates a rate in currency per kilowatt-hour (e.g., 0.28 EUR/kWh). 'scalar' indicates a dimensionless multiplier used in formulas (e.g., 1.15 for a 15% markup).
Possible enum values:
kWhscalar
createdAtstring<date-time>
When the tariff was created.
updatedAtstring<date-time>
When the tariff was last updated.
Response 201
Tariff created successfully.
Attributes
idstring
Unique identifier for the tariff.
directionstring
The direction of energy flow. 'import' is for electricity consumption costs, 'export' is for feed-in/selling electricity back to the grid.
Possible enum values:
importexport
currencystring
ISO 4217 currency code. Present for tariffs with per 'kWh', absent for scalar tariffs.
perstring
The unit of the tariff. 'kWh' indicates a rate in currency per kilowatt-hour (e.g., 0.28 EUR/kWh). 'scalar' indicates a dimensionless multiplier used in formulas (e.g., 1.15 for a 15% markup).
Possible enum values:
kWhscalar
createdAtstring<date-time>
When the tariff was created.
updatedAtstring<date-time>
When the tariff was last updated.
Response 409
A tariff with this ID already exists with a different definition.
Get tariff
GET /flex/tariffs/{tariffId}
Get a tariff by ID.
Request
Path parameters
tariffIdstringRequired
Unique identifier for the tariff.
Response 200
Attributes
idstring
Unique identifier for the tariff.
directionstring
The direction of energy flow. 'import' is for electricity consumption costs, 'export' is for feed-in/selling electricity back to the grid.
Possible enum values:
importexport
currencystring
ISO 4217 currency code. Present for tariffs with per 'kWh', absent for scalar tariffs.
perstring
The unit of the tariff. 'kWh' indicates a rate in currency per kilowatt-hour (e.g., 0.28 EUR/kWh). 'scalar' indicates a dimensionless multiplier used in formulas (e.g., 1.15 for a 15% markup).
Possible enum values:
kWhscalar
createdAtstring<date-time>
When the tariff was created.
updatedAtstring<date-time>
When the tariff was last updated.
Response 404
Tariff not found.
Delete tariff
DELETE /flex/tariffs/{tariffId}
Delete a tariff and all its data. A tariff cannot be deleted if it is referenced by any location's formula.
Request
Path parameters
tariffIdstringRequired
Unique identifier for the tariff.
Response 204
Tariff deleted successfully.
Response 404
Tariff not found.
Response 409
Tariff is referenced by one or more location formulas and cannot be deleted.
Get tariff timeseries
GET /flex/tariffs/{tariffId}/timeseries
Get a tariff's rate data as a timeseries over a time range. The from and to parameters are local dates. The timezoneName parameter is required to interpret the date boundaries and annotate response values with UTC offsets.
Request
Path parameters
tariffIdstringRequired
Unique identifier for the tariff.
Query parameters
fromstring<date>Required
Start of the time range (local date).
tostring<date>Required
End of the time range (local date).
timezoneNamestringRequired
IANA timezone name. Required to interpret the local time boundaries and annotate response values with UTC offsets.
Response 200
Attributes
tariffIdstring
Unique identifier for the tariff.
directionstring
The direction of energy flow. 'import' is for electricity consumption costs, 'export' is for feed-in/selling electricity back to the grid.
Possible enum values:
importexport
currencystring
ISO 4217 currency code. Present for kWh tariffs, absent for scalar tariffs.
perstring
The unit of the tariff. 'kWh' indicates a rate in currency per kilowatt-hour (e.g., 0.28 EUR/kWh). 'scalar' indicates a dimensionless multiplier used in formulas (e.g., 1.15 for a 15% markup).
Possible enum values:
kWhscalar
fromstring<date>
Start of the queried time range (local date).
tostring<date>
End of the queried time range (local date).
timezoneNamestring
IANA timezone name used for the query.
valuesarray of object
The timeseries values marking rate changes. Each value indicates the rate from that timestamp until the next value (or until 'to'). Values are ordered chronologically.
Show child attributes
values[].atstring<date-time>
Timezone-aware timestamp when this rate becomes effective. The rate applies from this point until the next value (or until the window end).
values[].ratenumber
The rate value. For kWh tariffs, this is in currency per kilowatt-hour. For scalar tariffs, this is a dimensionless value.
Response 400
Invalid query parameters. The time range may be outside the tariff's available data range.
Response 404
Tariff not found.
Push tariff timeseries data
PUT /flex/tariffs/{tariffId}/timeseries
Push rate data to a tariff. Replaces all data in the window [firstValue.at, to) with the provided values. Each value defines a step function rate from its timestamp until the next value. The first value must start at least 1 hour in the future. Timestamps must be timezone-aware (ISO 8601 with UTC offset). An Idempotency-Key header is required to deduplicate client retries. Completed idempotency records are retained for 24 hours, while in-progress locks expire after 3 minutes.
Request
Path parameters
tariffIdstringRequired
Unique identifier for the tariff.
Attributes
tostring<date-time>Required
End of the replacement window (exclusive). All existing data in [firstValue.at, to) is replaced with the provided values. Data outside this window is untouched.
valuesarray of objectRequired
The timeseries values for this window. At least one value is required. Values must be ordered chronologically. Each value defines the rate from its timestamp until the next value (or until 'to'). The first value's 'at' defines the start of the replacement window.
Show child attributes
values[].atstring<date-time>Required
Timezone-aware timestamp when this rate becomes effective. The rate applies from this point until the next value (or until the window end).
values[].ratenumberRequired
The rate value. For kWh tariffs, this is in currency per kilowatt-hour. For scalar tariffs, this is a dimensionless value.
Response 204
Timeseries data replaced successfully.
Response 400
Invalid request. Idempotency-Key may be missing/invalid, values must be ordered chronologically, at least one value is required, timestamps may be invalid, or the push window starts less than 1 hour in the future.
Response 404
Tariff not found.
Response 409
Conflict. The provided Idempotency-Key is currently in use for an in-flight request.
Response 422
Unprocessable Entity. The provided Idempotency-Key has already been used with a different payload.
Response 429
Overwrite budget exceeded. This push would overwrite more existing data points than the 24-hour budget allows.
Get location tariff formula
GET /flex/locations/{locationId}/tariff-formula
Get the tariff formula for a location and direction.
Request
Path parameters
locationIdstring<uuid>Required
ID of the Location.
Query parameters
directionstringRequired
The energy direction of the formula to retrieve.
Possible enum values:
importexport
Response 200
Attributes
locationIdstring<uuid>
The location this formula belongs to.
directionstring
The direction of energy flow. 'import' is for electricity consumption costs, 'export' is for feed-in/selling electricity back to the grid.
Possible enum values:
importexport
variablesobject
Maps variable names to tariff IDs. Variables can then be referenced in the formula expression.
formulastring
A formula expression that combines tariffs to compute the final rate.
Syntax:
Variable references: use names defined in the variables mapping (e.g., spot, grid)
The formula must evaluate to a rate (currency/kWh)
Rate + Rate → Rate
Rate - Rate → Rate
Scalar × Rate → Rate
Rate × Rate → Invalid
Scalar + Rate → Invalid
Examples:
spot — use spot price directly
1.15 * spot — 15% markup on spot
spot / 1000 — convert from MWh to kWh
clamp(spot, 0, 0.50) — spot price clamped between 0 and 0.50
max(spot, 0) * markup + grid + 0.02 — floored spot with markup, grid fee, and margin
round(spot + grid, 4) — round to 4 decimal places
Response 404
Location or formula not found.
Set location tariff formula
POST /flex/locations/{locationId}/tariff-formula
Create or replace the tariff formula for a location and direction. The formula defines how tariffs are combined to compute the final rate. The API validates formula syntax, dimensional correctness, and that all referenced tariffs exist and share the same currency and direction.
Request
Path parameters
locationIdstring<uuid>Required
ID of the Location.
Attributes
directionstringRequired
The direction of energy flow. 'import' is for electricity consumption costs, 'export' is for feed-in/selling electricity back to the grid.
Possible enum values:
importexport
variablesobjectRequired
Maps variable names to tariff IDs. Variables can then be referenced in the formula expression.
formulastringRequired
A formula expression that combines tariffs to compute the final rate.
Syntax:
Variable references: use names defined in the variables mapping (e.g., spot, grid)
The formula must evaluate to a rate (currency/kWh)
Rate + Rate → Rate
Rate - Rate → Rate
Scalar × Rate → Rate
Rate × Rate → Invalid
Scalar + Rate → Invalid
Examples:
spot — use spot price directly
1.15 * spot — 15% markup on spot
spot / 1000 — convert from MWh to kWh
clamp(spot, 0, 0.50) — spot price clamped between 0 and 0.50
max(spot, 0) * markup + grid + 0.02 — floored spot with markup, grid fee, and margin
round(spot + grid, 4) — round to 4 decimal places
Response 400
Invalid formula. The formula may have syntax errors, reference non-existent tariffs, have invalid dimensional analysis (e.g., adding a scalar to a rate), or reference tariffs with mismatched currencies or directions.
Delete the tariff formula for a location and direction.
Request
Path parameters
locationIdstring<uuid>Required
ID of the Location.
Query parameters
directionstringRequired
The direction of the formula to delete.
Possible enum values:
importexport
Response 204
Formula deleted successfully.
Response 404
Location or formula not found.
Get resolved tariffs
GET /flex/locations/{locationId}/tariffs/resolved
Evaluate the location's tariff formula over a time range and return the computed rate at each interval. Interval timestamps include UTC offsets for unambiguous DST handling. Unresolved intervals indicate where tariff data is missing. Supports cursor pagination with pageSize, after, and before.
Request
Path parameters
locationIdstring<uuid>Required
ID of the Location.
Query parameters
fromstring<date>Required
Start of the time range to resolve (local date).
tostring<date>Required
End of the time range to resolve (local date).
directionstringRequired
The energy direction to resolve.
Possible enum values:
importexport
afterstringOptional
Opaque cursor used to fetch next page. Cannot be set together with before. Refer to PaginationAPI for more information.
beforestringOptional
Opaque cursor used to fetch previous page. Cannot be used together with after. Refer to PaginationAPI for more information.
pageSizeintegerOptional
Number of records to return per page. Default page size is 50.
Response 200
Attributes
locationIdstring<uuid>
The location these resolved tariffs are for.
directionstring
The direction of energy flow. 'import' is for electricity consumption costs, 'export' is for feed-in/selling electricity back to the grid.
Possible enum values:
importexport
currencystring
ISO 4217 currency code of the resolved rate.
perstring
The energy unit. Resolved tariffs are always rates in currency per kWh.
Possible enum values:
kWh
fromstring<date>
Start of the resolved time range (local date).
tostring<date>
End of the resolved time range (local date).
timezoneNamestring
IANA timezone name used to resolve local date boundaries and annotate interval timestamps.
intervalsarray
The time intervals with their rates. Intervals are contiguous and non-overlapping. Resolved intervals contain computed rates; unresolved intervals indicate missing data.
paginationobject
Cursors to the pages before and after current page. See the PaginationAPI section for reference.
Show child attributes
pagination.afterstring or null
pagination.beforestring or null
Response 400
Invalid query parameters.
Response 404
Location not found or no formula configured for the specified direction.
Webhook events
flex:vehicle-policy:created
Occurs whenever a Flex vehicle policy is created.
Request
Attributes
createdAtstring<date-time>Required
ISO8601 UTC timestamp
versionstringRequired
API version of the payload
userobjectRequired
Show child attributes
user.idstringRequired
User ID
eventstringRequired
Possible enum values:
flex:vehicle-policy:created
policyobjectRequired
Flex Policy
Show child attributes
policy.idstringRequired
The ID of the flex policy.
policy.vehicleIdstringRequired
The ID of the vehicle for which this policy applies.
policy.locationIdstringRequired
The ID of the location at which this policy is applied. When the vehicle is not at this location, the Policy Status State will be UNAVAILABLE.
policy.batteryReservenumberRequired
Upon arrival at the location, the vehicle will immediately charge to this battery level without regard to prices or flexibility demands. This charging is reflected in the Policy Status State as SCHEDULE:BATTERY_RESERVE. Must be between 0% and 20%. Note: For Mercedes-Benz vehicles, batteryReserve must be set to 50, as these vehicles always charge to 50% SOC upon plug-in.
The vehicle's charge limit as last observed at this policy's location. Defaults to 100 until first observed. Used for validating that targets do not exceed the vehicle's charge limit at this location.
policy.scheduleobjectRequired
The weekly schedule of Policy settings. The upcoming schedule settings should be read from the Policy Status object, under settings.regularSchedule.
Show child attributes
policy.schedule.mondayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.monday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.tuesdayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.tuesday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.wednesdayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.wednesday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.thursdayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.thursday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.fridayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.friday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.saturdayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.saturday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.sundayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.sunday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
Response 200
The subscriber should return 200 OK to acknowledge the webhook has been received
flex:vehicle-policy:updated
Occurs whenever a Flex vehicle policy is updated.
Request
Attributes
createdAtstring<date-time>Required
ISO8601 UTC timestamp
versionstringRequired
API version of the payload
userobjectRequired
Show child attributes
user.idstringRequired
User ID
eventstringRequired
Possible enum values:
flex:vehicle-policy:updated
policyobjectRequired
Flex Policy
Show child attributes
policy.idstringRequired
The ID of the flex policy.
policy.vehicleIdstringRequired
The ID of the vehicle for which this policy applies.
policy.locationIdstringRequired
The ID of the location at which this policy is applied. When the vehicle is not at this location, the Policy Status State will be UNAVAILABLE.
policy.batteryReservenumberRequired
Upon arrival at the location, the vehicle will immediately charge to this battery level without regard to prices or flexibility demands. This charging is reflected in the Policy Status State as SCHEDULE:BATTERY_RESERVE. Must be between 0% and 20%. Note: For Mercedes-Benz vehicles, batteryReserve must be set to 50, as these vehicles always charge to 50% SOC upon plug-in.
The vehicle's charge limit as last observed at this policy's location. Defaults to 100 until first observed. Used for validating that targets do not exceed the vehicle's charge limit at this location.
policy.scheduleobjectRequired
The weekly schedule of Policy settings. The upcoming schedule settings should be read from the Policy Status object, under settings.regularSchedule.
Show child attributes
policy.schedule.mondayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.monday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.tuesdayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.tuesday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.wednesdayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.wednesday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.thursdayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.thursday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.fridayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.friday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.saturdayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.saturday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.sundayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.sunday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
updatedFieldsarray of stringRequired
Response 200
The subscriber should return 200 OK to acknowledge the webhook has been received
flex:vehicle-policy:deleted
Occurs whenever a Flex vehicle policy is deleted.
Request
Attributes
createdAtstring<date-time>Required
ISO8601 UTC timestamp
versionstringRequired
API version of the payload
userobjectRequired
Show child attributes
user.idstringRequired
User ID
eventstringRequired
Possible enum values:
flex:vehicle-policy:deleted
policyobjectRequired
Flex Policy
Show child attributes
policy.idstringRequired
The ID of the flex policy.
policy.vehicleIdstringRequired
The ID of the vehicle for which this policy applies.
policy.locationIdstringRequired
The ID of the location at which this policy is applied. When the vehicle is not at this location, the Policy Status State will be UNAVAILABLE.
policy.batteryReservenumberRequired
Upon arrival at the location, the vehicle will immediately charge to this battery level without regard to prices or flexibility demands. This charging is reflected in the Policy Status State as SCHEDULE:BATTERY_RESERVE. Must be between 0% and 20%. Note: For Mercedes-Benz vehicles, batteryReserve must be set to 50, as these vehicles always charge to 50% SOC upon plug-in.
The vehicle's charge limit as last observed at this policy's location. Defaults to 100 until first observed. Used for validating that targets do not exceed the vehicle's charge limit at this location.
policy.scheduleobjectRequired
The weekly schedule of Policy settings. The upcoming schedule settings should be read from the Policy Status object, under settings.regularSchedule.
Show child attributes
policy.schedule.mondayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.monday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.tuesdayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.tuesday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.wednesdayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.wednesday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.thursdayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.thursday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.fridayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.friday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.saturdayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.saturday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policy.schedule.sundayobjectRequired
The schedule settings for a particular day of the week.
Show child attributes
policy.schedule.sunday.deadlinestringRequired
The time of day the user wants their vehicle to be charged by on a specific day of the week.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
Response 200
The subscriber should return 200 OK to acknowledge the webhook has been received
flex:vehicle-policy:status
Occurs whenever a Flex vehicle policy's status is updated.
Request
Attributes
createdAtstring<date-time>Required
ISO8601 UTC timestamp
versionstringRequired
API version of the payload
userobjectRequired
Show child attributes
user.idstringRequired
User ID
eventstringRequired
Possible enum values:
flex:vehicle-policy:status
policyStatusobjectRequired
A view of the current flex policy settings, including any active overrides.
Show child attributes
policyStatus.updatedAtstring<date-time>Required
The timestamp of the last update to the flex policy.
policyStatus.policyIdstringRequired
The ID of the policy.
policyStatus.locationIdstringRequired
The ID of the location.
policyStatus.vehicleIdstringRequired
The ID of the vehicle.
policyStatus.statestringRequired
The state of the flex policy.
UNAVAILABLE: The vehicle is unavailable for Flexible EV Charging for some reason, for example, because it is not plugged in, or not the Policy's location.
IMMEDIATE:OVERRIDE: The vehicle is charging to some target battery level because of a temporary override.
SCHEDULE:BATTERY_RESERVE: The vehicle is charging to a battery reserve level, and will stop after reaching that level.
SCHEDULE:REGULAR: The vehicle is following the regular schedule and actively participating in Flexible EV Charging.
SCHEDULE:OVERRIDE: The vehicle is following a schedule override, and is still actively participating in Flexible EV Charging.
SCHEDULE:INFLEXIBLE: The vehicle doesn't have enough time to charge to the target battery level, so there isn't any opportunity to flex the charging.
Upon arrival at the location, the vehicle will immediately charge to this battery level without regard to prices or flexibility demands. This charging is reflected in the Policy Status State as SCHEDULE:BATTERY_RESERVE. Must be between 0% and 20%. Note: For Mercedes-Benz vehicles, batteryReserve must be set to 50, as these vehicles always charge to 50% SOC upon plug-in.
The upcoming deadline represented as a RFC3339 UTC timestamp.
policyStatus.settings.regularSchedule.minimumChargeTargetnumber or nullRequired
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policyStatus.settings.overrideRequired
An override applied to a Flex Policy, shown as a part of the Flex Status entity. The override is either a next-day schedule override or an immediate start override.
The minimum acceptable battery level the user needs to reach by their deadline on a specific day of the week. The vehicle may, under some circumstances, charge to a higher battery level than the minimumChargeTarget. If the minimumChargeTarget is higher than the vehicle's chargeLimit, the vehicle will charge to the chargeLimit instead. Must be greater than or equal to the batteryReserve. For Mercedes-Benz vehicles, the minimumChargeTarget minimum is 50%, see batteryReserve for more details.
policyStatus.sessionobjectRequired
An object containing information about the vehicle's current plug session.
Show child attributes
policyStatus.session.blocksarray of objectRequired
The unique identifier for the policy associated with this session.
session.pluggedInAtstring<date-time>Required
The date and time when the vehicle was plugged in.
session.pluggedOutAtnullRequired
Always null. The vehicle has not been unplugged yet.
session.blocksarray of objectRequired
Discrete windows of active charging within the session. Empty while UPCOMING. While ACTIVE, blocks represent a mix of past charging and planned future charging — past blocks are final, future blocks are tentative and may shift as the schedule re-optimizes.
Show child attributes
session.blocks[].typestringRequired
The type of charge block.
Possible enum values:
BATTERY_RESERVEREGULARIMMEDIATE_START
session.blocks[].kwhSumnumberRequired
The total energy delivered during this block in kWh. For completed and in-progress blocks, this is the actual energy delivered. For future (tentative) blocks, this is the system's estimate.
session.blocks[].startAtstring<date-time>Required
While ACTIVE, this is when the block started (if past) or is tentatively planned to start (if future). While SETTLED, this is when the block actually started.
session.blocks[].endAtstring<date-time>Required
While ACTIVE, this is when the block ended (if past) or is tentatively planned to end (if future). While SETTLED, this is when the block actually ended.
session.statisticsobjectRequired
Energy delivery statistics for the session.
Show child attributes
session.statistics.aggregatedobject or nullRequired
Aggregated statistics for the session. Null while UPCOMING.
Show child attributes
session.statistics.aggregated.kwhSumnumber or nullRequired
The energy delivered in kWh over this 15-minute interval.
session.targetobjectRequired
What the system is charging towards for this session.
Show child attributes
session.target.latestRequired
The latest target configuration. Null for unmanaged sessions (e.g. public charging) where the system did not control the charge. Use type to distinguish between REGULAR and IMMEDIATE_START targets.
Show child attributes
session.target.latest.idintegerRequired
Incrementing identifier for this target within the session.
session.target.latest.typestringRequired
Possible enum values:
REGULAR
session.target.latest.sourcestringRequired
Whether this target follows the default policy or a user override.
The time by which the minimum charge target should be reached.
session.outcomeobjectRequired
Whether the target will be met for this session.
Show child attributes
session.outcome.latestRequired
The latest outcome assessment. Null before the first estimate is available. Use type to distinguish between REGULAR and IMMEDIATE_START outcomes, then state to distinguish ON_TARGET from OFF_TARGET within regular outcomes.
Show child attributes
session.errorobjectRequired
Error state for this session.
Show child attributes
session.error.latestRequired
The latest error state. Null when there is no active error. Use type to identify the error kind.
Show child attributes
session.error.latest.typestringRequired
Possible enum values:
START_FAIL
updatedFieldsarray of stringRequired
Response 200
The subscriber should return 200 OK to acknowledge the webhook has been received
curl https://oauth.{YOUR_CLIENT_ENVIRONMENT}.enode.io/oauth2/token \-X POST \-u{YOUR_CLIENT_ID}:{YOUR_CLIENT_SECRET}\-d"grant_type=client_credentials"
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",}