Heartbeat

Keeps the connection alive and lets the charge point synchronise its clock with the CSMS.

Version
OCPP 1.6
Direction
Charge Point → CSMS
Feature profile
Core

Heartbeat also exists in OCPP 2.0.1, with a different payload. See the OCPP 2.0.1 version.

Heartbeat is the simplest message in OCPP: an empty request, and a response carrying nothing but the server's current time.

Its purpose is twofold — it proves the charge point is still reachable, and it gives the charger a clock reference. A charge point only needs to send it when nothing else has been sent within the heartbeat interval; any other message resets the timer.

Request

No fields — the payload is an empty object {}.

json
[2, "19223201", "Heartbeat", {}]

Response

FieldTypeRequiredDescription
currentTimedateTimeRequiredThe CSMS's current time, in UTC.
json
[3, "19223201", {
  "currentTime": "2026-09-09T10:20:30.000Z"
}]

Implementation notes

The interval comes from the BootNotification response, and can be changed afterwards with ChangeConfiguration on the HeartbeatInterval key.

Heartbeat is not a keepalive for NAT. Carrier NAT and load balancers often time out idle TCP connections well inside a 300-second heartbeat. If connections drop silently in the field, WebSocket ping/pong at a shorter interval is the fix, not a shorter heartbeat.

A charger that sends Heartbeat on a fixed timer regardless of other traffic is wasteful but conformant.