Deep dive · In the raw · optional

The reservation and the parking data, as sent

About 12 min · 3 questions ·

Monday
The situation

The dispatcher's software did two things on Monday afternoon: it read the site's data and it reserved a charger. Both are OCPI records, shown here as the two companies exchanged them.

The first is the operator's description of the site, with the parking data that OCPI 2.3.0 added for heavy vehicles. The second is the reservation command and its two answers.

The questionWhich fields told the planner that the truck fits, and what exactly did the reservation hold?

Guess firstThe record gives the longest vehicle the bay takes as 1875. In which unit?RevealHide

Centimetres. OCPI states vehicle and parking dimensions in centimetres: 18.75 m, the longest road train allowed on German roads.

What you are looking at

Both records come from , the protocol between operators and providers (OCPI and roaming). The first is a Location object from the operator's Locations module, cut down to the one charger that matters; its parking object is new in OCPI 2.3.0 and answers the questions a truck planner asks. The second is a ReserveNow command from the Commands module, with the operator's immediate response and the charger's later result.

OCPI 2.3.0, Locations module, as published by the operatorThe site and bay 2, with the parking data

One location, one EVSE, one connector, one parking object. Timestamps are UTC.

  1. {
  2. "country_code": "DE",
  3. Line 3The operator's ID code

    Two letters for the country and three for the operator, issued by the national ID registration organisation. Every EVSE ID below starts with them.

  4. "id": "LOC-A2-EAST-07",
  5. "name": "Truck charging hub A2 east",
  6. "address": "Rasthofweg 2",
  7. "city": "Peine",
  8. "postal_code": "31224",
  9. "country": "DEU",
  10. "coordinates": { "latitude": "52.3201", "longitude": "10.2344" },
  11. "evses": [{
  12. "uid": "HUB07-MCS-02",
  13. "connectors": [{
  14. "id": "1",
  15. "format": "CABLE",
  16. "power_type": "DC",
  17. "max_voltage": 1250,
  18. "max_amperage": 3000,
  19. "tariff_ids": ["HDV-MCS-2026-10"],
  20. "last_updated": "2026-09-30T06:00:00Z"
  21. }],
  22. }],
  23. "last_updated": "2026-10-05T13:58:12Z"
  24. }],
  25. "id": "P-02",
  26. "physical_reference": "Bay 2",
  27. "max_vehicle_weight": 44000,
  28. "max_vehicle_height": 420,
  29. "parking_space_length": 2200,
  30. "parking_space_width": 400,
  31. "direction": "PARALLEL",
  32. "restricted_to_type": true,
  33. "reservation_required": false,
  34. "roofed": false,
  35. "lighting": true,
  36. }],
  37. "operator": { "name": "Truck Charging Networks GmbH" },
  38. "time_zone": "Europe/Berlin",
  39. "opening_times": { "twentyfourseven": true },
  40. "last_updated": "2026-09-30T06:00:00Z"
  41. }
location-LOC-A2-EAST-07.json: the whole file, to copy
{
  "country_code": "DE",
  "party_id": "TRK",
  "id": "LOC-A2-EAST-07",
  "publish": true,
  "name": "Truck charging hub A2 east",
  "address": "Rasthofweg 2",
  "city": "Peine",
  "postal_code": "31224",
  "country": "DEU",
  "coordinates": { "latitude": "52.3201", "longitude": "10.2344" },
  "parking_type": "ALONG_MOTORWAY",
  "evses": [{
    "uid": "HUB07-MCS-02",
    "evse_id": "DE*TRK*E000702*2",
    "status": "AVAILABLE",
    "capabilities": ["RESERVABLE", "REMOTE_START_STOP_CAPABLE", "CONTACTLESS_CARD_SUPPORT", "CREDIT_CARD_PAYABLE", "DEBIT_CARD_PAYABLE"],
    "connectors": [{
      "id": "1",
      "standard": "MCS",
      "format": "CABLE",
      "power_type": "DC",
      "max_voltage": 1250,
      "max_amperage": 3000,
      "max_electric_power": 1000000,
      "tariff_ids": ["HDV-MCS-2026-10"],
      "last_updated": "2026-09-30T06:00:00Z"
    }],
    "parking": [{ "parking_id": "P-02", "evse_position": "RIGHT" }],
    }],
    "last_updated": "2026-10-05T13:58:12Z"
  }],
  "parking_places": [{
    "id": "P-02",
    "physical_reference": "Bay 2",
    "vehicle_types": ["TRUCK_WITH_TRAILER", "RIGID"],
    "max_vehicle_length": 1875,
    "max_vehicle_weight": 44000,
    "max_vehicle_height": 420,
    "parking_space_length": 2200,
    "parking_space_width": 400,
    "dangerous_goods_allowed": false,
    "direction": "PARALLEL",
    "drive_through": true,
    "restricted_to_type": true,
    "reservation_required": false,
    "roofed": false,
    "lighting": true,
    "refrigeration_outlet": true
  }],
  "operator": { "name": "Truck Charging Networks GmbH" },
  "time_zone": "Europe/Berlin",
  "opening_times": { "twentyfourseven": true },
  "last_updated": "2026-09-30T06:00:00Z"
}

A composed record in the structure of the OCPI 2.3.0 Location, EVSE, Connector and Parking objects; MCS is a connector type since 2.3.0. The 18.75 m are the maximum length of a lorry with a trailer on German roads under § 32 of the StVZO.

OCPI 2.3.0, Commands module, Monday 4:02 PMThe reservation, and its two answers

Sent by the haulier's provider to the operator. The token is the card in the truck.

  1. Line 1The command, sent to the operator

    The haulier's provider posts the command to the operator's OCPI endpoint. The operator answers at once; the charger's own answer comes later, to the URL in the next line.

  2. {
  3. "country_code": "DE",
  4. "party_id": "HLR",
  5. "uid": "04B7D2E1F3A902",
  6. "type": "RFID",
  7. "contract_id": "DE-HLR-C4B7D2E1F-W",
  8. "issuer": "Haulier Mobility Services",
  9. "valid": true,
  10. "whitelist": "ALLOWED",
  11. "last_updated": "2026-08-14T09:20:00Z"
  12. },
  13. "reservation_id": "RES-20261005-0418-07",
  14. "location_id": "LOC-A2-EAST-07",
  15. "authorization_reference": "AUTH-7B31-0418"
  16. }
  17. { "data": { "result": "ACCEPTED", "timeout": 30 }, "status_code": 1000, "timestamp": "2026-10-05T14:02:11Z" }
  18. { "result": "ACCEPTED" }
reserve-now-RES-20261005-0418-07.json: the whole file, to copy
POST https://ocpi.truck-charging.example/ocpi/cpo/2.3.0/commands/RESERVE_NOW
{
  "response_url": "https://ocpi.haulier-emsp.example/ocpi/emsp/2.3.0/commands/RESERVE_NOW/9f2c7b31",
  "token": {
    "country_code": "DE",
    "party_id": "HLR",
    "uid": "04B7D2E1F3A902",
    "type": "RFID",
    "contract_id": "DE-HLR-C4B7D2E1F-W",
    "issuer": "Haulier Mobility Services",
    "valid": true,
    "whitelist": "ALLOWED",
    "last_updated": "2026-08-14T09:20:00Z"
  },
  "expiry_date": "2026-10-06T07:50:00Z",
  "reservation_id": "RES-20261005-0418-07",
  "location_id": "LOC-A2-EAST-07",
  "evse_uid": "HUB07-MCS-02",
  "authorization_reference": "AUTH-7B31-0418"
}

HTTP 200, body:
{ "data": { "result": "ACCEPTED", "timeout": 30 }, "status_code": 1000, "timestamp": "2026-10-05T14:02:11Z" }

Later, POST to the response_url:
{ "result": "ACCEPTED" }

ReserveNow with token, expiry date, location and EVSE, answered first by the operator and then, at the response URL, with the charger's result. The token follows the Tokens module.

What the planner reads, and what it cannot

Five fields decided this stop: parking_type, the vehicle types, the maximum length, drive_through and the connector standard. Weight, height and dangerous goods are checked against the load. What the record cannot say is whether the bay will be free at 9:30 AM tomorrow; status is live, not a forecast. That gap is what the reservation closes.

How a reservation travels

  • Provider to operator. The command names the , the site, the charger and the expiry time. The operator answers within seconds whether it takes the command at all.
  • Operator to charger. The operator reserves the connector over , which has a reservation block of its own (stop 06); when it sends that message is its own choice, often shortly before the time rather than a day ahead.
  • Charger to operator to provider. The charger's result, accepted or not, comes back to the provider at the response URL. Only then does the dispatcher's screen show the bay as booked.

On Tuesday at 9:28 AM, the token in the truck matches the reservation and the session starts (stop 06).

Check your understanding

3 questions. Answer all of them to complete this stop. Each answer explains itself.

01Question 1 of 3

The parking object says max_vehicle_length 1875. What does the planner read from it?

02Question 2 of 3

expiry_date reads 07:50:00Z, but the truck is due at 9:30 AM. Why does that fit?

03Question 3 of 3

Who answers the ReserveNow command, and how many answers are there?

  1. EVRoaming Foundation: OCPI 2.3.0, Locations module: Parking object, VehicleType and connector types. https://github.com/ocpi/ocpi/blob/2.3.0/release/core/mod_locations.asciidoc. Checked 09 Oct 2026.
  2. EVRoaming Foundation: OCPI 2.3.0, Commands module: ReserveNow and CancelReservation. https://github.com/ocpi/ocpi/blob/2.3.0/release/core/mod_commands.asciidoc. Checked 09 Oct 2026.
  3. EVRoaming Foundation: OCPI 2.3.0, Locations module: Parking object, VehicleType and connector types. https://github.com/ocpi/ocpi/blob/2.3.0/release/core/mod_locations.asciidoc. Checked 09 Oct 2026.
  4. Gesetze im Internet: Straßenverkehrs-Zulassungs-Ordnung (StVZO), § 32 Abmessungen von Fahrzeugen und Fahrzeugkombinationen. https://www.gesetze-im-internet.de/stvzo_2012/__32.html. Checked 11 Oct 2026.
  5. EVRoaming Foundation: OCPI 2.3.0, Commands module: ReserveNow and CancelReservation. https://github.com/ocpi/ocpi/blob/2.3.0/release/core/mod_commands.asciidoc. Checked 09 Oct 2026.
  6. EVRoaming Foundation: OCPI 2.3.0, Tokens module: Token object. https://github.com/ocpi/ocpi/blob/2.3.0/release/core/mod_tokens.asciidoc. Checked 11 Oct 2026.
  7. EVRoaming Foundation: OCPI 2.3.0, Commands module: ReserveNow and CancelReservation. https://github.com/ocpi/ocpi/blob/2.3.0/release/core/mod_commands.asciidoc. Checked 09 Oct 2026.
  8. Open Charge Alliance: What is new in OCPP 2.0.1? Whitepaper, version 1.0, March 2023. https://openchargealliance.org/wp-content/uploads/2024/01/new_in_ocpp_201-v10.pdf. Checked 09 Oct 2026. Licence: CC BY-ND 4.0.
Was this helpful?