Confirm both CSMS and charge point advertise and accept the 'BidirectionalCharging' functional block during the BootNotification / GetBaseReport exchange; the charge point must list it in its ReportedComponents.
When the EV connects and ISO 15118-20 BPT use-case is selected, the charge point sends a NotifyEVChargingNeeds request containing a V2XChargingNeeds object (not the older ChargingNeeds object used for unidirectional sessions); parse the fields including departureTime, evTargetEnergyRequest, evMaxDischargeEnergy, and evMaxDischargePower.
Respond with a SetChargingProfile request that includes a ChargingProfile with purpose 'TxDefaultProfile' and a ChargingSchedule whose chargingRateUnit is 'W'; negative power values in chargingSchedulePeriod entries signal discharge (export) — confirm the charge point firmware supports negative limits before sending.
Monitor ongoing sessions via MeterValues notifications; the measurand 'Power.Active.Import' will report negative values during discharge intervals, and 'Energy.Active.Export.Register' tracks cumulative export energy.
Send ClearChargingProfile or a new SetChargingProfile to adjust the discharge schedule in response to grid signals or market price changes during the session.
Handle session termination: on StopTransaction (OCPP 2.0.1 terminology) or TransactionEvent with eventType 'Ended', reconcile energy import and export values separately for billing and settlement.
Known gotchas
OCPP 2.1 was published as an IEC standard in January 2025 and is backward compatible with 2.0.1, but bidirectional charging requires both the CSMS and charge point to explicitly support the BidirectionalCharging functional block — simply upgrading the CSMS protocol version is not sufficient.
Negative power values in charging schedules are a new construct in OCPP 2.1; charge point firmware that was written for 2.0.1 may reject or ignore negative limits, so always verify hardware firmware support before deploying V2G schedules.
ISO 15118-20 BPT use-case negotiation happens at the vehicle-EVSE layer; OCPP 2.1 relays the outcome to the CSMS but does not replace the 15118-20 handshake — both stacks must be implemented end-to-end.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp