Skip to main content
This guide covers the end-to-end installer workflow in Dynamo CSMS. You will sign up as an installer, retrieve your project assignment, register a charge point, start the commissioning process, and complete the handover to the site owner.
Installers are assigned to projects by the CPO or site owner. You cannot create a project yourself — a CPO must first create the project and add you to it before you can commission charge points under that project.

Prerequisites

  • A terminal with curl installed.
  • A project ID provided by the CPO or site owner who hired you.
  • Physical access to the charge point hardware and its serial number.
1

Sign up as an installer

Create your installer account using the signup endpoint. This is separate from the CPO Developer Portal — it is designed for field technicians who authenticate on a per-job basis.
curl -X POST https://api.dynamo-csms.com/api/v1/installer/signup \
  -H "Content-Type: application/json" \
  -d '{
    "email": "alex@acme-ev-installs.com",
    "password": "your-secure-password",
    "full_name": "Alex Technician",
    "phone": "+447700900123",
    "company": "Acme EV Installations"
  }'
{
  "installer_id": "ins_01hx9k2m3n4p",
  "email": "alex@acme-ev-installs.com",
  "status": "pending_verification",
  "message": "Check your email to verify your account before logging in."
}
After verifying your email address, your account status changes to active.
2

Log in and obtain an access token

Exchange your credentials for a short-lived access token. Include this token as a Bearer token in all subsequent requests.
curl -X POST https://api.dynamo-csms.com/api/v1/installer/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "alex@acme-ev-installs.com",
    "password": "your-secure-password"
  }'
{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "installer_id": "ins_01hx9k2m3n4p"
}
The token expires after one hour. Call the login endpoint again to refresh it.
Store the access_token value in a variable in your shell session so you don’t have to paste it into every command: export TOKEN="eyJhbGci...".
3

Retrieve your project assignment

List the projects you have been assigned to. The CPO or site owner adds your installer ID to a project before you arrive on site.
curl -X GET https://api.dynamo-csms.com/api/v1/installer/projects \
  -H "Authorization: Bearer $TOKEN"
{
  "projects": [
    {
      "project_id": "proj_01hx5t6u7v8w",
      "name": "Riverside Business Park — Phase 1",
      "site_address": "Unit 12, Riverside Business Park, London E1W 3SJ",
      "charge_points_expected": 6,
      "charge_points_commissioned": 0,
      "status": "in_progress",
      "assigned_at": "2026-04-28T08:00:00Z"
    }
  ]
}
Note the project_id — you will use it when registering charge points and completing the handover.
If no projects appear in the list, ask the CPO to verify they have added your installer_id (ins_01hx9k2m3n4p) to the project in their portal.
4

Register the charge point

Register the physical charge point against your project. You will need the serial number printed on the hardware label, and the OCPP protocol the unit uses.
curl -X POST https://api.dynamo-csms.com/api/v1/installer/charge-points \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "project_id": "proj_01hx5t6u7v8w",
    "serial_number": "SN-ABX-20240501-007",
    "model": "Alpitronic HYC300",
    "vendor": "Alpitronic",
    "ocpp_version": "2.0.1",
    "max_power_kw": 300,
    "connector_count": 2,
    "location": {
      "latitude": 51.5074,
      "longitude": -0.1278,
      "description": "Bay 4, Level P1"
    }
  }'
{
  "charge_point_id": "cp_01hxab1c2d3e",
  "ocpp_endpoint": "wss://ocpp.dynamo-csms.com/ocpp/2.0.1/cp_01hxab1c2d3e",
  "status": "registered",
  "provisioning_password": "ocpp-prov-secret-xyz",
  "created_at": "2026-05-01T10:23:00Z"
}
Configure the charge point’s OCPP backend URL to the ocpp_endpoint value returned in the response, and enter the provisioning_password as the OCPP Basic Auth password. Consult the charge point manufacturer’s manual for where to enter these settings.
5

Start commissioning

Once the charge point is powered and has connected to the OCPP backend, start the commissioning sequence. This triggers automated checks: connectivity verification, firmware version recording, and initial heartbeat confirmation.
curl -X POST https://api.dynamo-csms.com/api/v1/installer/commissioning/cp_01hxab1c2d3e/start \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "run_connectivity_test": true,
    "run_meter_calibration": true,
    "notes": "Installed in underground car park — check signal strength."
  }'
{
  "commissioning_id": "comm_01hxef4g5h6i",
  "charge_point_id": "cp_01hxab1c2d3e",
  "status": "in_progress",
  "checks": [
    { "name": "ocpp_connection", "status": "passed" },
    { "name": "heartbeat", "status": "passed" },
    { "name": "meter_calibration", "status": "in_progress" },
    { "name": "firmware_version", "status": "passed", "value": "3.4.1" }
  ],
  "started_at": "2026-05-01T10:31:00Z"
}
Poll the commissioning status or wait for the webhook event commissioning.completed to confirm all checks have passed before proceeding to handover.
Ask the CPO to configure a webhook endpoint for commissioning.completed events before you arrive on site. This means the site owner receives an instant notification when the charger goes live. See the Webhooks guide.
6

Complete handover to the site owner

After all commissioning checks pass, mark the project as handed over. This transfers operational responsibility from you to the site owner and locks the project against further installer modifications.
curl -X POST https://api.dynamo-csms.com/api/v1/installer/projects/proj_01hx5t6u7v8w/complete-handover \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "signed_by": "Alex Technician",
    "handover_notes": "All 6 bays commissioned. Bay 3 connector 2 required firmware update — completed on site.",
    "site_contact_name": "Sarah Owen",
    "site_contact_email": "s.owen@riversidebp.co.uk"
  }'
{
  "project_id": "proj_01hx5t6u7v8w",
  "status": "handed_over",
  "handover_certificate_url": "https://api.dynamo-csms.com/certificates/proj_01hx5t6u7v8w.pdf",
  "handed_over_at": "2026-05-01T14:45:00Z"
}
The handover_certificate_url points to a signed PDF you can download and share with the site owner for their records. The CPO and site owner both receive an email notification confirming the handover.

Commissioning checklist

Before you complete the handover, verify all of the following on site:
  • Charge point is powered and the display shows a ready or available state.
  • OCPP connection is established (the ocpp_connection commissioning check shows passed).
  • At least one heartbeat has been received by the platform.
  • Meter calibration is complete if the charge point supports it.
  • Emergency stop button has been tested.
  • Cable management and enclosure IP rating have been visually inspected.
  • Site owner or their representative has been briefed on how to report faults.

Troubleshooting common issues

Verify the project_id you used when registering the charge point matches the project returned by GET /api/v1/installer/projects. If they differ, contact the CPO to re-assign you to the correct project.
Check that the charge point has been configured with the exact ocpp_endpoint URL returned during registration. Common issues include missing trailing slashes, incorrect protocol (ws:// vs wss://), and firewall rules blocking outbound WebSocket traffic on port 443.
Tokens expire after 60 minutes. Call POST /api/v1/installer/login again with your credentials to obtain a fresh token. Commissioning state is saved server-side, so you can resume from the last completed check.
Handover is only available when all charge points in the project have a commissioning status of completed. Check the commissioning status of each charge point in the project and resolve any outstanding failures first.