# OCPP 1.6J Protocol Reference > The complete Open Charge Point Protocol 1.6J reference: all 28 messages with their fields and enums, plus every standard configuration key you can set with ChangeConfiguration. Published by Plugchoice (https://plugchoice.com), a free OCPP charger management platform and OCPP proxy. Source page: https://plugchoice.com/en/help/ocpp Protocol source: Open Charge Alliance, OCPP 1.6 Edition 2 specification and the official JSON schemas. ## What OCPP is OCPP is an open standard maintained by the Open Charge Alliance that defines how an EV charger (Charge Point) talks to management software (a Central System). Version 1.6J runs over a WebSocket connection with JSON payloads. The charger reports status, meter readings and transaction events; the Central System sends commands such as remote start, firmware updates and charging profiles. Because it is open, any OCPP charger can connect to any compatible Central System, which is what prevents vendor lock-in. Call format: every message is a JSON array. A request is [2, messageId, action, payload], a successful response is [3, messageId, payload], an error is [4, messageId, errorCode, errorDescription, errorDetails]. ## Configuration keys (ChangeConfiguration and GetConfiguration) ChangeConfiguration sets one key at a time; GetConfiguration reads keys back. Rules that matter in practice: - Every value is sent as a string, including numbers and booleans: "60", "true". Sending a JSON number is a common cause of a Rejected response. - Key names are case sensitive and must match the specification exactly. - Many keys only take effect after a restart. The charger answers RebootRequired and the caller must send a Reset. - Manufacturers add vendor-specific keys beyond the standard list. GetConfiguration with an empty key list returns everything the charger supports, plus an unknownKey array for anything it does not recognise. - GetConfigurationMaxKeys caps how many keys one GetConfiguration request may ask for. ChangeConfiguration response statuses: - Accepted: the key is set and active now. - Rejected: the key exists but the value was refused (out of range, wrong format, or read-only on this charger). - RebootRequired: the value is stored but does not apply until the charger restarts. - NotSupported: the charger does not implement this key at all. In the table below, Access is what the specification says (R = read only, RW = readable and writable) and Required means the specification requires the charger to support the key. Individual chargers deviate from both, so read the current value with GetConfiguration before relying on it. ### Core keys - **AllowOfflineTxForUnknownId** (boolean, RW, optional): Whether the charger starts a transaction for an unknown idTag while it is offline. True keeps a site charging through a network outage, at the cost of sessions you may not be able to bill to anyone. - **AuthorizationCacheEnabled** (boolean, RW, optional): Whether the charger caches the outcome of earlier Authorize calls. Different from the Local Auth List: the cache fills itself from real authorizations, the list is pushed by the backend. - **AuthorizeRemoteTxRequests** (boolean, R, required): Whether the charger authorizes the idTag in a RemoteStartTransaction before starting. If true, a remote start from the app still needs an Authorize round trip, so a bad idTag fails the start. - **BlinkRepeat** (integer, times, RW, optional): How often the charger blinks the lamp during a blink sequence. - **ClockAlignedDataInterval** (integer, seconds, RW, required): Interval for clock-aligned meter values, measured from midnight. 0 disables them. 900 gives a reading on every quarter hour. This is the one that feeds MeterValuesAlignedData, and it runs whether or not a car is plugged in. - **ConnectionTimeOut** (integer, seconds, RW, required): How long the charger waits for the driver to plug in after authorizing before it releases the connector. - **ConnectorPhaseRotation** (CSL, RW, required): Phase rotation per connector, as connectorId.RST notation, for example 0.RST, 1.RST, 2.RTS. Wrong here means wrong phase-level meter values and wrong single-phase load balancing. Worth checking on any three-phase site. - **ConnectorPhaseRotationMaxLength** (integer, R, optional): Maximum number of items in ConnectorPhaseRotation. - **GetConfigurationMaxKeys** (integer, R, required): Maximum number of keys a single GetConfiguration request may ask for. Ask for more than this and the charger may answer with an error. Send GetConfiguration with no keys at all to get everything it supports. - **HeartbeatInterval** (integer, seconds, RW, required): How often the charger sends a Heartbeat when nothing else is happening. The BootNotification response can override this. On a metered SIM, a short heartbeat is the quiet data cost that adds up. - **LightIntensity** (integer, %, RW, optional): Brightness of the charger's lighting, as a percentage. - **LocalAuthorizeOffline** (boolean, RW, required): Whether the charger authorizes from its local list or cache while offline. - **LocalPreAuthorize** (boolean, RW, required): Whether the charger starts a transaction from the local list or cache while online, without waiting for the backend. Cuts the wait at the charger, at the cost of the backend not having the final say on every start. - **MaxEnergyOnInvalidId** (integer, Wh, RW, optional): Energy the charger still delivers after an authorization turns out to be invalid. - **MeterValuesAlignedData** (CSL, RW, required): Measurands sent in the clock-aligned MeterValues, on the ClockAlignedDataInterval. Same measurand vocabulary as MeterValuesSampledData, different trigger: the clock, not the session. - **MeterValuesAlignedDataMaxLength** (integer, R, optional): Maximum number of measurands in MeterValuesAlignedData. - **MeterValuesSampledData** (CSL, RW, required): Measurands sampled during a transaction and sent in MeterValues, on the MeterValueSampleInterval. The single most useful key on this page. See the deep dive below. - **MeterValuesSampledDataMaxLength** (integer, R, optional): Maximum number of measurands in MeterValuesSampledData. Read this before you build a long list: exceed it and the charger rejects the whole thing. - **MeterValueSampleInterval** (integer, seconds, RW, required): How often, during a transaction, the charger samples MeterValuesSampledData. 0 disables sampling. 60 is a sane default. Below 30, with a long measurand list, you are generating a lot of traffic for very little extra insight. - **MinimumStatusDuration** (integer, seconds, RW, optional): Minimum time the charger stays in a status before it reports the next one. Useful against status flapping on chargers that bounce between Preparing and Available. - **NumberOfConnectors** (integer, R, required): Number of physical connectors on this charger. - **ResetRetries** (integer, times, RW, required): How often the charger retries a failed reset. - **StopTransactionOnEVSideDisconnect** (boolean, RW, required): Whether unplugging at the car side stops the running transaction. False means the session stays open after the cable is pulled, which is how you end up with sessions that never end. - **StopTransactionOnInvalidId** (boolean, RW, required): Whether the charger stops the transaction when the backend rejects the idTag. - **StopTxnAlignedData** (CSL, RW, required): Clock-aligned measurands added to the transactionData of StopTransaction. - **StopTxnAlignedDataMaxLength** (integer, R, optional): Maximum number of measurands in StopTxnAlignedData. - **StopTxnSampledData** (CSL, RW, required): Sampled measurands added to the transactionData of StopTransaction. Keep this short. Everything in it is repeated for every sample of the whole session inside one StopTransaction payload, which is how chargers produce megabyte stop messages that backends reject. - **StopTxnSampledDataMaxLength** (integer, R, optional): Maximum number of measurands in StopTxnSampledData. - **SupportedFeatureProfiles** (CSL, R, required): Feature profiles this charger implements, for example Core, FirmwareManagement, SmartCharging. The honest answer to what a charger can do. Read it before you promise a customer smart charging. - **SupportedFeatureProfilesMaxLength** (integer, R, optional): Maximum number of items in SupportedFeatureProfiles. - **TransactionMessageAttempts** (integer, times, RW, required): How often the charger retries sending a transaction message the backend did not acknowledge. - **TransactionMessageRetryInterval** (integer, seconds, RW, required): Base wait between those retries. The charger multiplies it by the attempt number. - **UnlockConnectorOnEVSideDisconnect** (boolean, RW, required): Whether the cable unlocks at the charger when it is unplugged at the car. - **WebSocketPingInterval** (integer, seconds, RW, optional): Interval for WebSocket ping frames on the OCPP-J connection. The quiet fix for chargers that keep dropping offline behind a NAT or firewall that closes idle connections. ### Local Auth List Management keys - **LocalAuthListEnabled** (boolean, RW, required): Whether the local authorization list is in use. - **LocalAuthListMaxLength** (integer, R, required): How many entries the local authorization list holds. - **SendLocalListMaxLength** (integer, R, required): How many entries fit in a single SendLocalList message. A list bigger than this has to be sent in several differential updates. ### Reservation keys - **ReserveConnectorZeroSupported** (boolean, R, optional): Whether the charger accepts a reservation on connector 0, meaning any connector. ### Smart Charging keys - **ChargeProfileMaxStackLevel** (integer, R, required): Highest stack level the charger accepts on a charging profile. Higher levels win. - **ChargingScheduleAllowedChargingRateUnit** (CSL, R, required): Which units the charger accepts in a charging schedule: Current (A), Power (W), or both. Send a profile in watts to a charger that only takes amps and it is rejected. This key tells you which to use. - **ChargingScheduleMaxPeriods** (integer, R, required): Maximum number of periods in one charging schedule. - **ConnectorSwitch3to1PhaseSupported** (boolean, R, optional): Whether the charger can switch between three-phase and single-phase charging. Decides whether you can throttle below the three-phase minimum instead of pausing altogether. - **MaxChargingProfilesInstalled** (integer, R, required): How many charging profiles can be installed at once. ## MeterValuesSampledData in depth MeterValuesSampledData is a comma separated list of measurands. During a transaction the charger samples every item on the list at the interval set by MeterValueSampleInterval and sends them in a MeterValues message. Left at its default the charger reports one cumulative energy register, enough to bill a session and nothing more: no power curve, no per-phase current, no voltage, and no way to verify that a smart charging limit was applied. Keys it works with: - MeterValueSampleInterval: how often, in seconds, the list is sampled during a transaction. 0 disables sampling. - MeterValuesSampledDataMaxLength: maximum number of measurands allowed in the list (read only). - StopTxnSampledData: which measurands are repeated inside the transactionData of StopTransaction. - MeterValuesAlignedData with ClockAlignedDataInterval: the same measurand vocabulary on a clock schedule instead of a session. ### Measurands - **Energy.Active.Import.Register** (Wh, typically on AC and DC) [used for billing]: Cumulative energy drawn from the grid, read straight off the meter register. The default when MeterValuesSampledData is empty, and the value nearly every billing calculation is built on. - **Energy.Active.Export.Register** (Wh, typically on V2G capable): Cumulative energy fed back, for bidirectional setups. - **Energy.Active.Import.Interval** (Wh, typically on AC and DC): Energy imported since the previous sample, rather than a running total. - **Energy.Reactive.Import.Register** (varh, typically on Meter dependent): Cumulative reactive energy imported. - **Power.Active.Import** (W, typically on AC and DC): Instantaneous active power. What you plot to see a charging curve, and what load management reacts to. - **Power.Offered** (W, typically on AC and DC): Power the charger is currently offering the car. Compare it with Power.Active.Import to see whether a limit is actually being applied. - **Power.Reactive.Import** (var, typically on Meter dependent): Instantaneous reactive power. - **Power.Factor** (ratio, typically on Meter dependent): Ratio of active to apparent power. - **Current.Import** (A, typically on AC and DC): Current drawn. Usually reported per phase, so this one measurand can become three values per sample. - **Current.Offered** (A, typically on AC and DC): Current limit the charger is signalling to the car. The direct read-out of whether your smart charging profile landed. - **Current.Export** (A, typically on V2G capable): Current fed back, for bidirectional setups. - **Voltage** (V, typically on AC and DC): Supply voltage, per phase on three-phase chargers. Useful for spotting a dropped phase or a weak connection. - **Frequency** (Hz, typically on Meter dependent): Grid frequency. Note that the spec gives it no unit field. - **Temperature** (Celsius, typically on Charger dependent): Temperature at the charger or connector. Explains derating on a hot day before anyone calls it a fault. - **SoC** (%, typically on DC, or ISO 15118 on AC): State of charge of the car's battery. Only present when the car actually reports it, which on plain AC charging it usually does not. - **RPM** (rpm, typically on Rare): Fan speed, on chargers that report it. Measurands can carry a phase qualifier (L1, L2, L3, N, L1-N, L2-N, L3-N, L1-L2, L2-L3, L3-L1), a location, a unit and a context (Sample.Periodic, Transaction.Begin, Transaction.End, Sample.Clock, Trigger, Other). ### Working lists - Billing only, the minimum that still produces a correct invoice: `Energy.Active.Import.Register` - Standard telemetry for a managed AC site: `Energy.Active.Import.Register,Power.Active.Import,Current.Import,Voltage` - Smart charging, adds the offered values so a profile can be verified: `Energy.Active.Import.Register,Power.Active.Import,Power.Offered,Current.Import,Current.Offered,Voltage` - DC fast charging, adds state of charge and temperature: `Energy.Active.Import.Register,Power.Active.Import,Current.Import,Voltage,SoC,Temperature` ### Failure modes - One unsupported measurand rejects the entire list. Chargers validate the list as a unit and do not say which item failed. Set measurands one at a time to isolate the offender. - One measurand can be three values. Current.Import and Voltage are reported per phase, so a six-measurand list can produce a dozen values per sample on a three-phase charger. - Wh against kWh. The energy register defaults to Wh but the unit field can say kWh, and some firmware does. Read the unit rather than assuming it, or invoices land a factor of a thousand out. - A short interval is not free. MeterValueSampleInterval at 10 seconds with a long list produces hundreds of messages per session, which costs real money on a metered SIM and real load on the backend. 60 seconds is a good default, 300 where only the shape of the curve matters. - StopTxnSampledData is the payload trap. Everything listed there is repeated for every sample of the whole session inside a single StopTransaction message, which can grow large enough for backends to reject or truncate, leaving transactions that never close cleanly. - Dropping Energy.Active.Import.Register breaks billing. Without it the periodic meter values carry no cumulative total, backends fall back to meterStart and meterStop, and any session with a missing StopTransaction becomes unbillable. - SoC is usually unavailable on AC. State of charge comes from the car over ISO 15118 or the DC protocol; a plain AC wallbox without Plug and Charge does not receive it. - Read the context field. A value at Transaction.Begin is a starting register, not consumption. Treating every sample as periodic double counts sessions. ### Example exchange ```json [2,"19223201","ChangeConfiguration",{"key":"MeterValuesSampledData","value":"Energy.Active.Import.Register,Power.Active.Import,Current.Import,Voltage"}] [3,"19223201",{"status":"RebootRequired"}] [2,"19223202","MeterValues",{"connectorId":1,"transactionId":8123,"meterValue":[{"timestamp":"2026-07-23T11:04:00Z","sampledValue":[{"value":"14230","measurand":"Energy.Active.Import.Register","unit":"Wh","context":"Sample.Periodic"},{"value":"7360","measurand":"Power.Active.Import","unit":"W"},{"value":"10.7","measurand":"Current.Import","unit":"A","phase":"L1"},{"value":"231.2","measurand":"Voltage","unit":"V","phase":"L1-N"}]}]}] ``` ## Messages All 28 OCPP 1.6J messages, grouped by feature profile. ### Core Essential charge point operations including authorization, transactions, and status reporting #### Authorize Direction: Charge Point to Central System Requests authorization for an idTag before allowing charging Request: - idTag (string, required, maxLength: 20): The identifier to authorize Response: - idTagInfo (object, required): Authorization information for the idTag - status (string, required): Authorization status Values: Accepted, Blocked, Expired, Invalid, ConcurrentTx. - expiryDate (string, optional, format: date-time): Date/time after which the idTag should be considered expired - parentIdTag (string, optional, maxLength: 20): Parent idTag for group authorization #### BootNotification Direction: Charge Point to Central System Sent after startup to register with the Central System Request: - chargePointVendor (string, required, maxLength: 20): Vendor of the charge point - chargePointModel (string, required, maxLength: 20): Model of the charge point - chargePointSerialNumber (string, optional, maxLength: 25): Serial number of the charge point - chargeBoxSerialNumber (string, optional, maxLength: 25): Serial number of the charge box - firmwareVersion (string, optional, maxLength: 50): Firmware version of the charge point - iccid (string, optional, maxLength: 20): ICCID of the SIM card - imsi (string, optional, maxLength: 20): IMSI of the SIM card - meterType (string, optional, maxLength: 25): Type of the energy meter - meterSerialNumber (string, optional, maxLength: 25): Serial number of the energy meter Response: - status (string, required): Registration status Values: Accepted, Pending, Rejected. - currentTime (string, required, format: date-time): Current time of the Central System - interval (integer, required): Heartbeat interval in seconds #### ChangeAvailability Direction: Central System to Charge Point Changes availability of a connector Request: - connectorId (integer, required): ID of the connector (0 = entire charge point) - type (string, required): Requested availability change Values: Inoperative, Operative. Response: - status (string, required): Result of the availability change request Values: Accepted, Rejected, Scheduled. #### ChangeConfiguration Direction: Central System to Charge Point Changes a configuration key on the charger Request: - key (string, required, maxLength: 50): Configuration key to change - value (string, required, maxLength: 500): New value for the configuration key Response: - status (string, required): Result of the configuration change Values: Accepted, Rejected, RebootRequired, NotSupported. #### ClearCache Direction: Central System to Charge Point Clears the authorization cache on the charger Request: - (empty body) Response: - status (string, required): Result of the cache clear request Values: Accepted, Rejected. #### DataTransfer Direction: Bidirectional Vendor-specific data exchange Request: - vendorId (string, required, maxLength: 255): Identifies the vendor - messageId (string, optional, maxLength: 50): Additional identification of the message - data (string, optional): Vendor-specific data Response: - status (string, required): Result of the data transfer Values: Accepted, Rejected, UnknownMessageId, UnknownVendorId. - data (string, optional): Vendor-specific response data #### GetConfiguration Direction: Central System to Charge Point Retrieves configuration keys from the charger Request: - key (array, optional, items maxLength: 50): List of configuration keys to retrieve Response: - configurationKey (array, optional): List of known configuration keys - key (string, required, maxLength: 50): Configuration key name - readonly (boolean, required): Whether the key is read-only - value (string, optional, maxLength: 500): Current value of the key - unknownKey (array, optional, items maxLength: 50): List of requested keys that are unknown #### Heartbeat Direction: Charge Point to Central System Periodic keep-alive to let the Central System know the charger is online Request: - (empty body) Response: - currentTime (string, required, format: date-time): Current time of the Central System #### MeterValues Direction: Charge Point to Central System Sends periodic or triggered meter readings Request: - connectorId (integer, required): ID of the connector (0 = main meter) - meterValue (array, required): One or more meter values with timestamps - timestamp (string, required, format: date-time): Timestamp of the meter value - sampledValue (array, required): One or more sampled values - value (string, required): The measured value - context (string, optional): Reading context Values: Interruption.Begin, Interruption.End, Sample.Clock, Sample.Periodic, Transaction.Begin, Transaction.End, Trigger, Other. - format (string, optional): Value format Values: Raw, SignedData. - measurand (string, optional): Type of measurement Values: Energy.Active.Export.Register, Energy.Active.Import.Register, Energy.Reactive.Export.Register, Energy.Reactive.Import.Register, Energy.Active.Export.Interval, Energy.Active.Import.Interval, Energy.Reactive.Export.Interval, Energy.Reactive.Import.Interval, Power.Active.Export, Power.Active.Import, Power.Offered, Power.Reactive.Export, Power.Reactive.Import, Power.Factor, Current.Import, Current.Export, Current.Offered, Voltage, Frequency, Temperature, SoC, RPM. - phase (string, optional): Phase to which the measurement applies Values: L1, L2, L3, N, L1-N, L2-N, L3-N, L1-L2, L2-L3, L3-L1. - location (string, optional): Location of measurement Values: Cable, EV, Inlet, Outlet, Body. - unit (string, optional): Unit of measurement Values: Wh, kWh, varh, kvarh, W, kW, VA, kVA, var, kvar, A, V, K, Celcius, Celsius, Fahrenheit, Percent. - transactionId (integer, optional): Transaction to which these meter values apply Response: - (empty body) #### RemoteStartTransaction Direction: Central System to Charge Point Remotely starts a charging session Request: - idTag (string, required, maxLength: 20): The identifier to use for this session - connectorId (integer, optional): Connector on which to start - chargingProfile (object, optional): Charging profile to apply to this session - chargingProfileId (integer, required): Unique identifier of this charging profile - stackLevel (integer, required): Priority level of the profile (higher = higher priority) - chargingProfilePurpose (string, required): Purpose of the charging profile Values: ChargePointMaxProfile, TxDefaultProfile, TxProfile. - chargingProfileKind (string, required): Kind of schedule Values: Absolute, Recurring, Relative. - chargingSchedule (object, required): The charging schedule - chargingRateUnit (string, required): Unit of the charging rate (amps or watts) Values: A, W. - chargingSchedulePeriod (array, required): List of schedule periods - startPeriod (integer, required): Start of the period in seconds from the schedule start - limit (number, required, multipleOf: 0.1): Power or current limit during this period - numberPhases (integer, optional): Number of phases to use for charging - duration (integer, optional): Duration of the schedule in seconds - startSchedule (string, optional, format: date-time): Start date/time of the schedule - minChargingRate (number, optional, multipleOf: 0.1): Minimum charging rate supported - transactionId (integer, optional): Transaction to which this profile applies - recurrencyKind (string, optional): Recurrence frequency for recurring profiles Values: Daily, Weekly. - validFrom (string, optional, format: date-time): Date/time from which the profile is valid - validTo (string, optional, format: date-time): Date/time after which the profile is no longer valid Response: - status (string, required): Whether the charge point accepted the request Values: Accepted, Rejected. #### RemoteStopTransaction Direction: Central System to Charge Point Remotely stops a charging session Request: - transactionId (integer, required): ID of the transaction to stop Response: - status (string, required): Whether the charge point accepted the request Values: Accepted, Rejected. #### Reset Direction: Central System to Charge Point Resets the charge point (hard or soft) Request: - type (string, required): Type of reset to perform Values: Hard, Soft. Response: - status (string, required): Whether the charge point accepted the reset Values: Accepted, Rejected. #### StartTransaction Direction: Charge Point to Central System Notifies the Central System that a charging session has started Request: - connectorId (integer, required): Connector on which the transaction started - idTag (string, required, maxLength: 20): Identifier used to start the transaction - meterStart (integer, required): Meter value at start of transaction (Wh) - timestamp (string, required, format: date-time): Timestamp when the transaction started - reservationId (integer, optional): ID of the reservation that was used Response: - idTagInfo (object, required): Authorization information for the idTag - status (string, required): Authorization status Values: Accepted, Blocked, Expired, Invalid, ConcurrentTx. - expiryDate (string, optional, format: date-time): Date/time after which the idTag should be considered expired - parentIdTag (string, optional, maxLength: 20): Parent idTag for group authorization - transactionId (integer, required): Transaction ID assigned by the Central System #### StatusNotification Direction: Charge Point to Central System Reports the current status and any errors of a connector Request: - connectorId (integer, required): Connector for which the status is reported - errorCode (string, required): Error code (NoError if no error) Values: ConnectorLockFailure, EVCommunicationError, GroundFailure, HighTemperature, InternalError, LocalListConflict, NoError, OtherError, OverCurrentFailure, PowerMeterFailure, PowerSwitchFailure, ReaderFailure, ResetFailure, UnderVoltage, OverVoltage, WeakSignal. - status (string, required): Current status of the connector Values: Available, Preparing, Charging, SuspendedEVSE, SuspendedEV, Finishing, Reserved, Unavailable, Faulted. - info (string, optional, maxLength: 50): Additional free-text info about the status - timestamp (string, optional, format: date-time): Timestamp of the status change - vendorId (string, optional, maxLength: 255): Vendor-specific identifier - vendorErrorCode (string, optional, maxLength: 50): Vendor-specific error code Response: - (empty body) #### StopTransaction Direction: Charge Point to Central System Notifies the Central System that a charging session has stopped Request: - transactionId (integer, required): ID of the transaction being stopped - timestamp (string, required, format: date-time): Timestamp when the transaction stopped - meterStop (integer, required): Meter value at end of transaction (Wh) - idTag (string, optional, maxLength: 20): Identifier that requested the stop - reason (string, optional): Reason for stopping the transaction Values: EmergencyStop, EVDisconnected, HardReset, Local, Other, PowerLoss, Reboot, Remote, SoftReset, UnlockCommand, DeAuthorized. - transactionData (array, optional): Array of MeterValue objects (same structure as MeterValues.meterValue) - timestamp (string, required, format: date-time): Timestamp of the meter value - sampledValue (array, required): One or more sampled values - value (string, required): The measured value - context (string, optional): Reading context Values: Interruption.Begin, Interruption.End, Sample.Clock, Sample.Periodic, Transaction.Begin, Transaction.End, Trigger, Other. - format (string, optional): Value format Values: Raw, SignedData. - measurand (string, optional): Type of measurement Values: Energy.Active.Export.Register, Energy.Active.Import.Register, Energy.Reactive.Export.Register, Energy.Reactive.Import.Register, Energy.Active.Export.Interval, Energy.Active.Import.Interval, Energy.Reactive.Export.Interval, Energy.Reactive.Import.Interval, Power.Active.Export, Power.Active.Import, Power.Offered, Power.Reactive.Export, Power.Reactive.Import, Power.Factor, Current.Import, Current.Export, Current.Offered, Voltage, Frequency, Temperature, SoC, RPM. - phase (string, optional): Phase to which the measurement applies Values: L1, L2, L3, N, L1-N, L2-N, L3-N, L1-L2, L2-L3, L3-L1. - location (string, optional): Location of measurement Values: Cable, EV, Inlet, Outlet, Body. - unit (string, optional): Unit of measurement Values: Wh, kWh, varh, kvarh, W, kW, VA, kVA, var, kvar, A, V, K, Celcius, Celsius, Fahrenheit, Percent. Response: - idTagInfo (object, optional): Authorization information for the idTag - status (string, required): Authorization status Values: Accepted, Blocked, Expired, Invalid, ConcurrentTx. - expiryDate (string, optional, format: date-time): Date/time after which the idTag should be considered expired - parentIdTag (string, optional, maxLength: 20): Parent idTag for group authorization #### UnlockConnector Direction: Central System to Charge Point Remotely unlocks a connector Request: - connectorId (integer, required): Connector to unlock Response: - status (string, required): Result of the unlock request Values: Unlocked, UnlockFailed, NotSupported. ### Firmware Management Firmware updates and diagnostics log uploads #### GetDiagnostics Direction: Central System to Charge Point Requests the charger to upload diagnostic logs Request: - location (string, required, format: uri): URI where diagnostics should be uploaded - retries (integer, optional): Number of retries for uploading - retryInterval (integer, optional): Seconds between retry attempts - startTime (string, optional, format: date-time): Start of the time range for log collection - stopTime (string, optional, format: date-time): End of the time range for log collection Response: - fileName (string, optional, maxLength: 255): Name of the diagnostics file #### DiagnosticsStatusNotification Direction: Charge Point to Central System Reports the status of a diagnostics upload Request: - status (string, required): Current status of the diagnostics upload Values: Idle, Uploaded, UploadFailed, Uploading. Response: - (empty body) #### FirmwareStatusNotification Direction: Charge Point to Central System Reports the status of a firmware update Request: - status (string, required): Current status of the firmware update Values: Downloaded, DownloadFailed, Downloading, Idle, InstallationFailed, Installing, Installed. Response: - (empty body) #### UpdateFirmware Direction: Central System to Charge Point Instructs the charger to download and install new firmware Request: - location (string, required, format: uri): URI where the firmware can be downloaded - retrieveDate (string, required, format: date-time): Date/time after which the charger should retrieve the firmware - retries (integer, optional): Number of retries for downloading - retryInterval (integer, optional): Seconds between retry attempts Response: - (empty body) ### Local Auth List Management Managing the local authorization list on the charge point #### GetLocalListVersion Direction: Central System to Charge Point Retrieves the version number of the local authorization list Request: - (empty body) Response: - listVersion (integer, required): Current version number of the local authorization list #### SendLocalList Direction: Central System to Charge Point Sends a full or partial update to the local authorization list Request: - listVersion (integer, required): Version number of this list update - updateType (string, required): Whether this is a full replacement or differential update Values: Differential, Full. - localAuthorizationList (array, optional): List of authorization entries - idTag (string, required, maxLength: 20): The identifier to authorize - idTagInfo (object, optional): Authorization information for the idTag - status (string, required): Authorization status Values: Accepted, Blocked, Expired, Invalid, ConcurrentTx. - expiryDate (string, optional, format: date-time): Date/time after which the idTag should be considered expired - parentIdTag (string, optional, maxLength: 20): Parent idTag for group authorization Response: - status (string, required): Result of the local list update Values: Accepted, Failed, NotSupported, VersionMismatch. ### Reservation Creating and cancelling connector reservations #### CancelReservation Direction: Central System to Charge Point Cancels an existing reservation Request: - reservationId (integer, required): ID of the reservation to cancel Response: - status (string, required): Whether the reservation was cancelled Values: Accepted, Rejected. #### ReserveNow Direction: Central System to Charge Point Creates a reservation on a specific connector Request: - connectorId (integer, required): Connector to reserve (0 = no specific connector) - expiryDate (string, required, format: date-time): Date/time when the reservation expires - idTag (string, required, maxLength: 20): Identifier for which the reservation is made - reservationId (integer, required): Unique ID for this reservation - parentIdTag (string, optional, maxLength: 20): Parent idTag for group reservation Response: - status (string, required): Result of the reservation request Values: Accepted, Faulted, Occupied, Rejected, Unavailable. ### Smart Charging Charging profiles and composite schedule management #### ClearChargingProfile Direction: Central System to Charge Point Removes one or more charging profiles from the charger Request: - id (integer, optional): ID of the charging profile to clear - connectorId (integer, optional): Connector for which to clear profiles - chargingProfilePurpose (string, optional): Purpose of profiles to clear Values: ChargePointMaxProfile, TxDefaultProfile, TxProfile. - stackLevel (integer, optional): Stack level of profiles to clear Response: - status (string, required): Whether any profiles were cleared Values: Accepted, Unknown. #### GetCompositeSchedule Direction: Central System to Charge Point Requests the combined charging schedule for a connector Request: - connectorId (integer, required): Connector for which to get the schedule - duration (integer, required): Duration in seconds for the requested schedule - chargingRateUnit (string, optional): Preferred unit for the schedule Values: A, W. Response: - status (string, required): Whether the charge point can provide the schedule Values: Accepted, Rejected. - connectorId (integer, optional): Connector to which the schedule applies - scheduleStart (string, optional, format: date-time): Start date/time of the composite schedule - chargingSchedule (object, optional): The composite charging schedule - chargingRateUnit (string, required): Unit of the charging rate (amps or watts) Values: A, W. - chargingSchedulePeriod (array, required): List of schedule periods - startPeriod (integer, required): Start of the period in seconds from the schedule start - limit (number, required, multipleOf: 0.1): Power or current limit during this period - numberPhases (integer, optional): Number of phases to use for charging - duration (integer, optional): Duration of the schedule in seconds - startSchedule (string, optional, format: date-time): Start date/time of the schedule - minChargingRate (number, optional, multipleOf: 0.1): Minimum charging rate supported #### SetChargingProfile Direction: Central System to Charge Point Sends a charging profile to the charger Request: - connectorId (integer, required): Connector to which the profile applies - csChargingProfiles (object, required): The charging profile to install - chargingProfileId (integer, required): Unique identifier of this charging profile - stackLevel (integer, required): Priority level of the profile (higher = higher priority) - chargingProfilePurpose (string, required): Purpose of the charging profile Values: ChargePointMaxProfile, TxDefaultProfile, TxProfile. - chargingProfileKind (string, required): Kind of schedule Values: Absolute, Recurring, Relative. - chargingSchedule (object, required): The charging schedule - chargingRateUnit (string, required): Unit of the charging rate (amps or watts) Values: A, W. - chargingSchedulePeriod (array, required): List of schedule periods - startPeriod (integer, required): Start of the period in seconds from the schedule start - limit (number, required, multipleOf: 0.1): Power or current limit during this period - numberPhases (integer, optional): Number of phases to use for charging - duration (integer, optional): Duration of the schedule in seconds - startSchedule (string, optional, format: date-time): Start date/time of the schedule - minChargingRate (number, optional, multipleOf: 0.1): Minimum charging rate supported - transactionId (integer, optional): Transaction to which this profile applies - recurrencyKind (string, optional): Recurrence frequency for recurring profiles Values: Daily, Weekly. - validFrom (string, optional, format: date-time): Date/time from which the profile is valid - validTo (string, optional, format: date-time): Date/time after which the profile is no longer valid Response: - status (string, required): Whether the profile was accepted Values: Accepted, Rejected, NotSupported. ### Remote Trigger Triggering the charge point to send specific messages on demand #### TriggerMessage Direction: Central System to Charge Point Requests the charge point to send a specific message immediately Request: - requestedMessage (string, required): The message the charge point should send Values: BootNotification, DiagnosticsStatusNotification, FirmwareStatusNotification, Heartbeat, MeterValues, StatusNotification. - connectorId (integer, optional): Connector for which the message should be sent Response: - status (string, required): Whether the charge point will send the message Values: Accepted, Rejected, NotImplemented. ## About Plugchoice Plugchoice is a free charger management platform that acts as an OCPP 1.6J Central System: web portal, mobile app and REST API, hardware agnostic, no subscription for the core platform. It also runs as an OCPP proxy, forwarding one charger's connection to a second backend so operators can migrate or run two platforms in parallel without reconfiguring hardware. - Platform: https://plugchoice.com/en/platform/ocpp-platform - OCPP proxy: https://plugchoice.com/en/platform/ocpp-proxy - Charger compatibility: https://plugchoice.com/en/platform/integrations - Help center: https://plugchoice.com/en/help/help-center - API reference: https://developer.plugchoice.com