The CSMS sends RemoteStartTransaction with an idTag (and optionally a connectorId). The Charge Point responds Accepted or Rejected — then sends a regular StartTransaction when energy actually flows. To end a remote session, the CSMS sends RemoteStopTransaction with the transactionId; the Charge Point then sends a regular StopTransaction.
Remote vs local start
OCPP supports two ways to start a charging session:
🪪 Local start
Driver presents an RFID card or plugs in (for autostart). The Charge Point sends Authorize, then StartTransaction. No CSMS command needed to initiate.
📱 Remote start
A CPO backend or driver app sends RemoteStartTransaction via the CSMS. The Charge Point receives the command and starts a session — no physical token presented at the charger.
Remote start is the foundation of every "start charging from the app" user experience. It is also used for fleet management, automated workplace charging, and price-triggered smart charging sessions.
RemoteStartTransaction
| Field | Required | Description |
|---|---|---|
| idTag | Yes | Authorization token for the session. Max 20 characters. Must pass local or online authorization at the Charge Point. |
| connectorId | No | Target connector. If omitted, the Charge Point picks an available connector. Must be ≥ 1. |
| chargingProfile | No | An optional TxProfile that limits power for this specific session from the moment it starts. See the section below. |
The Charge Point responds with status: "Accepted" or status: "Rejected". Accepted means the command was received and will be executed — not that the session has started. Rejected typically means the connector is occupied, the Charge Point is in maintenance mode, or the idTag failed local authorization.
Full start sequence
RemoteStopTransaction
To stop a remote session, the CSMS sends RemoteStopTransaction with the transactionId assigned by the CSMS in the StartTransaction response. This is the only field — unlike RemoteStart, there is no idTag or connectorId.
After responding Accepted, the Charge Point sends a regular StopTransaction with reason: "Remote". The CSMS should wait for StopTransaction before showing "Session ended" — the Accepted response means only that the command was received.
Starting with a charging profile
RemoteStartTransaction can embed a TxProfile charging profile that takes effect the moment the session starts. This lets the backend control session power without a separate SetChargingProfile command after StartTransaction.
OCPP 2.0.1 differences
In OCPP 2.0.1, the messages are renamed and the payload restructured:
- RemoteStartTransaction → RequestStartTransaction: uses an
IdTokenobject (with requiredtypefield) instead of a plainidTag; targets anevseIdinstead ofconnectorId. - RemoteStopTransaction → RequestStopTransaction: same concept, payload unchanged (transactionId only).
- The response adds a
statusInfoobject for richer rejection reasons.
Common use cases
📱 Driver app
User taps "Start charging" in the CPO app. The app calls the backend API; the backend sends RemoteStartTransaction with a session-specific idTag.
🏢 Workplace charging
IT system auto-starts sessions for registered employee vehicles when they arrive. A bay assignment system selects the target connectorId.
💰 Dynamic pricing
Backend waits for off-peak tariff window, then sends RemoteStartTransaction with an embedded TxProfile limiting to full power only during cheap hours.
🚛 Fleet management
Depot management system queues sessions overnight. At calculated start times, RemoteStartTransaction is sent with per-vehicle power limits.
Common errors
Treating RemoteStartTransaction Accepted as session started
Accepted only confirms the command was received. Show "Starting…" in the UI until StartTransaction arrives from the Charge Point — that is the real confirmation.
No timeout after Accepted
If the cable is not plugged in, the Charge Point may respond Accepted but never send StartTransaction. Implement a 60–120 s timeout in the CSMS and surface the failure to the user.
Using connectorId 0 in RemoteStartTransaction
ConnectorId 0 refers to the whole Charge Point, not a specific connector. It is not valid for RemoteStartTransaction. Use a specific connector ID ≥ 1, or omit the field to let the Charge Point choose.
idTag not pre-loaded in the Charge Point
If AllowOfflineTxForUnknownId is false and the idTag is not in the local list or authorization cache, the Charge Point will reject the session despite responding Accepted to RemoteStartTransaction. Pre-load all remote session tokens in the local list.
Rodolfo Carrillo
OCPP integration engineer and creator of OCPP Tools. All articles are verified against the official OCA specification and tested using the on-site tools.
Build a frame in seconds
Form-driven payload builder — pick fields, get a valid frame, copy to clipboard.
Frequently asked questions
What is the difference between RemoteStartTransaction Accepted and the session actually starting?
Is connectorId required in RemoteStartTransaction?
What happens if RemoteStartTransaction is Accepted but no StartTransaction arrives?
Can the Charge Point reject a RemoteStopTransaction?
What idTag should the CSMS use in RemoteStartTransaction?
How does OCPP 2.0.1 rename these messages?
Sources & further reading
- · Open Charge Alliance. (2015). Open Charge Point Protocol 1.6, Edition 2, §4.3 — RemoteStartTransaction. https://openchargealliance.org/my-oca/ocpp/
- · Open Charge Alliance. (2015). Open Charge Point Protocol 1.6, Edition 2, §4.4 — RemoteStopTransaction. https://openchargealliance.org/my-oca/ocpp/
- · Open Charge Alliance. (2020). Open Charge Point Protocol 2.0.1, §5 — RequestStartTransaction. https://openchargealliance.org/my-oca/ocpp/