Skip to main content

OCPI v2.2.1

Introduction


This API uses the oAuth2 client credentials grant type to secure all the communications. For more information, check the Authentication/Authorization guide.

The OCPI API is organized around REST and GraphQL. Our API has predictable resource-oriented URLs, accepts JSON-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs.

This API provides users with the ability to manage credentials, locations, sessions, tariffs, tokens and charge detail records (CDRs) for electric vehicle (EV) charging infrastructure. Additionally, the GraphQL endpoint allows for more flexible queries and mutations against the data.

This API uses the oAuth2 client credentials grant type to secure all communications. All requests to the API must be authenticated using a bearer token. For more information, check the Authentication/Authorization guide.



Use Cases


The OCPI API provides a robust and efficient way for operators to manage their electric vehicle (EV) charging infrastructure. By leveraging both REST and GraphQL endpoints, users can streamline operations, enhance real-time data access, and improve the overall user experience for both administrators and end-users.

  • Digital Transformation for Charging Network Operators

    The OCPI API enables operators to modernize their charging infrastructure management with a simple and intuitive user interface, real-time data access, and comprehensive functionalities.

  • New Digital Experience for Operators

    Operators can now interact with a user-friendly digital platform that simplifies the process of managing locations, sessions, tariffs, tokens, and CDRs. The API supports intuitive UIs and provides preview options for real-time data visualization.

  • Real-Time Data Management

    With real-time data capabilities, operators can create, update, and synchronize data across all connected systems instantly. This reduces the time and effort required to manage the charging infrastructure and ensures data consistency across the network.

  • Improved Session and Tariff Management

    Operators can efficiently manage charging sessions and pricing tariffs, ensuring accurate billing and optimal resource utilization. Access detailed information about specific sessions, including start/end times, energy consumption, and costs. Access comprehensive tariff information to ensure transparent and accurate billing.

  • Flexible Data Queries

    Use GraphQL to perform complex queries and retrieve customized data sets for detailed analysis.

Benefits

The primary focus is on enhancing the management experience for EV charging network operators. The benefits of using the OCPI API include:

  • Enhanced Operational Efficiency

    Simplified resource management with intuitive interfaces and real-time synchronization of data across multiple systems.

  • Flexibility and Customization

    Ability to perform complex queries and operations using GraphQL and use detailed and customizable data retrieval options.

  • Improved Data Accuracy and Reliability

    Real-time data validation and error feedback and a comprehensive logging and monitoring of all API interactions.

  • Security and Compliance

    Secure communications using OAuth2 client credentials. Compliance with industry standards for data protection.

  • Real-Time Error Feedback

    The API provides immediate validation and error feedback for all operations, reducing the likelihood of data entry errors and enabling operators to quickly identify and resolve issues.

  • Comprehensive Reporting and Analytics

    The OCPI API supports detailed reporting and analytics, providing operators with valuable insights into the performance and utilization of their charging infrastructure.



Quick Start Guide for EMobility OCPI API


This API is secured by OAuth 2.0. It uses the 'Client Credentials' Grant Type to allow the API consumer to access data. The process is details with the diagram below.

sequenceDiagram participant PartnerApplication participant Shell autonumber alt Manual Process rect rgb(200, 150, 255) PartnerApplication ->>Shell: Request Client ID and Client Secret activate Shell Shell ->> PartnerApplication : Generate and provide Client ID and Client Secret deactivate Shell end end alt Authentication/Authorization rect rgb(191, 223, 255) PartnerApplication ->>Shell: Inititate request to OAuth end point with credentials activate Shell Shell ->> PartnerApplication : (200-OK) Returns Bearer Token deactivate Shell end end alt Call Functional Endpoint rect rgb(200, 150, 255) PartnerApplication ->>Shell: Initiate request to functional endpoint along with bearer token received from previous step activate Shell Shell ->> PartnerApplication : Returns a response on validation of the bearer token deactivate Shell end end

Base URLs

Auth API

Environment Base URL
UAT https://api-test.shell.com/
PROD https://api.shell.com/

EMobility OCPI API

Environment Base URL
UAT https://{TBD}/
PROD https://{TBD}/

1. Request Client ID and Secret

Contact Shell API Team in order to request access to OAuth authentication.

2. Generate and provide Client ID and Secret

Shell API team will generate the credentials and you will be intimated via email with all the details.

3. Request Access Token

Once you receive the credentials next step is to call the /token.oauth2 endpoint to authenticate. Below are the key parameters.

Key request parameters

Element Value
Method POST
Endpoint /v2/oauth/token
Headers Content-Type: application/x-www-form-urlencoded
Body _clientid: **********
_clientsecret: *********
_granttype: client_credentials

Sample request

curl --location --request POST 'https://api-test.shell.com/v2/oauth/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=**************' \
--data-urlencode 'client_secret=**************' \
--data-urlencode 'grant_type=client_credentials'

4. Get an access token

On receiving the request Shell Authorizaton system will verify all the parameters in the request and, if everything checks out, it will generate your access token and return it in the response.

Key response parameters

The response will contain the following parameters:

Element Value
access_token The token to be used to call the functional APIs
expires_in The amount of seconds until the access token expires
token_type Bearer

Sample response

{
  "access_token": "**************",
  "expires_in": "899",
  "token_type": "Bearer"
}

Note: Make a note that the expires_in is always in seconds.

5. Call the Functional API

While calling Shell API’s include the following in the header of the request. Note the space after Bearer.

Authorization: "Bearer " + access_token

Note: This endpoint doesn't return refresh token. Hence in case the bearer token expires the same endpoint should be called to retrieve new bearer token

Troubleshooting authentication

The following table lists common authentication errors and possible causes:

HTTP Status Code Value Possible causes
400 Bad request Missing or incorrect parameters or header values
401 Unauthorized
  • Invalid Client ID or API key
  • All error scenarios are returned with a response body and identifier. Few examples below for

    Example 1 : HTTP 400 - Bad Request

    {
      "ErrorCode": "invalid_request",
      "Error": "Unsupported grant type : client_credential"
    }

    Example 2 : HTTP 401 - Unauthorized

    {
      "ErrorCode": "invalid_client",
      "Error": "ClientId is Invalid"
    }


    Fundamentals


    Requests

    The EMobility OCPI API provides a set of endpoints, each with its unique path. It is based on REST principles. Data resources are accessed via standard HTTPS requests in UTF-8 format. List of verbs in EMobility OCPI API:

    • GET - Retrieve data.

    Responses

    The responses always include a JSON object. Check the API documentation to find descriptions of common responses for each endpoint.

    Response Status Codes

    The EMobility OCPI API uses the following response status codes defined in RFC 2616 and RFC 6585.

    • 200 - The request has succeeded. The Partner application can read the result of the request in the body and the headers of the response.
    • 400 - Bad request. Due to malformed syntax, the server could not understand the request. The body will contain more information.
    • 401 - Unauthorized. The request requires user authentication, and it has been refused for those credentials.
    • 403 - Forbidden. The server understood the request but is refusing to fulfill it.
    • 404 - Not Found - The requested resource could not be found. This error can be due to a temporary or permanent condition.
    • 422 - Unprocessable content. The server understood the request but is unable to process it.
    • 500 - Internal Server Error. This error should not happen but if you receive it, something went wrong, please report it to us.

    Client Status Codes

    Requests that reach the endpoints should return an OCPI response message with a status_code field as defined below.

    • 1xxx - The request has succeeded.
    • 2xxx - Client errors – The data sent by the client can not be processed by the server.
    • 3xxx - Server errors – The server encountered an internal error.
    • 4xxx - Hub errors – For errors that a Hub encounters while routing messages, the following OCPI status codes shall be used.

    1xxx: Success

    • 1000 - Generic success code.
    • 19xx - Reserved range for custom success status codes (1900-1999).

    2xxx: Client errors

    • 2000 - Generic client error.
    • 2001 - Invalid or missing parameters.
    • 2002 - Not enough information, for example: Authorization request with too little information.
    • 2003 - Unknown Location, for example: Command: START_SESSION with unknown location.
    • 2004 - Unknown Token, for example: 'real-time' authorization of an unknown Token.
    • 29xx - Reserved range for custom client error status codes (2900-2999).

    3xxx: Server errors

    • 3000 - Generic server error.
    • 3001 - Unable to use the client’s API. For example during the credentials registration: When the initializing party requests data from the other party during the open POST call to its credentials endpoint. If one of the GETs can not be processed, the party should return this error in the POST response.
    • 3002 - Unsupported version.
    • 3003 - No matching endpoints or expected endpoints missing between parties. Used during the registration process if the two parties do not have any mutual modules or endpoints available, or the minimum expected by the other party implementation.
    • 39xx - Reserved range for custom server error status codes (3900-3999).

    4xxx: Hub errors

    • 4000 - Generic error.
    • 4001 - Unknown receiver (TO address is unknown).
    • 4002 - Timeout on forwarded request (message is forwarded, but request times out).
    • 4003 -Connection problem (receiving party is not connected).
    • 49xx - Reserved range for custom hub error status codes (4900-4999).

    Response Schemas

    All success scenarios are returned with the same response body structure:

    {
      "data": [{}],
      "status_code": 0,
      "status_message": "string",
      "timestamp": "2024-07-16T16:54:24.063Z"
    }
    KEY VALUE TYPE VALUE DESCRIPTION
    _statuscode Int Response code, as listed in Status Codes, indicates how the request was handled. To avoid confusion with HTTP codes, at least four digits are used.
    _statusmessage String An optional status message which may help when debugging.
    timestamp String The time this message was generated.
    data Array or Object or String Contains the actual response data object or list of objects from each request, depending on the cardinality of the response data, this is an array (card. * or +), or a single object (card. 1 or ?)

    Response Error Schemas

    All error scenarios are returned with the same response body structure:

    {
      "status_code": 0,
      "status_message": "string",
      "timestamp": "2024-07-16T16:54:24.063Z"
    }
    KEY VALUE TYPE VALUE DESCRIPTION
    _statuscode Int Response code, as listed in Status Codes, indicates how the request was handled. To avoid confusion with HTTP codes, at least four digits are used.
    _statusmessage String An optional status message which may help when debugging.
    timestamp String The time this message was generated.

    Versioning

    Your API version controls the API behavior you see (what properties you see in responses, what parameters you're allowed to send in requests, and so on). Your version is set in the URL. When a breaking change is introduced to the EMobility OCPI API, an updated version is released. The current version is v1. This is the only version available at this moment.

    Backwards-compatible changes

    We consider the following changes to be backward-compatible:

    • Adding new API resources.
    • Adding new optional request parameters to existing API endpoints.
    • Adding new properties to existing API responses.
    • Changing the order of properties in existing API responses.
    • Changing the length or format of opaque strings, such as object IDs, error messages, and other human-readable strings.

    Pagination

    All GET methods that return a list of objects have pagination, this allows a client and server to control the amount of objects returned in the response to a GET request, while still enabling the client to retrieve all objects by doing multiple request with different parameters. Without pagination the server had to return all objects in one response that could potentially contain millions of objects. To enable pagination of the returned list of objects, additional URL parameters are allowed for the GET request.

    Pagination request

    PARAMETER DESCRIPTION
    offset The offset of the first object returned. Default is 0 (the first object).
    limit Maximum number of objects to GET. Note: the server might decide to return fewer objects, either because there are no more objects, or the server limits the maximum number of objects to return. This is to prevent, for example, overloading the system.

    Example: With offset=0 and limit=10 the server shall return the first 10 records (if 10 objects match the request). Then next page starts with offset=10.

    Pagination response

    HTTP headers that have to be added to any paginated GET response.

    HTTP HEADER DESCRIPTION
    Link Link to the ‘next’ page should be provided, when this is NOT the last page. The Link should also contain any filters present in the original request. See example below.
    X-Total-Count (Custom HTTP Header) Total number of objects available in the server system that match the given query (including the given query parameters, for example: date_to and date_from but excluding limit and offset) and that are available to this client. For example: The CPO server might return fewer CDR objects to an eMSP than the total number of CDRs available in the CPO system.
    X-Limit (Custom HTTP Header) Number of objects that are returned. Note that this is an upper limit; if there are not enough remaining objects to return, fewer objects than this upper limit number will be returned.

    Cardinality

    SYMBOL DESCRIPTION TYPE
    ? An optional object. If not set, it might be null, or the field might be omitted. When the field is omitted and it has a default value, the value is the default value. Object
    1 Required object. Object
    * A list of zero or more objects. If empty, it might be null, [] or the field might be omitted. [Object]
    + A list of at least one object. [Object]

    Security

    The EMobility OCPI API forces HTTPS for all services using TLS (SSL).

    The EMobility OCPI API does not require client side certificates for authentication, only server side certificates in order to setup a secure SSL connection.


    Types

    TYPE DESCRIPTION
    DateTime All timestamps are formatted as string(25) following RFC 3339, with some additional limitations. All timestamps SHALL be in UTC. The absence of the timezone designator implies a UTC timestamp. Fractional seconds MAY be used.
    URL An URL a string(255) type following the w3.org spec.
    number Numbers in OCPI are formatted as JSON numbers. Unless mentioned otherwise, numbers use 4 decimals and a sufficiently large amount of digits.
    CiString Case Insensitive String. Only printable ASCII allowed. (Non-printable characters like: Carriage returns, Tabs, Line breaks, etc are not allowed)


    List endpoints and resource name



    Get all Locations


    Introduction

    This API, will return the private charging locations.

    The API also provide further search options to filter the result set.

    • Based on the last updated date between two given dates.

    The complete list of query parameters and its details are provided in the OAS specification which can be used to filter down the search result based on the user journey.

    Headers parameters

    HEADER PARAMETER DATA TYPE LIMITS (MIN/MAX) NULLABLE DESCRIPTION
    Authorization String N/A No This is a Bearer token. It should be the token you got when you requested an Access Token before.

    Example: Bearer xxxxxxxxxx

    Request query parameters

    REQUEST QUERY PARAMETER DATA TYPE REQUIRED VALUE
    _datefrom DateTime No Only return Locations that have last_updated after this Date/Time.
    _dateto DateTime No Only return Locations that have last_updated before this Date/Time.
    offset int No The offset of the first object returned. Default is 0.
    limit int No Maximum number of objects to GET.

    Sample Request

    curl --location '{{url}}/v1/locations/?date_from=xxx&date_to=yyy' \
    --header 'Authorization: Bearer ***' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json'

    Response

    On success the response will have a 200 OK status and the data property from body of the response will contain a array of JSON objects with:

    KEY VALUE TYPE CARDINALITY DESCRIPTION
    country_code CiString(2) 1 ISO 3166-1 alpha-3 code for the country of this location.
    party_id CiString(3) 1 ID of the CPO that 'owns' this Location (following the ISO-15118 standard).
    id CiString(36) 1 Uniquely identifies the location within the CPOs platform (and suboperator platforms). This field can never be changed, modified or renamed.
    publish boolean 1 Defines if a Location may be published on an website or app etc. When this is set to false, only tokens identified in the field: publish_allowed_to are allowed to be shown this Location. When the same location has EVSEs that may be published and may not be published, two 'Locations' should be created.
    publish_allowed_to PublishTokenType(JSON) * This field may only be used when the publish field is set to false. Only owners of Tokens that match all the set fields of one PublishToken in the list are allowed to be shown this location.
    publish_allowed_to.uid CiString(36) ? Unique ID by which this Token can be identified.
    publish_allowed_to.type TokenType(Enum) ? Type of the token. Could be AD_HOC_USER, APP_USER, OTHER or RFID.
    publish_allowed_to.visual_number string(64) ? Visual readable number/identification as printed on the Token (RFID card).
    publish_allowed_to.issuer string(64) ? Issuing company, most of the times the name of the company printed on the token (RFID card), not necessarily the eMSP.
    publish_allowed_to.group_id CiString(36) ? This ID groups a couple of tokens. This can be used to make two or more tokens work as one.
    name string(255) ? Display name of the location.
    address string(45) 1 Street/block name and house number if available.
    city string(45) 1 City or town.
    postal_code string(10) ? Postal code of the location.
    state string(20) ? State or province of the location, only to be used when relevant.
    country string(3) 1 ISO 3166-1 alpha-3 code for the country of this location.
    coordinates GeoLocation 1 Coordinates of the location.
    coordinates.latitude String(10) 1 Latitude of the point in decimal degree. Example: 50.770774. Decimal separator: “.” Regex: -?[0-9]{1,2}.[0-9]{6}
    coordinates.longitude String(11) 1 Longitude of the point in decimal degree. Example: -126.104965. Decimal separator: “.” Regex: -?[0-9]{1,3}.[0-9]{6}
    related_locations AdditionalGeoLocation(Array) * Geographical location of related points relevant to the user.
    related_locations.latitude String(10) 1 Latitude of the point in decimal degree. Example: 50.770774. Decimal separator: “.” Regex: -?[0-9]{1,2}.[0-9]{6}
    related_locations.longitude String(11) 1 Longitude of the point in decimal degree. Example: -126.104965. Decimal separator: “.” Regex: -?[0-9]{1,3}.[0-9]{6}
    related_locations.name DisplayText(JSON) ? Name of the point in local language or as written at the location. For example the street name of a parking lot entrance or it’s number.
    related_locations.name.language string(2) 1 Language Code ISO 639-1
    related_locations.name.text string(512) 1 Text to be displayed to a end user. No markup, html etc. allowed.
    parking_type ParkingType(Enum) ? The general type of parking at the charge point location. Could be ALONG_MOTORWAY, PARKING_GARAGE, PARKING_LOT, ON_DRIVEWAY, ON_STREET or UNDERGROUND_GARAGE.
    evses EVSE(Array) * List of EVSEs that belong to this Location.
    evses.uid CiString(36) 1 Uniquely identifies the EVSE within the CPOs platform (and suboperator platforms). For example a database unique ID or the “EVSE ID”. This field can never be changed, modified or renamed. This is the ‘technical’ identification of the EVSE, not to be used as ‘human readable’ identification, use the field: evse_id for that.
    evses.evse_id CiString(48) ? Compliant with the following specification for EVSE ID from “eMI3 standard version V1.0” (http://emi3group.com/documents-links/) “Part 2: business objects.” Optional because: if an EVSE ID is to be re-used the EVSE ID can be removed from an EVSE that is removed (status: REMOVED)
    evses.status Status(Enum) 1 Indicates the current status of the EVSE. Could be AVAILABLE, BLOCKED, CHARGING, INOPERATIVE, OUTOFORDER, PLANNED, REMOVED, RESERVED or UNKNOWN.
    evses.status_schedule StatusSchedule(Array) * Indicates a planned status in the future of the EVSE.
    evses.status_schedule.period_begin DateTime 1 Begin of the scheduled period.
    evses.status_schedule.period_end DateTime ? End of the scheduled period, if known.
    evses.status_schedule.status Status(Enum) 1 Status value during the scheduled period. Could be AVAILABLE, BLOCKED, CHARGING, INOPERATIVE, OUTOFORDER, PLANNED, REMOVED, RESERVED or UNKNOWN.
    evses.capabilities Capability(Array) * List of functionalities that the EVSE is capable of. A list of CHARGING_PROFILE_CAPABLE, CHARGING_PREFERENCES_CAPABLE, CHIP_CARD_SUPPORT, CONTACTLESS_CARD_SUPPORT, CREDIT_CARD_PAYABLE, DEBIT_CARD_PAYABLE, PED_TERMINAL, REMOTE_START_STOP_CAPABLE, RESERVABLE, RFID_READER, START_SESSION_CONNECTOR_REQUIRED, TOKEN_GROUP_CAPABLE and UNLOCK_CAPABLE
    evses.connectors Connector(Array) + List of available connectors on the EVSE.
    evses.connectors.id CiString(36) 1 Identifier of the connector within the EVSE. Two connectors may have the same id as long as they do not belong to the same EVSE object.
    evses.connectors.standard ConnectorType(Enum) 1 The standard of the installed connector. Could be CHADEMO, CHAOJI, DOMESTICA, DOMESTIC_B, DOMESTIC_C, DOMESTIC_D, DOMESTIC_E, DOMESTIC_F, DOMESTIC_G, DOMESTIC_H, DOMESTIC_I, DOMESTIC_J, DOMESTIC_K, DOMESTIC_L, DOMESTIC_M, DOMESTIC_N, DOMESTIC_O, GBT_AC, GBT_DC, IEC_60309_2_single_16, IEC_60309_2_three_16, IEC_60309_2_three_32, IEC_60309_2_three_64, IEC_62196_T1, IEC_62196_T1_COMBO, IEC_62196_T2, IEC_62196_T2_COMBO, IEC_62196_T3A, IEC_62196_T3C, NEMA_5_20, NEMA_6_30, NEMA_6_50, NEMA_10_30, NEMA_10_50, NEMA_14_30, NEMA_14_50, PANTOGRAPH_BOTTOM UP, PANTOGRAPH_TOP_DOW N, TESLA_R or TESLA_S
    evses.connectors.format ConnectorFormat(Enum) 1 The format (socket/cable) of the installed connector. Could be SOCKET or CABLE.
    evses.connectors.power_type PowerType(Enum) 1 The type of power supplied by the connector. Could be AC_1_PHASE, AC_2_PHASE, AC_2_PHASE_SPLIT, AC_3_PHASE or DC
    evses.connectors.max_voltage int 1 Maximum voltage of the connector (line to neutral for AC_3_PHASE), in volt [V]. For example: DC Chargers might vary the voltage during charging when battery almost full.
    evses.connectors.max_amperage int 1 Maximum amperage of the connector, in ampere [A].
    evses.connectors.max_electric_power int ? Maximum electric power that can be delivered by this connector, in Watts (W). When the maximum electric power is lower than the calculated value from voltage and amperage, this value should be set. For example: A DC Charge Point which can delivers up to 920V and up to 400A can be limited to a maximum of 150kW (max_electric_power = 150000). Depending on the car, it may supply max voltage or current, but not both at the same time. For AC Charge Points, the amount of phases used can also have influence on the maximum power.
    evses.connectors.tariff_ids [CString(36)] * Identifiers of the currently valid charging tariffs. Multiple tariffs are possible, but only one of each Tariff.type can be active at the same time. Tariffs with the same type are only allowed if they are not active at the same time: start_date_time and end_date_time period not overlapping. When preference-based smart charging is supported, one tariff for every possible ProfileType should be provided. These tell the user about the options they have at this Connector, and what the tariff is for every option. For a "free of charge" tariff, this field should be set and point to a defined "free of charge" tariff.
    evses.connectors.terms_and_conditions URL ? URL to the operator’s terms and conditions.
    evses.connectors.last_updated DateTime 1 Timestamp when this Connectors was last updated (or created).
    evses.floor_level string(4) ? Level on which the charging station is located (in garage buildings) in the locally displayed numbering scheme.
    evses.coordinates GeoLocation ? Coordinates of the EVSE.
    evses.coordinates.latitude String(10) 1 Latitude of the point in decimal degree. Example: 50.770774. Decimal separator: “.” Regex: -?[0-9]{1,2}.[0-9]{6}
    evses.coordinates.longitude String(11) 1 Longitude of the point in decimal degree. Example: -126.104965. Decimal separator: “.” Regex: -?[0-9]{1,3}.[0-9]{6}
    evses.physical_reference string(16) ? A number/string printed on the outside of the EVSE for visual identification.
    evses.directions DisplayText(Array) * Multi-language human-readable directions when more detailed information on how to reach the EVSE from the Location is required.
    evses.directions.language string(2) 1 Language Code ISO 639-1
    evses.directions.text string(512) 1 Text to be displayed to a end user. No markup, html etc. allowed.
    evses.parking_restrictions ParkingRestriction(Array) * The restrictions that apply to the parking spot. Could be EV_ONLY, PLUGGED, DISABLED, CUSTOMERS and MOTORCYCLES.
    evses.images Image(Array) * Links to images related to the EVSE such as photos or logos.
    evses.images.url URL 1 URL from where the image data can be fetched through a web browser.
    evses.images.thumbnail URL ? URL from where a thumbnail of the image can be fetched through a webbrowser.
    evses.images.category ImageCategory(Enum) 1 Describes what the image is used for. Could be CHARGER, ENTRANCE, LOCATION, NETWORK, OPERATOR, OTHER or OWNER
    evses.images.type String(4) 1 Image type like: gif, jpeg, png, svg
    evses.images.width int(5) ? Width of the full scale image
    evses.images.height int(5) ? Height of the full scale image
    evses.last_updated DateTime 1 Timestamp when this EVSE or one of its Connectors was last updated (or created).
    directions DisplayText(Array) * Human-readable directions on how to reach the location.
    directions.language string(2) 1 Language Code ISO 639-1
    directions.text string(512) 1 Text to be displayed to a end user. No markup, html etc. allowed.
    operator BusinessDetails(JSON) ? Information of the operator. When not specified, the information retrieved from the api_info endpoint should be used instead.
    operator.name String(100) 1 Name of the operator.
    operator.website URL ? Link to the operator’s website.
    operator.logo Image(JSON) ? Image link to the operator’s logo.
    operator.logo.url URL 1 URL from where the image data can be fetched through a web browser.
    operator.logo.thumbnail URL ? URL from where a thumbnail of the image can be fetched through a webbrowser.
    operator.logo.category ImageCategory(Enum) 1 Describes what the image is used for. Could be CHARGER, ENTRANCE, LOCATION, NETWORK, OPERATOR, OTHER or OWNER
    operator.logo.type CiString(4) 1 Image type like: gif, jpeg, png, svg
    operator.logo.width int(5) ? Width of the full scale image
    operator.logo.height int(5) ? Height of the full scale image
    suboperator BusinessDetails(JSON) ? Information of the suboperator if available.
    suboperator.name String(100) 1 Name of the suboperator.
    suboperator.website URL ? Link to the suboperator’s website.
    suboperator.logo Image(JSON) ? Image link to the suboperator’s logo.
    suboperator.logo.url URL 1 URL from where the image data can be fetched through a web browser.
    suboperator.logo.thumbnail URL ? URL from where a thumbnail of the image can be fetched through a webbrowser.
    suboperator.logo.category ImageCategory(Enum) 1 Describes what the image is used for. Could be CHARGER, ENTRANCE, LOCATION, NETWORK, OPERATOR, OTHER or OWNER
    suboperator.logo.type String(4) 1 Image type like: gif, jpeg, png, svg
    suboperator.logo.width int(5) ? Width of the full scale image
    suboperator.logo.height int(5) ? Height of the full scale image
    owner BusinessDetails(JSON) ? Information of the owner if available.
    owner.name String(100) 1 Name of the owner.
    owner.website URL ? Link to the owner’s website.
    owner.logo Image(JSON) ? Image link to the owner’s logo.
    owner.logo.url URL 1 URL from where the image data can be fetched through a web browser.
    owner.logo.thumbnail URL ? URL from where a thumbnail of the image can be fetched through a webbrowser.
    owner.logo.category ImageCategory(Enum) 1 Describes what the image is used for. Could be CHARGER, ENTRANCE, LOCATION, NETWORK, OPERATOR, OTHER or OWNER
    owner.logo.type String(4) 1 Image type like: gif, jpeg, png, svg
    owner.logo.width int(5) ? Width of the full scale image
    owner.logo.height int(5) ? Height of the full scale image
    facilities Facility(Array of string) * Optional list of facilities this charge location directly belongs to. Could be HOTEL, RESTAURANT, CAFE, MALL, SUPERMARKET SPORT, RECREATION_AREA, NATURE, MUSEUM, BIKE_SHARING, BUS_STOP, TAXI_STAND, TRAM_STOP, METRO_STATION, TRAIN_STATION, AIRPORT, PARKING_LOT, CARPOOL_PARKING, FUEL_STATION or WIFI
    time_zone string(255) ? One of IANA tzdata’s TZ-values representing the time zone of the location. Examples: “Europe/Oslo”, “Europe/Zurich”. (http://www.iana.org/time-zones)
    opening_times Hours(JSON) ? The times when the EVSEs at the location can be accessed for charging.
    opening_times.twentyfourseven boolean 1 True to represent 24 hours a day and 7 days a week, except the given exceptions.
    opening_times.regular_hours RegularHours(Array) * Regular hours, weekday-based. Only to be used if twentyfourseven=false, then this field needs to contain at least one RegularHours object.
    opening_times.regular_hours.weekday int(1) 1 Number of day in the week, from Monday (1) till Sunday (7)
    opening_times.regular_hours.period_begin string(5) 1 Begin of the regular period given in hours and minutes. Must be in 24h format with leading zeros. Example: “18:15”. Hour/Minute separator: “:” Regex: [0-2][0-9]:[0-5][0-9]
    opening_times.regular_hours.period_end string(5) 1 End of the regular period, syntax as for period_begin. Must be later than period_begin.
    opening_times.exceptional_openings ExceptionalPeriod(Array) * Exceptions for specified calendar dates, time-range based. Periods the station is operating/accessible. Additional to regular hours. May overlap regular rules.
    opening_times.exceptional_openings.period_begin DateTime 1 Begin of the exception.
    opening_times.exceptional_openings.period_end DateTime 1 End of the exception.
    opening_times.exceptional_closings ExceptionalPeriod(Array) * Exceptions for specified calendar dates, time-range based. Periods the station is not operating/accessible. Overwriting regularHours and exceptionalOpenings. Should not overlap exceptionalOpenings.
    opening_times.exceptional_closings.period_begin DateTime 1 Begin of the exception.
    opening_times.exceptional_closings.period_end DateTime 1 End of the exception.
    charging_when_closed boolean ? Indicates if the EVSEs are still charging outside the opening hours of the location. E.g. when the parking garage closes its barriers over night, is it allowed to charge till the next morning? Default: true
    images Image(Array) * Links to images related to the location such as photos or logos.
    images.url URL 1 URL from where the image data can be fetched through a web browser.
    images.thumbnail URL ? URL from where a thumbnail of the image can be fetched through a webbrowser.
    images.category ImageCategory(Enum) 1 Describes what the image is used for. Could be CHARGER, ENTRANCE, LOCATION, NETWORK, OPERATOR, OTHER or OWNER
    images.type String(4) 1 Image type like: gif, jpeg, png, svg
    images.width int(5) ? Width of the full scale image
    images.height int(5) ? Height of the full scale image
    energy_mix EnergyMix(JSON) ? Details on the energy supplied at this location.
    energy_mix.is_green_energy boolean 1 True if 100% from regenerative sources. (CO2 and nuclear waste is zero)
    energy_mix.energy_sources EnergySource(Array) * Key-value pairs (enum + percentage) of energy sources of this location’s tariff.
    energy_mix.energy_sources.source EnergySourceCategory(Enum) 1 The type of energy source. Could be NUCLEAR, GENERAL_FOSSIL, COAL, GAS, GENERAL_GREEN, SOLAR, WIND or WATER
    energy_mix.energy_sources.percentage number 1 Percentage of this source (0-100) in the mix.
    energy_mix.environ_impact EnvironmentalImpact(Array) * Key-value pairs (enum + percentage) of nuclear waste and CO2 exhaust of this location’s tariff.
    energy_mix.environ_impact.category EnvironmentalImpactCategory(Enum) 1 The type of energy source. Could be NUCLEAR_WASTE or CARBON_DIOXIDE
    energy_mix.environ_impact.amount number 1 Percentage of this source (0-100) in the mix.
    energy_mix.supplier_name string(64) ? Name of the energy supplier, delivering the energy for this location or tariff.
    energy_mix.energy_product_name string(64) ? Name of the energy supplier's product/tariff plan used at this location.
    last_updated DateTime 1 Timestamp when this Location or one of its EVSEs or Connectors were last updated (or created).

    Sample Response

    [
      {
        "id": "LOC1",
        "type": "ON_STREET",
        "name": "Gent Zuid",
        "address": "F.Rooseveltlaan 3A",
        "city": "Gent",
        "postal_code": "9000",
        "country": "BEL",
        "coordinates": {
          "latitude": "51.04759",
          "longitude": "3.72994"
        },
        "evses": [
          {
            "uid": "3256",
            "id": "BE-BEC-E041503001",
            "status": "AVAILABLE",
            "status_schedule": [],
            "capabilities": ["RESERVABLE"],
            "connectors": [
              {
                "id": "1",
                "standard": "IEC_62196_T2",
                "format": "CABLE",
                "power_type": "AC_3_PHASE",
                "voltage": 220,
                "amperage": 16,
                "tariff_id": "11",
                "last_updated": "2015-03-16T10:10:02Z"
              },
              {
                "id": "2",
                "standard": "IEC_62196_T2",
                "format": "SOCKET",
                "power_type": "AC_3_PHASE",
                "voltage": 220,
                "amperage": 16,
                "tariff_id": "11",
                "last_updated": "2015-03-18T08:12:01Z"
              }
            ],
            "physical_reference": "1",
            "floor_level": "-1",
            "last_updated": "2015-06-28T08:12:01Z"
          },
          {
            "uid": "3257",
            "id": "BE-BEC-E041503002",
            "status": "RESERVED",
            "capabilities": ["RESERVABLE"],
            "connectors": [
              {
                "id": "1",
                "status": "RESERVED",
                "standard": "IEC_62196_T2",
                "format": "SOCKET",
                "power_type": "AC_3_PHASE",
                "voltage": 220,
                "amperage": 16,
                "tariff_id": "12"
              }
            ],
            "physical_reference": "2",
            "floor_level": "-2",
            "last_updated": "2015-06-29T20:39:09Z"
          }
        ],
        "operator": {
          "name": "BeCharged"
        },
        "last_updated": "2015-06-29T20:39:09Z"
      }
    ]

    Exception Handling

    The format of errors is always the same and specified in the Fundamentals section.


    Get a particular Location


    Introduction

    This API, will return a private charging location.

    The complete list of query parameters and its details are provided in the OAS specification which can be used to filter down the search result based on the user journey.

    Headers parameters

    HEADER PARAMETER DATA TYPE LIMITS (MIN/MAX) NULLABLE DESCRIPTION
    Authorization String N/A No This is a Bearer token. It should be the token you got when you requested an Access Token before.

    Example: Bearer xxxxxxxxxx

    Request query parameters

    REQUEST PATH PARAMETER DATA TYPE REQUIRED VALUE
    _locationid CiString(36) Yes Location.id of the Location object to retrieve.

    Sample Request

    curl --location '{{url}}/v1/locations/LOC1' \
    --header 'Authorization: Bearer ***' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json'

    Response

    On success the response will have a 200 OK status and the data property from body of the response will contain a JSON object with:

    KEY VALUE TYPE CARDINALITY DESCRIPTION
    country_code CiString(2) 1 ISO 3166-1 alpha-3 code for the country of this location.
    party_id CiString(3) 1 ID of the CPO that 'owns' this Location (following the ISO-15118 standard).
    id CiString(36) 1 Uniquely identifies the location within the CPOs platform (and suboperator platforms). This field can never be changed, modified or renamed.
    publish boolean 1 Defines if a Location may be published on an website or app etc. When this is set to false, only tokens identified in the field: publish_allowed_to are allowed to be shown this Location. When the same location has EVSEs that may be published and may not be published, two 'Locations' should be created.
    publish_allowed_to PublishTokenType(JSON) * This field may only be used when the publish field is set to false. Only owners of Tokens that match all the set fields of one PublishToken in the list are allowed to be shown this location.
    publish_allowed_to.uid CiString(36) ? Unique ID by which this Token can be identified.
    publish_allowed_to.type TokenType(Enum) ? Type of the token. Could be AD_HOC_USER, APP_USER, OTHER or RFID.
    publish_allowed_to.visual_number string(64) ? Visual readable number/identification as printed on the Token (RFID card).
    publish_allowed_to.issuer string(64) ? Issuing company, most of the times the name of the company printed on the token (RFID card), not necessarily the eMSP.
    publish_allowed_to.group_id CiString(36) ? This ID groups a couple of tokens. This can be used to make two or more tokens work as one.
    name string(255) ? Display name of the location.
    address string(45) 1 Street/block name and house number if available.
    city string(45) 1 City or town.
    postal_code string(10) ? Postal code of the location.
    state string(20) ? State or province of the location, only to be used when relevant.
    country string(3) 1 ISO 3166-1 alpha-3 code for the country of this location.
    coordinates GeoLocation 1 Coordinates of the location.
    coordinates.latitude String(10) 1 Latitude of the point in decimal degree. Example: 50.770774. Decimal separator: “.” Regex: -?[0-9]{1,2}.[0-9]{6}
    coordinates.longitude String(11) 1 Longitude of the point in decimal degree. Example: -126.104965. Decimal separator: “.” Regex: -?[0-9]{1,3}.[0-9]{6}
    related_locations AdditionalGeoLocation(Array) * Geographical location of related points relevant to the user.
    related_locations.latitude String(10) 1 Latitude of the point in decimal degree. Example: 50.770774. Decimal separator: “.” Regex: -?[0-9]{1,2}.[0-9]{6}
    related_locations.longitude String(11) 1 Longitude of the point in decimal degree. Example: -126.104965. Decimal separator: “.” Regex: -?[0-9]{1,3}.[0-9]{6}
    related_locations.name DisplayText(JSON) ? Name of the point in local language or as written at the location. For example the street name of a parking lot entrance or it’s number.
    related_locations.name.language string(2) 1 Language Code ISO 639-1
    related_locations.name.text string(512) 1 Text to be displayed to a end user. No markup, html etc. allowed.
    parking_type ParkingType(Enum) ? The general type of parking at the charge point location. Could be ALONG_MOTORWAY, PARKING_GARAGE, PARKING_LOT, ON_DRIVEWAY, ON_STREET or UNDERGROUND_GARAGE.
    evses EVSE(Array) * List of EVSEs that belong to this Location.
    evses.uid CiString(36) 1 Uniquely identifies the EVSE within the CPOs platform (and suboperator platforms). For example a database unique ID or the “EVSE ID”. This field can never be changed, modified or renamed. This is the ‘technical’ identification of the EVSE, not to be used as ‘human readable’ identification, use the field: evse_id for that.
    evses.evse_id CiString(48) ? Compliant with the following specification for EVSE ID from “eMI3 standard version V1.0” (http://emi3group.com/documents-links/) “Part 2: business objects.” Optional because: if an EVSE ID is to be re-used the EVSE ID can be removed from an EVSE that is removed (status: REMOVED)
    evses.status Status(Enum) 1 Indicates the current status of the EVSE. Could be AVAILABLE, BLOCKED, CHARGING, INOPERATIVE, OUTOFORDER, PLANNED, REMOVED, RESERVED or UNKNOWN.
    evses.status_schedule StatusSchedule(Array) * Indicates a planned status in the future of the EVSE.
    evses.status_schedule.period_begin DateTime 1 Begin of the scheduled period.
    evses.status_schedule.period_end DateTime ? End of the scheduled period, if known.
    evses.status_schedule.status Status(Enum) 1 Status value during the scheduled period. Could be AVAILABLE, BLOCKED, CHARGING, INOPERATIVE, OUTOFORDER, PLANNED, REMOVED, RESERVED or UNKNOWN.
    evses.capabilities Capability(Array) * List of functionalities that the EVSE is capable of. A list of CHARGING_PROFILE_CAPABLE, CHARGING_PREFERENCES_CAPABLE, CHIP_CARD_SUPPORT, CONTACTLESS_CARD_SUPPORT, CREDIT_CARD_PAYABLE, DEBIT_CARD_PAYABLE, PED_TERMINAL, REMOTE_START_STOP_CAPABLE, RESERVABLE, RFID_READER, START_SESSION_CONNECTOR_REQUIRED, TOKEN_GROUP_CAPABLE and UNLOCK_CAPABLE
    evses.connectors Connector(Array) + List of available connectors on the EVSE.
    evses.connectors.id CiString(36) 1 Identifier of the connector within the EVSE. Two connectors may have the same id as long as they do not belong to the same EVSE object.
    evses.connectors.standard ConnectorType(Enum) 1 The standard of the installed connector. Could be CHADEMO, CHAOJI, DOMESTICA, DOMESTIC_B, DOMESTIC_C, DOMESTIC_D, DOMESTIC_E, DOMESTIC_F, DOMESTIC_G, DOMESTIC_H, DOMESTIC_I, DOMESTIC_J, DOMESTIC_K, DOMESTIC_L, DOMESTIC_M, DOMESTIC_N, DOMESTIC_O, GBT_AC, GBT_DC, IEC_60309_2_single_16, IEC_60309_2_three_16, IEC_60309_2_three_32, IEC_60309_2_three_64, IEC_62196_T1, IEC_62196_T1_COMBO, IEC_62196_T2, IEC_62196_T2_COMBO, IEC_62196_T3A, IEC_62196_T3C, NEMA_5_20, NEMA_6_30, NEMA_6_50, NEMA_10_30, NEMA_10_50, NEMA_14_30, NEMA_14_50, PANTOGRAPH_BOTTOM UP, PANTOGRAPH_TOP_DOW N, TESLA_R or TESLA_S
    evses.connectors.format ConnectorFormat 1 The format (socket/cable) of the installed connector. Could be SOCKET or CABLE.
    evses.connectors.power_type PowerType(Enum) 1 The type of power supplied by the connector. Could be AC_1_PHASE, AC_2_PHASE, AC_2_PHASE_SPLIT, AC_3_PHASE or DC
    evses.connectors.max_voltage int 1 Maximum voltage of the connector (line to neutral for AC_3_PHASE), in volt [V]. For example: DC Chargers might vary the voltage during charging when battery almost full.
    evses.connectors.max_amperage int 1 Maximum amperage of the connector, in ampere [A].
    evses.connectors.max_electric_power int ? Maximum electric power that can be delivered by this connector, in Watts (W). When the maximum electric power is lower than the calculated value from voltage and amperage, this value should be set. For example: A DC Charge Point which can delivers up to 920V and up to 400A can be limited to a maximum of 150kW (max_electric_power = 150000). Depending on the car, it may supply max voltage or current, but not both at the same time. For AC Charge Points, the amount of phases used can also have influence on the maximum power.
    evses.connectors.tariff_ids [CString(36)] * Identifiers of the currently valid charging tariffs. Multiple tariffs are possible, but only one of each Tariff.type can be active at the same time. Tariffs with the same type are only allowed if they are not active at the same time: start_date_time and end_date_time period not overlapping. When preference-based smart charging is supported, one tariff for every possible ProfileType should be provided. These tell the user about the options they have at this Connector, and what the tariff is for every option. For a "free of charge" tariff, this field should be set and point to a defined "free of charge" tariff.
    evses.connectors.terms_and_conditions URL ? URL to the operator’s terms and conditions.
    evses.connectors.last_updated DateTime 1 Timestamp when this Connectors was last updated (or created).
    evses.floor_level string(4) ? Level on which the charging station is located (in garage buildings) in the locally displayed numbering scheme.
    evses.coordinates GeoLocation ? Coordinates of the EVSE.
    evses.coordinates.latitude String(10) 1 Latitude of the point in decimal degree. Example: 50.770774. Decimal separator: “.” Regex: -?[0-9]{1,2}.[0-9]{6}
    evses.coordinates.longitude String(11) 1 Longitude of the point in decimal degree. Example: -126.104965. Decimal separator: “.” Regex: -?[0-9]{1,3}.[0-9]{6}
    evses.physical_reference string(16) ? A number/string printed on the outside of the EVSE for visual identification.
    evses.directions DisplayText(Array) * Multi-language human-readable directions when more detailed information on how to reach the EVSE from the Location is required.
    evses.directions.language string(2) 1 Language Code ISO 639-1
    evses.directions.text string(512) 1 Text to be displayed to a end user. No markup, html etc. allowed.
    evses.parking_restrictions ParkingRestriction(Array) * The restrictions that apply to the parking spot. Could be EV_ONLY, PLUGGED, DISABLED, CUSTOMERS and MOTORCYCLES.
    evses.images Image(Array) * Links to images related to the EVSE such as photos or logos.
    evses.images.url URL 1 URL from where the image data can be fetched through a web browser.
    evses.images.thumbnail URL ? URL from where a thumbnail of the image can be fetched through a webbrowser.
    evses.images.category ImageCategory(Enum) 1 Describes what the image is used for. Could be CHARGER, ENTRANCE, LOCATION, NETWORK, OPERATOR, OTHER or OWNER
    evses.images.type String(4) 1 Image type like: gif, jpeg, png, svg
    evses.images.width int(5) ? Width of the full scale image
    evses.images.height int(5) ? Height of the full scale image
    evses.last_updated DateTime 1 Timestamp when this EVSE or one of its Connectors was last updated (or created).
    directions DisplayText(Array) * Human-readable directions on how to reach the location.
    directions.language string(2) 1 Language Code ISO 639-1
    directions.text string(512) 1 Text to be displayed to a end user. No markup, html etc. allowed.
    operator BusinessDetails(JSON) ? Information of the operator. When not specified, the information retrieved from the api_info endpoint should be used instead.
    operator.name String(100) 1 Name of the operator.
    operator.website URL ? Link to the operator’s website.
    operator.logo Image(JSON) ? Image link to the operator’s logo.
    operator.logo.url URL 1 URL from where the image data can be fetched through a web browser.
    operator.logo.thumbnail URL ? URL from where a thumbnail of the image can be fetched through a webbrowser.
    operator.logo.category ImageCategory(Enum) 1 Describes what the image is used for. Could be CHARGER, ENTRANCE, LOCATION, NETWORK, OPERATOR, OTHER or OWNER
    operator.logo.type CiString(4) 1 Image type like: gif, jpeg, png, svg
    operator.logo.width int(5) ? Width of the full scale image
    operator.logo.height int(5) ? Height of the full scale image
    suboperator BusinessDetails(JSON) ? Information of the suboperator if available.
    suboperator.name String(100) 1 Name of the suboperator.
    suboperator.website URL ? Link to the suboperator’s website.
    suboperator.logo Image(JSON) ? Image link to the suboperator’s logo.
    suboperator.logo.url URL 1 URL from where the image data can be fetched through a web browser.
    suboperator.logo.thumbnail URL ? URL from where a thumbnail of the image can be fetched through a webbrowser.
    suboperator.logo.category ImageCategory(Enum) 1 Describes what the image is used for. Could be CHARGER, ENTRANCE, LOCATION, NETWORK, OPERATOR, OTHER or OWNER
    suboperator.logo.type String(4) 1 Image type like: gif, jpeg, png, svg
    suboperator.logo.width int(5) ? Width of the full scale image
    suboperator.logo.height int(5) ? Height of the full scale image
    owner BusinessDetails(JSON) ? Information of the owner if available.
    owner.name String(100) 1 Name of the owner.
    owner.website URL ? Link to the owner’s website.
    owner.logo Image(JSON) ? Image link to the owner’s logo.
    owner.logo.url URL 1 URL from where the image data can be fetched through a web browser.
    owner.logo.thumbnail URL ? URL from where a thumbnail of the image can be fetched through a webbrowser.
    owner.logo.category ImageCategory(Enum) 1 Describes what the image is used for. Could be CHARGER, ENTRANCE, LOCATION, NETWORK, OPERATOR, OTHER or OWNER
    owner.logo.type String(4) 1 Image type like: gif, jpeg, png, svg
    owner.logo.width int(5) ? Width of the full scale image
    owner.logo.height int(5) ? Height of the full scale image
    facilities Facility(Array of string) * Optional list of facilities this charge location directly belongs to. Could be HOTEL, RESTAURANT, CAFE, MALL, SUPERMARKET SPORT, RECREATION_AREA, NATURE, MUSEUM, BIKE_SHARING, BUS_STOP, TAXI_STAND, TRAM_STOP, METRO_STATION, TRAIN_STATION, AIRPORT, PARKING_LOT, CARPOOL_PARKING, FUEL_STATION or WIFI
    time_zone string(255) ? One of IANA tzdata’s TZ-values representing the time zone of the location. Examples: “Europe/Oslo”, “Europe/Zurich”. (http://www.iana.org/time-zones)
    opening_times Hours(JSON) ? The times when the EVSEs at the location can be accessed for charging.
    opening_times.twentyfourseven boolean 1 True to represent 24 hours a day and 7 days a week, except the given exceptions.
    opening_times.regular_hours RegularHours(Array) * Regular hours, weekday-based. Only to be used if twentyfourseven=false, then this field needs to contain at least one RegularHours object.
    opening_times.regular_hours.weekday int(1) 1 Number of day in the week, from Monday (1) till Sunday (7)
    opening_times.regular_hours.period_begin string(5) 1 Begin of the regular period given in hours and minutes. Must be in 24h format with leading zeros. Example: “18:15”. Hour/Minute separator: “:” Regex: [0-2][0-9]:[0-5][0-9]
    opening_times.regular_hours.period_end string(5) 1 End of the regular period, syntax as for period_begin. Must be later than period_begin.
    opening_times.exceptional_openings ExceptionalPeriod(Array) * Exceptions for specified calendar dates, time-range based. Periods the station is operating/accessible. Additional to regular hours. May overlap regular rules.
    opening_times.exceptional_openings.period_begin DateTime 1 Begin of the exception.
    opening_times.exceptional_openings.period_end DateTime 1 End of the exception.
    opening_times.exceptional_closings ExceptionalPeriod(Array) * Exceptions for specified calendar dates, time-range based. Periods the station is not operating/accessible. Overwriting regularHours and exceptionalOpenings. Should not overlap exceptionalOpenings.
    opening_times.exceptional_closings.period_begin DateTime 1 Begin of the exception.
    opening_times.exceptional_closings.period_end DateTime 1 End of the exception.
    charging_when_closed boolean ? Indicates if the EVSEs are still charging outside the opening hours of the location. E.g. when the parking garage closes its barriers over night, is it allowed to charge till the next morning? Default: true
    images Image(Array) * Links to images related to the location such as photos or logos.
    images.url URL 1 URL from where the image data can be fetched through a web browser.
    images.thumbnail URL ? URL from where a thumbnail of the image can be fetched through a webbrowser.
    images.category ImageCategory(Enum) 1 Describes what the image is used for. Could be CHARGER, ENTRANCE, LOCATION, NETWORK, OPERATOR, OTHER or OWNER
    images.type String(4) 1 Image type like: gif, jpeg, png, svg
    images.width int(5) ? Width of the full scale image
    images.height int(5) ? Height of the full scale image
    energy_mix EnergyMix(JSON) ? Details on the energy supplied at this location.
    energy_mix.is_green_energy boolean 1 True if 100% from regenerative sources. (CO2 and nuclear waste is zero)
    energy_mix.energy_sources EnergySource(Array) * Key-value pairs (enum + percentage) of energy sources of this location’s tariff.
    energy_mix.energy_sources.source EnergySourceCategory(Enum) 1 The type of energy source. Could be NUCLEAR, GENERAL_FOSSIL, COAL, GAS, GENERAL_GREEN, SOLAR, WIND or WATER
    energy_mix.energy_sources.percentage number 1 Percentage of this source (0-100) in the mix.
    energy_mix.environ_impact EnvironmentalImpact(Array) * Key-value pairs (enum + percentage) of nuclear waste and CO2 exhaust of this location’s tariff.
    energy_mix.environ_impact.category EnvironmentalImpactCategory(Enum) 1 The type of energy source. Could be NUCLEAR_WASTE or CARBON_DIOXIDE
    energy_mix.environ_impact.amount number 1 Percentage of this source (0-100) in the mix.
    energy_mix.supplier_name string(64) ? Name of the energy supplier, delivering the energy for this location or tariff.
    energy_mix.energy_product_name string(64) ? Name of the energy supplier's product/tariff plan used at this location.
    last_updated DateTime 1 Timestamp when this Location or one of its EVSEs or Connectors were last updated (or created).

    Sample Response

    {
      "id": "LOC1",
      "type": "ON_STREET",
      "name": "Gent Zuid",
      "address": "F.Rooseveltlaan 3A",
      "city": "Gent",
      "postal_code": "9000",
      "country": "BEL",
      "coordinates": {
        "latitude": "51.04759",
        "longitude": "3.72994"
      },
      "evses": [
        {
          "uid": "3256",
          "id": "BE-BEC-E041503001",
          "status": "AVAILABLE",
          "status_schedule": [],
          "capabilities": ["RESERVABLE"],
          "connectors": [
            {
              "id": "1",
              "standard": "IEC_62196_T2",
              "format": "CABLE",
              "power_type": "AC_3_PHASE",
              "voltage": 220,
              "amperage": 16,
              "tariff_id": "11",
              "last_updated": "2015-03-16T10:10:02Z"
            },
            {
              "id": "2",
              "standard": "IEC_62196_T2",
              "format": "SOCKET",
              "power_type": "AC_3_PHASE",
              "voltage": 220,
              "amperage": 16,
              "tariff_id": "11",
              "last_updated": "2015-03-18T08:12:01Z"
            }
          ],
          "physical_reference": "1",
          "floor_level": "-1",
          "last_updated": "2015-06-28T08:12:01Z"
        },
        {
          "uid": "3257",
          "id": "BE-BEC-E041503002",
          "status": "RESERVED",
          "capabilities": ["RESERVABLE"],
          "connectors": [
            {
              "id": "1",
              "status": "RESERVED",
              "standard": "IEC_62196_T2",
              "format": "SOCKET",
              "power_type": "AC_3_PHASE",
              "voltage": 220,
              "amperage": 16,
              "tariff_id": "12"
            }
          ],
          "physical_reference": "2",
          "floor_level": "-2",
          "last_updated": "2015-06-29T20:39:09Z"
        }
      ],
      "operator": {
        "name": "BeCharged"
      },
      "last_updated": "2015-06-29T20:39:09Z"
    }

    Exception Handling

    The format of errors is always the same and specified in the Fundamentals section.


    Get a particular EVSE


    Introduction

    This API, will return a EVSE from private charging location.

    The complete list of query parameters and its details are provided in the OAS specification which can be used to filter down the search result based on the user journey.

    Headers parameters

    HEADER PARAMETER DATA TYPE LIMITS (MIN/MAX) NULLABLE DESCRIPTION
    Authorization String N/A No This is a Bearer token. It should be the token you got when you requested an Access Token before.

    Example: Bearer xxxxxxxxxx

    Request query parameters

    REQUEST PATH PARAMETER DATA TYPE REQUIRED VALUE
    _locationid CiString(36) Yes Location.id of the Location object to retrieve.
    _evseuid CiString(36) Yes Evse.uid, required when requesting an EVSE or Connector object.

    Sample Request

    curl --location '{{url}}/v1/locations/LOC1/3256' \
    --header 'Authorization: Bearer ***' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json'

    Response

    On success the response will have a 200 OK status and the data property from body of the response will contain a JSON object with:

    KEY VALUE TYPE CARDINALITY DESCRIPTION
    uid CiString(36) 1 Uniquely identifies the EVSE within the CPOs platform (and suboperator platforms). For example a database unique ID or the “EVSE ID”. This field can never be changed, modified or renamed. This is the ‘technical’ identification of the EVSE, not to be used as ‘human readable’ identification, use the field: evse_id for that.
    evse_id CiString(48) ? Compliant with the following specification for EVSE ID from “eMI3 standard version V1.0” (http://emi3group.com/documents-links/) “Part 2: business objects.” Optional because: if an EVSE ID is to be re-used the EVSE ID can be removed from an EVSE that is removed (status: REMOVED)
    status Status(Enum) 1 Indicates the current status of the EVSE. Could be AVAILABLE, BLOCKED, CHARGING, INOPERATIVE, OUTOFORDER, PLANNED, REMOVED, RESERVED or UNKNOWN.
    status_schedule StatusSchedule(Array) * Indicates a planned status in the future of the EVSE.
    status_schedule.period_begin DateTime 1 Begin of the scheduled period.
    status_schedule.period_end DateTime ? End of the scheduled period, if known.
    status_schedule.status Status(Enum) 1 Status value during the scheduled period. Could be AVAILABLE, BLOCKED, CHARGING, INOPERATIVE, OUTOFORDER, PLANNED, REMOVED, RESERVED or UNKNOWN.
    capabilities Capability(Array) * List of functionalities that the EVSE is capable of. A list of CHARGING_PROFILE_CAPABLE, CHARGING_PREFERENCES_CAPABLE, CHIP_CARD_SUPPORT, CONTACTLESS_CARD_SUPPORT, CREDIT_CARD_PAYABLE, DEBIT_CARD_PAYABLE, PED_TERMINAL, REMOTE_START_STOP_CAPABLE, RESERVABLE, RFID_READER, START_SESSION_CONNECTOR_REQUIRED, TOKEN_GROUP_CAPABLE and UNLOCK_CAPABLE
    connectors Connector(Array) + List of available connectors on the EVSE.
    connectors.id CiString(36) 1 Identifier of the connector within the EVSE. Two connectors may have the same id as long as they do not belong to the same EVSE object.
    connectors.standard ConnectorType(Enum) 1 The standard of the installed connector. Could be CHADEMO, CHAOJI, DOMESTICA, DOMESTIC_B, DOMESTIC_C, DOMESTIC_D, DOMESTIC_E, DOMESTIC_F, DOMESTIC_G, DOMESTIC_H, DOMESTIC_I, DOMESTIC_J, DOMESTIC_K, DOMESTIC_L, DOMESTIC_M, DOMESTIC_N, DOMESTIC_O, GBT_AC, GBT_DC, IEC_60309_2_single_16, IEC_60309_2_three_16, IEC_60309_2_three_32, IEC_60309_2_three_64, IEC_62196_T1, IEC_62196_T1_COMBO, IEC_62196_T2, IEC_62196_T2_COMBO, IEC_62196_T3A, IEC_62196_T3C, NEMA_5_20, NEMA_6_30, NEMA_6_50, NEMA_10_30, NEMA_10_50, NEMA_14_30, NEMA_14_50, PANTOGRAPH_BOTTOM UP, PANTOGRAPH_TOP_DOW N, TESLA_R or TESLA_S
    evses.connectors.format ConnectorFormat 1 The format (socket/cable) of the installed connector. Could be SOCKET or CABLE.
    connectors.power_type PowerType(Enum) 1 The type of power supplied by the connector. Could be AC_1_PHASE, AC_2_PHASE, AC_2_PHASE_SPLIT, AC_3_PHASE or DC
    connectors.max_voltage int 1 Maximum voltage of the connector (line to neutral for AC_3_PHASE), in volt [V]. For example: DC Chargers might vary the voltage during charging when battery almost full.
    connectors.max_amperage int 1 Maximum amperage of the connector, in ampere [A].
    connectors.max_electric_power int ? Maximum electric power that can be delivered by this connector, in Watts (W). When the maximum electric power is lower than the calculated value from voltage and amperage, this value should be set. For example: A DC Charge Point which can delivers up to 920V and up to 400A can be limited to a maximum of 150kW (max_electric_power = 150000). Depending on the car, it may supply max voltage or current, but not both at the same time. For AC Charge Points, the amount of phases used can also have influence on the maximum power.
    connectors.tariff_ids [CString(36)] * Identifiers of the currently valid charging tariffs. Multiple tariffs are possible, but only one of each Tariff.type can be active at the same time. Tariffs with the same type are only allowed if they are not active at the same time: start_date_time and end_date_time period not overlapping. When preference-based smart charging is supported, one tariff for every possible ProfileType should be provided. These tell the user about the options they have at this Connector, and what the tariff is for every option. For a "free of charge" tariff, this field should be set and point to a defined "free of charge" tariff.
    connectors.terms_and_conditions URL ? URL to the operator’s terms and conditions.
    connectors.last_updated DateTime 1 Timestamp when this Connectors was last updated (or created).
    floor_level string(4) ? Level on which the charging station is located (in garage buildings) in the locally displayed numbering scheme.
    coordinates GeoLocation ? Coordinates of the EVSE.
    coordinates.latitude String(10) 1 Latitude of the point in decimal degree. Example: 50.770774. Decimal separator: “.” Regex: -?[0-9]{1,2}.[0-9]{6}
    coordinates.longitude String(11) 1 Longitude of the point in decimal degree. Example: -126.104965. Decimal separator: “.” Regex: -?[0-9]{1,3}.[0-9]{6}
    physical_reference string(16) ? A number/string printed on the outside of the EVSE for visual identification.
    directions DisplayText(Array) * Multi-language human-readable directions when more detailed information on how to reach the EVSE from the Location is required.
    directions.language string(2) 1 Language Code ISO 639-1
    directions.text string(512) 1 Text to be displayed to a end user. No markup, html etc. allowed.
    parking_restrictions ParkingRestriction(Array) * The restrictions that apply to the parking spot. Could be EV_ONLY, PLUGGED, DISABLED, CUSTOMERS and MOTORCYCLES.
    images Image(Array) * Links to images related to the EVSE such as photos or logos.
    images.url URL 1 URL from where the image data can be fetched through a web browser.
    images.thumbnail URL ? URL from where a thumbnail of the image can be fetched through a webbrowser.
    images.category ImageCategory(Enum) 1 Describes what the image is used for. Could be CHARGER, ENTRANCE, LOCATION, NETWORK, OPERATOR, OTHER or OWNER
    images.type String(4) 1 Image type like: gif, jpeg, png, svg
    images.width int(5) ? Width of the full scale image
    images.height int(5) ? Height of the full scale image
    last_updated DateTime 1 Timestamp when this EVSE or one of its Connectors was last updated (or created).

    Sample Response

    {
      "uid": "3256",
      "id": "BE-BEC-E041503001",
      "status": "AVAILABLE",
      "status_schedule": [],
      "capabilities": ["RESERVABLE"],
      "connectors": [
        {
          "id": "1",
          "standard": "IEC_62196_T2",
          "format": "CABLE",
          "power_type": "AC_3_PHASE",
          "voltage": 220,
          "amperage": 16,
          "tariff_id": "11",
          "last_updated": "2015-03-16T10:10:02Z"
        },
        {
          "id": "2",
          "standard": "IEC_62196_T2",
          "format": "SOCKET",
          "power_type": "AC_3_PHASE",
          "voltage": 220,
          "amperage": 16,
          "tariff_id": "11",
          "last_updated": "2015-03-18T08:12:01Z"
        }
      ],
      "physical_reference": "1",
      "floor_level": "-1",
      "last_updated": "2015-06-28T08:12:01Z"
    }

    Exception Handling

    The format of errors is always the same and specified in the Fundamentals section.


    Get a particular Connector


    Introduction

    This API, will return a EVSE's Connector from private charging location.

    The complete list of query parameters and its details are provided in the OAS specification which can be used to filter down the search result based on the user journey.

    Headers parameters

    HEADER PARAMETER DATA TYPE LIMITS (MIN/MAX) NULLABLE DESCRIPTION
    Authorization String N/A No This is a Bearer token. It should be the token you got when you requested an Access Token before.

    Example: Bearer xxxxxxxxxx

    Request query parameters

    REQUEST PATH PARAMETER DATA TYPE REQUIRED VALUE
    _locationid CiString(36) Yes Location.id of the Location object to retrieve.
    _evseuid CiString(36) Yes Evse.uid, required when requesting an EVSE or Connector object.
    _connectorid CiString(36) Yes Connector.id, required when requesting a Connector object.

    Sample Request

    curl --location '{{url}}/v1/locations/LOC1/3256/1' \
    --header 'Authorization: Bearer ***' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json'

    Response

    On success the response will have a 200 OK status and the data property from body of the response will contain a JSON object with:

    KEY VALUE TYPE CARDINALITY DESCRIPTION
    id CiString(36) 1 Identifier of the connector within the EVSE. Two connectors may have the same id as long as they do not belong to the same EVSE object.
    standard ConnectorType(Enum) 1 The standard of the installed connector. Could be CHADEMO, CHAOJI, DOMESTICA, DOMESTIC_B, DOMESTIC_C, DOMESTIC_D, DOMESTIC_E, DOMESTIC_F, DOMESTIC_G, DOMESTIC_H, DOMESTIC_I, DOMESTIC_J, DOMESTIC_K, DOMESTIC_L, DOMESTIC_M, DOMESTIC_N, DOMESTIC_O, GBT_AC, GBT_DC, IEC_60309_2_single_16, IEC_60309_2_three_16, IEC_60309_2_three_32, IEC_60309_2_three_64, IEC_62196_T1, IEC_62196_T1_COMBO, IEC_62196_T2, IEC_62196_T2_COMBO, IEC_62196_T3A, IEC_62196_T3C, NEMA_5_20, NEMA_6_30, NEMA_6_50, NEMA_10_30, NEMA_10_50, NEMA_14_30, NEMA_14_50, PANTOGRAPH_BOTTOM UP, PANTOGRAPH_TOP_DOW N, TESLA_R or TESLA_S
    evses.connectors.format ConnectorFormat 1 The format (socket/cable) of the installed connector. Could be SOCKET or CABLE.
    power_type PowerType(Enum) 1 The type of power supplied by the connector. Could be AC_1_PHASE, AC_2_PHASE, AC_2_PHASE_SPLIT, AC_3_PHASE or DC
    max_voltage int 1 Maximum voltage of the connector (line to neutral for AC_3_PHASE), in volt [V]. For example: DC Chargers might vary the voltage during charging when battery almost full.
    max_amperage int 1 Maximum amperage of the connector, in ampere [A].
    max_electric_power int ? Maximum electric power that can be delivered by this connector, in Watts (W). When the maximum electric power is lower than the calculated value from voltage and amperage, this value should be set. For example: A DC Charge Point which can delivers up to 920V and up to 400A can be limited to a maximum of 150kW (max_electric_power = 150000). Depending on the car, it may supply max voltage or current, but not both at the same time. For AC Charge Points, the amount of phases used can also have influence on the maximum power.
    tariff_ids [CString(36)] * Identifiers of the currently valid charging tariffs. Multiple tariffs are possible, but only one of each Tariff.type can be active at the same time. Tariffs with the same type are only allowed if they are not active at the same time: start_date_time and end_date_time period not overlapping. When preference-based smart charging is supported, one tariff for every possible ProfileType should be provided. These tell the user about the options they have at this Connector, and what the tariff is for every option. For a "free of charge" tariff, this field should be set and point to a defined "free of charge" tariff.
    terms_and_conditions URL ? URL to the operator’s terms and conditions.
    last_updated DateTime 1 Timestamp when this Connectors was last updated (or created).

    Sample Response

    {
      "id": "1",
      "standard": "IEC_62196_T2",
      "format": "CABLE",
      "power_type": "AC_3_PHASE",
      "voltage": 220,
      "amperage": 16,
      "tariff_id": "11",
      "last_updated": "2015-03-16T10:10:02Z"
    }

    Exception Handling

    The format of errors is always the same and specified in the Fundamentals section.


    Get all Tariffs


    This API, will return the private charging tariffs.

    The API also provide further search options to filter the result set.

    • Based on the last updated date between two given dates.

    The complete list of query parameters and its details are provided in the OAS specification which can be used to filter down the search result based on the user journey.

    Headers parameters

    HEADER PARAMETER DATA TYPE LIMITS (MIN/MAX) NULLABLE DESCRIPTION
    Authorization String N/A No This is a Bearer token. It should be the token you got when you requested an Access Token before.

    Example: Bearer xxxxxxxxxx

    Request query parameters

    REQUEST QUERY PARAMETER DATA TYPE REQUIRED VALUE
    _datefrom DateTime No Only return Tariffs that have last_updated after this Date/Time.
    _dateto DateTime No Only return Tariffs that have last_updated before this Date/Time.
    offset int No The offset of the first object returned. Default is 0.
    limit int No Maximum number of objects to GET.

    Sample Request

    curl --location '{{url}}/v1/tariffs/?date_from=xxx&date_to=yyy' \
    --header 'Authorization: Bearer ***' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json'

    Response

    On success the response will have a 200 OK status and the data property from body of the response will contain a array of JSON object with:

    KEY VALUE TYPE CARDINALITY DESCRIPTION
    country_code CiString(2) 1 ISO-3166 alpha-2 country code of the CPO that owns this Tariff.
    party_id CiString(3) 1 ID of the CPO that 'owns' this Tariff (following the ISO-15118 standard).
    id CiString(36) 1 Uniquely identifies the tariff within the CPO’s platform (and suboperator platforms).
    currency string(3) 1 ISO-4217 code of the currency of this tariff.
    type TariffType(Enum) ? Defines the type of the tariff. This allows for distinction in case of given Charging Preferences. When omitted, this tariff is valid for all sessions. Could be AD_HOC_PAYMENT, PROFILE_CHEAP, PROFILE_FAST, PROFILE_GREEN or REGULAR.
    tariff_alt_text DisplayText(Array) * List of multi-language alternative tariff info texts.
    tariff_alt_text.language string(2) 1 Language Code ISO 639-1
    tariff_alt_text.text string(512) 1 Text to be displayed to a end user. No markup, html etc. allowed.
    tariff_alt_url URL ? URL to a web page that contains an explanation of the tariff information in human readable form.
    min_price Price(JSON) ? When this field is set, a Charging Session with this tariff will at least cost this amount. This is different from a FLAT fee (Start Tariff, Transaction Fee), as a FLAT fee is a fixed amount that has to be paid for any Charging Session. A minimum price indicates that when the cost of a Charging Session is lower than this amount, the cost of the Session will be equal to this amount.
    min_price.excl_vat number 1 Price/Cost excluding VAT.
    min_price.incl_vat number ? Price/Cost including VAT.
    max_price Price(JSON) ? When this field is set, a Charging Session with this tariff will NOT cost more than this amount.
    max_price.excl_vat number 1 Price/Cost excluding VAT.
    max_price.incl_vat number ? Price/Cost including VAT.
    elements TariffElement(Array) + List of Tariff Elements.
    elements.price_components PriceComponent(Array) + List of price components that describe the pricing of a tariff.
    elements.price_components.type TariffDimensionType(Enum) 1 Type of tariff dimension. Could be ENERGY, FLAT, PARKING_TIME or TIME.
    elements.price_components.price number 1 Price per unit (excl. VAT) for this tariff dimension.
    elements.price_components.vat number ? Applicable VAT percentage for this tariff dimension. If omitted, no VAT is applicable. Not providing a VAT is different from 0% VAT, which would be a value of 0.0 here.
    elements.price_components.step_size int 1 Minimum amount to be billed. This unit will be billed in this step_size blocks. Amounts that are less than this step_size are rounded up to the given step_size. For example: if type is TIME and step_size has a value of 300, then time will be billed in blocks of 5 minutes. If 6 minutes were used, 10 minutes (2 blocks of step_size) will be billed.
    elements.restrictions TariffRestrictions ? Restrictions that describe the applicability of a tariff.
    elements.restrictions.start_time string(5) ? Start time of day in local time, the time zone is defined in the time_zone field of the Location, for example 13:30, valid from this time of the day. Must be in 24h format with leading zeros. Hour/Minute separator: ":" Regex: ([0-1][0- 9]2[0-3]):[0-5][0-9]
    elements.restrictions.end_time string(5) ? End time of day in local time, the time zone is defined in the time_zone field of the Location, for example 19:45, valid until this time of the day. Same syntax as start_time. If end_time < start_time then the period wraps around to the next day. To stop at end of the day use: 00:00.
    elements.restrictions.start_date string(10) ? Start date in local time, the time zone is defined in the time_zone field of the Location, for example: 2015-12-24, valid from this day (inclusive). Regex: ([12][0-9]{3})-(0[1-9]1[0-2])-(0[1-9][12][0-9]3[01])
    elements.restrictions.end_date string(10) ? End date in local time, the time zone is defined in the time_zone field of the Location, for example: 2015-12-27, valid until this day (exclusive). Same syntax as start_date.
    elements.restrictions.min_kwh number ? Minimum consumed energy in kWh, for example 20, valid from this amount of energy (inclusive) being used.
    elements.restrictions.max_kwh number ? Maximum consumed energy in kWh, for example 50, valid until this amount of energy (exclusive) being used.
    elements.restrictions.min_current number ? Sum of the minimum current (in Amperes) over all phases, for example 5. When the EV is charging with more than, or equal to, the defined amount of current, this TariffElement is/becomes active. If the charging current is or becomes lower, this TariffElement is not or no longer valid and becomes inactive. This describes NOT the minimum current over the entire Charging Session. This restriction can make a TariffElement become active when the charging current is above the defined value, but the TariffElement MUST no longer be active when the charging current drops below the defined value.
    elements.restrictions.max_current number ? Sum of the maximum current (in Amperes) over all phases, for example 20. When the EV is charging with less than the defined amount of current, this TariffElement becomes/is active. If the charging current is or becomes higher, this TariffElement is not or no longer valid and becomes inactive. This describes NOT the maximum current over the entire Charging Session. This restriction can make a TariffElement become active when the charging current is below this value, but the TariffElement MUST no longer be active when the charging current raises above the defined value.
    elements.restrictions.min_power number ? Minimum power in kW, for example 5. When the EV is charging with more than, or equal to, the defined amount of power, this TariffElement is/becomes active. If the charging power is or becomes lower, this TariffElement is not or no longer valid and becomes inactive. This describes NOT the minimum power over the entire Charging Session. This restriction can make a TariffElement become active when the charging power is above this value, but the TariffElement MUST no longer be active when the charging power drops below the defined value.
    elements.restrictions.max_power number ? Maximum power in kW, for example 20. When the EV is charging with less than the defined amount of power, this TariffElement becomes/is active. If the charging power is or becomes higher, this TariffElement is not or no longer valid and becomes inactive. This describes NOT the maximum power over the entire Charging Session. This restriction can make a TariffElement become active when the charging power is below this value, but the TariffElement MUST no longer be active when the charging power raises above the defined value.
    elements.restrictions.min_duration int ? Minimum duration in seconds the Charging Session MUST last (inclusive). When the duration of a Charging Session is longer than the defined value, this TariffElement is or becomes active. Before that moment, this TariffElement is not yet active.
    elements.restrictions.max_duration int ? Maximum duration in seconds the Charging Session MUST last (exclusive). When the duration of a Charging Session is shorter than the defined value, this TariffElement is or becomes active. After that moment, this TariffElement is no longer active.
    elements.restrictions.day_of_week DayOfWeek(Array) * Which day(s) of the week this TariffElement is active. Could be MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY and SUNDAY.
    elements.restrictions.reservation ReservationRestrictionType(Enum) * When this field is present, the TariffElement describes reservation costs. A reservation starts when the reservation is made, and ends when the driver starts charging on the reserved EVSE/Location, or when the reservation expires. A reservation can only have: FLAT and TIME TariffDimensions, where TIME is for the duration of the reservation. Could be RESERVATION or RESERVATION_EXPIRES.
    start_date_time DateTime ? The time when this tariff becomes active, in UTC, time_zone field of the Location can be used to convert to local time. Typically used for a new tariff that is already given with the location, before it becomes active.
    end_date_time DateTime ? The time after which this tariff is no longer valid, in UTC, time_zone field if the Location can be used to convert to local time. Typically used when this tariff is going to be replaced with a different tariff in the near future.
    energy_mix EnergyMix(JSON) ? Details on the energy supplied with this tariff.
    energy_mix.is_green_energy boolean 1 True if 100% from regenerative sources. (CO2 and nuclear waste is zero)
    energy_mix.energy_sources EnergySource(Array) * Key-value pairs (enum + percentage) of energy sources of this location’s tariff.
    energy_mix.energy_sources.source EnergySourceCategory(Enum) 1 The type of energy source. Could be NUCLEAR, GENERAL_FOSSIL, COAL, GAS, GENERAL_GREEN, SOLAR, WIND or WATER
    energy_mix.energy_sources.percentage number 1 Percentage of this source (0-100) in the mix.
    energy_mix.environ_impact EnvironmentalImpact(Array) * Key-value pairs (enum + percentage) of nuclear waste and CO2 exhaust of this location’s tariff.
    energy_mix.environ_impact.category EnvironmentalImpactCategory(Enum) 1 The type of energy source. Could be NUCLEAR_WASTE or CARBON_DIOXIDE
    energy_mix.environ_impact.amount number 1 Percentage of this source (0-100) in the mix.
    energy_mix.supplier_name string(64) ? Name of the energy supplier, delivering the energy for this location or tariff.
    energy_mix.energy_product_name string(64) ? Name of the energy supplier's product/tariff plan used at this location.
    last_updated DateTime 1 Timestamp when this Tariff was last updated (or created).

    Sample Response

    [
      {
        "country_code": "DE",
        "party_id": "ALL",
        "id": "20",
        "currency": "EUR",
        "min_price": {
          "excl_vat": 0.5,
          "incl_vat": 0.55
        },
        "elements": [
          {
            "price_components": [
              {
                "type": "ENERGY",
                "price": 0.25,
                "vat": 10.0,
                "step_size": 1
              }
            ]
          }
        ],
        "last_updated": "2018-12-17T16:45:21Z"
      },
      {
        "country_code": "DE",
        "party_id": "ALL",
        "id": "14",
        "currency": "EUR",
        "type": "REGULAR",
        "tariff_alt_url": "https://company.com/tariffs/14",
        "elements": [
          {
            "price_components": [
              {
                "type": "FLAT",
                "price": 2.5,
                "vat": 15.0,
                "step_size": 1
              }
            ]
          },
          {
            "price_components": [
              {
                "type": "TIME",
                "price": 1.0,
                "vat": 20.0,
                "step_size": 900
              }
            ],
            "restrictions": {
              "max_current": 32.0
            }
          },
          {
            "price_components": [
              {
                "type": "TIME",
                "price": 2.0,
                "vat": 20.0,
                "step_size": 600
              }
            ],
            "restrictions": {
              "min_current": 32.0,
              "day_of_week": [
                "MONDAY",
                "TUESDAY",
                "WEDNESDAY",
                "THURSDAY",
                "FRIDAY"
              ]
            }
          },
          {
            "price_components": [
              {
                "type": "TIME",
                "price": 1.25,
                "vat": 20.0,
                "step_size": 600
              }
            ],
            "restrictions": {
              "min_current": 32.0,
              "day_of_week": ["SATURDAY", "SUNDAY"]
            }
          },
          {
            "price_components": [
              {
                "type": "PARKING_TIME",
                "price": 5.0,
                "vat": 10.0,
                "step_size": 300
              }
            ],
            "restrictions": {
              "start_time": "09:00",
              "end_time": "18:00",
              "day_of_week": [
                "MONDAY",
                "TUESDAY",
                "WEDNESDAY",
                "THURSDAY",
                "FRIDAY"
              ]
            }
          },
          {
            "price_components": [
              {
                "type": "PARKING_TIME",
                "price": 6.0,
                "vat": 10.0,
                "step_size": 300
              }
            ],
            "restrictions": {
              "start_time": "10:00",
              "end_time": "17:00",
              "day_of_week": ["SATURDAY"]
            }
          }
        ],
        "last_updated": "2015-06-29T20:39:09Z"
      }
    ]

    Exception Handling

    The format of errors is always the same and specified in the Fundamentals section.


    Get a particular Tariff


    This API, will return the private charging particular tariff.

    The complete list of query parameters and its details are provided in the OAS specification which can be used to filter down the search result based on the user journey.

    Headers parameters

    HEADER PARAMETER DATA TYPE LIMITS (MIN/MAX) NULLABLE DESCRIPTION
    Authorization String N/A No This is a Bearer token. It should be the token you got when you requested an Access Token before.

    Example: Bearer xxxxxxxxxx

    Request query parameters

    REQUEST QUERY PARAMETER DATA TYPE REQUIRED VALUE
    _tariffid CiString(36) Yes Tariff.id of the Tariff object to retrieve.

    Sample Request

    curl --location '{{url}}/v1/tariffs/{tariff_id}' \
    --header 'Authorization: Bearer ***' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json'

    Response

    On success the response will have a 200 OK status and the data property from body of the response will contain a JSON object with:

    KEY VALUE TYPE CARDINALITY DESCRIPTION
    country_code CiString(2) 1 ISO-3166 alpha-2 country code of the CPO that owns this Tariff.
    party_id CiString(3) 1 ID of the CPO that 'owns' this Tariff (following the ISO-15118 standard).
    id CiString(36) 1 Uniquely identifies the tariff within the CPO’s platform (and suboperator platforms).
    currency string(3) 1 ISO-4217 code of the currency of this tariff.
    type TariffType(Enum) ? Defines the type of the tariff. This allows for distinction in case of given Charging Preferences. When omitted, this tariff is valid for all sessions. Could be AD_HOC_PAYMENT, PROFILE_CHEAP, PROFILE_FAST, PROFILE_GREEN or REGULAR.
    tariff_alt_text DisplayText(Array) * List of multi-language alternative tariff info texts.
    tariff_alt_text.language string(2) 1 Language Code ISO 639-1
    tariff_alt_text.text string(512) 1 Text to be displayed to a end user. No markup, html etc. allowed.
    tariff_alt_url URL ? URL to a web page that contains an explanation of the tariff information in human readable form.
    min_price Price(JSON) ? When this field is set, a Charging Session with this tariff will at least cost this amount. This is different from a FLAT fee (Start Tariff, Transaction Fee), as a FLAT fee is a fixed amount that has to be paid for any Charging Session. A minimum price indicates that when the cost of a Charging Session is lower than this amount, the cost of the Session will be equal to this amount.
    min_price.excl_vat number 1 Price/Cost excluding VAT.
    min_price.incl_vat number ? Price/Cost including VAT.
    max_price Price(JSON) ? When this field is set, a Charging Session with this tariff will NOT cost more than this amount.
    max_price.excl_vat number 1 Price/Cost excluding VAT.
    max_price.incl_vat number ? Price/Cost including VAT.
    elements TariffElement(Array) + List of Tariff Elements.
    elements.price_components PriceComponent(Array) + List of price components that describe the pricing of a tariff.
    elements.price_components.type TariffDimensionType(Enum) 1 Type of tariff dimension. Could be ENERGY, FLAT, PARKING_TIME or TIME.
    elements.price_components.price number 1 Price per unit (excl. VAT) for this tariff dimension.
    elements.price_components.vat number ? Applicable VAT percentage for this tariff dimension. If omitted, no VAT is applicable. Not providing a VAT is different from 0% VAT, which would be a value of 0.0 here.
    elements.price_components.step_size int 1 Minimum amount to be billed. This unit will be billed in this step_size blocks. Amounts that are less than this step_size are rounded up to the given step_size. For example: if type is TIME and step_size has a value of 300, then time will be billed in blocks of 5 minutes. If 6 minutes were used, 10 minutes (2 blocks of step_size) will be billed.
    elements.restrictions TariffRestrictions ? Restrictions that describe the applicability of a tariff.
    elements.restrictions.start_time string(5) ? Start time of day in local time, the time zone is defined in the time_zone field of the Location, for example 13:30, valid from this time of the day. Must be in 24h format with leading zeros. Hour/Minute separator: ":" Regex: ([0-1][0- 9]2[0-3]):[0-5][0-9]
    elements.restrictions.end_time string(5) ? End time of day in local time, the time zone is defined in the time_zone field of the Location, for example 19:45, valid until this time of the day. Same syntax as start_time. If end_time < start_time then the period wraps around to the next day. To stop at end of the day use: 00:00.
    elements.restrictions.start_date string(10) ? Start date in local time, the time zone is defined in the time_zone field of the Location, for example: 2015-12-24, valid from this day (inclusive). Regex: ([12][0-9]{3})-(0[1-9]1[0-2])-(0[1-9][12][0-9]3[01])
    elements.restrictions.end_date string(10) ? End date in local time, the time zone is defined in the time_zone field of the Location, for example: 2015-12-27, valid until this day (exclusive). Same syntax as start_date.
    elements.restrictions.min_kwh number ? Minimum consumed energy in kWh, for example 20, valid from this amount of energy (inclusive) being used.
    elements.restrictions.max_kwh number ? Maximum consumed energy in kWh, for example 50, valid until this amount of energy (exclusive) being used.
    elements.restrictions.min_current number ? Sum of the minimum current (in Amperes) over all phases, for example 5. When the EV is charging with more than, or equal to, the defined amount of current, this TariffElement is/becomes active. If the charging current is or becomes lower, this TariffElement is not or no longer valid and becomes inactive. This describes NOT the minimum current over the entire Charging Session. This restriction can make a TariffElement become active when the charging current is above the defined value, but the TariffElement MUST no longer be active when the charging current drops below the defined value.
    elements.restrictions.max_current number ? Sum of the maximum current (in Amperes) over all phases, for example 20. When the EV is charging with less than the defined amount of current, this TariffElement becomes/is active. If the charging current is or becomes higher, this TariffElement is not or no longer valid and becomes inactive. This describes NOT the maximum current over the entire Charging Session. This restriction can make a TariffElement become active when the charging current is below this value, but the TariffElement MUST no longer be active when the charging current raises above the defined value.
    elements.restrictions.min_power number ? Minimum power in kW, for example 5. When the EV is charging with more than, or equal to, the defined amount of power, this TariffElement is/becomes active. If the charging power is or becomes lower, this TariffElement is not or no longer valid and becomes inactive. This describes NOT the minimum power over the entire Charging Session. This restriction can make a TariffElement become active when the charging power is above this value, but the TariffElement MUST no longer be active when the charging power drops below the defined value.
    elements.restrictions.max_power number ? Maximum power in kW, for example 20. When the EV is charging with less than the defined amount of power, this TariffElement becomes/is active. If the charging power is or becomes higher, this TariffElement is not or no longer valid and becomes inactive. This describes NOT the maximum power over the entire Charging Session. This restriction can make a TariffElement become active when the charging power is below this value, but the TariffElement MUST no longer be active when the charging power raises above the defined value.
    elements.restrictions.min_duration int ? Minimum duration in seconds the Charging Session MUST last (inclusive). When the duration of a Charging Session is longer than the defined value, this TariffElement is or becomes active. Before that moment, this TariffElement is not yet active.
    elements.restrictions.max_duration int ? Maximum duration in seconds the Charging Session MUST last (exclusive). When the duration of a Charging Session is shorter than the defined value, this TariffElement is or becomes active. After that moment, this TariffElement is no longer active.
    elements.restrictions.day_of_week DayOfWeek(Array) * Which day(s) of the week this TariffElement is active. Could be MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY and SUNDAY.
    elements.restrictions.reservation ReservationRestrictionType(Enum) * When this field is present, the TariffElement describes reservation costs. A reservation starts when the reservation is made, and ends when the driver starts charging on the reserved EVSE/Location, or when the reservation expires. A reservation can only have: FLAT and TIME TariffDimensions, where TIME is for the duration of the reservation. Could be RESERVATION or RESERVATION_EXPIRES.
    start_date_time DateTime ? The time when this tariff becomes active, in UTC, time_zone field of the Location can be used to convert to local time. Typically used for a new tariff that is already given with the location, before it becomes active.
    end_date_time DateTime ? The time after which this tariff is no longer valid, in UTC, time_zone field if the Location can be used to convert to local time. Typically used when this tariff is going to be replaced with a different tariff in the near future.
    energy_mix EnergyMix(JSON) ? Details on the energy supplied with this tariff.
    energy_mix.is_green_energy boolean 1 True if 100% from regenerative sources. (CO2 and nuclear waste is zero)
    energy_mix.energy_sources EnergySource(Array) * Key-value pairs (enum + percentage) of energy sources of this location’s tariff.
    energy_mix.energy_sources.source EnergySourceCategory(Enum) 1 The type of energy source. Could be NUCLEAR, GENERAL_FOSSIL, COAL, GAS, GENERAL_GREEN, SOLAR, WIND or WATER
    energy_mix.energy_sources.percentage number 1 Percentage of this source (0-100) in the mix.
    energy_mix.environ_impact EnvironmentalImpact(Array) * Key-value pairs (enum + percentage) of nuclear waste and CO2 exhaust of this location’s tariff.
    energy_mix.environ_impact.category EnvironmentalImpactCategory(Enum) 1 The type of energy source. Could be NUCLEAR_WASTE or CARBON_DIOXIDE
    energy_mix.environ_impact.amount number 1 Percentage of this source (0-100) in the mix.
    energy_mix.supplier_name string(64) ? Name of the energy supplier, delivering the energy for this location or tariff.
    energy_mix.energy_product_name string(64) ? Name of the energy supplier's product/tariff plan used at this location.
    last_updated DateTime 1 Timestamp when this Tariff was last updated (or created).

    Sample Response

    {
      "country_code": "DE",
      "party_id": "ALL",
      "id": "14",
      "currency": "EUR",
      "type": "REGULAR",
      "tariff_alt_url": "https://company.com/tariffs/14",
      "elements": [
        {
          "price_components": [
            {
              "type": "FLAT",
              "price": 2.5,
              "vat": 15.0,
              "step_size": 1
            }
          ]
        },
        {
          "price_components": [
            {
              "type": "TIME",
              "price": 1.0,
              "vat": 20.0,
              "step_size": 900
            }
          ],
          "restrictions": {
            "max_current": 32.0
          }
        },
        {
          "price_components": [
            {
              "type": "TIME",
              "price": 2.0,
              "vat": 20.0,
              "step_size": 600
            }
          ],
          "restrictions": {
            "min_current": 32.0,
            "day_of_week": ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"]
          }
        },
        {
          "price_components": [
            {
              "type": "TIME",
              "price": 1.25,
              "vat": 20.0,
              "step_size": 600
            }
          ],
          "restrictions": {
            "min_current": 32.0,
            "day_of_week": ["SATURDAY", "SUNDAY"]
          }
        },
        {
          "price_components": [
            {
              "type": "PARKING_TIME",
              "price": 5.0,
              "vat": 10.0,
              "step_size": 300
            }
          ],
          "restrictions": {
            "start_time": "09:00",
            "end_time": "18:00",
            "day_of_week": ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"]
          }
        },
        {
          "price_components": [
            {
              "type": "PARKING_TIME",
              "price": 6.0,
              "vat": 10.0,
              "step_size": 300
            }
          ],
          "restrictions": {
            "start_time": "10:00",
            "end_time": "17:00",
            "day_of_week": ["SATURDAY"]
          }
        }
      ],
      "last_updated": "2015-06-29T20:39:09Z"
    }

    Exception Handling

    The format of errors is always the same and specified in the Fundamentals section.


    Get all Sessions


    This API, will return the private charging sessions.

    The API also provide further search options to filter the result set.

    • Based on the last updated date between two given dates.

    The complete list of query parameters and its details are provided in the OAS specification which can be used to filter down the search result based on the user journey.

    Headers parameters

    HEADER PARAMETER DATA TYPE LIMITS (MIN/MAX) NULLABLE DESCRIPTION
    Authorization String N/A No This is a Bearer token. It should be the token you got when you requested an Access Token before.

    Example: Bearer xxxxxxxxxx

    Request query parameters

    REQUEST QUERY PARAMETER DATA TYPE REQUIRED VALUE
    _datefrom DateTime No Only return Sessions that have last_updated after this Date/Time.
    _dateto DateTime No Only return Sessions that have last_updated before this Date/Time.
    offset int No The offset of the first object returned. Default is 0.
    limit int No Maximum number of objects to GET.

    Sample Request

    curl --location '{{url}}/v1/sessions/?date_from=xxx&date_to=yyy' \
    --header 'Authorization: Bearer ***' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json'

    Response

    On success the response will have a 200 OK status and the data property from body of the response will contain a array of JSON object with:

    KEY VALUE TYPE CARDINALITY DESCRIPTION
    country_code CiString(2) 1 ISO-3166 alpha-2 country code of the CPO that 'owns' this Session.
    party_id CiString(3) 1 ID of the CPO that 'owns' this Session (following the ISO-15118 standard).
    id CiString(36) 1 The unique id that identifies the charging session in the CPO platform.
    start_date_time DateTime 1 The timestamp when the session became ACTIVE in the Charge Point. When the session is still PENDING, this field SHALL be set to the time the Session was created at the Charge Point. When a Session goes from PENDING to ACTIVE, this field SHALL be updated to the moment the Session went to ACTIVE in the Charge Point.
    end_date_time DateTime ? The timestamp when the session was completed/finished, charging might have finished before the session ends, for example: EV is full, but parking cost also has to be paid.
    kwh number 1 How many kWh were charged.
    cdr_token CdrToken(JSON) 1 Token used to start this charging session, including all the relevant information to identify the unique token.
    cdr_token.country_code CiString(2) 1 ISO-3166 alpha-2 country code of the MSP that 'owns' this Token.
    cdr_token.party_id CiString(3) 1 ID of the eMSP that 'owns' this Token (following the ISO-15118 standard).
    cdr_token.uid CiString(36) 1 Unique ID by which this Token can be identified. This is the field used by the CPO’s system (RFID reader on the Charge Point) to identify this token. Currently, in most cases: type=RFID, this is the RFID hidden ID as read by the RFID reader, but that is not a requirement. If this is a type=APP_USER Token, it will be a unique, by the eMSP, generated ID.
    cdr_token.type TokenType(Enum) 1 Type of the token. Could be AD_HOC_USER, APP_USER, OTHER or RFID.
    cdr_token.contract_id CiString(36) 1 Uniquely identifies the EV driver contract token within the eMSP’s platform (and suboperator platforms). Recommended to follow the specification for eMA ID from "eMI3 standard version V1.0" (http://emi3group.com/documents-links/) "Part 2: business objects."
    auth_method AuthMethod(Enum) 1 Method used for authentication. This might change during a session, for example when the session was started with a reservation: ReserveNow: COMMAND. When the driver arrives and starts charging using a Token that is whitelisted: WHITELIST. Could be AUTH_REQUEST, COMMAND or WHITELIST.
    authorization_reference CiString(36) ? Reference to the authorization given by the eMSP. When the eMSP provided an authorization_reference in either: real-time authorization, StartSession or ReserveNow this field SHALL contain the same value. When different authorization_reference values have been given by the eMSP that are relevant to this Session, the last given value SHALL be used here.
    location_id CiString(36) 1 Location.id of the Location object of this CPO, on which the charging session is/was happening.
    evse_uid CiString(36) 1 EVSE.uid of the EVSE of this Location on which the charging session is/was happening. Allowed to be set to: #NA when this session is created for a reservation, but no EVSE yet assigned to the driver.
    connector_id CiString(36) 1 Connector.id of the Connector of this Location where the charging session is/was happening. Allowed to be set to: #NA when this session is created for a reservation, but no connector yet assigned to the driver.
    meter_id string(255) ? Optional identification of the kWh meter.
    currency string(3) 1 ISO 4217 code of the currency used for this session.
    charging_periods ChargingPeriod(Array) * An optional list of Charging Periods that can be used to calculate and verify the total cost.
    charging_periods.start_date_time DateTime 1 Start timestamp of the charging period. A period ends when the next period starts. The last period ends when the session ends.
    charging_periods.dimensions CdrDimension(Array) + List of relevant values for this charging period.
    charging_periods.dimensions.type CdrDimensionType 1 Type of CDR dimension. Could be CURRENT, ENERGY, ENERGY_EXPORT, ENERGY_IMPORT, MAX_POWER, MAX_CURRENT, MIN_CURRENT, MIN_POWER, PARKING_TIME, POWER, RESERVATION_TIME, STATE_OF_CHARGE or TIME.
    charging_periods.dimensions.volume number 1 Volume of the dimension consumed, measured according to the dimension type.
    charging_periods.tariff_id CiString(36) ? Unique identifier of the Tariff that is relevant for this Charging Period. If not provided, no Tariff is relevant during this period.
    total_cost Price(JSON) ? The total cost of the session in the specified currency. This is the price that the eMSP will have to pay to the CPO. A total_cost of 0.00 means free of charge. When omitted, i.e. no price information is given in the Session object, it does not imply the session is/was free of charge.
    total_cost.excl_vat number 1 Price/Cost excluding VAT.
    total_cost.incl_vat number ? Price/Cost including VAT.
    status SessionStatus(Enum) 1 The status of the session. Could be ACTIVE, COMPLETED, INVALID, PENDING or RESERVATION.
    last_updated DateTime 1 Timestamp when this Session was last updated (or created).

    Sample Response

    [
      {
        "country_code": "NL",
        "party_id": "STK",
        "id": "101",
        "start_date_time": "2020-03-09T10:17:09Z",
        "kwh": 0.0,
        "cdr_token": {
          "uid": "123abc",
          "type": "RFID",
          "contract_id": "NL-TST-C12345678-S"
        },
        "auth_method": "WHITELIST",
        "location_id": "LOC1",
        "evse_uid": "3256",
        "connector_id": "1",
        "currency": "EUR",
        "total_cost": {
          "excl_vat": 2.5
        },
        "status": "PENDING",
        "last_updated": "2020-03-09T10:17:09Z"
      },
      {
        "country_code": "BE",
        "party_id": "BEC",
        "id": "101",
        "start_date_time": "2015-06-29T22:39:09Z",
        "end_date_time": "2015-06-29T23:50:16Z",
        "kwh": 41.0,
        "cdr_token": {
          "uid": "123abc",
          "type": "RFID",
          "contract_id": "NL-TST-C12345678-S"
        },
        "auth_method": "WHITELIST",
        "location_id": "LOC1",
        "evse_uid": "3256",
        "connector_id": "1",
        "currency": "EUR",
        "charging_periods": [
          {
            "start_date_time": "2015-06-29T22:39:09Z",
            "dimensions": [
              {
                "type": "ENERGY",
                "volume": 120
              },
              {
                "type": "MAX_CURRENT",
                "volume": 30
              }
            ]
          },
          {
            "start_date_time": "2015-06-29T22:40:54Z",
            "dimensions": [
              {
                "type": "ENERGY",
                "volume": 41000
              },
              {
                "type": "MIN_CURRENT",
                "volume": 34
              }
            ]
          },
          {
            "start_date_time": "2015-06-29T23:07:09Z",
            "dimensions": [
              {
                "type": "PARKING_TIME",
                "volume": 0.718
              }
            ],
            "tariff_id": "12"
          }
        ],
        "total_cost": {
          "excl_vat": 8.5,
          "incl_vat": 9.35
        },
        "status": "COMPLETED",
        "last_updated": "2015-06-29T23:50:17Z"
      }
    ]

    Exception Handling

    The format of errors is always the same and specified in the Fundamentals section.


    Get a particular Session


    This API, will return the private charging particular session.

    The complete list of query parameters and its details are provided in the OAS specification which can be used to filter down the search result based on the user journey.

    Headers parameters

    HEADER PARAMETER DATA TYPE LIMITS (MIN/MAX) NULLABLE DESCRIPTION
    Authorization String N/A No This is a Bearer token. It should be the token you got when you requested an Access Token before.

    Example: Bearer xxxxxxxxxx

    Request query parameters

    REQUEST QUERY PARAMETER DATA TYPE REQUIRED VALUE
    _sessionid CiString(36) Yes Session.id of the Session for which the Charging Preferences are to be set.

    Sample Request

    curl --location '{{url}}/v1/sessions/{session_id}' \
    --header 'Authorization: Bearer ***' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json'

    Response

    On success the response will have a 200 OK status and the data property from body of the response will contain a JSON object with:

    KEY VALUE TYPE CARDINALITY DESCRIPTION
    country_code CiString(2) 1 ISO-3166 alpha-2 country code of the CPO that 'owns' this Session.
    party_id CiString(3) 1 ID of the CPO that 'owns' this Session (following the ISO-15118 standard).
    id CiString(36) 1 The unique id that identifies the charging session in the CPO platform.
    start_date_time DateTime 1 The timestamp when the session became ACTIVE in the Charge Point. When the session is still PENDING, this field SHALL be set to the time the Session was created at the Charge Point. When a Session goes from PENDING to ACTIVE, this field SHALL be updated to the moment the Session went to ACTIVE in the Charge Point.
    end_date_time DateTime ? The timestamp when the session was completed/finished, charging might have finished before the session ends, for example: EV is full, but parking cost also has to be paid.
    kwh number 1 How many kWh were charged.
    cdr_token CdrToken(JSON) 1 Token used to start this charging session, including all the relevant information to identify the unique token.
    cdr_token.country_code CiString(2) 1 ISO-3166 alpha-2 country code of the MSP that 'owns' this Token.
    cdr_token.party_id CiString(3) 1 ID of the eMSP that 'owns' this Token (following the ISO-15118 standard).
    cdr_token.uid CiString(36) 1 Unique ID by which this Token can be identified. This is the field used by the CPO’s system (RFID reader on the Charge Point) to identify this token. Currently, in most cases: type=RFID, this is the RFID hidden ID as read by the RFID reader, but that is not a requirement. If this is a type=APP_USER Token, it will be a unique, by the eMSP, generated ID.
    cdr_token.type TokenType(Enum) 1 Type of the token. Could be AD_HOC_USER, APP_USER, OTHER or RFID.
    cdr_token.contract_id CiString(36) 1 Uniquely identifies the EV driver contract token within the eMSP’s platform (and suboperator platforms). Recommended to follow the specification for eMA ID from "eMI3 standard version V1.0" (http://emi3group.com/documents-links/) "Part 2: business objects."
    auth_method AuthMethod(Enum) 1 Method used for authentication. This might change during a session, for example when the session was started with a reservation: ReserveNow: COMMAND. When the driver arrives and starts charging using a Token that is whitelisted: WHITELIST. Could be AUTH_REQUEST, COMMAND or WHITELIST.
    authorization_reference CiString(36) ? Reference to the authorization given by the eMSP. When the eMSP provided an authorization_reference in either: real-time authorization, StartSession or ReserveNow this field SHALL contain the same value. When different authorization_reference values have been given by the eMSP that are relevant to this Session, the last given value SHALL be used here.
    location_id CiString(36) 1 Location.id of the Location object of this CPO, on which the charging session is/was happening.
    evse_uid CiString(36) 1 EVSE.uid of the EVSE of this Location on which the charging session is/was happening. Allowed to be set to: #NA when this session is created for a reservation, but no EVSE yet assigned to the driver.
    connector_id CiString(36) 1 Connector.id of the Connector of this Location where the charging session is/was happening. Allowed to be set to: #NA when this session is created for a reservation, but no connector yet assigned to the driver.
    meter_id string(255) ? Optional identification of the kWh meter.
    currency string(3) 1 ISO 4217 code of the currency used for this session.
    charging_periods ChargingPeriod(Array) * An optional list of Charging Periods that can be used to calculate and verify the total cost.
    charging_periods.start_date_time DateTime 1 Start timestamp of the charging period. A period ends when the next period starts. The last period ends when the session ends.
    charging_periods.dimensions CdrDimension(Array) + List of relevant values for this charging period.
    charging_periods.dimensions.type CdrDimensionType 1 Type of CDR dimension. Could be CURRENT, ENERGY, ENERGY_EXPORT, ENERGY_IMPORT, MAX_POWER, MAX_CURRENT, MIN_CURRENT, MIN_POWER, PARKING_TIME, POWER, RESERVATION_TIME, STATE_OF_CHARGE or TIME.
    charging_periods.dimensions.volume number 1 Volume of the dimension consumed, measured according to the dimension type.
    charging_periods.tariff_id CiString(36) ? Unique identifier of the Tariff that is relevant for this Charging Period. If not provided, no Tariff is relevant during this period.
    total_cost Price(JSON) ? The total cost of the session in the specified currency. This is the price that the eMSP will have to pay to the CPO. A total_cost of 0.00 means free of charge. When omitted, i.e. no price information is given in the Session object, it does not imply the session is/was free of charge.
    total_cost.excl_vat number 1 Price/Cost excluding VAT.
    total_cost.incl_vat number ? Price/Cost including VAT.
    status SessionStatus(Enum) 1 The status of the session. Could be ACTIVE, COMPLETED, INVALID, PENDING or RESERVATION.
    last_updated DateTime 1 Timestamp when this Session was last updated (or created).

    Sample Response

    {
      "country_code": "BE",
      "party_id": "BEC",
      "id": "101",
      "start_date_time": "2015-06-29T22:39:09Z",
      "end_date_time": "2015-06-29T23:50:16Z",
      "kwh": 41.0,
      "cdr_token": {
        "uid": "123abc",
        "type": "RFID",
        "contract_id": "NL-TST-C12345678-S"
      },
      "auth_method": "WHITELIST",
      "location_id": "LOC1",
      "evse_uid": "3256",
      "connector_id": "1",
      "currency": "EUR",
      "charging_periods": [
        {
          "start_date_time": "2015-06-29T22:39:09Z",
          "dimensions": [
            {
              "type": "ENERGY",
              "volume": 120
            },
            {
              "type": "MAX_CURRENT",
              "volume": 30
            }
          ]
        },
        {
          "start_date_time": "2015-06-29T22:40:54Z",
          "dimensions": [
            {
              "type": "ENERGY",
              "volume": 41000
            },
            {
              "type": "MIN_CURRENT",
              "volume": 34
            }
          ]
        },
        {
          "start_date_time": "2015-06-29T23:07:09Z",
          "dimensions": [
            {
              "type": "PARKING_TIME",
              "volume": 0.718
            }
          ],
          "tariff_id": "12"
        }
      ],
      "total_cost": {
        "excl_vat": 8.5,
        "incl_vat": 9.35
      },
      "status": "COMPLETED",
      "last_updated": "2015-06-29T23:50:17Z"
    }

    Exception Handling

    The format of errors is always the same and specified in the Fundamentals section.


    Get all CDRs


    This API, will return the private charging CDRs.

    The API also provide further search options to filter the result set.

    • Based on the last updated date between two given dates.

    The complete list of query parameters and its details are provided in the OAS specification which can be used to filter down the search result based on the user journey.

    Headers parameters

    HEADER PARAMETER DATA TYPE LIMITS (MIN/MAX) NULLABLE DESCRIPTION
    Authorization String N/A No This is a Bearer token. It should be the token you got when you requested an Access Token before.

    Example: Bearer xxxxxxxxxx

    Request query parameters

    REQUEST QUERY PARAMETER DATA TYPE REQUIRED VALUE
    _datefrom DateTime No Only return CDRs that have last_updated after this Date/Time.
    _dateto DateTime No Only return CDRs that have last_updated before this Date/Time.
    offset int No The offset of the first object returned. Default is 0.
    limit int No Maximum number of objects to GET.

    Sample Request

    curl --location '{{url}}/v1/cdrs/?date_from=xxx&date_to=yyy' \
    --header 'Authorization: Bearer ***' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json'

    Response

    On success the response will have a 200 OK status and the data property from body of the response will contain a array of JSON object with:

    KEY VALUE TYPE CARDINALITY DESCRIPTION
    country_code CiString(2) 1 ISO-3166 alpha-2 country code of the CPO that 'owns' this CDR.
    party_id CiString(3) 1 ID of the CPO that 'owns' this CDR (following the ISO-15118 standard).
    id CiString(39) 1 Uniquely identifies the CDR, the ID SHALL be unique per country_code/party_id combination. This field is longer than the usual 36 characters to allow for credit CDRs to have something appended to the original ID. Normal (non-credit) CDRs SHALL only have an ID with a maximum length of 36.
    start_date_time DateTime 1 Start timestamp of the charging session, or in the case of a reservation (before the start of a session) the start of the reservation.
    end_date_time DateTime 1 The timestamp when the session was completed/finished, charging might have finished before the session ends, for example: EV is full, but parking cost also has to be paid.
    session_id CiString(36) ? Unique ID of the Session for which this CDR is sent. Is only allowed to be omitted when the CPO has not implemented the Sessions module or this CDR is the result of a reservation that never became a charging session, thus no OCPI Session.
    cdr_token CdrToken(JSON) 1 Token used to start this charging session, including all the relevant information to identify the unique token.
    cdr_token.country_code CiString(2) 1 ISO-3166 alpha-2 country code of the MSP that 'owns' this Token.
    cdr_token.party_id CiString(3) 1 ID of the eMSP that 'owns' this Token (following the ISO-15118 standard).
    cdr_token.uid CiString(36) 1 Unique ID by which this Token can be identified. This is the field used by the CPO’s system (RFID reader on the Charge Point) to identify this token. Currently, in most cases: type=RFID, this is the RFID hidden ID as read by the RFID reader, but that is not a requirement. If this is a type=APP_USER Token, it will be a unique, by the eMSP, generated ID.
    cdr_token.type TokenType(Enum) 1 Type of the token. Could be AD_HOC_USER, APP_USER, OTHER or RFID.
    cdr_token.contract_id CiString(36) 1 Uniquely identifies the EV driver contract token within the eMSP’s platform (and suboperator platforms). Recommended to follow the specification for eMA ID from "eMI3 standard version V1.0" (http://emi3group.com/documents-links/) "Part 2: business objects."
    auth_method AuthMethod(Enum) 1 Method used for authentication. Multiple AuthMethods are possible during a charging session, for example when the session was started with a reservation: ReserveNow: COMMAND. When the driver arrives and starts charging using a Token that is whitelisted: WHITELIST. The last method SHALL be used in the CDR. Could be AUTH_REQUEST, COMMAND or WHITELIST.
    authorization_reference CiString(36) ? Reference to the authorization given by the eMSP. When the eMSP provided an authorization_reference in either: real-time authorization, StartSession or ReserveNow, this field SHALL contain the same value. When different authorization_reference values have been given by the eMSP that are relevant to this Session, the last given value SHALL be used here.
    cdr_location CdrLocation(JSON) 1 Location where the charging session took place, including only the relevant EVSE and Connector.
    cdr_location.id CiString(36) 1 Uniquely identifies the location within the CPO’s platform (and suboperator platforms). This field can never be changed, modified or renamed.
    cdr_location.name string(255) ? Display name of the location.
    cdr_location.address string(45) 1 Street/block name and house number if available.
    cdr_location.city string(45) 1 City or town.
    cdr_location.postal_code string(10) ? Postal code of the location, may only be omitted when the location has no postal code: in some countries charging locations at highways don’t have postal codes.
    cdr_location.state string(20) ? State only to be used when relevant.
    cdr_location.country string(3) 1 ISO 3166-1 alpha-3 code for the country of this location.
    cdr_location.coordinates GeoLocation 1 Coordinates of the location.
    cdr_location.coordinates.latitude String(10) 1 Latitude of the point in decimal degree. Example: 50.770774. Decimal separator: “.” Regex: -?[0-9]{1,2}.[0-9]{6}
    cdr_location.coordinates.longitude String(11) 1 Longitude of the point in decimal degree. Example: -126.104965. Decimal separator: “.” Regex: -?[0-9]{1,3}.[0-9]{6}
    cdr_location.evse_uid CiString(36) 1 Uniquely identifies the EVSE within the CPO’s platform (and suboperator platforms). For example a database unique ID or the actual EVSE ID. This field can never be changed, modified or renamed. This is the technical identification of the EVSE, not to be used as human readable identification, use the field: evse_id for that. Allowed to be set to: #NA when this CDR is created for a reservation that never resulted in a charging session.
    cdr_location.evse_id CiString(48) 1 Compliant with the following specification for EVSE ID from "eMI3 standard version V1.0" (http://emi3group.com/documents-links/) "Part 2: business objects.". Allowed to be set to: #NA when this CDR is created for a reservation that never resulted in a charging session.
    cdr_location.connector_id CiString(36) 1 Identifier of the connector within the EVSE. Allowed to be set to: #NA when this CDR is created for a reservation that never resulted in a charging session.
    cdr_location.connector_standard ConnectorType(Enum) 1 The standard of the installed connector. When this CDR is created for a reservation that never resulted in a charging session, this field can be set to any value and should be ignored by the Receiver. Could be CHADEMO, CHAOJI, DOMESTICA, DOMESTIC_B, DOMESTIC_C, DOMESTIC_D, DOMESTIC_E, DOMESTIC_F, DOMESTIC_G, DOMESTIC_H, DOMESTIC_I, DOMESTIC_J, DOMESTIC_K, DOMESTIC_L, DOMESTIC_M, DOMESTIC_N, DOMESTIC_O, GBT_AC, GBT_DC, IEC_60309_2_single_16, IEC_60309_2_three_16, IEC_60309_2_three_32, IEC_60309_2_three_64, IEC_62196_T1, IEC_62196_T1_COMBO, IEC_62196_T2, IEC_62196_T2_COMBO, IEC_62196_T3A, IEC_62196_T3C, NEMA_5_20, NEMA_6_30, NEMA_6_50, NEMA_10_30, NEMA_10_50, NEMA_14_30, NEMA_14_50, PANTOGRAPH_BOTTOM UP, PANTOGRAPH_TOP_DOW N, TESLA_R or TESLA_S
    cdr_location.connector_format ConnectorFormat(Enum) 1 The format (socket/cable) of the installed connector. When this CDR is created for a reservation that never resulted in a charging session, this field can be set to any value and should be ignored by the Receiver. Could be SOCKET or CABLE.
    cdr_location.connector_power_type PowerType(Enum) 1 When this CDR is created for a reservation that never resulted in a charging session, this field can be set to any value and should be ignored by the Receiver. Could be AC_1_PHASE, AC_2_PHASE, AC_2_PHASE_SPLIT, AC_3_PHASE or DC
    meter_id string(255) ? Identification of the Meter inside the Charge Point.
    currency string(3) 1 Currency of the CDR in ISO 4217 Code.
    tariffs Tariff(Array) * List of relevant Tariff Elements, see: Tariff. When relevant, a Free of Charge tariff should also be in this list, and point to a defined Free of Charge Tariff.
    tariffs.country_code CiString(2) 1 ISO-3166 alpha-2 country code of the CPO that owns this Tariff.
    tariffs.party_id CiString(3) 1 ID of the CPO that 'owns' this Tariff (following the ISO-15118 standard).
    tariffs.id CiString(36) 1 Uniquely identifies the tariff within the CPO’s platform (and suboperator platforms).
    tariffs.currency string(3) 1 ISO-4217 code of the currency of this tariff.
    tariffs.type TariffType(Enum) ? Defines the type of the tariff. This allows for distinction in case of given Charging Preferences. When omitted, this tariff is valid for all sessions. Could be AD_HOC_PAYMENT, PROFILE_CHEAP, PROFILE_FAST, PROFILE_GREEN or REGULAR.
    tariffs.tariff_alt_text DisplayText(Array) * List of multi-language alternative tariff info texts.
    tariffs.tariff_alt_text.language string(2) 1 Language Code ISO 639-1
    tariffs.tariff_alt_text.text string(512) 1 Text to be displayed to an end user. No markup, html etc. allowed.
    tariffs.tariff_alt_url URL ? URL to a web page that contains an explanation of the tariff information in human readable form.
    tariffs.min_price Price(JSON) ? When this field is set, a Charging Session with this tariff will at least cost this amount. This is different from a FLAT fee (Start Tariff, Transaction Fee), as a FLAT fee is a fixed amount that has to be paid for any Charging Session. A minimum price indicates that when the cost of a Charging Session is lower than this amount, the cost of the Session will be equal to this amount.
    tariffs.min_price.excl_vat number 1 Price/Cost excluding VAT.
    tariffs.min_price.incl_vat number ? Price/Cost including VAT.
    tariffs.max_price Price(JSON) ? When this field is set, a Charging Session with this tariff will NOT cost more than this amount.
    tariffs.max_price.excl_vat number 1 Price/Cost excluding VAT.
    tariffs.max_price.incl_vat number ? Price/Cost including VAT.
    tariffs.elements TariffElement(Array) + List of Tariff Elements.
    tariffs.elements.price_components PriceComponent(Array) + List of price components that describe the pricing of a tariff.
    tariffs.elements.price_components.type TariffDimensionType(Enum) 1 Type of tariff dimension. Could be ENERGY, FLAT, PARKING_TIME or TIME.
    tariffs.elements.price_components.price number 1 Price per unit (excl. VAT) for this tariff dimension.
    tariffs.elements.price_components.vat number ? Applicable VAT percentage for this tariff dimension. If omitted, no VAT is applicable. Not providing a VAT is different from 0% VAT, which would be a value of 0.0 here.
    tariffs.elements.price_components.step_size int 1 Minimum amount to be billed. This unit will be billed in this step_size blocks. Amounts that are less than this step_size are rounded up to the given step_size. For example: if type is TIME and step_size has a value of 300, then time will be billed in blocks of 5 minutes. If 6 minutes were used, 10 minutes (2 blocks of step_size) will be billed.
    tariffs.elements.restrictions TariffRestrictions ? Restrictions that describe the applicability of a tariff.
    tariffs.elements.restrictions.start_time string(5) ? Start time of day in local time, the time zone is defined in the time_zone field of the Location, for example 13:30, valid from this time of the day. Must be in 24h format with leading zeros. Hour/Minute separator: ":" Regex: ([0-1][0-9]2[0-3]):[0-5][0-9]
    tariffs.elements.restrictions.end_time string(5) ? End time of day in local time, the time zone is defined in the time_zone field of the Location, for example 19:45, valid until this time of the day. Same syntax as start_time. If end_time < start_time then the period wraps around to the next day. To stop at end of the day use: 00:00.
    tariffs.elements.restrictions.start_date string(10) ? Start date in local time, the time zone is defined in the time_zone field of the Location, for example: 2015-12-24, valid from this day (inclusive). Regex: ([12][0-9]{3})-(0[1-9]1[0-2])-(0[1-9][12][0-9]3[01])
    tariffs.elements.restrictions.end_date string(10) ? End date in local time, the time zone is defined in the time_zone field of the Location, for example: 2015-12-27, valid until this day (exclusive). Same syntax as start_date.
    tariffs.elements.restrictions.min_kwh number ? Minimum consumed energy in kWh, for example 20, valid from this amount of energy (inclusive) being used.
    tariffs.elements.restrictions.max_kwh number ? Maximum consumed energy in kWh, for example 50, valid until this amount of energy (exclusive) being used.
    tariffs.elements.restrictions.min_current number ? Sum of the minimum current (in Amperes) over all phases, for example 5. When the EV is charging with more than, or equal to, the defined amount of current, this TariffElement is/becomes active. If the charging current is or becomes lower, this TariffElement is not or no longer valid and becomes inactive. This describes NOT the minimum current over the entire Charging Session. This restriction can make a TariffElement become active when the charging current is above the defined value, but the TariffElement MUST no longer be active when the charging current drops below the defined value.
    tariffs.elements.restrictions.max_current number ? Sum of the maximum current (in Amperes) over all phases, for example 20. When the EV is charging with less than the defined amount of current, this TariffElement becomes/is active. If the charging current is or becomes higher, this TariffElement is not or no longer valid and becomes inactive. This describes NOT the maximum current over the entire Charging Session. This restriction can make a TariffElement become active when the charging current is below this value, but the TariffElement MUST no longer be active when the charging current raises above the defined value.
    tariffs.elements.restrictions.min_power number ? Minimum power in kW, for example 5. When the EV is charging with more than, or equal to, the defined amount of power, this TariffElement is/becomes active. If the charging power is or becomes lower, this TariffElement is not or no longer valid and becomes inactive. This describes NOT the minimum power over the entire Charging Session. This restriction can make a TariffElement become active when the charging power is above this value, but the TariffElement MUST no longer be active when the charging power drops below the defined value.
    tariffs.elements.restrictions.max_power number ? Maximum power in kW, for example 20. When the EV is charging with less than the defined amount of power, this TariffElement becomes/is active. If the charging power is or becomes higher, this TariffElement is not or no longer valid and becomes inactive. This describes NOT the maximum power over the entire Charging Session. This restriction can make a TariffElement become active when the charging power is below this value, but the TariffElement MUST no longer be active when the charging power raises above the defined value.
    tariffs.elements.restrictions.min_duration int ? Minimum duration in seconds the Charging Session MUST last (inclusive). When the duration of a Charging Session is longer than the defined value, this TariffElement is or becomes active. Before that moment, this TariffElement is not yet active.
    tariffs.elements.restrictions.max_duration int ? Maximum duration in seconds the Charging Session MUST last (exclusive). When the duration of a Charging Session is shorter than the defined value, this TariffElement is or becomes active. After that moment, this TariffElement is no longer active.
    tariffs.elements.restrictions.day_of_week DayOfWeek(Array) * Which day(s) of the week this TariffElement is active. Could be MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY and SUNDAY.
    tariffs.elements.restrictions.reservation ReservationRestrictionType(Enum) * When this field is present, the TariffElement describes reservation costs. A reservation starts when the reservation is made, and ends when the driver starts charging on the reserved EVSE/Location, or when the reservation expires. A reservation can only have: FLAT and TIME TariffDimensions, where TIME is for the duration of the reservation. Could be RESERVATION or RESERVATION_EXPIRES.
    tariffs.start_date_time DateTime ? The time when this tariff becomes active, in UTC, time_zone field of the Location can be used to convert to local time. Typically used for a new tariff that is already given with the location, before it becomes active.
    tariffs.end_date_time DateTime ? The time after which this tariff is no longer valid, in UTC, time_zone field if the Location can be used to convert to local time. Typically used when this tariff is going to be replaced with a different tariff in the near future.
    tariffs.energy_mix EnergyMix(JSON) ? Details on the energy supplied with this tariff.
    tariffs.energy_mix.is_green_energy boolean 1 True if 100% from regenerative sources. (CO2 and nuclear waste is zero)
    tariffs.energy_mix.energy_sources EnergySource(Array) * Key-value pairs (enum + percentage) of energy sources of this location’s tariff.
    tariffs.energy_mix.energy_sources.source EnergySourceCategory(Enum) 1 The type of energy source. Could be NUCLEAR, GENERAL_FOSSIL, COAL, GAS, GENERAL_GREEN, SOLAR, WIND or WATER
    tariffs.energy_mix.energy_sources.percentage number 1 Percentage of this source (0-100) in the mix.
    tariffs.energy_mix.environ_impact EnvironmentalImpact(Array) * Key-value pairs (enum + percentage) of nuclear waste and CO2 exhaust of this location’s tariff.
    tariffs.energy_mix.environ_impact.category EnvironmentalImpactCategory(Enum) 1 The type of environmental impact. Could be NUCLEAR_WASTE or CARBON_DIOXIDE
    tariffs.energy_mix.environ_impact.amount number 1 Percentage of this impact (0-100) in the mix.
    tariffs.energy_mix.supplier_name string(64) ? Name of the energy supplier, delivering the energy for this location or tariff.
    tariffs.energy_mix.energy_product_name string(64) ? Name of the energy supplier's product/tariff plan used at this location.
    tariffs.last_updated DateTime 1 Timestamp when this Tariff was last updated (or created).
    charging_periods ChargingPeriod(Array) + List of Charging Periods that make up this charging session. A session consists of 1 or more periods, where each period has a different relevant Tariff.
    charging_periods.start_date_time DateTime 1 Start timestamp of the charging period. A period ends when the next period starts. The last period ends when the session ends.
    charging_periods.dimensions CdrDimension(Array) + List of relevant values for this charging period.
    charging_periods.dimensions.type CdrDimensionType 1 Type of CDR dimension. Could be CURRENT, ENERGY, ENERGY_EXPORT, ENERGY_IMPORT, MAX_POWER, MAX_CURRENT, MIN_CURRENT, MIN_POWER, PARKING_TIME, POWER, RESERVATION_TIME, STATE_OF_CHARGE or TIME.
    charging_periods.dimensions.volume number 1 Volume of the dimension consumed, measured according to the dimension type.
    charging_periods.tariff_id CiString(36) ? Unique identifier of the Tariff that is relevant for this Charging Period. If not provided, no Tariff is relevant during this period.
    signed_data SignedData 1 Data signed to ensure integrity and authenticity.
    signed_data.encoding_method CiString(36) 1 The name of the encoding used in the SignedData field. This is the name given to the encoding by a company or group of companies. See note below.
    signed_data.encoding_method_version int ? Version of the EncodingMethod (when applicable).
    signed_data.public_key string(512) ? Public key used to sign the data, base64 encoded.
    signed_data.signed_values SignedValue(Array of Enum) + One or more signed values. Could be nature, plain_data and signed_data.
    signed_data.url string(512) ? URL that can be shown to an EV driver. This URL gives the EV driver the possibility to check the signed data from a charging session.
    total_cost Price(JSON) 1 Total sum of all the costs of this transaction in the specified currency.
    total_cost.excl_vat number 1 Price/Cost excluding VAT.
    total_cost.incl_vat number ? Price/Cost including VAT.
    total_fixed_cost Price(JSON) ? Total sum of all the fixed costs in the specified currency, except fixed price components of parking and reservation. The cost not depending on amount of time/energy used etc. Can contain costs like a start tariff.
    total_energy number 1 Total amount of energy used during the charging session, in the specified unit.
    total_energy_cost Price(JSON) ? Total sum of all the cost of all the energy used, in the specified currency.
    total_energy_cost.excl_vat number 1 Price/Cost excluding VAT.
    total_energy_cost.incl_vat number ? Price/Cost including VAT.
    total_time number 1 Total duration of the charging session (including the duration of charging and not charging), in hours.
    total_time_cost Price(JSON) ? Total sum of all the cost related to duration of charging during this transaction, in the specified currency.
    total_time_cost.excl_vat number 1 Price/Cost excluding VAT.
    total_time_cost.incl_vat number ? Price/Cost including VAT.
    total_parking_time number ? Total duration of the charging session where the EV was not charging (no energy was transferred between EVSE and EV), in hours.
    total_parking_cost Price(JSON) ? Total sum of all the cost related to parking of this transaction, including fixed price components, in the specified currency.
    total_parking_cost.excl_vat number 1 Price/Cost excluding VAT.
    total_parking_cost.incl_vat number ? Price/Cost including VAT.
    total_reservation_cost Price(JSON) ? Total sum of all the cost related to a reservation of a Charge Point, including fixed price components, in the specified currency.
    total_reservation_cost.excl_vat number 1 Price/Cost excluding VAT.
    total_reservation_cost.incl_vat number ? Price/Cost including VAT.
    remark string(255) ? Optional remark, can be used to provide additional human-readable information to the CDR, for example: reason why a transaction was stopped.
    invoice_reference_id CiString(39) ? This field can be used to reference an invoice, that will later be sent for this CDR. Making it easier to link a CDR to a given invoice. Maybe even group CDRs that will be on the same invoice.
    credit boolean ? When set to true, this is a Credit CDR, and the field credit_reference_id needs to be set as well.
    credit_reference_id CiString(39) ? Is required to be set for a Credit CDR. This SHALL contain the id of the CDR for which this is a Credit CDR.
    home_charging_compensation boolean ? When set to true, this CDR is for a charging session using the home charger of the EV Driver for which the energy cost needs to be financially compensated to the EV Driver.
    last_updated DateTime 1 Timestamp when this CDR was last updated (or created).

    Sample Response

    [
      {
        "country_code": "BE",
        "party_id": "BEC",
        "id": "12345",
        "start_date_time": "2015-06-29T21:39:09Z",
        "end_date_time": "2015-06-29T23:37:32Z",
        "cdr_token": {
          "uid": "012345678",
          "type": "RFID",
          "contract_id": "DE8ACC12E46L89"
        },
        "auth_method": "WHITELIST",
        "cdr_location": {
          "id": "LOC1",
          "name": "Gent Zuid",
          "address": "F.Rooseveltlaan 3A",
          "city": "Gent",
          "postal_code": "9000",
          "country": "BEL",
          "coordinates": {
            "latitude": "3.729944",
            "longitude": "51.047599"
          },
          "evse_uid": "3256",
          "evse_id": "BE*BEC*E041503003",
          "connector_id": "1",
          "connector_standard": "IEC_62196_T2",
          "connector_format": "SOCKET",
          "connector_power_type": "AC_1_PHASE"
        },
        "currency": "EUR",
        "tariffs": [
          {
            "country_code": "BE",
            "party_id": "BEC",
            "id": "12",
            "currency": "EUR",
            "elements": [
              {
                "price_components": [
                  {
                    "type": "TIME",
                    "price": 2.0,
                    "vat": 10.0,
                    "step_size": 300
                  }
                ]
              }
            ],
            "last_updated": "2015-02-02T14:15:01Z"
          }
        ],
        "charging_periods": [
          {
            "start_date_time": "2015-06-29T21:39:09Z",
            "dimensions": [
              {
                "type": "TIME",
                "volume": 1.973
              }
            ],
            "tariff_id": "12"
          }
        ],
        "total_cost": {
          "excl_vat": 4.0,
          "incl_vat": 4.4
        },
        "total_energy": 15.342,
        "total_time": 1.973,
        "total_time_cost": {
          "excl_vat": 4.0,
          "incl_vat": 4.4
        },
        "last_updated": "2015-06-29T22:01:13Z"
      }
    ]

    Exception Handling

    The format of errors is always the same and specified in the Fundamentals section.


    Get a particular CDR


    This API, will return the private charging particular CDR.

    The complete list of query parameters and its details are provided in the OAS specification which can be used to filter down the search result based on the user journey.

    Headers parameters

    HEADER PARAMETER DATA TYPE LIMITS (MIN/MAX) NULLABLE DESCRIPTION
    Authorization String N/A No This is a Bearer token. It should be the token you got when you requested an Access Token before.

    Example: Bearer xxxxxxxxxx

    Request query parameters

    REQUEST QUERY PARAMETER DATA TYPE REQUIRED VALUE
    _cdrid CiString(36) Yes CDR.id of the CDR for which the Charging Preferences are to be set.

    Sample Request

    curl --location '{{url}}/v1/cdrs/{cdr_id}' \
    --header 'Authorization: Bearer ***' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json'

    Response

    On success the response will have a 200 OK status and the data property from body of the response will contain a JSON object with:

    KEY VALUE TYPE CARDINALITY DESCRIPTION
    country_code CiString(2) 1 ISO-3166 alpha-2 country code of the CPO that 'owns' this CDR.
    party_id CiString(3) 1 ID of the CPO that 'owns' this CDR (following the ISO-15118 standard).
    id CiString(39) 1 Uniquely identifies the CDR, the ID SHALL be unique per country_code/party_id combination. This field is longer than the usual 36 characters to allow for credit CDRs to have something appended to the original ID. Normal (non-credit) CDRs SHALL only have an ID with a maximum length of 36.
    start_date_time DateTime 1 Start timestamp of the charging session, or in the case of a reservation (before the start of a session) the start of the reservation.
    end_date_time DateTime 1 The timestamp when the session was completed/finished, charging might have finished before the session ends, for example: EV is full, but parking cost also has to be paid.
    session_id CiString(36) ? Unique ID of the Session for which this CDR is sent. Is only allowed to be omitted when the CPO has not implemented the Sessions module or this CDR is the result of a reservation that never became a charging session, thus no OCPI Session.
    cdr_token CdrToken(JSON) 1 Token used to start this charging session, including all the relevant information to identify the unique token.
    cdr_token.country_code CiString(2) 1 ISO-3166 alpha-2 country code of the MSP that 'owns' this Token.
    cdr_token.party_id CiString(3) 1 ID of the eMSP that 'owns' this Token (following the ISO-15118 standard).
    cdr_token.uid CiString(36) 1 Unique ID by which this Token can be identified. This is the field used by the CPO’s system (RFID reader on the Charge Point) to identify this token. Currently, in most cases: type=RFID, this is the RFID hidden ID as read by the RFID reader, but that is not a requirement. If this is a type=APP_USER Token, it will be a unique, by the eMSP, generated ID.
    cdr_token.type TokenType(Enum) 1 Type of the token. Could be AD_HOC_USER, APP_USER, OTHER or RFID.
    cdr_token.contract_id CiString(36) 1 Uniquely identifies the EV driver contract token within the eMSP’s platform (and suboperator platforms). Recommended to follow the specification for eMA ID from "eMI3 standard version V1.0" (http://emi3group.com/documents-links/) "Part 2: business objects."
    auth_method AuthMethod(Enum) 1 Method used for authentication. Multiple AuthMethods are possible during a charging session, for example when the session was started with a reservation: ReserveNow: COMMAND. When the driver arrives and starts charging using a Token that is whitelisted: WHITELIST. The last method SHALL be used in the CDR. Could be AUTH_REQUEST, COMMAND or WHITELIST.
    authorization_reference CiString(36) ? Reference to the authorization given by the eMSP. When the eMSP provided an authorization_reference in either: real-time authorization, StartSession or ReserveNow, this field SHALL contain the same value. When different authorization_reference values have been given by the eMSP that are relevant to this Session, the last given value SHALL be used here.
    cdr_location CdrLocation(JSON) 1 Location where the charging session took place, including only the relevant EVSE and Connector.
    cdr_location.id CiString(36) 1 Uniquely identifies the location within the CPO’s platform (and suboperator platforms). This field can never be changed, modified or renamed.
    cdr_location.name string(255) ? Display name of the location.
    cdr_location.address string(45) 1 Street/block name and house number if available.
    cdr_location.city string(45) 1 City or town.
    cdr_location.postal_code string(10) ? Postal code of the location, may only be omitted when the location has no postal code: in some countries charging locations at highways don’t have postal codes.
    cdr_location.state string(20) ? State only to be used when relevant.
    cdr_location.country string(3) 1 ISO 3166-1 alpha-3 code for the country of this location.
    cdr_location.coordinates GeoLocation 1 Coordinates of the location.
    cdr_location.coordinates.latitude String(10) 1 Latitude of the point in decimal degree. Example: 50.770774. Decimal separator: “.” Regex: -?[0-9]{1,2}.[0-9]{6}
    cdr_location.coordinates.longitude String(11) 1 Longitude of the point in decimal degree. Example: -126.104965. Decimal separator: “.” Regex: -?[0-9]{1,3}.[0-9]{6}
    cdr_location.evse_uid CiString(36) 1 Uniquely identifies the EVSE within the CPO’s platform (and suboperator platforms). For example a database unique ID or the actual EVSE ID. This field can never be changed, modified or renamed. This is the technical identification of the EVSE, not to be used as human readable identification, use the field: evse_id for that. Allowed to be set to: #NA when this CDR is created for a reservation that never resulted in a charging session.
    cdr_location.evse_id CiString(48) 1 Compliant with the following specification for EVSE ID from "eMI3 standard version V1.0" (http://emi3group.com/documents-links/) "Part 2: business objects.". Allowed to be set to: #NA when this CDR is created for a reservation that never resulted in a charging session.
    cdr_location.connector_id CiString(36) 1 Identifier of the connector within the EVSE. Allowed to be set to: #NA when this CDR is created for a reservation that never resulted in a charging session.
    cdr_location.connector_standard ConnectorType(Enum) 1 The standard of the installed connector. When this CDR is created for a reservation that never resulted in a charging session, this field can be set to any value and should be ignored by the Receiver. Could be CHADEMO, CHAOJI, DOMESTICA, DOMESTIC_B, DOMESTIC_C, DOMESTIC_D, DOMESTIC_E, DOMESTIC_F, DOMESTIC_G, DOMESTIC_H, DOMESTIC_I, DOMESTIC_J, DOMESTIC_K, DOMESTIC_L, DOMESTIC_M, DOMESTIC_N, DOMESTIC_O, GBT_AC, GBT_DC, IEC_60309_2_single_16, IEC_60309_2_three_16, IEC_60309_2_three_32, IEC_60309_2_three_64, IEC_62196_T1, IEC_62196_T1_COMBO, IEC_62196_T2, IEC_62196_T2_COMBO, IEC_62196_T3A, IEC_62196_T3C, NEMA_5_20, NEMA_6_30, NEMA_6_50, NEMA_10_30, NEMA_10_50, NEMA_14_30, NEMA_14_50, PANTOGRAPH_BOTTOM UP, PANTOGRAPH_TOP_DOW N, TESLA_R or TESLA_S
    cdr_location.connector_format ConnectorFormat(Enum) 1 The format (socket/cable) of the installed connector. When this CDR is created for a reservation that never resulted in a charging session, this field can be set to any value and should be ignored by the Receiver. Could be SOCKET or CABLE.
    cdr_location.connector_power_type PowerType(Enum) 1 When this CDR is created for a reservation that never resulted in a charging session, this field can be set to any value and should be ignored by the Receiver. Could be AC_1_PHASE, AC_2_PHASE, AC_2_PHASE_SPLIT, AC_3_PHASE or DC
    meter_id string(255) ? Identification of the Meter inside the Charge Point.
    currency string(3) 1 Currency of the CDR in ISO 4217 Code.
    tariffs Tariff(Array) * List of relevant Tariff Elements, see: Tariff. When relevant, a Free of Charge tariff should also be in this list, and point to a defined Free of Charge Tariff.
    tariffs.country_code CiString(2) 1 ISO-3166 alpha-2 country code of the CPO that owns this Tariff.
    tariffs.party_id CiString(3) 1 ID of the CPO that 'owns' this Tariff (following the ISO-15118 standard).
    tariffs.id CiString(36) 1 Uniquely identifies the tariff within the CPO’s platform (and suboperator platforms).
    tariffs.currency string(3) 1 ISO-4217 code of the currency of this tariff.
    tariffs.type TariffType(Enum) ? Defines the type of the tariff. This allows for distinction in case of given Charging Preferences. When omitted, this tariff is valid for all sessions. Could be AD_HOC_PAYMENT, PROFILE_CHEAP, PROFILE_FAST, PROFILE_GREEN or REGULAR.
    tariffs.tariff_alt_text DisplayText(Array) * List of multi-language alternative tariff info texts.
    tariffs.tariff_alt_text.language string(2) 1 Language Code ISO 639-1
    tariffs.tariff_alt_text.text string(512) 1 Text to be displayed to an end user. No markup, html etc. allowed.
    tariffs.tariff_alt_url URL ? URL to a web page that contains an explanation of the tariff information in human readable form.
    tariffs.min_price Price(JSON) ? When this field is set, a Charging Session with this tariff will at least cost this amount. This is different from a FLAT fee (Start Tariff, Transaction Fee), as a FLAT fee is a fixed amount that has to be paid for any Charging Session. A minimum price indicates that when the cost of a Charging Session is lower than this amount, the cost of the Session will be equal to this amount.
    tariffs.min_price.excl_vat number 1 Price/Cost excluding VAT.
    tariffs.min_price.incl_vat number ? Price/Cost including VAT.
    tariffs.max_price Price(JSON) ? When this field is set, a Charging Session with this tariff will NOT cost more than this amount.
    tariffs.max_price.excl_vat number 1 Price/Cost excluding VAT.
    tariffs.max_price.incl_vat number ? Price/Cost including VAT.
    tariffs.elements TariffElement(Array) + List of Tariff Elements.
    tariffs.elements.price_components PriceComponent(Array) + List of price components that describe the pricing of a tariff.
    tariffs.elements.price_components.type TariffDimensionType(Enum) 1 Type of tariff dimension. Could be ENERGY, FLAT, PARKING_TIME or TIME.
    tariffs.elements.price_components.price number 1 Price per unit (excl. VAT) for this tariff dimension.
    tariffs.elements.price_components.vat number ? Applicable VAT percentage for this tariff dimension. If omitted, no VAT is applicable. Not providing a VAT is different from 0% VAT, which would be a value of 0.0 here.
    tariffs.elements.price_components.step_size int 1 Minimum amount to be billed. This unit will be billed in this step_size blocks. Amounts that are less than this step_size are rounded up to the given step_size. For example: if type is TIME and step_size has a value of 300, then time will be billed in blocks of 5 minutes. If 6 minutes were used, 10 minutes (2 blocks of step_size) will be billed.
    tariffs.elements.restrictions TariffRestrictions ? Restrictions that describe the applicability of a tariff.
    tariffs.elements.restrictions.start_time string(5) ? Start time of day in local time, the time zone is defined in the time_zone field of the Location, for example 13:30, valid from this time of the day. Must be in 24h format with leading zeros. Hour/Minute separator: ":" Regex: ([0-1][0-9]2[0-3]):[0-5][0-9]
    tariffs.elements.restrictions.end_time string(5) ? End time of day in local time, the time zone is defined in the time_zone field of the Location, for example 19:45, valid until this time of the day. Same syntax as start_time. If end_time < start_time then the period wraps around to the next day. To stop at end of the day use: 00:00.
    tariffs.elements.restrictions.start_date string(10) ? Start date in local time, the time zone is defined in the time_zone field of the Location, for example: 2015-12-24, valid from this day (inclusive). Regex: ([12][0-9]{3})-(0[1-9]1[0-2])-(0[1-9][12][0-9]3[01])
    tariffs.elements.restrictions.end_date string(10) ? End date in local time, the time zone is defined in the time_zone field of the Location, for example: 2015-12-27, valid until this day (exclusive). Same syntax as start_date.
    tariffs.elements.restrictions.min_kwh number ? Minimum consumed energy in kWh, for example 20, valid from this amount of energy (inclusive) being used.
    tariffs.elements.restrictions.max_kwh number ? Maximum consumed energy in kWh, for example 50, valid until this amount of energy (exclusive) being used.
    tariffs.elements.restrictions.min_current number ? Sum of the minimum current (in Amperes) over all phases, for example 5. When the EV is charging with more than, or equal to, the defined amount of current, this TariffElement is/becomes active. If the charging current is or becomes lower, this TariffElement is not or no longer valid and becomes inactive. This describes NOT the minimum current over the entire Charging Session. This restriction can make a TariffElement become active when the charging current is above the defined value, but the TariffElement MUST no longer be active when the charging current drops below the defined value.
    tariffs.elements.restrictions.max_current number ? Sum of the maximum current (in Amperes) over all phases, for example 20. When the EV is charging with less than the defined amount of current, this TariffElement becomes/is active. If the charging current is or becomes higher, this TariffElement is not or no longer valid and becomes inactive. This describes NOT the maximum current over the entire Charging Session. This restriction can make a TariffElement become active when the charging current is below this value, but the TariffElement MUST no longer be active when the charging current raises above the defined value.
    tariffs.elements.restrictions.min_power number ? Minimum power in kW, for example 5. When the EV is charging with more than, or equal to, the defined amount of power, this TariffElement is/becomes active. If the charging power is or becomes lower, this TariffElement is not or no longer valid and becomes inactive. This describes NOT the minimum power over the entire Charging Session. This restriction can make a TariffElement become active when the charging power is above this value, but the TariffElement MUST no longer be active when the charging power drops below the defined value.
    tariffs.elements.restrictions.max_power number ? Maximum power in kW, for example 20. When the EV is charging with less than the defined amount of power, this TariffElement becomes/is active. If the charging power is or becomes higher, this TariffElement is not or no longer valid and becomes inactive. This describes NOT the maximum power over the entire Charging Session. This restriction can make a TariffElement become active when the charging power is below this value, but the TariffElement MUST no longer be active when the charging power raises above the defined value.
    tariffs.elements.restrictions.min_duration int ? Minimum duration in seconds the Charging Session MUST last (inclusive). When the duration of a Charging Session is longer than the defined value, this TariffElement is or becomes active. Before that moment, this TariffElement is not yet active.
    tariffs.elements.restrictions.max_duration int ? Maximum duration in seconds the Charging Session MUST last (exclusive). When the duration of a Charging Session is shorter than the defined value, this TariffElement is or becomes active. After that moment, this TariffElement is no longer active.
    tariffs.elements.restrictions.day_of_week DayOfWeek(Array) * Which day(s) of the week this TariffElement is active. Could be MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY and SUNDAY.
    tariffs.elements.restrictions.reservation ReservationRestrictionType(Enum) * When this field is present, the TariffElement describes reservation costs. A reservation starts when the reservation is made, and ends when the driver starts charging on the reserved EVSE/Location, or when the reservation expires. A reservation can only have: FLAT and TIME TariffDimensions, where TIME is for the duration of the reservation. Could be RESERVATION or RESERVATION_EXPIRES.
    tariffs.start_date_time DateTime ? The time when this tariff becomes active, in UTC, time_zone field of the Location can be used to convert to local time. Typically used for a new tariff that is already given with the location, before it becomes active.
    tariffs.end_date_time DateTime ? The time after which this tariff is no longer valid, in UTC, time_zone field if the Location can be used to convert to local time. Typically used when this tariff is going to be replaced with a different tariff in the near future.
    tariffs.energy_mix EnergyMix(JSON) ? Details on the energy supplied with this tariff.
    tariffs.energy_mix.is_green_energy boolean 1 True if 100% from regenerative sources. (CO2 and nuclear waste is zero)
    tariffs.energy_mix.energy_sources EnergySource(Array) * Key-value pairs (enum + percentage) of energy sources of this location’s tariff.
    tariffs.energy_mix.energy_sources.source EnergySourceCategory(Enum) 1 The type of energy source. Could be NUCLEAR, GENERAL_FOSSIL, COAL, GAS, GENERAL_GREEN, SOLAR, WIND or WATER
    tariffs.energy_mix.energy_sources.percentage number 1 Percentage of this source (0-100) in the mix.
    tariffs.energy_mix.environ_impact EnvironmentalImpact(Array) * Key-value pairs (enum + percentage) of nuclear waste and CO2 exhaust of this location’s tariff.
    tariffs.energy_mix.environ_impact.category EnvironmentalImpactCategory(Enum) 1 The type of environmental impact. Could be NUCLEAR_WASTE or CARBON_DIOXIDE
    tariffs.energy_mix.environ_impact.amount number 1 Percentage of this impact (0-100) in the mix.
    tariffs.energy_mix.supplier_name string(64) ? Name of the energy supplier, delivering the energy for this location or tariff.
    tariffs.energy_mix.energy_product_name string(64) ? Name of the energy supplier's product/tariff plan used at this location.
    tariffs.last_updated DateTime 1 Timestamp when this Tariff was last updated (or created).
    charging_periods ChargingPeriod(Array) + List of Charging Periods that make up this charging session. A session consists of 1 or more periods, where each period has a different relevant Tariff.
    charging_periods.start_date_time DateTime 1 Start timestamp of the charging period. A period ends when the next period starts. The last period ends when the session ends.
    charging_periods.dimensions CdrDimension(Array) + List of relevant values for this charging period.
    charging_periods.dimensions.type CdrDimensionType 1 Type of CDR dimension. Could be CURRENT, ENERGY, ENERGY_EXPORT, ENERGY_IMPORT, MAX_POWER, MAX_CURRENT, MIN_CURRENT, MIN_POWER, PARKING_TIME, POWER, RESERVATION_TIME, STATE_OF_CHARGE or TIME.
    charging_periods.dimensions.volume number 1 Volume of the dimension consumed, measured according to the dimension type.
    charging_periods.tariff_id CiString(36) ? Unique identifier of the Tariff that is relevant for this Charging Period. If not provided, no Tariff is relevant during this period.
    signed_data SignedData 1 Data signed to ensure integrity and authenticity.
    signed_data.encoding_method CiString(36) 1 The name of the encoding used in the SignedData field. This is the name given to the encoding by a company or group of companies. See note below.
    signed_data.encoding_method_version int ? Version of the EncodingMethod (when applicable).
    signed_data.public_key string(512) ? Public key used to sign the data, base64 encoded.
    signed_data.signed_values SignedValue(Array of Enum) + One or more signed values. Could be nature, plain_data and signed_data.
    signed_data.url string(512) ? URL that can be shown to an EV driver. This URL gives the EV driver the possibility to check the signed data from a charging session.
    total_cost Price(JSON) 1 Total sum of all the costs of this transaction in the specified currency.
    total_cost.excl_vat number 1 Price/Cost excluding VAT.
    total_cost.incl_vat number ? Price/Cost including VAT.
    total_fixed_cost Price(JSON) ? Total sum of all the fixed costs in the specified currency, except fixed price components of parking and reservation. The cost not depending on amount of time/energy used etc. Can contain costs like a start tariff.
    total_energy number 1 Total amount of energy used during the charging session, in the specified unit.
    total_energy_cost Price(JSON) ? Total sum of all the cost of all the energy used, in the specified currency.
    total_energy_cost.excl_vat number 1 Price/Cost excluding VAT.
    total_energy_cost.incl_vat number ? Price/Cost including VAT.
    total_time number 1 Total duration of the charging session (including the duration of charging and not charging), in hours.
    total_time_cost Price(JSON) ? Total sum of all the cost related to duration of charging during this transaction, in the specified currency.
    total_time_cost.excl_vat number 1 Price/Cost excluding VAT.
    total_time_cost.incl_vat number ? Price/Cost including VAT.
    total_parking_time number ? Total duration of the charging session where the EV was not charging (no energy was transferred between EVSE and EV), in hours.
    total_parking_cost Price(JSON) ? Total sum of all the cost related to parking of this transaction, including fixed price components, in the specified currency.
    total_parking_cost.excl_vat number 1 Price/Cost excluding VAT.
    total_parking_cost.incl_vat number ? Price/Cost including VAT.
    total_reservation_cost Price(JSON) ? Total sum of all the cost related to a reservation of a Charge Point, including fixed price components, in the specified currency.
    total_reservation_cost.excl_vat number 1 Price/Cost excluding VAT.
    total_reservation_cost.incl_vat number ? Price/Cost including VAT.
    remark string(255) ? Optional remark, can be used to provide additional human-readable information to the CDR, for example: reason why a transaction was stopped.
    invoice_reference_id CiString(39) ? This field can be used to reference an invoice, that will later be sent for this CDR. Making it easier to link a CDR to a given invoice. Maybe even group CDRs that will be on the same invoice.
    credit boolean ? When set to true, this is a Credit CDR, and the field credit_reference_id needs to be set as well.
    credit_reference_id CiString(39) ? Is required to be set for a Credit CDR. This SHALL contain the id of the CDR for which this is a Credit CDR.
    home_charging_compensation boolean ? When set to true, this CDR is for a charging session using the home charger of the EV Driver for which the energy cost needs to be financially compensated to the EV Driver.
    last_updated DateTime 1 Timestamp when this CDR was last updated (or created).

    Sample Response

    {
      "country_code": "BE",
      "party_id": "BEC",
      "id": "12345",
      "start_date_time": "2015-06-29T21:39:09Z",
      "end_date_time": "2015-06-29T23:37:32Z",
      "cdr_token": {
        "uid": "012345678",
        "type": "RFID",
        "contract_id": "DE8ACC12E46L89"
      },
      "auth_method": "WHITELIST",
      "cdr_location": {
        "id": "LOC1",
        "name": "Gent Zuid",
        "address": "F.Rooseveltlaan 3A",
        "city": "Gent",
        "postal_code": "9000",
        "country": "BEL",
        "coordinates": {
          "latitude": "3.729944",
          "longitude": "51.047599"
        },
        "evse_uid": "3256",
        "evse_id": "BE*BEC*E041503003",
        "connector_id": "1",
        "connector_standard": "IEC_62196_T2",
        "connector_format": "SOCKET",
        "connector_power_type": "AC_1_PHASE"
      },
      "currency": "EUR",
      "tariffs": [
        {
          "country_code": "BE",
          "party_id": "BEC",
          "id": "12",
          "currency": "EUR",
          "elements": [
            {
              "price_components": [
                {
                  "type": "TIME",
                  "price": 2.0,
                  "vat": 10.0,
                  "step_size": 300
                }
              ]
            }
          ],
          "last_updated": "2015-02-02T14:15:01Z"
        }
      ],
      "charging_periods": [
        {
          "start_date_time": "2015-06-29T21:39:09Z",
          "dimensions": [
            {
              "type": "TIME",
              "volume": 1.973
            }
          ],
          "tariff_id": "12"
        }
      ],
      "total_cost": {
        "excl_vat": 4.0,
        "incl_vat": 4.4
      },
      "total_energy": 15.342,
      "total_time": 1.973,
      "total_time_cost": {
        "excl_vat": 4.0,
        "incl_vat": 4.4
      },
      "last_updated": "2015-06-29T22:01:13Z"
    }

    Exception Handling

    The format of errors is always the same and specified in the Fundamentals section.


    Send a command


    Introduction

    This API, will enable remote commands to be sent to a Location/EVSE.

    The following commands are supported:

    • CANCEL_RESERVATION
    • RESERVE_NOW
    • START_SESSION
    • STOP_SESSION
    • UNLOCK_CONNECTOR

    The complete list of query parameters and its details are provided in the OAS specification which can be used to filter down the search result based on the user journey.

    Headers parameters

    HEADER PARAMETER DATA TYPE LIMITS (MIN/MAX) NULLABLE DESCRIPTION
    Authorization String N/A No This is a Bearer token. It should be the token you got when you requested an Access Token before.

    Example: Bearer xxxxxxxxxx

    Request path parameters

    REQUEST PATH PARAMETER DATA TYPE REQUIRED VALUE
    command CommandType(enum) Yes Type of command that is requested. Could be CANCEL_RESERVATION, RESERVE_NOW, START_SESSION, STOP_SESSION or UNLOCK_CONNECTOR

    Request body parameters

    Depending on the command the body could be one of the following options:

    CANCEL_RESERVATION
    REQUEST BODY PARAMETER DATA TYPE CARDINALITY VALUE
    response_url URL 1 URL that the CommandResult POST should be sent to. This URL might contain a unique ID to distinguish between CancelReservation requests.
    reservation_id CiString(36) 1 Reservation ID, unique for this reservation. If the Charge Point already has a reservation that matches this reservation_id, the Charge Point will replace the reservation.
    RESERVE_NOW
    REQUEST BODY PARAMETER DATA TYPE CARDINALITY VALUE
    response_url URL 1 URL that the CommandResult POST should be sent to. This URL might contain a unique ID to distinguish between ReserveNow requests.
    token Token 1 Token object for how to reserve this Charge Point (and specific EVSE).
    token.country_code CiString(2) 1 ISO-3166 alpha-2 country code of the MSP that 'owns' this Token.
    token.party_id CiString(3) 1 ID of the eMSP that 'owns' this Token (following the ISO-15118 standard).
    token.uid CiString(36) 1 Unique ID by which this Token, combined with the Token type, can be identified. This is the field used by CPO system (RFID reader on the Charge Point) to identify this token.
    token.type TokenType(enum) 1 Type of the token. Could be AD_HOC_USER, APP_USER, OTHER or RFID.
    token.contract_id CiString(36) 1 Uniquely identifies the EV Driver contract token within the eMSP’s platform (and suboperator platforms).
    token.visual_number string(64) ? Visual readable number/identification as printed on the Token (RFID card), might be equal to the contract_id.
    token.issuer string(64) 1 Issuing company, most of the times the name of the company printed on the token (RFID card), not necessarily the eMSP.
    token.group_id CiString(36) ? This ID groups a couple of tokens. Can be used to make two or more tokens work as one, so that a session can be started with one token and stopped with another. Beware that OCPP 1.5/1.6 only support group_ids (it is called parentId in OCPP 1.5/1.6) with a maximum length of 20.
    token.valid boolean 1 Indicates if this Token is valid.
    token.whitelist WhitelistType(enum) 1 Indicates what type of white-listing is allowed. Could be ALWAYS, ALLOWED, ALLOWED_OFFLINE OR NEVER.
    token.language string(2) ? Language Code ISO 639-1. This optional field indicates the Token owner’s preferred interface language. If not provided or not supported, then the CPO is free to choose its own language.
    token.default_profile_type ProfileType(enum) ? The default Charging Preference. When provided, and a charging session is started on a Charge Point that supports Preference-based Smart Charging and this ProfileType, the Charge Point can start using this ProfileType without needing to be set via: Set Charging Preferences. Could be CHEAP, FAST, GREEN or REGULAR.
    token.energy_contract EnergyContract ? When the Charge Point supports using your own energy supplier/contract at a Charge Point, information about the energy supplier/contract is needed so the CPO knows which energy supplier to use. NOTE: In a lot of countries it is currently not allowed/possible to use a drivers own energy supplier/contract at a Charge Point.
    token.energy_contract.supplier_name string(64) 1 Name of the energy supplier for this token.
    token.energy_contract.contract_id string(64) ? Contract ID at the energy supplier, that belongs to the owner of this token.
    token.last_updated DateTime 1 Timestamp when this Token was last updated (or created).
    expiry_date DateTime 1 The Date/Time when this reservation ends, in UTC.
    reservation_id CiString(36) 1 Reservation ID, unique for this reservation. If the Receiver (typically CPO) already has a reservation that matches this reservation ID, it will replace the reservation.
    location_id CiString(36) 1 Location ID of the Location (belonging to the CPO this request is sent to) for which to reserve an EVSE.
    evse_uid CiString(36) ? Optional EVSE UID of the EVSE of this Location if a specific EVSE has to be reserved.
    authorization_reference CiString(36) ? Reference to the authorization given by the eMSP, when given. This reference will be provided in the relevant Session and/or CDR.
    START_SESSION
    REQUEST BODY PARAMETER DATA TYPE CARDINALITY VALUE
    response_url URL 1 URL that the CommandResult POST should be sent to. This URL might contain a unique ID to distinguish between StartSession requests.
    token Token 1 Token object the Charge Point has to use to start a new session. The Token provided in this request is authorized by the eMSP.
    token.country_code CiString(2) 1 ISO-3166 alpha-2 country code of the MSP that 'owns' this Token.
    token.party_id CiString(3) 1 ID of the eMSP that 'owns' this Token (following the ISO-15118 standard).
    token.uid CiString(36) 1 Unique ID by which this Token, combined with the Token type, can be identified. This is the field used by CPO system (RFID reader on the Charge Point) to identify this token.
    token.type TokenType(enum) 1 Type of the token. Could be AD_HOC_USER, APP_USER, OTHER or RFID.
    token.contract_id CiString(36) 1 Uniquely identifies the EV Driver contract token within the eMSP’s platform (and suboperator platforms).
    token.visual_number string(64) ? Visual readable number/identification as printed on the Token (RFID card), might be equal to the contract_id.
    token.issuer string(64) 1 Issuing company, most of the times the name of the company printed on the token (RFID card), not necessarily the eMSP.
    token.group_id CiString(36) ? This ID groups a couple of tokens. Can be used to make two or more tokens work as one, so that a session can be started with one token and stopped with another. Beware that OCPP 1.5/1.6 only support group_ids (it is called parentId in OCPP 1.5/1.6) with a maximum length of 20.
    token.valid boolean 1 Indicates if this Token is valid.
    token.whitelist WhitelistType(enum) 1 Indicates what type of white-listing is allowed. Could be ALWAYS, ALLOWED, ALLOWED_OFFLINE OR NEVER.
    token.language string(2) ? Language Code ISO 639-1. This optional field indicates the Token owner’s preferred interface language. If not provided or not supported, then the CPO is free to choose its own language.
    token.default_profile_type ProfileType(enum) ? The default Charging Preference. When provided, and a charging session is started on a Charge Point that supports Preference-based Smart Charging and this ProfileType, the Charge Point can start using this ProfileType without needing to be set via: Set Charging Preferences. Could be CHEAP, FAST, GREEN or REGULAR.
    token.energy_contract EnergyContract ? When the Charge Point supports using your own energy supplier/contract at a Charge Point, information about the energy supplier/contract is needed so the CPO knows which energy supplier to use. NOTE: In a lot of countries it is currently not allowed/possible to use a drivers own energy supplier/contract at a Charge Point.
    token.energy_contract.supplier_name string(64) 1 Name of the energy supplier for this token.
    token.energy_contract.contract_id string(64) ? Contract ID at the energy supplier, that belongs to the owner of this token.
    token.last_updated DateTime 1 Timestamp when this Token was last updated (or created).
    location_id CiString(36) 1 Location ID of the Location (belonging to the CPO this request is sent to) on which a session is to be started.
    evse_uid CiString(36) ? Optional EVSE UID of the EVSE of this Location on which a session is to be started. Required when connector_id is set.
    connector_id CiString(36) ? Optional Connector ID of the Connector of the EVSE on which a session is to be started. Required when START_SESSION_CONNECTOR_REQUIRED capability is set on the EVSE.
    authorization_reference CiString(36) ? Reference to the authorization given by the eMSP, when given, this reference will be provided in the relevant Session and/or CDR.
    STOP_SESSION
    REQUEST BODY PARAMETER DATA TYPE CARDINALITY VALUE
    response_url URL 1 URL that the CommandResult POST should be sent to. This URL might contain a unique ID to distinguish between StopSession requests.
    session_id CiString(36) 1 Session ID of the Session that is requested to be stopped.
    UNLOCK_CONNECTOR
    REQUEST BODY PARAMETER DATA TYPE CARDINALITY VALUE
    response_url URL 1 URL that the CommandResult POST should be sent to. This URL might contain a unique ID to distinguish between UnlockConnector requests.
    location_id CiString(36) 1 Location.id of the Location (belonging to the CPO this request is sent to) for which it is requested to unlock the connector.
    evse_uid CiString(36) 1 EVSE.uid of the EVSE of this Location for which it is requested to unlock the connector.
    connector_id CiString(36) 1 Connector.id of the Connector of this Location for which it is requested to unlock.

    Sample Request

    curl --location '{{url}}/v1/commands/{path parameter} \
    --header 'Authorization: Bearer ***' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --data-raw '{
      "response_url": "https://example.com/your-response-url",
      "session_id": "your-session-id"}'

    Response

    On success the response will have a 200 OK status and the data property from body of the response will contain a array of JSON objects with:

    KEY VALUE TYPE CARDINALITY DESCRIPTION
    result CommandResultType 1 Result of the command request as sent by the Charge Point to the CPO. Could be ACCEPTED, CANCELED_RESERVATION, EVSE_OCCUPIED, EVSE_INOPERATIVE, FAILED, NOT_SUPPORTED, REJECTED, TIMEOUT and UNKNOWN_RESERVATION
    message DisplayText * Human-readable description of the reason (if one can be provided), multiple languages can be provided.
    message.language string(2) 1 Language Code ISO 639-1
    message.text string(512) 1 Text to be displayed to a end user. No markup, html etc. allowed.

    Sample Response

    {
      "result": "REJECTED",
      "message": [
        {
          "language": "en",
          "text": "The reservation has been rejected due to an invalid session ID."
        },
        {
          "language": "es",
          "text": "La reserva ha sido rechazada debido a un ID de sesión inválido."
        }
      ]
    }

    Exception Handling

    The format of errors is always the same and specified in the Fundamentals section.

    За нас

    Порталът за разработчици на Shell подпомага партньорите при интегрирането с API-та на Shell и превръщането на идеите в решения, готови за внедряване в производството.

    Лого на Shell

    Свържете се с

    Влезте в профила си

    Попитайте AI Assistant за API-та и API продуктите на Shell