DataTransfer

The vendor extension escape hatch. Carries data OCPP has no message for, in either direction.

Version
OCPP 1.6
Direction
Either direction
Feature profile
Core

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

DataTransfer exists so that manufacturers can send things the standard does not cover without inventing their own protocol. It can be sent by either side, and its payload is opaque to OCPP.

It is the reason two conformant implementations can still fail to interoperate: everything interesting a vendor does outside the spec arrives through this message, and the receiver has to know the vendor's private conventions to make sense of it.

Request

FieldTypeRequiredDescription
vendorIdCiString255RequiredIdentifies the vendor namespace. Should be a reverse-DNS style identifier.
messageIdCiString50OptionalIdentifies the message within the vendor's namespace.
dataTextOptionalThe payload. Free-form — commonly a JSON string.
json
[2, "19223201", "DataTransfer", {
  "vendorId": "com.acmecharging",
  "messageId": "SetDisplayMessage",
  "data": "{\"line1\":\"Welcome\",\"line2\":\"Tap to charge\"}"
}]

Response

FieldTypeRequiredDescription
statusDataTransferStatusRequiredWhether the receiver understood the message.
dataTextOptionalOptional response payload.
json
[3, "19223201", {
  "status": "Accepted"
}]

Values

DataTransferStatus

ValueMeaning
AcceptedThe message was understood and processed.
RejectedThe message was understood but refused.
UnknownMessageIdThe vendorId is known; the messageId is not.
UnknownVendorIdThe vendorId is not known to the receiver.

Implementation notes

`UnknownVendorId` is the correct answer to a vendor you do not support — not Rejected, and definitely not a CALLERROR. Chargers use the distinction to decide whether to stop trying.

data is a string even when it holds JSON, so the payload arrives double-encoded. Both sides must agree on the encoding, and nothing in OCPP enforces it.

Heavy reliance on DataTransfer is a portability warning sign: it means moving to another CSMS requires reimplementing the vendor's private protocol.