OCPP MESSAGE · UPDATED 11 AUG 2026

RemoteStartTransaction: behind every app tap

Behind every “start charging” button is this message. The protocol part is trivial; the hard part is that Accepted tells you almost nothing about whether a car is actually charging.

PART OF THE OCPP COMPLETE GUIDE · 14 MESSAGE GUIDES

IN ONE PARAGRAPH

RemoteStartTransaction asks a charger to begin a session for a given credential. The Accepted response means the charger will try. Confirmation is the StartTransaction that follows. Building UI on the acknowledgement is why remote start feels unreliable to drivers on many networks.

The message

// CSMS -> charge point
[2, "19223206", "RemoteStartTransaction", {
  "connectorId": 1,
  "idTag": "DR88231ABCD",
  "chargingProfile": {
    "chargingProfileId": 4471,
    "stackLevel": 2,
    "chargingProfilePurpose": "TxProfile",
    "chargingProfileKind": "Relative",
    "chargingSchedule": {
      "chargingRateUnit": "W",
      "chargingSchedulePeriod": [{ "startPeriod": 0, "limit": 22000 }]
    }
  }
}]

// Charge point -> CSMS
[3, "19223206", { "status": "Accepted" }]
FieldNotes
connectorIdOptional. Omit and the charger picks; include to target a bay.
idTagThe credential to bill against — carried onto the transaction
chargingProfileOptional smart charging limit applied to this session only
Accepted means the charger will attempt to start. It does not mean charging began. The charger still has to check the connector is free, the cable is connected, and the vehicle is ready. Confirmation is the StartTransaction that follows. This is the same acknowledge-then-confirm shape as OCPI Commands, and the same mistake is made at both layers.

Targeting a connector

Omitting connectorId lets the charger choose any available connector, which raises the acceptance rate. Naming one is almost always what you actually want, because a driver is physically standing at a specific bay with a cable already plugged in.

Starting the wrong bay is worse than failing: a driver watches their app say charging while nothing happens at their vehicle, and somewhere across the car park another car begins charging on their credential.

Before sending, check StatusNotification for the target connector. Preparing is the ideal state — cable connected, waiting for authorisation. Sending to a connector in Available with nothing plugged in generally results in the charger waiting and then timing out.

AuthorizeRemoteTxRequests

A configuration key that changes the behaviour of this message significantly.

ValueCharger doesConsequence
falseTrusts the CSMS and startsFaster; the CSMS is responsible for authorisation
trueSends Authorize for the idTag firstSlower; a second authorisation round trip

false is the usual production setting. The CSMS just decided this driver may charge — that is why it sent the command — so asking again adds latency for no new information.

Set it to true only where the charger must independently verify, such as a site with its own local authorisation policy. Be aware that on a roaming session this doubles the authorisation path: the CSMS asks the eMSP over OCPI, then the charger asks the CSMS again.

Why it fails

SymptomCauseTell the driver
Rejected immediatelyConnector busy, faulted, or unknown idTagThis charger is not available
Accepted, no StartTransactionNothing plugged in, or the vehicle is not readyCheck the cable is fully inserted
Accepted, then StartTransaction then immediate stopCSMS refused in the idTagInfoAuthorisation problem — contact support
No response at allCharger offlineCannot reach this charger right now
Wrong connector startsconnectorId omitted— a bug, not a driver-facing case

The second row is the most common real-world failure and it is not a fault. The driver has not plugged in yet, or has not pushed the connector home. A message telling them to check the cable resolves a meaningful share of these without any support contact.

The chain from OCPI

Driver app (eMSP)
      │  OCPI START_SESSION { token, location_id, evse_uid }
      ▼
   CPO / CSMS
      │  resolve evse_uid → connectorId
      │  OCPP RemoteStartTransaction { idTag, connectorId }
      ▼
   Charge point
      │  OCPP StartTransaction  ← the real confirmation
      ▼
   CPO  ──► OCPI CommandResult
        ──► OCPI Session (ACTIVE)
        ──► OCPI CDR at the end

Three network hops, each able to fail independently. Two rules keep this honest:

  • Send the OCPI CommandResult when StartTransaction arrives, not on the OCPP acknowledgement. Forwarding the acknowledgement propagates a false confirmation to the eMSP, which then shows a driver that charging began when it did not.
  • Carry authorization_reference through. Stitch it onto the transaction at creation, or the eventual CDR cannot be traced back to the request that caused it.

Production lessons

  • Never show success on Accepted. Wait for StartTransaction.
  • Always specify connectorId when the driver is at a known bay.
  • Check connector status firstPreparing is the state you want.
  • Leave AuthorizeRemoteTxRequests false unless a site genuinely requires local verification.
  • Never auto-retry. A retry can produce two sessions; check for a StartTransaction first.
  • Prompt about the cable on silent failure. It is the most common cause and the easiest fix.
  • Measure command-to-StartTransaction latency per charger model. It sets the copy and the timeout your UI needs.

Frequently asked questions

Does an Accepted RemoteStartTransaction mean charging started?

No. It means the charger will attempt to start. It still has to confirm the connector is free, the cable is connected and the vehicle is ready. The real confirmation is the StartTransaction message that follows.

Should you specify connectorId in RemoteStartTransaction?

Almost always yes. Omitting it lets the charger pick any available connector, which raises acceptance rates but risks starting a different bay from the one the driver is standing at — a worse outcome than failing.

What does AuthorizeRemoteTxRequests do?

When true, the charger sends its own Authorize request for the idTag before starting, adding a second round trip. When false it trusts the CSMS and starts immediately. False is the usual production setting, since the CSMS just authorised the driver by sending the command.

Why does a remote start get Accepted but never start charging?

Most often because nothing is plugged in, or the connector is not fully seated. It is not a fault, and prompting the driver to check the cable resolves a meaningful share of these without support contact.

When should the OCPI CommandResult be sent for a remote start?

When the OCPP StartTransaction arrives, not on the OCPP acknowledgement. Forwarding the acknowledgement propagates a false confirmation to the eMSP, which then tells a driver charging began when it did not.