Hub role: RECEIVER (CPO push)
When you update locations on the Hub, routed eMSPs receive the same PUT/PATCH on their registered locations RECEIVER URL. See Async Delivery for how Hub forwards your pushes.
Endpoints
| Method | Path | Description |
|---|---|---|
PUT | /ocpi/2.2.1/locations/{cc}/{pid}/{location_id} | Create or replace location |
PATCH | /ocpi/2.2.1/locations/{cc}/{pid}/{location_id} | Partial location update |
PUT | .../{location_id}/{evse_uid} | Create or replace EVSE |
PATCH | .../{location_id}/{evse_uid} | Partial EVSE update |
PUT | .../{evse_uid}/{connector_id} | Create or replace connector |
PATCH | .../{evse_uid}/{connector_id} | Partial connector update |
Use your own CPO country_code and party_id in URL paths and object bodies. Do not use Hub (CIH) party ids. See Hub Receiver Identity (CPO).
Push example
PUT /ocpi/2.2.1/locations/IN/ABC/LOC001
Authorization: Token {cpo-token}
Content-Type: application/json
{
"country_code": "IN",
"party_id": "ABC",
"id": "LOC001",
"publish": true,
"name": "Station Alpha",
"address": "123 Main Road",
"city": "Bengaluru",
"country": "IND",
"coordinates": { "latitude": "12.9716", "longitude": "77.5946" },
"evses": [ ... ],
"last_updated": "2025-06-23T10:00:00.000Z"
}
publish: false
Locations with publish: false are stored on the Hub but not forwarded to eMSP receivers. eMSP GET /locations also excludes unpublished locations. See Async Delivery for fan-out details.
Hub pull from CPO (admin)
Operators can trigger a manual sync from your SENDER GET /locations endpoint via the admin API (POST /admin/v1/parties/{id}/pull/locations). The Hub paginates results and upserts locations in place. Incremental pulls use date_from from the last successful run unless a full pull is requested.
Rate limit
Location list: 200 requests/minute per party.
OCPI spec
See OCPI 2.2.1 Locations module for full Location, EVSE, and Connector objects.