OCPP 2.0.1 TransactionEvent
TransactionEvent is the OCPP 2.0.1 session story in one action. Instead of three 1.6 messages (start, meters, stop), the station sends the same action with eventType Started, Updated, or Ended.
The OCA white paper “What is new in OCPP 2.0.1” calls out improved transaction handling as a headline change from 1.6. The station, not the CSMS, assigns transactionId (a string). Download the official OCPP 2.0.1 specification.
Index: 2.0.1 samples. Launch simulator.
When each eventType is triggered
| eventType | When it fires |
|---|---|
| Started | The session begins after Authorize or RequestStartTransaction |
| Updated | Periodic meters, trigger reasons, or mid-session state changes |
| Ended | Local stop, remote stop, unplug, or another terminal reason |
Started sample
JSON[
2,
"cf-tx-s",
"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"
}
}
]JSON[
3,
"cf-tx-s",
{}
]Chargeflux uses triggerReason Authorized on a local start. A remote start from the CSMS is covered on RequestStartTransaction.
Updated sample (meters)
JSON[
2,
"cf-tx-u",
"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"
},
{
"value": 7400,
"measurand": "Power.Active.Import",
"unitOfMeasure": {
"unit": "W"
},
"context": "Sample.Periodic"
}
]
}
]
}
]JSON[
3,
"cf-tx-u",
{}
]Note unitOfMeasure.unit — 2.0.1 does not use the flat 1.6 unit field. seqNo increments so the CSMS can detect gaps.
Ended sample
JSON[
2,
"cf-tx-e",
"TransactionEvent",
{
"eventType": "Ended",
"timestamp": "2026-08-14T10:19:10.000Z",
"triggerReason": "StopAuthorized",
"seqNo": 4,
"transactionInfo": {
"transactionId": "tx-1001"
},
"evse": {
"id": 1,
"connectorId": 1
},
"meterValue": [
{
"timestamp": "2026-08-14T10:19:10.000Z",
"sampledValue": [
{
"value": 5550,
"measurand": "Energy.Active.Import.Register",
"unitOfMeasure": {
"unit": "Wh"
},
"context": "Transaction.End"
}
]
}
]
}
]JSON[
3,
"cf-tx-e",
{}
]Chargeflux maps a local stop to StopAuthorized, a CSMS stop to RemoteStop, and an unplug to EVCommunicationLost.
Related guides
- OCPP 2.0.1 sample messages — TransactionEvent, BootNotification, status, and RequestStart — with when each fires.
- OCPP 2.0.1 BootNotification — chargingStation identity, reason, and Accepted / Pending / Rejected.
- OCPP 2.0.1 status notification — EVSE + connector statuses: Available, Occupied, Reserved, Unavailable, Faulted.
- RequestStartTransaction — How the CSMS remotely starts or stops a 2.0.1 session.
FAQ
What is TransactionEvent in OCPP 2.0.1?
A single action that reports a session start (Started), a meter or state update (Updated), or a session end (Ended). It replaces the 1.6 StartTransaction / MeterValues / StopTransaction trio.
Who assigns the transactionId in OCPP 2.0.1?
The charging station. Unlike 1.6, the CSMS does not mint the id on a StartTransaction reply. Both sides then repeat that string on later events.
Last reviewed August 2026 · Chargeflux.io