> ## Documentation Index
> Fetch the complete documentation index at: https://dynamo-csms.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Commission a Charge Point End to End with Dynamo

> Walk through the full installer workflow — register, configure, test connection, start commissioning, and hand over a charge point.

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.

<Note>
  You need installer role permissions to commission charge points. Make sure your account has been granted the `installer` role before proceeding.
</Note>

<Steps>
  <Step title="Create an installer account">
    Register a new installer account. You only need to do this once.

    ```bash theme={null}
    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:

    ```json theme={null}
    {
      "id": "usr_01HX3K9VZAB2C4DEFG",
      "email": "installer@acme.com",
      "role": "installer",
      "created_at": "2026-05-01T09:00:00Z"
    }
    ```
  </Step>

  <Step title="Log in and obtain an auth token">
    Authenticate to receive a bearer token for all subsequent requests.

    ```bash theme={null}
    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:

    ```json theme={null}
    {
      "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.
  </Step>

  <Step title="Create a project">
    Group charge points under a project to represent a physical site or contract.

    ```bash theme={null}
    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:

    ```json theme={null}
    {
      "id": "prj_01HX4M7TABCDE12345",
      "name": "Riverside Business Park",
      "status": "in_progress",
      "created_at": "2026-05-01T09:05:00Z"
    }
    ```
  </Step>

  <Step title="Register a charge point">
    Add a charge point to your project by providing its serial number and model details.

    ```bash theme={null}
    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:

    ```json theme={null}
    {
      "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.
  </Step>

  <Step title="Retrieve the configuration template">
    Fetch the default configuration template for this charge point model before customizing it.

    ```bash theme={null}
    curl -X GET https://api.dynamo-csms.com/api/v1/installer/charge-points/cp_01HX5P2QRSTUVWXYZ0/config/template \
      -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
    ```

    Response:

    ```json theme={null}
    {
      "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" }
      ]
    }
    ```
  </Step>

  <Step title="Customize the configuration">
    Override specific parameters to match the site requirements.

    ```bash theme={null}
    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:

    ```json theme={null}
    {
      "charge_point_id": "cp_01HX5P2QRSTUVWXYZ0",
      "applied": ["HeartbeatInterval", "MeterValueSampleInterval", "AuthorizationCacheEnabled"],
      "pending_reboot": false
    }
    ```
  </Step>

  <Step title="Test the connection">
    Verify the charge point can reach the OCPP backend before starting commissioning.

    ```bash theme={null}
    curl -X POST https://api.dynamo-csms.com/api/v1/installer/charge-points/cp_01HX5P2QRSTUVWXYZ0/test-connection \
      -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
    ```

    Response:

    ```json theme={null}
    {
      "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.
  </Step>

  <Step title="Start commissioning">
    Trigger the commissioning sequence. The platform will run automated checks including firmware validation, connector state verification, and OCPP handshake confirmation.

    ```bash theme={null}
    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:

    ```json theme={null}
    {
      "commissioning_id": "com_01HX6RSTUVWXYZ1234",
      "charge_point_id": "cp_01HX5P2QRSTUVWXYZ0",
      "status": "in_progress",
      "started_at": "2026-05-01T09:35:00Z"
    }
    ```
  </Step>

  <Step title="Poll commissioning status">
    Poll the status endpoint until `status` becomes `completed` or `failed`. Check every 10–15 seconds.

    ```bash theme={null}
    curl -X GET https://api.dynamo-csms.com/api/v1/installer/commissioning/cp_01HX5P2QRSTUVWXYZ0/status \
      -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
    ```

    Response:

    ```json theme={null}
    {
      "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"
    }
    ```

    <Tip>
      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.
    </Tip>
  </Step>

  <Step title="Invite the site owner">
    Send an invitation to the site owner so they can claim the project in their Dynamo account.

    ```bash theme={null}
    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:

    ```json theme={null}
    {
      "invitation_id": "inv_01HX7ABCDEFGH12345",
      "email": "facilities@riversidebp.com",
      "expires_at": "2026-05-08T09:00:00Z"
    }
    ```
  </Step>

  <Step title="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.

    ```bash theme={null}
    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:

    ```json theme={null}
    {
      "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.
  </Step>
</Steps>
