Download OpenAPI specification:Download
| Revision | Date | Remark |
|---|---|---|
| 1.0 | 12 May 2023 |
|
| 1.1 | 7 Sept 2023 |
|
| 1.2 | 27 Sept 2023 |
|
| 1.3 | 29 Sept 2023 |
|
| 1.4 | 9 Oct 2023 |
|
| 1.5 | 30 Oct 2023 |
|
| 1.6 | 28 Nov 2023 |
|
| 1.7 | 22 Jan 2024 |
|
| 1.8 | 31 May 2024 |
|
| 1.9 | 13 June 2024 |
|
| 2.0 | 17 July 2024 |
|
| 2.1 | 15 July 2024 |
|
| 2.2 | 20 Sept 2024 |
|
| 2.3 | 14 Oct 2024 |
|
| CPMS | Charge Point Management System |
| EV Driver | Electric car driver |
| EVSE | Electric Vehicle Supply Equipment |
| OCPP | Open Charge Point Protocol |
| OCPP States | Mapped states |
|---|---|
| available | available |
| Preparing (received from charging point when a plug was plugged in the vehicle) | occupied |
| Preparing (received as result of RemoteStart) | reserved |
| Charging | in_use |
| SuspendedEV | in_use |
| SuspendedEVSE | in_use |
| Finishing | occupied |
| Unavailable | out_of_order |
| Faulted | out_of_order |
| Offline | out_of_order |
Terminology
An example how a charging site can look is shown in the picture below:
The authorization process can differ between the CPMS System and the Terminal Backend System. The Terminal Backend System authorization method is described below. The CPMS authorization method can differ and needs to be discussed and defined with the terminal backend system. A suggestion is also added below.
oAuth-Client credentials
Direction: CPMS → terminal backend
Credentials for connection into HecConnect
| client_id required | string |
| client_secret required | string |
{- "client_id": "string",
- "client_secret": "string"
}{- "access_token": "jwt access token",
- "expires_in": 3600,
- "token_type": "Bearer",
- "refresh_token": "jwt refresh token"
}
Requests the terminal backend will do on CPMS API to onboard Sites, Devices, Points and Products
This request will:
| sort | string Example: sort=name order ascending or descending the list of items by a property. For descending order the sort field should be prefixed with a minus('-') |
| start | number Example: start=10 number of items that should be skipped and not included in the response |
| limit | number Example: limit=20 number of items to be included in the response |
{- "links": {
- "self": "string",
- "next": "string",
- "prev": "string",
- "first": "string",
- "last": "string"
}, - "meta": {
- "limit": 0,
- "start": 0,
- "size": 0,
- "total": 0
}, - "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "mandator_id": "dc5a5bcf-08ed-4181-bdd6-b189c7f464f9",
- "mandator_name": "string",
- "name": "string",
- "code": "string",
- "site_state": "active",
- "street": "string",
- "city": "string",
- "country": "string",
- "currency": "EUR",
- "tax_percentage": 0,
- "timezone": "string",
- "default_language": "EN",
- "opening_hours": [
- {
- "start_time": "string",
- "days_availability": "alldays",
- "end_time": "string"
}
], - "gps": {
- "latitude": 50.957939,
- "longitude": 6.93529
}
}
]
}This request will:
| sort | string Example: sort=name order ascending or descending the list of items by a property. For descending order the sort field should be prefixed with a minus('-') |
| start | number Example: start=10 number of items that should be skipped and not included in the response |
| limit | number Example: limit=20 number of items to be included in the response |
{- "links": {
- "self": "string",
- "next": "string",
- "prev": "string",
- "first": "string",
- "last": "string"
}, - "meta": {
- "limit": 0,
- "start": 0,
- "size": 0,
- "total": 0
}, - "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "site_id": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
- "site_name": "string",
- "name": "string",
- "code": "string",
- "device_state": "2020-03-23T05:00:00.000Z",
- "installation_date": "string",
- "gps": {
- "latitude": 50.957939,
- "longitude": 6.93529
}
}
]
}This request will:
| sort | string Example: sort=name order ascending or descending the list of items by a property. For descending order the sort field should be prefixed with a minus('-') |
| start | number Example: start=10 number of items that should be skipped and not included in the response |
| limit | number Example: limit=20 number of items to be included in the response |
{- "links": {
- "self": "string",
- "next": "string",
- "prev": "string",
- "first": "string",
- "last": "string"
}, - "meta": {
- "limit": 0,
- "start": 0,
- "size": 0,
- "total": 0
}, - "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "site_id": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
- "device_id": "3bafab7b-4400-4bcf-8e6e-09f954699940",
- "point_number": 0,
- "name": "string",
- "type": "Type1",
- "status": "available",
- "device_code": "string",
- "products": [
- {
- "product_id": "0d012afa-f885-4e65-aeca-37e27701e2d1",
- "unit_price": 0.56,
- "currency": "string"
}
], - "gps": {
- "latitude": 50.957939,
- "longitude": 6.93529
}
}
]
}This request will:
| sort | string Example: sort=name order ascending or descending the list of items by a property. For descending order the sort field should be prefixed with a minus('-') |
| start | number Example: start=10 number of items that should be skipped and not included in the response |
| limit | number Example: limit=20 number of items to be included in the response |
{- "links": {
- "self": "string",
- "next": "string",
- "prev": "string",
- "first": "string",
- "last": "string"
}, - "meta": {
- "limit": 0,
- "start": 0,
- "size": 0,
- "total": 0
}, - "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "name": "string",
- "unit_measure": "kWh",
- "code": "string",
- "description": "string",
- "max_power": 0
}
]
}This request will:
The action the request shall accomplish - onboard or sync
| action required | string Enum: "onboard" "sync" |
{- "action": "onboard"
}{- "data": "onboarding process has started"
}This request will:
| site_id required | string <uuid> |
| point_id required | string <uuid> |
The new status of the charging point OR the new prices for point products
object (update_point_status_request) |
{- "data": {
- "status": "available"
}
}Point status was successfully updated
{- "data": {
- "id": "72502615-0382-43f5-aa71-2965ec964c5e",
- "site_id": "235563d1-698c-11ed-8755-b5e8de7aa7bd",
- "device_id": "187f2bb3-45e4-4ce4-870e-dbb176e3aaec",
- "point_number": 1,
- "name": "point-name",
- "type": "type1",
- "status": "available",
- "device_code": "123",
- "products": [
- {
- "product_id": "334b17a2-39de-43c6-a396-f0f877ea8a50",
- "unit_price": 0.56,
- "currency": "EUR"
}
], - "gps": {
- "latitude": 44.25,
- "longitude": 22.37
}
}
}This request will:
object |
Start charging for one article
{- "data": {
- "articles": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "currency": "EUR",
- "amount": 0,
- "max_amount": 0,
- "name": "product_name",
- "product_id": "0d012afa-f885-4e65-aeca-37e27701e2d1",
- "state": "reserved",
- "tax_amount": 0,
- "tax_percentage": 0,
- "unit_measure": "kWh",
- "unit_price": 3,
- "quantity": 0,
- "category": "charging"
}
], - "invoice": {
- "amount": 0,
- "created_at": "string",
- "currency": "EUR",
- "tax_amount": 0
}, - "payments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "card_entrymode": "Terminal",
- "card_id": "string",
- "medium": "Card",
- "type": "PSPCard",
- "function": "SingleCard",
- "scheme": "VISA",
- "created_at": "string",
- "reserved_amount": 0,
- "state": "reserved"
}
], - "receipt": {
- "email": "email@domain.com"
}, - "mandator_id": "39b064a8-dee3-48ba-9415-ee8b946e3da2"
}
}{- "data": {
- "articles": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "currency": "string",
- "amount": 0,
- "max_amount": 0,
- "name": "string",
- "product_id": "0d012afa-f885-4e65-aeca-37e27701e2d1",
- "state": "ongoing",
- "tax_amount": 0,
- "tax_percentage": 0,
- "unit_measure": "string",
- "unit_price": 0,
- "start_time": "string",
- "quantity": 0,
- "category": "charging"
}
], - "invoice": {
- "amount": 0,
- "created_at": "string",
- "currency": "string",
- "tax_amount": 0
}, - "payments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "card_entrymode": "MagstripeReader",
- "card_id": "string",
- "medium": "Card",
- "type": "PSPCard",
- "function": "SingleCard",
- "scheme": "7 Byte UID",
- "created_at": "string",
- "reserved_amount": 0,
- "state": "reserved"
}
], - "receipt": {
- "email": "string",
- "ocmf_start": "string",
- "ocmf_stop": "string"
}, - "mandator_id": "dc5a5bcf-08ed-4181-bdd6-b189c7f464f9",
- "site_id": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
- "point_id": "cd99f0d9-6824-4d90-b67f-24518d22d7b6",
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "state": "pending"
}
}This request will: (for update of meter values)
| transaction_id required | string <uuid> |
Updated article with new meter values OR Article with state done on transaction stopped from charging device. In case of multiple articles, all of them need to be updated.
object |
Stop charging for one article
{- "data": {
- "articles": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "currency": "EUR",
- "amount": 0,
- "max_amount": 0,
- "name": "product_name",
- "product_id": "0d012afa-f885-4e65-aeca-37e27701e2d1",
- "state": "done",
- "tax_amount": 0,
- "tax_percentage": 0,
- "unit_measure": "kWh",
- "unit_price": 3,
- "quantity": 0,
- "category": "charging"
}
], - "invoice": {
- "amount": 0,
- "created_at": "string",
- "currency": "EUR",
- "tax_amount": 0
}, - "payments": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "card_entrymode": "Terminal",
- "card_id": "string",
- "medium": "Card",
- "type": "PSPCard",
- "function": "SingleCard",
- "scheme": "VISA",
- "created_at": "string",
- "reserved_amount": 0,
- "state": "reserved"
}
], - "receipt": {
- "email": "email@domain.com"
}, - "mandator_id": "39b064a8-dee3-48ba-9415-ee8b946e3da2"
}
}Parse error
{- "errors": [
- {
- "code": 10000,
- "status": "Bad Request",
- "internal_message": "invalid UUID length: 0",
- "user_message": "Cannot parse request-Body"
}
]
}This request will: (for Stop charging from payment terminal)
| transaction_id required | string <uuid> |
object |
{- "data": {
- "articles": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "state": "done",
- "product_id": "0d012afa-f885-4e65-aeca-37e27701e2d1",
- "category": "charging"
}
]
}
}{- "data": {
- "articles": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "state": "ongoing",
- "product_id": "0d012afa-f885-4e65-aeca-37e27701e2d1",
- "category": "charging"
}
], - "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08"
}
}This request will:
| sort | string Example: sort=name order ascending or descending the list of items by a property. For descending order the sort field should be prefixed with a minus('-') |
| start | number Example: start=10 number of items that should be skipped and not included in the response |
| limit | number Example: limit=20 number of items to be included in the response |
{- "links": {
- "self": "string",
- "next": "string",
- "prev": "string",
- "first": "string",
- "last": "string"
}, - "meta": {
- "limit": 0,
- "start": 0,
- "size": 0,
- "total": 0
}, - "data": [
- {
- "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
- "site_id": "72771e6a-6f5e-4de4-a5b9-1266c4197811",
- "device_model_id": "9f922c33-2dad-4776-a99a-2b09f6b07321",
- "protocol_id": "70ae6f0a-9ae1-482f-961d-fbf486968e3a",
- "name": "Terminal Name",
- "code": "Terminal Code",
- "version": "1.0",
- "mac_address": "00-B0-D0-63-C2-26",
- "provisioning_date": "2025-01-01T00:00:00Z",
- "device_model_name": "Terminal Model",
- "site_name": "Test Site",
- "protocol_name": "HecOne360API",
- "device_state": true,
- "installation_date": "2025-01-01T00:00:00Z",
- "gps": {
- "latitutde": 46.766087,
- "longitutde": 23.579338
}
}
]
}