Transaction Event
Source: OCPP 2.0.1 Part 2 — Specification (Edition 2, 2022-12-15) — Section 1.60 (Messages); Use Cases E01–E15 (Functional Block E. Transactions)
Overview
TransactionEventRequest is the single message used in OCPP 2.0.1 to report the entire lifecycle of a transaction — replacing OCPP 1.6's StartTransaction, StopTransaction, and transaction-related MeterValues / StatusNotification.
For each transaction, the Charging Station sends a sequence of TransactionEvent messages with eventType:
Started— exactly once, at the start of the transaction.Updated— zero or more times during the transaction (meter samples, state changes, charging session events, etc.).Ended— exactly once, at the end.
The triggerReason indicates why the message is being sent (Authorized, CablePluggedIn, ChargingStateChanged, EVCommunicationLost, EnergyLimitReached, MeterValuePeriodic, RemoteStart, etc.). seqNo lets the CSMS detect missing messages.
The CSMS responds with TransactionEventResponse, which may include idTokenInfo (for authorization decisions on Started events that carried an idToken), running/total cost, charging priority, and an updated personal display message.
Sequence Diagram
Charging Station ──── TransactionEventRequest(Started) ────▶ CSMS
(eventType, timestamp, triggerReason, seqNo,
transactionInfo, idToken?, evse?, meterValue[]?)
Charging Station ◀─── TransactionEventResponse ──── CSMS
(idTokenInfo?, totalCost?, chargingPriority?, updatedPersonalMessage?)
(zero or more TransactionEventRequest(Updated) ↔ Response)
Charging Station ──── TransactionEventRequest(Ended) ────▶ CSMS
Charging Station ◀─── TransactionEventResponse ──── CSMS
Initiator
Charging Station → CSMS
Fields
| Field Name | Field Type | Card. | Description |
|---|---|---|---|
| eventType | TransactionEventEnumType | 1..1 | Required. Started / Updated / Ended. |
| timestamp | dateTime | 1..1 | Required. When the event occurred. |
| triggerReason | TriggerReasonEnumType | 1..1 | Required. Reason the CS is sending this message. |
| seqNo | integer | 1..1 | Required. Incremental sequence number per transaction. |
| offline | boolean | 0..1 | Optional. Indicates the event happened while CS was offline. Default false. |
| numberOfPhasesUsed | integer | 0..1 | Optional. Phases used, if reportable. |
| cableMaxCurrent | integer | 0..1 | Optional. Maximum current of the connected cable in A. |
| reservationId | integer | 0..1 | Optional. Id of the reservation that terminates as a result of this transaction. |
| transactionInfo | TransactionType | 1..1 | Required. Transaction-specific info (transactionId, charging state, time spent charging, stoppedReason, remoteStartId). |
| idToken | IdTokenType | 0..1 | Optional. The identifier (presented for start or stop). Required when an authorization happens or ends. |
| evse | EVSEType | 0..1 | Optional. The EVSE/connector used. |
| meterValue | MeterValueType | 0..* | Optional. Relevant meter values for this event. |
| Field Name | Field Type | Card. | Description |
|---|---|---|---|
| totalCost | decimal | 0..1 | Optional. Running cost (Updated) or final cost (Ended). |
| chargingPriority | integer (-9..9) | 0..1 | Optional. Temporary charging priority. Overrules any value in IdTokenInfoType. |
| idTokenInfo | IdTokenInfoType | 0..1 | Optional. Authorization status, expiry, group id. Required when the request contained an idToken. |
| updatedPersonalMessage | MessageContentType | 0..1 | Optional. Updated personal message to show to the EV driver (e.g. tariff). |
TransactionEventEnumType values
Started, Updated, Ended.
TriggerReasonEnumType values (selection)
Authorized, CablePluggedIn, ChargingRateChanged, ChargingStateChanged, Deauthorized, EnergyLimitReached, EVCommunicationLost, EVConnectTimeout, MeterValueClock, MeterValuePeriodic, TimeLimitReached, Trigger, UnlockCommand, StopAuthorized, EVDeparted, EVDetected, RemoteStop, RemoteStart, AbnormalCondition, SignedDataReceived, ResetCommand.
Examples
{
"eventType": "Started",
"timestamp": "2026-04-27T12:34:56Z",
"triggerReason": "Authorized",
"seqNo": 0,
"transactionInfo": {
"transactionId": "tx-1234",
"chargingState": "Charging",
"remoteStartId": 7
},
"idToken": { "idToken": "044943121F1A80", "type": "ISO14443" },
"evse": { "id": 1, "connectorId": 1 },
"meterValue": [
{
"timestamp": "2026-04-27T12:34:56Z",
"sampledValue": [
{ "value": 12500.0, "context": "Transaction.Begin", "measurand": "Energy.Active.Import.Register", "unitOfMeasure": { "unit": "Wh" } }
]
}
]
}{
"eventType": "Ended",
"timestamp": "2026-04-27T13:05:42Z",
"triggerReason": "StopAuthorized",
"seqNo": 17,
"transactionInfo": {
"transactionId": "tx-1234",
"chargingState": "Idle",
"stoppedReason": "Local"
},
"idToken": { "idToken": "044943121F1A80", "type": "ISO14443" },
"meterValue": [
{
"timestamp": "2026-04-27T13:05:42Z",
"sampledValue": [
{ "value": 35420.0, "context": "Transaction.End", "measurand": "Energy.Active.Import.Register", "unitOfMeasure": { "unit": "Wh" } }
]
}
]
}{
"totalCost": 7.42,
"idTokenInfo": {
"status": "Accepted",
"groupIdToken": { "idToken": "PARENT001", "type": "Central" }
}
}Schema
Source:
schemas/TransactionEventRequest.json,schemas/TransactionEventResponse.json(OCPP 2.0.1 FINAL)