OCPI 2.3.0 Chapter 17 booking-1.0

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.

4 Sections
13 Data Types
Module ID: Booking

1. Flow and Lifecycle

Overview

Introduction

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 PENDING state when initially requested by the eMSP.
  • From PENDING, the CPO can move the booking to:
    • RESERVED if the booking request is successful.
    • REJECTED if the requested timeslot or booking option isn't available.
    • FAILED if there's an error processing the request.
  • From RESERVED, the Booking can transition to:
    • FULFILLED when successfully utilized.
    • CANCELED if the eMSP or CPO cancels the booking.
    • NO_SHOW if 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.

State Diagram
                    ┌──────────┐
                    │ 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":

1

MSP makes Booking Request at the CPO.

2

CPO responds with a PENDING ReservationStatus & PENDING ReservationRequestStatus.

3

CPO sends after processing the request a RESERVED ReservationStatus & ACCEPTED ReservationRequestStatus.

4

MSP wants to change the booking and makes a new request.

5

CPO responds with a RESERVED ReservationStatus & PENDING ReservationRequestStatus.

6

CPO updates after processing the request a RESERVED ReservationStatus & 2 ACCEPTED ReservationRequestStatus, one for each request.

7

Start transaction is triggered by the charging station. The session starts based on the Booking information.

8

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

API

For 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.

Endpoint Structure
{bookings_endpoint_url}/booking_locations
Examples
https://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=100

Request 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:

Endpoint Structure
{bookings_endpoint_url}/booking_locations/{booking_location_id}/{calendar_id}
Examples
https://www.server.com/ocpi/cpo/2.3/bookings/booking_locations/BL01
https://www.server.com/ocpi/cpo/2.3/bookings/booking_locations/BL01/23423

URL 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.

Endpoint Structure
{bookings_endpoint_url}
Examples
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=100

Request 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.

Endpoint Structure
{bookings_endpoint_url}
Example
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.

BookingLocation Endpoint Structure
{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}
Examples
https://server.com/ocpi/2.3/bookings/NL/INF/booking_locations/LOC1
https://ocpi.server.com/2.3/bookings/SE/VOL/booking_locations/LOC2/3255

BookingLocation 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 Structure
{booking_endpoint_url}/{country_code}/{party_id}/{booking_id}
Example
https://www.server.com/ocpi/emsp/2.3/bookings/SE/VOL/BOK213

Booking 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.

Example: Booking terms update
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"
}
Example: Timeslot changes
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.

Example: Booking Status Update
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"
}
Example: Assign EVSE UID
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

Models

17.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.

BookingLocation Example
{
  "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.

Booking Example
{
  "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

Reference

17.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