This guide covers the complete charge point commissioning workflow using the installer API path. By the end, you will have a fully commissioned charge point handed over to a site owner.
You need installer role permissions to commission charge points. Make sure your account has been granted the installer role before proceeding.
Create an installer account
Register a new installer account. You only need to do this once.curl -X POST https://api.dynamo-csms.com/api/v1/installer/signup \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Installations",
"email": "installer@acme.com",
"password": "s3cur3P@ssword!",
"company": "Acme EV Solutions Ltd"
}'
Response:{
"id": "usr_01HX3K9VZAB2C4DEFG",
"email": "installer@acme.com",
"role": "installer",
"created_at": "2026-05-01T09:00:00Z"
}
Log in and obtain an auth token
Authenticate to receive a bearer token for all subsequent requests.curl -X POST https://api.dynamo-csms.com/api/v1/installer/login \
-H "Content-Type: application/json" \
-d '{
"email": "installer@acme.com",
"password": "s3cur3P@ssword!"
}'
Response:{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_at": "2026-05-02T09:00:00Z"
}
Store the token value. You will pass it as Authorization: Bearer <token> in every request below. Create a project
Group charge points under a project to represent a physical site or contract.curl -X POST https://api.dynamo-csms.com/api/v1/installer/projects \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-d '{
"name": "Riverside Business Park",
"address": "12 Riverside Way, Bristol, BS1 4AA",
"site_owner_email": "facilities@riversidebp.com"
}'
Response:{
"id": "prj_01HX4M7TABCDE12345",
"name": "Riverside Business Park",
"status": "in_progress",
"created_at": "2026-05-01T09:05:00Z"
}
Register a charge point
Add a charge point to your project by providing its serial number and model details.curl -X POST https://api.dynamo-csms.com/api/v1/installer/charge-points \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-d '{
"project_id": "prj_01HX4M7TABCDE12345",
"serial_number": "CP-SN-00483921",
"model": "ABB Terra AC W22",
"vendor": "ABB",
"ocpp_version": "1.6",
"location": {
"latitude": 51.4545,
"longitude": -2.5879,
"address": "Bay 3, Car Park A, Riverside Business Park"
}
}'
Response:{
"id": "cp_01HX5P2QRSTUVWXYZ0",
"serial_number": "CP-SN-00483921",
"status": "registered",
"ocpp_endpoint": "wss://ocpp.dynamo-csms.com/cp_01HX5P2QRSTUVWXYZ0"
}
Configure your charger’s firmware to connect to the ocpp_endpoint URL returned in the response. Retrieve the configuration template
Fetch the default configuration template for this charge point model before customizing it.curl -X GET https://api.dynamo-csms.com/api/v1/installer/charge-points/cp_01HX5P2QRSTUVWXYZ0/config/template \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
Response:{
"template_version": "2.1.0",
"parameters": [
{ "key": "HeartbeatInterval", "default": 60, "type": "integer" },
{ "key": "MeterValueSampleInterval", "default": 30, "type": "integer" },
{ "key": "MaxChargingProfilesInstalled", "default": 10, "type": "integer" },
{ "key": "AuthorizationCacheEnabled", "default": true, "type": "boolean" }
]
}
Customize the configuration
Override specific parameters to match the site requirements.curl -X POST https://api.dynamo-csms.com/api/v1/installer/charge-points/cp_01HX5P2QRSTUVWXYZ0/config/customize \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-d '{
"parameters": [
{ "key": "HeartbeatInterval", "value": 30 },
{ "key": "MeterValueSampleInterval", "value": 15 },
{ "key": "AuthorizationCacheEnabled", "value": false }
]
}'
Response:{
"charge_point_id": "cp_01HX5P2QRSTUVWXYZ0",
"applied": ["HeartbeatInterval", "MeterValueSampleInterval", "AuthorizationCacheEnabled"],
"pending_reboot": false
}
Test the connection
Verify the charge point can reach the OCPP backend before starting commissioning.curl -X POST https://api.dynamo-csms.com/api/v1/installer/charge-points/cp_01HX5P2QRSTUVWXYZ0/test-connection \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
Response:{
"charge_point_id": "cp_01HX5P2QRSTUVWXYZ0",
"connected": true,
"latency_ms": 42,
"ocpp_version_negotiated": "1.6",
"tested_at": "2026-05-01T09:30:00Z"
}
If connected is false, check that the charger’s OCPP URL is set to the ocpp_endpoint from step 4 and that the network firewall allows outbound WebSocket connections on port 443. Start commissioning
Trigger the commissioning sequence. The platform will run automated checks including firmware validation, connector state verification, and OCPP handshake confirmation.curl -X POST https://api.dynamo-csms.com/api/v1/installer/commissioning/cp_01HX5P2QRSTUVWXYZ0/start \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-d '{
"run_test_transaction": true,
"notify_on_complete": true
}'
Response:{
"commissioning_id": "com_01HX6RSTUVWXYZ1234",
"charge_point_id": "cp_01HX5P2QRSTUVWXYZ0",
"status": "in_progress",
"started_at": "2026-05-01T09:35:00Z"
}
Poll commissioning status
Poll the status endpoint until status becomes completed or failed. Check every 10–15 seconds.curl -X GET https://api.dynamo-csms.com/api/v1/installer/commissioning/cp_01HX5P2QRSTUVWXYZ0/status \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
Response:{
"commissioning_id": "com_01HX6RSTUVWXYZ1234",
"status": "completed",
"checks": [
{ "name": "ocpp_handshake", "result": "passed" },
{ "name": "firmware_version", "result": "passed" },
{ "name": "connector_available", "result": "passed" },
{ "name": "test_transaction", "result": "passed" }
],
"completed_at": "2026-05-01T09:37:22Z"
}
If commissioning fails, review the checks array to identify which step failed. You can retrieve detailed logs from the commissioning record to diagnose connectivity issues, firmware mismatches, or connector faults before retrying.
Invite the site owner
Send an invitation to the site owner so they can claim the project in their Dynamo account.curl -X POST https://api.dynamo-csms.com/api/v1/installer/projects/prj_01HX4M7TABCDE12345/invite-site-owner \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-d '{
"email": "facilities@riversidebp.com",
"message": "Your charge points at Riverside Business Park are ready."
}'
Response:{
"invitation_id": "inv_01HX7ABCDEFGH12345",
"email": "facilities@riversidebp.com",
"expires_at": "2026-05-08T09:00:00Z"
}
Complete the handover
Mark the project as handed over once the site owner has accepted the invitation and you have completed any on-site checks.curl -X POST https://api.dynamo-csms.com/api/v1/installer/projects/prj_01HX4M7TABCDE12345/complete-handover \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-d '{
"sign_off_notes": "All connectors tested. Site owner briefed on app usage.",
"installer_signature": "J. Smith"
}'
Response:{
"project_id": "prj_01HX4M7TABCDE12345",
"status": "handed_over",
"completed_at": "2026-05-01T10:15:00Z"
}
The project status moves to handed_over and billing and smart charging features activate for the site owner.