Bookings Module
The Booking module gives eMSPs information about the available booking options the CPO offers. Further eMSPs can request these time slots to reserve charging sessions for EV drivers.
1. Flow and Lifecycle
OverviewIntroduction
The Bookings module has two main objects and one with a sub object: Booking and BookingLocation. The
BookingLocation also has a submodule Calendar object for availability.
To make a booking, first a BookingLocation should be published to an eMSP or be requested from
the CPO backoffice.
The CPO communicates a BookingLocation to the eMSP. The BookingLocation covers the information per location, and then can either choose to have the possible bookable parking options or provide a list of bookable EVSE UIDs.
BookingLocation
Describes a location where bookings can be made, including parking options, EVSEs, calendars, and booking terms.
Calendar
Sub-object of BookingLocation. Contains available timeslots and power information for a specific time range.
Booking
Represents a reservation request and its current state, linking a driver's token to a specific timeslot at a location.
Booking State Diagram
A Booking typically follows the following lifecycle:
- A Booking starts in a
PENDINGstate when initially requested by the eMSP. - From
PENDING, the CPO can move the booking to:RESERVEDif the booking request is successful.REJECTEDif the requested timeslot or booking option isn't available.FAILEDif there's an error processing the request.
- From
RESERVED, the Booking can transition to:FULFILLEDwhen successfully utilized.CANCELEDif the eMSP or CPO cancels the booking.NO_SHOWif the booking is not utilized within the timeframe specified by the booking terms.
If a booking moves to CANCELED, NO_SHOW, REJECTED, FAILED, or FULFILLED, it
reaches a final state. The booking terms URL
(booking_terms)
should contain further details, including no-show policies or possible fines.
┌──────────┐
│ PENDING │
└────┬─────┘
/ | \
v v v
┌────────┐ ┌────────┐ ┌──────────┐
│REJECTED│ │ FAILED │ │ RESERVED │
└────────┘ └────────┘ └────┬─────┘
/ | \
v v v
┌────────┐ ┌───────┐ ┌──────────┐
│CANCELED│ │NO_SHOW│ │FULFILLED │
└────────┘ └───────┘ └──────────┘17.1.1. Booking Lifecycle from Making to Fulfillment
Steps in a booking as described in "Successfully book a location and make a change to that booking":
MSP makes Booking Request at the CPO.
CPO responds with a PENDING ReservationStatus & PENDING ReservationRequestStatus.
CPO sends after processing the request a RESERVED ReservationStatus & ACCEPTED ReservationRequestStatus.
MSP wants to change the booking and makes a new request.
CPO responds with a RESERVED ReservationStatus & PENDING ReservationRequestStatus.
CPO updates after processing the request a RESERVED ReservationStatus & 2 ACCEPTED ReservationRequestStatus, one for each request.
Start transaction is triggered by the charging station. The session starts based on the Booking information.
CPO updates the reservation with ReservationStatus FULFILLED.
17.1.2. Cancel Booking from CPO
When there is a problem with the charger the CPO has the option to cancel the booking. Sending this update will inform the driver timely it is not possible to charge, because of an issue at the charging site.
The CPO sends a PATCH to the eMSP system updating the booking status to CANCELED.
2. Interfaces and Endpoints
APIFor Booking there is the Receiver and the Sender interface for Bookings. The advised flow is following the push as the main flow of data from the sender to the receiver. If parties don't want to share all their booking information during operation, it is also possible to pull data through the sender interfaces.
17.2.1. Sender Interface
Typically implemented by market roles like: CPO. The Bookings interface can be used to retrieve Bookings, BookingLocations and calendars, but also to request a booking or to change a booking. The interface is split up in BookingLocation with Calendar, and Booking interface.
BookingLocation and Calendar Interface
| Method | Description |
|---|---|
GET | Get a specific BookingLocation or Calendar, or fetch a list of BookingLocations last updated between the date_from and date_to (paginated). |
POST | n/a |
PUT | n/a |
PATCH | n/a |
DELETE | n/a |
Booking Interface
| Method | Description |
|---|---|
GET | Fetch a list of Bookings last updated between the date_from and date_to (paginated). |
POST | Request a new Booking request for a BookingLocation. |
PUT | n/c |
PATCH | n/c |
DELETE | n/a |
17.2.1.3. GET BookingLocations
This endpoint returns a list of BookingLocation objects. Each object must contain all required fields. Fields that are not specified may be considered as null values. Any old information that is not specified in the response is considered no longer valid.
{bookings_endpoint_url}/booking_locationshttps://www.server.com/ocpi/2.3/bookings/booking_locations/?date_from=2025-01-29T12:00:00&limit=100
https://www.server.com/ocpi/cpo/2.3/bookings/booking_locations/?offset=50&limit=100Request Parameters
If the optional parameters date_from and/or date_to are provided, only BookingLocations
with last_updated between the given date_from (including) and date_to (excluding) will be returned. This
request is paginated.
| Parameter | Datatype | Required | Description |
|---|---|---|---|
date_from | DateTime | no | Only return BookingLocations that have last_updated after or equal to this Date/Time (inclusive). |
date_to | DateTime | no | Only return BookingLocations that have last_updated up to this Date/Time, but not including (exclusive). |
offset | int | no | The offset of the first object returned. Default is 0. |
limit | int | no | Maximum number of objects to GET. |
timeslot_from | DateTime | no | Only return BookingLocations that have a timeslot after or equal to this Date/Time (inclusive). |
timeslot_to | DateTime | no | Only return BookingLocations that have a timeslot up to this Date/Time, but not including (exclusive). |
Response Data
| Datatype | Card. | Description |
|---|---|---|
BookingLocations | * | List of BookingLocations that match the request parameters. |
17.2.1.4. GET BookingLocation or Calendar
For retrieving a single BookingLocation or Calendar the endpoint is the following:
{bookings_endpoint_url}/booking_locations/{booking_location_id}/{calendar_id}https://www.server.com/ocpi/cpo/2.3/bookings/booking_locations/BL01
https://www.server.com/ocpi/cpo/2.3/bookings/booking_locations/BL01/23423URL Parameters
| Parameter | Datatype | Required | Description |
|---|---|---|---|
booking_location_id | CiString(36) | yes | BookingLocation.id of the BookingLocation object to retrieve. |
calendar_id | CiString(36) | no | Calendar.id, required when requesting a Calendar object. |
Response Data
| Type | Card. | Description |
|---|---|---|
| Choice: one of two | ||
BookingLocation | 1 | If a BookingLocation object was requested: the BookingLocation object. |
Calendar | 1 | If a Calendar object was requested: the Calendar object. |
17.2.1.5. GET Bookings
This endpoint returns a list of Booking objects. Each object must contain all required fields. Fields that are not specified may be considered as null values. Any old information that is not specified in the response is considered no longer valid.
{bookings_endpoint_url}https://www.server.com/ocpi/2.3/bookings/?date_from=2025-01-29T12:00:00&limit=100
https://www.server.com/ocpi/cpo/2.3/bookings/?offset=50&limit=100Request Parameters
If the optional parameters date_from and/or date_to are provided, only Bookings with last_updated between the given date_from (including) and date_to (excluding) will be returned. This
request is paginated.
| Parameter | Datatype | Required | Description |
|---|---|---|---|
date_from | DateTime | no | Only return Bookings that have last_updated after or equal to this Date/Time (inclusive). |
date_to | DateTime | no | Only return Bookings that have last_updated up to this Date/Time, but not including (exclusive). |
offset | int | no | The offset of the first object returned. Default is 0. |
limit | int | no | Maximum number of objects to GET. |
Response Data
| Datatype | Card. | Description |
|---|---|---|
Booking | * | List of Bookings that match the request parameters. |
17.2.1.6. POST Method
Send a Booking request to book a BookingLocation.
{bookings_endpoint_url}https://www.server.com/ocpi/cpo/2.3/bookings/Request Body
| Type | Card. | Description |
|---|---|---|
BookingRequest | 1 | A booking request for a BookingLocation. |
Response Data
The response contains the direct response from the Receiver. If however the response is pending, the definite result will be sent async back.
| Datatype | Card. | Description |
|---|---|---|
Booking | 1 | Result of the Booking request, by the CPO. This indicates if the CPO was able to receive the booking request. The Booking goes to PENDING but can also go directly to RESERVED, REJECTED, or FAILED. |
17.2.2. Receiver Interface
Typically implemented by market roles like: eMSP. Bookings and
BookingLocation are Client Owned Objects, so the end-points need to contain the required
extra fields: party_id and country_code.
{booking_endpoint_url}/{country_code}/{party_id}/booking_locations/{booking_location_id}
{booking_endpoint_url}/{country_code}/{party_id}/booking_locations/{booking_location_id}/{calendar_id}https://server.com/ocpi/2.3/bookings/NL/INF/booking_locations/LOC1
https://ocpi.server.com/2.3/bookings/SE/VOL/booking_locations/LOC2/3255BookingLocation and Calendar Interface
| Method | Description |
|---|---|
GET | Retrieves a BookingLocation or Calendar as stored in the eMSP system. |
POST | n/a (use PUT) |
PUT | Push BookingLocations or Calendars to the eMSP or receive the updated Booking from the CPO. |
PATCH | Push partial updates to a BookingLocation or Calendar, such as updating timeslots within a calendar. |
DELETE | n/a (use PATCH to update the status to REMOVED) |
{booking_endpoint_url}/{country_code}/{party_id}/{booking_id}https://www.server.com/ocpi/emsp/2.3/bookings/SE/VOL/BOK213Booking Interface
| Method | Description |
|---|---|
GET | Retrieves a Booking object as stored in the eMSP system. |
POST | n/a (use PUT) |
PUT | Push the updated Booking. |
PATCH | Push partial update on Booking. |
DELETE | n/a (use PATCH to update status to CANCELED or REJECTED) |
17.2.2.3. GET BookingLocation Method
If the CPO wants to check the status of a BookingLocation in the eMSP's system, it might GET the object from the eMSP's system for validation purposes. After all, the CPO is the owner of the object, so it would be illogical if the eMSP's system had a different version or was missing the object entirely.
Request Parameters
| Parameter | Datatype | Required | Description |
|---|---|---|---|
country_code | CiString(2) | yes | Country code of the CPO performing the GET request on the eMSP's system. |
party_id | CiString(3) | yes | Party ID (Provider ID) of the CPO performing the GET request on the eMSP's system. |
booking_location_id | CiString(36) | yes | BookingLocation.id of the Booking object to retrieve. |
Response Data
| Type | Card. | Description |
|---|---|---|
BookingLocation | 1 | The requested BookingLocation object. |
17.2.2.4. PUT Method
New or updated BookingLocation objects are pushed from the CPO to the eMSP.
Request Body
| Type | Card. | Description |
|---|---|---|
BookingLocation | 1 | New or updated BookingLocation object. |
Request Parameters
| Parameter | Datatype | Required | Description |
|---|---|---|---|
country_code | CiString(2) | yes | Country code of the CPO performing the PUT request on the eMSP's system. This SHALL be the same value as the country_code in the object being pushed. |
party_id | CiString(3) | yes | Party ID (Provider ID) of the CPO performing the PUT request on the eMSP's system. This SHALL be the same value as the party_id in the object being pushed. |
booking_location_id | CiString(36) | yes | BookingLocation.id of the BookingLocation object to create or replace. |
17.2.2.5. PATCH Method
Same as the PUT method, but only the fields/objects that have to be updated have to be present. Other fields/objects that are not specified as part of the request are considered unchanged. Therefore, this method is not suitable to remove information shared earlier.
Any request to the PATCH method SHALL contain the last_updated field.
When the PATCH is on a Calendar Object, the Receiver SHALL also set the new last_updated value
on the parent BookingLocation Objects.
PATCH To URL: https://www.server.com/ocpi/emsp/2.3/bookings/bookinglocations/NL/INF/BL0123
{
"booking_terms": {
"RFID_auth_required": true,
"token_groups_supported": false,
"remote_auth_supported": true,
"late_stop_allowed": false,
"overlapping_bookings_allowed": true,
"booking_terms": "/https://example.com/booking-a-charger"
},
"last_updated": "2024-12-05T20:02:13Z"
}PATCH To URL: https://www.server.com/ocpi/emsp/2.3/bookings/bookinglocations/NL/INF/BL0123/C0123
{
"step_size": 1,
"available_timeslots": [{
"start_from": "2025-03-23T00:00:00Z",
"end_before": "2025-03-23T08:59:99Z",
"min_power": 12,
"max_power": 12,
"green_power_support": false
}],
"last_updated": "2024-12-05T20:02:13Z"
}17.2.2.6. GET Booking Method
If the CPO wants to check the status of a Booking in the eMSP's system, it might GET the object from the eMSP's system for validation purposes. After all, the CPO is the owner of the object, so it would be illogical if the eMSP's system had a different version or was missing the object entirely.
Request Parameters
| Parameter | Datatype | Required | Description |
|---|---|---|---|
country_code | CiString(2) | yes | Country code of the CPO performing the GET request on the eMSP's system. |
party_id | CiString(3) | yes | Party ID (Provider ID) of the CPO performing the GET request on the eMSP's system. |
booking_id | CiString(36) | yes | Booking.id of the Booking object to retrieve. |
Response Data
| Type | Card. | Description |
|---|---|---|
Booking | 1 | The requested Booking object. |
17.2.2.7. PUT Method (Booking)
New or updated Booking objects are pushed from the CPO to the eMSP.
Request Body
| Type | Card. | Description |
|---|---|---|
Booking | 1 | New or updated Booking object. |
Request Parameters
| Parameter | Datatype | Required | Description |
|---|---|---|---|
country_code | CiString(2) | yes | Country code of the CPO performing the PUT request on the eMSP's system. This SHALL be the same value as the country_code in the object being pushed. |
party_id | CiString(3) | yes | Party ID (Provider ID) of the CPO performing the PUT request on the eMSP's system. This SHALL be the same value as the party_id in the object being pushed. |
booking_request_id | CiString(36) | yes | Booking.request_id of the Booking object to create or replace. |
17.2.2.8. PATCH Method (Booking)
Same as the PUT method, but only the fields/objects that have to be updated have to be
present. Other fields/objects that are not specified as part of the request are considered
unchanged. Therefore, this method is not suitable to remove information shared earlier.
Any request to the PATCH method SHALL contain the last_updated field.
PATCH To URL: https://www.server.com/ocpi/emsp/2.3/bookings/SE/VOL/B0123
{
"reservation_status": "RESERVED",
"last_updated": "2025-03-23T13:00:00Z"
}PATCH To URL: https://www.server.com/ocpi/emsp/2.3/bookings/NL/INF/B0123
{
"evse_uid": "EVS1234",
"last_updated": "2025-03-23T13:00:00Z"
}3. Object Description
Models17.3.1. BookingLocation Object
Each BookingLocation should include either the bookable_parking_option or the evse_uid. One of them
is mandatory.
| Property | Type | Card. | Description |
|---|---|---|---|
country_code | CiString(2) | 1 | ISO-3166 alpha-2 country code of the CPO that 'owns' this BookingLocation. |
party_id | CiString(3) | 1 | ID of the CPO that 'owns' this BookingLocation (following the ISO-15118 standard). |
id | CiString(36) | 1 | The unique id that identifies the BookingLocation in the CPO platform. |
location_id | CiString(36) | 1 | Location.id of the Location object of this CPO, on which the reservation can be made. |
evse_uid | CiString(36) | ? | A bookable EVSE.uid of the EVSE of this Location on which the reservation will be made. Allowed to be set to: #NA when no EVSE yet assigned to the driver. |
connector_id | CiString(36) | ? | Connector.id of the Connector of this Location where the booking will happen. Allowed not to set. |
bookable_parking_options | BookableParkingOptions | * | List of parking specification that can be booked by drivers that want to charge at this Location. |
bookable | Bookable | ? | The number of charging stations that are bookable at this location and if this is required. |
tariff_id | CiString(36) | * | A list of Tariff id's. |
booking_terms | BookingTerms | * | Terms specified for if you book on this location. |
calendars | Calendar | * | The list of calendars to display the availability on this location. |
last_updated | DateTime | 1 | Timestamp for the last BookingLocation change has been made. |
17.3.1.1. Example BookingLocation
This is an example of a booking location. Can be used by any EV Driver as long as his eMSP has a roaming agreement with the CPO, or the Charge Point has an ad-hoc payment possibility.
{
"country_code": "NL",
"party_id": "IHO",
"id": "12345",
"location_id": "LOC1",
"evse_uid": "6583",
"bookable_parking_options": [{
"evse_position": "LEFT",
"vehicle_types": ["MOTORCYCLE", "TRUCK_WITH_TRAILER", "SEMI_TRACTOR"],
"format": "SOCKET",
"max_vehicle_weight": 5000,
"max_vehicle_height": 300,
"max_vehicle_length": 900,
"max_vehicle_width": 250,
"parking_space_length": 1000,
"drive_through": false,
"restricted_to_type": true,
"refrigeration_outlet": true
}],
"booking_required": true,
"tariffs": ["32423328", "24091999", "23415239", "12072017"],
"booking_terms": {
"RFID_auth_required": true,
"token_groups_supported": false,
"remote_auth_supported": true,
"supported_access_methods": ["ACCESS_CODE", "TOKEN"],
"change_until_minutes": 200,
"cancel_until_minutes": 600,
"change_not_allowed": false,
"early_start_allowed": true,
"early_start_time": 20,
"noshow_timeout": 25,
"max_power_bookable": 400,
"late_stop_allowed": false,
"overlapping_bookings_allowed": true,
"booking_terms": "/https://server.com/booking-a-charger"
},
"calenders": [{
"id": "CA112",
"begin_from": "2025-03-23T00:00:00Z",
"end_before": "2025-03-23T23:59:99Z",
"step_size": 1,
"available_timeslots": [{
"start_from": "2025-03-23T00:00:00Z",
"end_before": "2025-03-23T08:59:99Z",
"min_power": 12,
"max_power": 600,
"green_power_support": false
},{
"start_from": "2025-03-23T12:00:00Z",
"end_before": "2025-03-23T13:00:00Z",
"min_power": 12,
"max_power": 12,
"green_power_support": false
}],
"last_updated": "2024-12-05T20:02:13Z"
},{
"id": "CA112",
"begin_from": "2025-03-23T00:00:00Z",
"end_before": "2025-03-23T23:59:99Z",
"step_size": 1,
"available_timeslots": [{
"start_from": "2025-03-23T00:00:00Z",
"end_before": "2025-03-23T08:59:99Z",
"min_power": 12,
"max_power": 12,
"green_power_support": false
},{
"start_from": "2025-03-23T12:00:00Z",
"end_before": "2025-03-23T13:00:00Z",
"min_power": 12,
"max_power": 12,
"green_power_support": false
}],
"last_updated": "2024-12-05T20:02:13Z"
}],
"last_updated": "2024-12-05T20:02:13Z"
}17.3.2. Calendar Object
| Property | Type | Card. | Description |
|---|---|---|---|
id | CiString(36) | 1 | ID of the calendar object. |
begin_from | DateTime | 1 | Start time of a calendar. |
end_before | DateTime | 1 | End time of a calendar. |
step_size | int | ? | The minimum allowed booking increment within available timeslot. |
available_timeslots | TimeSlot | + | List of available timeslots. |
last_updated | DateTime | 1 | Timestamp for the last calendar change has been made. |
17.3.3. Booking Object
Object used for booking a booking location.
| Property | Type | Card. | Description |
|---|---|---|---|
id | CiString(36) | 1 | ID for the CPO side. |
country_code | CiString(2) | 1 | ISO-3166 alpha-2 country code of the CPO that 'owns' this Booking. |
party_id | CiString(3) | 1 | ID of the CPO that 'owns' this Booking (following the ISO-15118 standard). |
request_id | CiString(36) | 1 | Request ID determined by the requesting party. The same request ID SHALL be used for all edits on booking. |
bookable_parking_option | BookableParkingOption | ? | Selected parking specification to charge at this Location. |
parking_id | CiString(36) | ? | Reference to the parking id, can be later assigned by the CPO based on the bookable parking option. |
location_id | CiString(36) | 1 | Location.id of the Location object of this CPO, on which the reservation can be made. |
evse_uid | CiString(36) | ? | EVSE.uid of the EVSE of this Location on which the reservation will be made. Allowed to be set to: #NA when no EVSE yet assigned to the driver. |
connector_id | CiString(36) | ? | Connector.id of the Connector of this Location where the booking is/was happening. Allowed to be set to: #NA when booked, but no connector yet assigned to the driver. |
booking_tokens | BookingToken | * | Token(s) that can be used to utilise the booking. |
tariff_id | CiString(36) | * | A list of Tariff id's relevant for this booking. |
period | Timeslot | 1 | The timeslot for this booking. |
reservation_status | ReservationStatus | 1 | The current state of the reservation. |
canceled | Cancellation | ? | Is the booking canceled, why and by whom. |
access_methods | AccessMethods | * | The required license, plate or access code or nothing if the location is open. |
authorization_reference | CiString(36) | 1 | Authorization reference for the relevant Session and CDR. |
booking_terms | BookingTerms | 1 | The accepted booking terms. |
booking_requests | BookingRequestStatus | + | All the requests made for this booking. |
last_updated | DateTime | 1 | Timestamp for the last booking change has been made. |
17.3.3.1. Example Booking
This is an example of a booking. Can be used by any EV Driver as long as his eMSP has a roaming agreement with the CPO, or the Charge Point has an ad-hoc payment possibility.
{
"id": "12345",
"country_code": "NL",
"party_id": "INF",
"request_id": "RE1222",
"bookable_parking_option": {},
"parking_id": 22314,
"location_id": 1234,
"evse_uid": 3256,
"booking_token": [{
"country_code": "NL",
"party_id": "INF",
"uid": "assaD12w3d",
"type": "RFID",
"contract_id": "CO124"
}],
"period": {
"start_from": "2025-03-23T12:00:00Z",
"end_before": "2025-03-23T13:00:00Z",
"min_power": 12,
"max_power": 12,
"green_power_support": false
},
"reservation_status": "RESERVED",
"authorization_reference": "pp-100100-1948213567",
"booking_terms": {
"RFID_auth_required": true,
"token_groups_supported": false,
"remote_auth_supported": true,
"supported_access_methods": ["", ""],
"change_until_minutes": 200,
"cancel_until_minutes": 600,
"change_not_allowed": false,
"early_start_allowed": true,
"early_start_time": 20,
"noshow_timeout": 25,
"max_power_bookable": 400,
"late_stop_allowed": false,
"overlapping_bookings_allowed": true,
"booking_terms": "/https://example.com/booking-a-charger"
},
"booking_requests": [
{
"request_status": "ACCEPTED",
"booking_request": {
"request_id": "RE1222",
"location_id": 1234,
"evse_uid": 3256,
"period": {
"start_from": "2025-03-23T12:00:00Z",
"end_before": "2025-03-23T13:00:00Z",
"min_power": 12,
"max_power": 12,
"green_power_support": false
},
"authorization_reference": "pp-100100-1948213567"
},
"request_received": "2024-12-05T20:02:13Z"
},
{
"request_status": "PENDING",
"booking_request": {
"request_id": "RE1222",
"location_id": 1234,
"evse_uid": 3256,
"period": {
"start_from": "2025-03-23T12:00:00Z",
"end_before": "2025-03-23T13:00:00Z",
"min_power": 12,
"max_power": 12,
"green_power_support": false
},
"authorization_reference": "pp-100100-1948213567"
},
"request_received": "2024-12-05T20:02:13Z"
}
],
"last_updated": "2024-12-05T20:02:13Z"
}4. Data Types
Reference17.4.1. BookingRequest class
| Property | Type | Card. | Description |
|---|---|---|---|
country_code | CiString(2) | 1 | ISO-3166 alpha-2 country code of the MSP that requests the booking. |
party_id | CiString(3) | 1 | ID of the MSP that requests this BookingLocation (following the ISO-15118 standard). |
request_id | CiString(36) | 1 | Request ID determined by the requesting party. The same request ID SHALL be used for all edits on booking. |
bookable_parking_option | BookableParkingOption | ? | Selected parking specification to charge at this Location. |
location_id | CiString(36) | 1 | Location.id of the Location object of this CPO, on which the reservation can be made. |
evse_uid | CiString(36) | ? | uid of a bookable EVSE. Only possible if stated in the Bookable Location. |
connector_id | CiString(36) | ? | Connector.id of the Connector of this Location where the booking will happen. Allowed to be null when booked, but no connector yet assigned to the driver. |
tokens | BookingTokens | * | Token(s) that can be used to utilise the booking. |
period | Timeslot | 1 | The timeslot for this booking. |
authorization_reference | CiString(36) | 1 | Authorization reference for the relevant Session and CDR. |
power_required | int | ? | The power requested for the reservation in kW. If it isn't the maximum available the CPO can relocate the extra to another session. |
canceled | Cancellation | ? | To set when requesting to cancel the booking. |
17.4.2. BookingTerms class
| Property | Type | Card. | Description |
|---|---|---|---|
RFID_auth_required | boolean | ? | Charging for reserved booking requires authentication by RFID card at charger. |
token_groups_supported | boolean | ? | If true, any token within the same token group may be used for the booking. |
remote_auth_supported | boolean | ? | If true, charging for reserved booking is possible through remote authentication (Start message through Commands endpoint). |
supported_access_methods | LocationAccess | + | What is needed to access the location. |
change_until_minutes | number | 1 | Number of minutes before the booking till which it can be changed. |
cancel_until_minutes | number | 1 | Number of minutes before the booking till which it can be canceled. |
change_not_allowed | boolean | ? | If change is allowed. |
early_start_allowed | boolean | ? | If an early start of the session is allowed/possible. |
early_start_time | number | ? | Number of minutes early start is allowed/possible. |
noshow_timeout | number | ? | The number of minutes after the booking start time that it is considered a no show and booking is released. No timeout if unspecified. |
noshow_fee | boolean | ? | If the CPO will charge a no show fee. The amount of the fee can be defined in the booking_terms URL. Will also be in the Tariff part of the BookingLocation. |
late_stop_allowed | boolean | ? | If a user can charge longer than requested in the booking. |
late_stop_time | number | ? | Number of minutes late start is allowed/possible. |
overlapping_bookings_allowed | boolean | ? | Is it possible to connect the same RFID Token to multiple bookings. |
booking_terms | URL | ? | The CPO's URL to the booking terms. |
17.4.3. BookableParkingOptions class
| Property | Type | Card. | Description |
|---|---|---|---|
evse_position | EVSEPosition | ? | The position of the EVSE relative to the parking space. |
vehicle_types | VehicleType | + | The vehicle types that the parking is designed to accommodate. |
format | ConnectorFormat | 1 | The format (socket/cable) of the installed connector. |
max_vehicle_weight | number | ? | The maximum vehicle weight that can park at the EVSE, in kilograms. A value should be provided unless vehicle_types contains no values other than PERSONAL_VEHICLE or MOTORCYCLE. |
max_vehicle_height | number | ? | The maximum vehicle height that can park at the EVSE, in centimeters. A value should be provided unless vehicle_types contains no values other than PERSONAL_VEHICLE or MOTORCYCLE. |
max_vehicle_length | number | ? | The maximum vehicle length that can park at the EVSE, in centimeters. A value should be provided unless vehicle_types contains no values other than PERSONAL_VEHICLE or MOTORCYCLE. |
max_vehicle_width | number | ? | The maximum vehicle width that can park at the EVSE, in centimeters. A value should be provided unless vehicle_types contains no values other than PERSONAL_VEHICLE or MOTORCYCLE. |
parking_space_length | number | ? | The length of the parking space, in centimeters. A value should be provided unless vehicle_types contains no values other than PERSONAL_VEHICLE or MOTORCYCLE. |
parking_space_width | number | ? | The width of the parking space, in centimeters. A value should be provided unless vehicle_types contains no values other than PERSONAL_VEHICLE or MOTORCYCLE. |
dangerous_goods_allowed | boolean | ? | Whether vehicles loaded with dangerous substances are allowed to park at the EVSE. |
drive_through | boolean | ? | Whether a vehicle can stop, charge, and proceed without reversing into or out of a parking space. Only true if possible for all listed vehicle types. |
restricted_to_type | boolean | 1 | Whether it is forbidden for vehicles of a type not listed in vehicle_types to park at the EVSE, even if they can physically park there safely. |
refrigeration_outlet | boolean | ? | Whether a power outlet is available to power a transport truck's load refrigeration while the vehicle is parked. |
17.4.4. Cancellation class
| Property | Type | Card. | Description |
|---|---|---|---|
cancellation_reason | CanceledReason | 1 | The reason why the booking is canceled. |
who_canceled | Role | 1 | Who canceled the booking. |
17.4.5. AccessMethod class
| Property | Type | Card. | Description |
|---|---|---|---|
location_access | LocationAccess | 1 | If the location is not freely accessible, how is it accessible with the LocationAccess enum. |
value | String | ? | The value for the location access option, so for the license plate it would be: ABC12D. Or for an access code: 1224. |
17.4.6. BookingRequestStatus class
| Property | Type | Card. | Description |
|---|---|---|---|
request_status | ReservationRequestStatus | 1 | The current state of the booking request. |
booking_request | BookingRequest | 1 | The booking request that was received. |
request_received | DateTime | 1 | Timestamp for when the request was received. |
17.4.7. Timeslot class
| Property | Type | Card. | Description |
|---|---|---|---|
start_from | DateTime | 1 | Start time of this timeslot. |
end_before | DateTime | 1 | End time of this timeslot. |
min_power | number | ? | Minimum Power guaranteed during this timeslot, in Watts (W). |
max_power | number | ? | Maximum power available during this timeslot, in Watts (W) / Can be requested lower. |
green_energy_support | boolean | ? | Specifies whether green energy is available during this timeslot. |
17.4.8. BookingToken class
| Property | Type | Card. | Description |
|---|---|---|---|
country_code | CiString(2) | 1 | ISO-3166 alpha-2 country code of the MSP that 'owns' this Token. |
party_id | CiString(3) | 1 | ID of the eMSP that 'owns' this Token (following the ISO-15118 standard). |
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. If this is a type=APP_USER Token, it will be a unique, by the eMSP, generated ID. |
type | TokenType | 1 | Type of the token. |
contract_id | CiString(36) | 1 | Uniquely identifies the EV driver contract token within the eMSP's platform (and sub-operator platforms). Recommended to follow the specification for eMA ID from "eMI3 standard version V1.0" "Part 2: business objects." |
17.4.9. Bookable class
| Property | Type | Card. | Description |
|---|---|---|---|
reservation_required | boolean | 1 | Is a reservation required. |
ad_hoc | number | ? | Number of ad_hoc charging options available. |
17.4.10. LocationAccess enum
Describes ways to get access to a reserved charger.
| Value | Description |
|---|---|
OPEN | Open access to the site. |
TOKEN | Using a token that was sent in the booking. |
LICENSE_PLATE | The license plate(s) of the vehicle that wants to charge. |
ACCESS_CODE | The access code provided. |
INTERCOM | Get access to the charging station by ringing the intercom. |
PARKING_TICKET | Parking ticket required. |
17.4.11. ReservationStatus enum
| Value | Description |
|---|---|
PENDING | Booking request pending processing by the CPO. |
RESERVED | Booking request accepted by the CPO. |
CANCELED | Booking canceled. |
FAILED | Request for booking failed (error). |
NO_SHOW | Booking was not fulfilled because no one showed up, within start time found in the booking terms. |
FULFILLED | The Booking is fulfilled, meaning that the session is started with the communicated token before the expiry moment has passed. |
REJECTED | Booking request is rejected after processing by the CPO (e.g., requested time slot unavailable). |
UNKNOWN | Any other status / unknown status. |
17.4.12. ReservationRequestStatus enum
| Value | Description |
|---|---|
PENDING | Booking request pending processing by the CPO. |
ACCEPTED | Booking request accepted by the CPO. |
DECLINED | Booking request declined by the CPO. |
FAILED | Request for booking failed (error). |
17.4.13. CanceledReason enum
| Value | Description |
|---|---|
POWER_OUTAGE | No power available at the site, set by the CPO. |
BROKEN_CHARGER | The charger is broken and charging is not possible, set by the CPO. |
FULL | The chargers are full, because someone isn't leaving, set by the CPO. |
BLOCKED | The reserved charger isn't physically reachable. |
TRAFFIC | The vehicle can't come in time because of traffic, set by the MSP. |
BROKEN_VEHICLE | The vehicle broke down and can't make the reservation, set by the MSP. |
NO_CANCELED | The driver didn't communicate a reason for canceling, set by the MSP. |
UNKNOWN | Any other status / unknown status. |
Based on the Open Charge Point Interface (OCPI) 2.3.0 specification.
Data owner: CPO | Type: Functional Module