> ## Documentation Index
> Fetch the complete documentation index at: https://chargecloud.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Controllers / Create

> Creates a controller (the hardware unit that drives one or more charging points) and registers it at a location. Required permission: asset:controllers:create. Available contexts: API Key, User.



## OpenAPI

````yaml /api/core-api/crmiapi.json post /api/v1/assets/controllers
openapi: 3.2.0
info:
  title: chargecloud - Core API
  summary: chargecloud Core API. All around CRM, Asset Management and more.
  version: 1.141.0
  description: chargecloud Core API. All around CRM, Asset Management and more.
servers:
  - url: https://api.chargecloud.dev
    description: Production - chargecloud Core API
  - url: https://demo.chargecloud.de
    description: Sandbox/Dev - chargecloud Core API
security: []
paths:
  /api/v1/assets/controllers:
    post:
      tags:
        - Controllers
      summary: Controllers / Create
      description: >-
        Creates a controller (the hardware unit that drives one or more charging
        points) and registers it at a location. Required permission:
        asset:controllers:create. Available contexts: API Key, User.
      operationId: /api/v1/assets/controllers_POST
      parameters:
        - name: Accept-Language
          in: header
          description: BCP 47 language tag for content negotiation (e.g. en, de-DE).
          required: false
          schema:
            type: string
            description: BCP 47 language tag for content negotiation (e.g. en, de-DE).
            example: en
      requestBody:
        description: >-
          Creates a controller (the hardware unit that drives one or more
          charging points) and registers it at a location. Required permission:
          asset:controllers:create. Available contexts: API Key, User.
        content:
          application/json:
            schema:
              type: object
              required:
                - location_uuid
                - logging
                - fairmode
                - software
                - name
                - backend_communication_type
                - mobile_communication_type
              properties:
                location_uuid:
                  type: string
                  pattern: >-
                    ^[a-f0-9]{8}\-[a-f0-9]{4}\-4[a-f0-9]{3}\-[89ab][a-f0-9]{3}\-[a-f0-9]{12}$
                  description: >-
                    The UUID of the location this controller is assigned to. A
                    controller must always be linked to exactly one location and
                    cannot be reassigned after creation.
                logging:
                  type: boolean
                  default: true
                  description: Records detailed protocol logs when true. Defaults to true.
                fairmode:
                  type: boolean
                  default: false
                  description: >-
                    When true, caps output to share available power across
                    active sessions.
                software:
                  type: string
                  enum:
                    - mennekes
                    - mennekes_ecu
                    - mennekes_amtron_non_eichrecht
                    - mennekes_amedio_eichrecht
                    - mennekes_amedio_non_eichrecht
                    - mennekes_4you_500
                    - mennekes_4business_700
                    - mennekes_4business_700_eichrecht
                    - nidec
                    - ebg
                    - phoenix
                    - ecotap
                    - abb
                    - abb_terra_ac
                    - alfen
                    - amperfied
                    - ampure
                    - hubject
                    - kathrein
                    - keba
                    - kostad_sissy2
                    - heliox
                    - innogy
                    - ochp
                    - ebee
                    - enercharge
                    - chargeamps
                    - schneiderelectric
                    - tritium
                    - walther
                    - vinci_proxy
                    - vestel
                    - volkswagen
                    - chargehere
                    - schrack
                    - ebemobility
                    - kostad
                    - circontrol
                    - eluminocity
                    - abl
                    - abl_em4
                    - bauer_gen3
                    - bauer_gen4
                    - gewiss
                    - getpower
                    - delta
                    - photon
                    - porsche
                    - powerjames
                    - ads_tec
                    - siemens
                    - siemens_sicharge_d
                    - smight
                    - aixacct
                    - alpitronic
                    - stoehr
                    - meenergy
                    - whbcharging
                    - starchargeaurora
                    - compleo_solo
                    - evboxdc
                    - evboxliviqo
                    - unknown
                    - smappee
                    - hager_witty_share
                    - hager_witty_park
                    - hager_witty_pro
                    - zaptec
                    - peblar
                    - rzb
                    - kempower
                    - spelsberg
                    - mahlechargebig
                    - goe
                  description: >-
                    Firmware/software stack the controller runs, selected per
                    manufacturer. Must be compatible with
                    backend_communication_type and is required for firmware
                    update management. Allowed values are lowercase manufacturer
                    or model identifiers (e.g. abb, alfen, keba, mennekes_ecu,
                    siemens_sicharge_d); each names the vendor firmware family
                    the backend talks to.
                  example: abb
                charge_point_model:
                  type: string
                  maxLength: 20
                  description: >-
                    Charging point hardware model. Found on the purchase
                    receipt, in the station documentation, or via the serial
                    number in the boot notification.
                name:
                  type: string
                  maxLength: 50
                  description: >-
                    Display name. Must be unique across the client's controllers
                    and exactly match the chargeBoxIdentity configured on the
                    physical device. Avoid mixed case, umlauts, special
                    characters and spaces; use underscores instead.
                ssl:
                  type: boolean
                  default: false
                  description: >-
                    When true, the backend connection uses TLS. Required for all
                    backend communication types except OCPP 1.6 JSON V2.
                ip_address:
                  type: string
                  description: >-
                    IP address of the controller. Optional. When you supply an
                    `icc_id`, the API derives the IP from the matching SIM card
                    and ignores any value sent in this field. The IP+port
                    combination is rejected if it collides with another
                    controller that does not allow shared IPs.
                dns_name:
                  type: string
                  description: >-
                    Hostname of the controller, alternative to ip_address. Only
                    allowed for backend communication types that support
                    hostname addressing.
                ip_port:
                  type: integer
                  format: int64
                  description: >-
                    TCP port of the controller. Only allowed for backend
                    communication types that support direct port addressing.
                proxy_port:
                  type: integer
                  format: int64
                  description: >-
                    TCP port of the backend proxy. Only allowed for backend
                    communication types that use a proxy.
                manufacturer:
                  type: string
                  description: Hardware manufacturer reported by the device.
                backend_communication_type:
                  type: string
                  enum:
                    - ocpp_1_5
                    - ocpp_1_6_soap
                    - ocpp_1_6_json
                    - ocpp_1_6_json_v2
                    - ocpp_201_json
                  description: >-
                    Protocol the controller uses to talk to the ChargeCloud
                    backend. Must match the configuration on the physical device
                    and be supported by the chosen software. Allowed values:
                    ocpp_1_5 (OCPP-1.5 SOAP), ocpp_1_6_soap (OCPP-1.6 SOAP),
                    ocpp_1_6_json (OCPP-1.6 JSON Websocket), ocpp_1_6_json_v2
                    (OCPP-1.6 JSON, V2), ocpp_201_json (OCPP-2.0.1 JSON).
                mobile_communication_type:
                  type: string
                  enum:
                    - DSL
                    - GSM
                    - WLAN
                  description: >-
                    Network type used to reach the backend. Allowed values: DSL
                    (wired), GSM (cellular via SIM), WLAN.
                mobile_number:
                  type: string
                  maxLength: 25
                  description: Phone number of the SIM card.
                icc_id:
                  type: string
                  maxLength: 25
                  description: >-
                    ICCID of the installed SIM card. When provided, the IP
                    address is taken from the matching SIM card record.
                imsi:
                  type: string
                  maxLength: 30
                  description: IMSI of the installed SIM card.
                imei:
                  type: string
                  maxLength: 30
                  description: IMEI of the cellular modem.
                sim_card_name:
                  type: string
                  maxLength: 50
                  description: Free-text SIM card label.
                radius_pwd:
                  type: string
                  maxLength: 50
                  description: >-
                    RADIUS password for network authentication, where
                    applicable.
                pin:
                  type: string
                  maxLength: 5
                  description: PIN code of the SIM card.
                puk:
                  type: string
                  maxLength: 8
                  description: >-
                    PUK code of the SIM card. Unlocks the SIM after wrong PIN
                    attempts.
                alternative_heartbeat_interval:
                  type: integer
                  format: int64
                  minimum: 60
                  maximum: 7200
                  description: >-
                    Overrides the default heartbeat interval (seconds). Range:
                    60-7200; recommended 900. Not applicable for OCPP 1.6 JSON
                    controllers.
                alternative_meter_values_interval:
                  type: integer
                  format: int64
                  minimum: 60
                  maximum: 7200
                  description: >-
                    Overrides the default meter values reporting interval
                    (seconds). Range: 60-7200.
                alternative_ftp_host:
                  type: string
                  maxLength: 55
                  description: >-
                    Overrides the default FTP host for diagnostic logs and
                    firmware artefacts.
                serial_number:
                  type: string
                  maxLength: 16
                  description: Hardware serial number from the manufacturer.
                article_number:
                  type: string
                  maxLength: 16
                  description: Manufacturer SKU identifying the model.
                u_ids:
                  type: array
                  items:
                    type: object
                    properties:
                      u_id:
                        type: string
                        description: >-
                          RFID/NFC tag identifier. Comma-separated values are
                          split into single UIDs.
                    required:
                      - u_id
                  description: >-
                    Authentication uIds (RFID/NFC tag IDs) accepted for local
                    authorization. Empty when none are configured.
        required: true
      responses:
        '201':
          headers:
            Content-Language:
              description: The locale of the response content (BCP 47 language tag).
              required: false
              schema:
                type: string
                example: en
          content:
            application/json:
              schema:
                type: object
                required:
                  - controller
                properties:
                  controller:
                    type: object
                    properties:
                      uuid:
                        type: string
                        pattern: >-
                          ^[a-f0-9]{8}\-[a-f0-9]{4}\-4[a-f0-9]{3}\-[89ab][a-f0-9]{3}\-[a-f0-9]{12}$
                        description: >-
                          The universally unique identifier (UUID) of the
                          controller, automatically generated on creation. Use
                          this UUID to retrieve or reference the controller in
                          subsequent API calls.
                      created_at:
                        type: string
                        format: date
                        pattern: ^\d{4}-\d{2}-\d{2}$
                        description: Date the controller was created.
                      updated_at:
                        type: string
                        format: date
                        pattern: ^\d{4}-\d{2}-\d{2}$
                        description: Date the controller was last updated.
                      status:
                        type: string
                        enum:
                          - Available
                          - Occupied
                          - Unavailable
                          - Faulted
                          - Deactivated
                          - unknown
                          - undefined
                        description: >-
                          Operational state last reported by the device. Allowed
                          values: Available (ready), Occupied (busy),
                          Unavailable (offline), Faulted, Deactivated, unknown,
                          undefined.
                      modification_date:
                        type: string
                        format: date
                        pattern: ^\d{4}-\d{2}-\d{2}$
                        description: Date of the most recent modification.
                      firmware_version:
                        type: string
                        maxLength: 50
                        description: Firmware version reported by the device.
                      location_uuid:
                        type: string
                        pattern: >-
                          ^[a-f0-9]{8}\-[a-f0-9]{4}\-4[a-f0-9]{3}\-[89ab][a-f0-9]{3}\-[a-f0-9]{12}$
                        description: >-
                          The UUID of the location this controller is assigned
                          to. A controller must always be linked to exactly one
                          location and cannot be reassigned after creation.
                      logging:
                        type: boolean
                        default: true
                        description: >-
                          Records detailed protocol logs when true. Defaults to
                          true.
                      fairmode:
                        type: boolean
                        default: false
                        description: >-
                          When true, caps output to share available power across
                          active sessions.
                      software:
                        type: string
                        enum:
                          - mennekes
                          - mennekes_ecu
                          - mennekes_amtron_non_eichrecht
                          - mennekes_amedio_eichrecht
                          - mennekes_amedio_non_eichrecht
                          - mennekes_4you_500
                          - mennekes_4business_700
                          - mennekes_4business_700_eichrecht
                          - nidec
                          - ebg
                          - phoenix
                          - ecotap
                          - abb
                          - abb_terra_ac
                          - alfen
                          - amperfied
                          - ampure
                          - hubject
                          - kathrein
                          - keba
                          - kostad_sissy2
                          - heliox
                          - innogy
                          - ochp
                          - ebee
                          - enercharge
                          - chargeamps
                          - schneiderelectric
                          - tritium
                          - walther
                          - vinci_proxy
                          - vestel
                          - volkswagen
                          - chargehere
                          - schrack
                          - ebemobility
                          - kostad
                          - circontrol
                          - eluminocity
                          - abl
                          - abl_em4
                          - bauer_gen3
                          - bauer_gen4
                          - gewiss
                          - getpower
                          - delta
                          - photon
                          - porsche
                          - powerjames
                          - ads_tec
                          - siemens
                          - siemens_sicharge_d
                          - smight
                          - aixacct
                          - alpitronic
                          - stoehr
                          - meenergy
                          - whbcharging
                          - starchargeaurora
                          - compleo_solo
                          - evboxdc
                          - evboxliviqo
                          - unknown
                          - smappee
                          - hager_witty_share
                          - hager_witty_park
                          - hager_witty_pro
                          - zaptec
                          - peblar
                          - rzb
                          - kempower
                          - spelsberg
                          - mahlechargebig
                          - goe
                        description: >-
                          Firmware/software stack the controller runs, selected
                          per manufacturer. Must be compatible with
                          backend_communication_type and is required for
                          firmware update management. Allowed values are
                          lowercase manufacturer or model identifiers (e.g. abb,
                          alfen, keba, mennekes_ecu, siemens_sicharge_d); each
                          names the vendor firmware family the backend talks to.
                        example: abb
                      charge_point_model:
                        type: string
                        maxLength: 20
                        description: >-
                          Charging point hardware model. Found on the purchase
                          receipt, in the station documentation, or via the
                          serial number in the boot notification.
                      name:
                        type: string
                        maxLength: 50
                        description: >-
                          Display name. Must be unique across the client's
                          controllers and exactly match the chargeBoxIdentity
                          configured on the physical device. Avoid mixed case,
                          umlauts, special characters and spaces; use
                          underscores instead.
                      ssl:
                        type: boolean
                        default: false
                        description: >-
                          When true, the backend connection uses TLS. Required
                          for all backend communication types except OCPP 1.6
                          JSON V2.
                      ip_address:
                        type: string
                        description: >-
                          IP address of the controller. Optional. When you
                          supply an `icc_id`, the API derives the IP from the
                          matching SIM card and ignores any value sent in this
                          field. The IP+port combination is rejected if it
                          collides with another controller that does not allow
                          shared IPs.
                      dns_name:
                        type: string
                        description: >-
                          Hostname of the controller, alternative to ip_address.
                          Only allowed for backend communication types that
                          support hostname addressing.
                      ip_port:
                        type: integer
                        format: int64
                        description: >-
                          TCP port of the controller. Only allowed for backend
                          communication types that support direct port
                          addressing.
                      proxy_port:
                        type: integer
                        format: int64
                        description: >-
                          TCP port of the backend proxy. Only allowed for
                          backend communication types that use a proxy.
                      manufacturer:
                        type: string
                        description: Hardware manufacturer reported by the device.
                      backend_communication_type:
                        type: string
                        enum:
                          - ocpp_1_5
                          - ocpp_1_6_soap
                          - ocpp_1_6_json
                          - ocpp_1_6_json_v2
                          - ocpp_201_json
                        description: >-
                          Protocol the controller uses to talk to the
                          ChargeCloud backend. Must match the configuration on
                          the physical device and be supported by the chosen
                          software. Allowed values: ocpp_1_5 (OCPP-1.5 SOAP),
                          ocpp_1_6_soap (OCPP-1.6 SOAP), ocpp_1_6_json (OCPP-1.6
                          JSON Websocket), ocpp_1_6_json_v2 (OCPP-1.6 JSON, V2),
                          ocpp_201_json (OCPP-2.0.1 JSON).
                      mobile_communication_type:
                        type: string
                        enum:
                          - DSL
                          - GSM
                          - WLAN
                        description: >-
                          Network type used to reach the backend. Allowed
                          values: DSL (wired), GSM (cellular via SIM), WLAN.
                      mobile_number:
                        type: string
                        maxLength: 25
                        description: Phone number of the SIM card.
                      icc_id:
                        type: string
                        maxLength: 25
                        description: >-
                          ICCID of the installed SIM card. When provided, the IP
                          address is taken from the matching SIM card record.
                      imsi:
                        type: string
                        maxLength: 30
                        description: IMSI of the installed SIM card.
                      imei:
                        type: string
                        maxLength: 30
                        description: IMEI of the cellular modem.
                      sim_card_name:
                        type: string
                        maxLength: 50
                        description: Free-text SIM card label.
                      radius_pwd:
                        type: string
                        maxLength: 50
                        description: >-
                          RADIUS password for network authentication, where
                          applicable.
                      pin:
                        type: string
                        maxLength: 5
                        description: PIN code of the SIM card.
                      puk:
                        type: string
                        maxLength: 8
                        description: >-
                          PUK code of the SIM card. Unlocks the SIM after wrong
                          PIN attempts.
                      alternative_heartbeat_interval:
                        type: integer
                        format: int64
                        minimum: 60
                        maximum: 7200
                        description: >-
                          Overrides the default heartbeat interval (seconds).
                          Range: 60-7200; recommended 900. Not applicable for
                          OCPP 1.6 JSON controllers.
                      alternative_meter_values_interval:
                        type: integer
                        format: int64
                        minimum: 60
                        maximum: 7200
                        description: >-
                          Overrides the default meter values reporting interval
                          (seconds). Range: 60-7200.
                      alternative_ftp_host:
                        type: string
                        maxLength: 55
                        description: >-
                          Overrides the default FTP host for diagnostic logs and
                          firmware artefacts.
                      serial_number:
                        type: string
                        maxLength: 16
                        description: Hardware serial number from the manufacturer.
                      article_number:
                        type: string
                        maxLength: 16
                        description: Manufacturer SKU identifying the model.
                      u_ids:
                        type: array
                        items:
                          type: object
                          properties:
                            u_id:
                              type: string
                              description: >-
                                RFID/NFC tag identifier. Comma-separated values
                                are split into single UIDs.
                          required:
                            - u_id
                        description: >-
                          Authentication uIds (RFID/NFC tag IDs) accepted for
                          local authorization. Empty when none are configured.
                    required:
                      - uuid
                      - created_at
                      - updated_at
                      - status
                      - location_uuid
                      - logging
                      - fairmode
                      - software
                      - name
                      - backend_communication_type
                      - mobile_communication_type
                    description: >-
                      The controller record with its backend connectivity, SIM
                      card and interval settings.
          description: The newly created controller in full projection.
        '400':
          headers:
            Content-Language:
              description: The locale of the response content (BCP 47 language tag).
              required: false
              schema:
                type: string
                example: en
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                    description: Error message
          description: Bad request
        '401':
          headers:
            Content-Language:
              description: The locale of the response content (BCP 47 language tag).
              required: false
              schema:
                type: string
                example: en
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                    description: Error message
          description: Unauthorized
        '403':
          headers:
            Content-Language:
              description: The locale of the response content (BCP 47 language tag).
              required: false
              schema:
                type: string
                example: en
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                    description: Error message
          description: Forbidden
        '404':
          headers:
            Content-Language:
              description: The locale of the response content (BCP 47 language tag).
              required: false
              schema:
                type: string
                example: en
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                    description: Error message
          description: Not found
        '405':
          headers:
            Content-Language:
              description: The locale of the response content (BCP 47 language tag).
              required: false
              schema:
                type: string
                example: en
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                    description: Error message
          description: Method not allowed
        '422':
          headers:
            Content-Language:
              description: The locale of the response content (BCP 47 language tag).
              required: false
              schema:
                type: string
                example: en
          content:
            application/json:
              schema:
                type: object
                required:
                  - errors
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        errorKey:
                          type: string
                          description: A key identifying the error
                        message:
                          type: string
                          description: The error message
                        parameter:
                          type: string
                          description: The parameter that caused the error, if any
                      required:
                        - errorKey
                        - message
                        - parameter
                      description: Error
                    description: List of errors
          description: Request validation failed
        '500':
          headers:
            Content-Language:
              description: The locale of the response content (BCP 47 language tag).
              required: false
              schema:
                type: string
                example: en
          content:
            application/json:
              schema:
                type: object
                required:
                  - error
                properties:
                  error:
                    type: string
                    description: Error message
          description: Internal server error
      security:
        - bearer:
            - asset:controllers
components:
  securitySchemes:
    bearer:
      type: http
      description: OAuth2 Bearer Authorization
      scheme: bearer
      bearerFormat: JWT

````

## Related topics

- [Stations / Create](https://chargecloud.dev/api-reference/stations/stations-create.md)
- [Commands / Create](https://chargecloud.dev/api-reference/commands/commands-create.md)
- [ChargePoints / Create](https://chargecloud.dev/api-reference/chargepoints/chargepoints-create.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.