OCPP 2.0.1 sample messages

Same CALL / CALLRESULT / CALLERROR envelope as 1.6J. Different actions. A session is TransactionEvent (Started / Updated / Ended), not StartTransaction and StopTransaction.

The Open Charge Alliance released 2.0.1 in 2020. It is not compatible with 1.6. Edition 3 is IEC 63584. Subprotocol: ocpp2.0.1. Official spec download.

Launch the simulator (set protocol to 2.0.1) · TransactionEvent · 1.6J samples

How to read an OCPP 2.0.1 message

The envelope is the same JSON array as 1.6J. Only the action names and payloads change.

CALL       [2, "unique-id", "ActionName", { payload }]
CALLRESULT [3, "unique-id", { payload }]
CALLERROR  [4, "unique-id", "ErrorCode", "why it failed", { details }]

2.0.1 talks about a Charging Station with one or more EVSEs, each with connectors. That is why you will see evseId next to connectorId.

A first sample: BootNotification (2.0.1)

Triggered as soon as the ocpp2.0.1 WebSocket opens. Identity now sits under chargingStation, and the station must say why it booted.

Charging station → CSMS
JSON[
  2,
  "cf-boot-201",
  "BootNotification",
  {
    "reason": "PowerUp",
    "chargingStation": {
      "model": "CF-AC7 Type 2",
      "vendorName": "Chargeflux",
      "firmwareVersion": "1.6.0-cf",
      "serialNumber": "CF-DEMO-A7K2"
    }
  }
]
CSMS → charging station
JSON[
  3,
  "cf-boot-201",
  {
    "status": "Accepted",
    "currentTime": "2026-08-14T10:15:03.000Z",
    "interval": 300
  }
]

Full trigger rules: OCPP 2.0.1 BootNotification.

When each OCPP 2.0.1 message is triggered

MessageWho sends itWhen it is triggered
BootNotificationStationAfter the WebSocket opens (PowerUp, reboot, firmware, or TriggerMessage)
HeartbeatStationEvery interval seconds from the boot reply
StatusNotificationStationWhen an EVSE/connector changes: Available, Occupied, Reserved, Unavailable, Faulted
AuthorizeStationWhen a driver presents an idToken (RFID, ISO 14443, eMAID, …)
TransactionEventStationSession start (Started), meter updates (Updated), and end (Ended)
RequestStartTransactionCSMSApp or operator start. Stop is RequestStopTransaction.

A complete 2.0.1 session (sample)

  1. Socket opens with subprotocol ocpp2.0.1. BootNotification → Accepted.
  2. StatusNotification reports EVSE 1 Available, then Occupied when the cable is in.
  3. Authorize for the idToken → Accepted.
  4. TransactionEvent Started (the station picks the transactionId string).
  5. TransactionEvent Updated carries periodic meter samples.
  6. TransactionEvent Ended closes the session.
TransactionEvent Started
JSON[
  2,
  "t1",
  "TransactionEvent",
  {
    "eventType": "Started",
    "timestamp": "2026-08-14T10:16:01.000Z",
    "triggerReason": "Authorized",
    "seqNo": 0,
    "transactionInfo": {
      "transactionId": "tx-1001"
    },
    "evse": {
      "id": 1,
      "connectorId": 1
    },
    "idToken": {
      "idToken": "TAG-1001",
      "type": "ISO14443"
    }
  }
]
TransactionEvent Updated
JSON[
  2,
  "t2",
  "TransactionEvent",
  {
    "eventType": "Updated",
    "timestamp": "2026-08-14T10:17:01.000Z",
    "triggerReason": "MeterValuePeriodic",
    "seqNo": 1,
    "transactionInfo": {
      "transactionId": "tx-1001"
    },
    "evse": {
      "id": 1,
      "connectorId": 1
    },
    "meterValue": [
      {
        "timestamp": "2026-08-14T10:17:01.000Z",
        "sampledValue": [
          {
            "value": 1850,
            "measurand": "Energy.Active.Import.Register",
            "unitOfMeasure": {
              "unit": "Wh"
            },
            "context": "Sample.Periodic"
          }
        ]
      }
    ]
  }
]

Field notes: TransactionEvent. Remote start from the CSMS: RequestStartTransaction.

1.6J names you should not send on 2.0.1

  • StartTransaction / StopTransaction TransactionEvent
  • RemoteStartTransactionRequestStartTransaction
  • idTag string → idToken object
  • Nine 1.6 connector statuses → five 2.0.1 connectorStatus values

Side-by-side: OCPP 1.6 vs 2.0.1 vs 2.1. Still supporting fleets on 1.6? Keep the OCPP 1.6J sample messages.

Related guides

FAQ

What are OCPP 2.0.1 sample messages?

They are JSON CALL / CALLRESULT frames a charging station and CSMS exchange on a WebSocket with subprotocol ocpp2.0.1. The envelope looks like 1.6J, but action names and payloads are not compatible.

Is OCPP 2.0.1 compatible with OCPP 1.6?

No. The Open Charge Alliance states that OCPP 1.6 and OCPP 2.0.1 are not compatible. Do not send StartTransaction on an ocpp2.0.1 connection.

What replaced StartTransaction in OCPP 2.0.1?

TransactionEvent with eventType Started, Updated, or Ended. Meter samples usually ride inside Updated and Ended events rather than a separate MeterValues action.

Where is the official OCPP 2.0.1 specification?

Download it from the Open Charge Alliance. Edition 3 was approved as IEC 63584 in 2024.

Last reviewed August 2026 · Chargeflux.io