openapi: 3.1.0
info:
  title: Cocon Fiber Read-only API
  version: v1
  license:
    name: Proprietary
    url: https://www.speerit.nl
  description: |
    The Cocon Fiber Read-only API provides several ways to request Cocon Fiber asset data.

    This can be single-asset related data or aggregated information.
servers:
  - url: https://platform.speerit.nl/external
security:
  - Api-Key-Header: []
  - Client-Id-Header: []
paths:
  /api/v1/access-points:
    get:
      operationId: getAccessPoints
      tags:
        - Access point
      summary: Get access points
      parameters:
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortParam'
        - $ref: '#/components/parameters/FilterParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FlatAccessPoint'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/access-points/{id}:
    get:
      operationId: getAccessPoint
      tags:
        - Access point
      summary: Get access points by id
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FlatAccessPoint'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/buildings:
    get:
      operationId: getBuildings
      tags:
        - Building
      summary: Get buildings
      parameters:
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortParam'
        - $ref: '#/components/parameters/FilterParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FlatBuilding'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/buildings/client-connections:
    get:
      operationId: getBuildingsClientConnections
      tags:
        - Building
        - Client connection
      summary: Get client connections of buildings per building
      parameters:
        - name: buildingName
          in: query
          description: ''
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClientConnectionStatusResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/buildings/{id}:
    get:
      operationId: getBuilding
      tags:
        - Building
      summary: Get buildings by id
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FlatBuilding'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/buildings/{id}/customer-connections:
    get:
      operationId: getBuildingCustomerConnections
      tags:
        - Building
        - Customer connection
      summary: Get customer connections connected to a POP
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerConnectionsResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/buildings/{id}/customer-connection-data:
    get:
      operationId: getBuildingCustomerConnectionData
      tags:
        - Building
        - Customer connection
      deprecated: true
      summary: |
        Get customer locations connected to a POP

        Deprecated. Use `/customer-connections` instead
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerConnectionsResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/buildings/{id}/client-connections:
    get:
      operationId: getBuildingClientConnections
      tags:
        - Building
        - Client connection
      summary: Get client connections of a building by id
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClientConnectionStatusResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/buildings/{buildingName}/slacks:
    get:
      operationId: getBuildingSlacks
      tags:
        - Building
        - Slack
      summary: Get the slacks associated with a building
      parameters:
        - name: buildingName
          in: path
          description: ''
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Slack'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/cables:
    get:
      operationId: getCables
      tags:
        - Cable
      summary: Get cables
      parameters:
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortParam'
        - $ref: '#/components/parameters/FilterParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FlatCable'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/cables/{id}:
    get:
      operationId: getCable
      tags:
        - Cable
      summary: Get cables by id
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FlatCable'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/drillings:
    get:
      operationId: getDrillings
      tags:
        - Drilling
      summary: Get drillings
      parameters:
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortParam'
        - $ref: '#/components/parameters/FilterParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Drilling'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/drillings/{id}:
    get:
      operationId: getDrilling
      tags:
        - Drilling
      summary: Get drillings by id
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Drilling'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/drillings/{id}/document:
    get:
      operationId: getDrillingDocument
      tags:
        - Drilling
      summary: Get a ZIP archive containing the drilling profile for a drilling, if available
      parameters:
        - name: id
          in: path
          description: ''
          required: true
          schema:
            type: string
        - name: asBase64
          in: query
          description: ''
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: OK
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/ducts:
    get:
      operationId: getDucts
      tags:
        - Duct
      summary: Get ducts
      parameters:
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortParam'
        - $ref: '#/components/parameters/FilterParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FlatDuct'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/ducts/{id}:
    get:
      operationId: getDuct
      tags:
        - Duct
      summary: Get ducts by id
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FlatDuct'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/enclosures:
    get:
      operationId: getEnclosures
      tags:
        - Enclosure
      summary: Get enclosures
      parameters:
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortParam'
        - $ref: '#/components/parameters/FilterParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FlatEnclosure'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/enclosures/{id}:
    get:
      operationId: getEnclosure
      tags:
        - Enclosure
      summary: Get enclosures by id
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FlatEnclosure'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/frames:
    get:
      operationId: getFrames
      tags:
        - Frame
      summary: Get frames
      parameters:
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortParam'
        - $ref: '#/components/parameters/FilterParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FlatFrame'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/frames/{id}:
    get:
      operationId: getFrame
      tags:
        - Frame
      summary: Get frames by id
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FlatFrame'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/permits:
    get:
      operationId: getPermits
      tags:
        - Permit
      summary: Get permits
      parameters:
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortParam'
        - $ref: '#/components/parameters/FilterParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Permit'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/permits/{id}:
    get:
      operationId: getPermit
      tags:
        - Permit
      summary: Get permits by id
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FlatPermit'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/projects:
    get:
      operationId: getProjects
      tags:
        - Project
      summary: Get projects
      parameters:
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortParam'
        - $ref: '#/components/parameters/FilterParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Project'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/projects/{id}:
    get:
      operationId: getProject
      tags:
        - Project
      summary: Get projects by id
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Project'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/splicetray:
    get:
      operationId: getSpliceTray
      tags:
        - Splice tray
      summary: Get splice trays
      parameters:
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortParam'
        - $ref: '#/components/parameters/FilterParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SpliceTray'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/patch-positions/{id}/trace-endpoints:
    get:
      operationId: getPatchPositionTraceEndpoints
      tags:
        - Patch position
        - Trace endpoints
      summary: Trace endpoints of a patchposition
      description: |
        Starts from the provided patch position and traces the network to the very end
        If multiple endpoints are found, it returns all of them
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: string
        - name: future
          in: query
          required: false
          description: Should the currently active network be used, or the scheduled (future) network
          schema:
            type: boolean
            default: false
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Trace-Endpoints'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/access-point-types:
    get:
      operationId: getAccessPointTypes
      tags:
        - Access point type
      summary: Get access point types
      parameters:
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortParam'
        - $ref: '#/components/parameters/FilterParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/AccessPointType'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/access-point-types/{id}:
    get:
      operationId: getAccessPointType
      tags:
        - Access point type
      summary: Get access point types by id
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessPointType'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/building-types:
    get:
      operationId: getBuildingTypes
      tags:
        - Building type
      summary: Get building types
      parameters:
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortParam'
        - $ref: '#/components/parameters/FilterParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BuildingType'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/building-types/{id}:
    get:
      operationId: getBuildingType
      tags:
        - Building type
      summary: Get building types by id
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BuildingType'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/cable-types:
    get:
      operationId: getCableTypes
      tags:
        - Cable type
      summary: Get cable types
      parameters:
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortParam'
        - $ref: '#/components/parameters/FilterParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CableType'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/cable-types/{id}:
    get:
      operationId: getCableType
      tags:
        - Cable type
      summary: Get cable types by id
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CableType'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/duct-types:
    get:
      operationId: getDuctTypes
      tags:
        - Duct type
      summary: Get duct types
      parameters:
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortParam'
        - $ref: '#/components/parameters/FilterParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DuctType'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/duct-types/{id}:
    get:
      operationId: getDuctType
      tags:
        - Duct type
      summary: Get duct types by id
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DuctType'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/enclosure-types:
    get:
      operationId: getEnclosureTypes
      tags:
        - Enclosure type
      summary: Get enclosure types
      parameters:
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortParam'
        - $ref: '#/components/parameters/FilterParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EnclosureType'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/enclosure-types/{id}:
    get:
      operationId: getEnclosureType
      tags:
        - Enclosure type
      summary: Get enclosure types by id
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnclosureType'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/frame-types:
    get:
      operationId: getFrameTypes
      tags:
        - Frame type
      summary: Get frame types
      parameters:
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortParam'
        - $ref: '#/components/parameters/FilterParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/FrameType'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/frame-types/{id}:
    get:
      operationId: getFrameType
      tags:
        - Frame type
      summary: Get frame types by id
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FrameType'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/splicetray-types:
    get:
      operationId: getSpliceTrayTypes
      tags:
        - Splice tray type
      summary: Get splice tray types
      parameters:
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
        - $ref: '#/components/parameters/SortParam'
        - $ref: '#/components/parameters/FilterParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SpliceTrayType'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/splicetray-types/{id}:
    get:
      operationId: getSpliceTrayType
      tags:
        - Splice tray type
      summary: Get splice tray types by id
      parameters:
        - $ref: '#/components/parameters/IdParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SpliceTrayType'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '404':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
components:
  securitySchemes:
    Api-Key-Header:
      type: apiKey
      name: X-Api-Key
      in: header
    Client-Id-Header:
      type: apiKey
      name: X-Client-Id
      in: header
  parameters:
    OffsetParam:
      name: offset
      in: query
      required: false
      schema:
        type: integer
        format: int32
      description: The offset of the first item returned
      example: 5
    LimitParam:
      name: limit
      in: query
      required: false
      schema:
        type: integer
        format: int32
      description: The maximum number of items returned
      example: 10
    SortParam:
      name: sort
      in: query
      required: false
      schema:
        type: string
      description: A sorting hint for the returned items
      example: ''
    FilterParam:
      name: filter
      in: query
      required: false
      schema:
        type: string
      description: |
        A filter specification for the returned items.

        Varies for different situations. See the general API documentation for examples.
    IdParam:
      name: id
      in: path
      required: true
      schema:
        type: string
      description: Unique identifier
      example: 10 or 1abc
  schemas:
    LifetimeStage:
      type: integer
      description: |
        Indicates possible lifetime stages of an asset

        Values:
        - **0**: The asset is planned to be built/installed in the future
        - **1**: The asset is currently in use
        - **2**: The asset is marked for deletion on a later date
      enum:
        - 0
        - 1
        - 2
      format: int32
    GeoJsonObject:
      description: |
        GeoJSon object The coordinate reference system for all GeoJSON coordinates is a geographic coordinate reference system, using the World Geodetic System 1984 (WGS 84) datum, with longitude and latitude units of decimal degrees. This is equivalent to the coordinate reference system identified by the Open Geospatial Consortium (OGC) URN An OPTIONAL third-position element SHALL be the height in meters above or below the WGS 84 reference ellipsoid. In the absence of elevation values, applications sensitive to height or depth SHOULD interpret positions as being at local ground or sea level.
      externalDocs:
        url: https://tools.ietf.org/html/rfc7946#section-3
      type: object
      properties:
        type:
          type: string
          enum:
            - Feature
            - FeatureCollection
            - Point
            - MultiPoint
            - LineString
            - MultiLineString
            - Polygon
            - MultiPolygon
            - GeometryCollection
        bbox:
          description: |
            A GeoJSON object MAY have a member named "bbox" to include information on the coordinate range for its Geometries, Features, or FeatureCollections. The value of the bbox member MUST be an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries.
          type: array
          items:
            type: number
      required:
        - type
      discriminator:
        propertyName: type
    Geometry:
      description: |
        Abstract type for all GeoJSon object except Feature and FeatureCollection
      externalDocs:
        url: https://tools.ietf.org/html/rfc7946#section-3
      allOf:
        - $ref: '#/components/schemas/GeoJsonObject'
        - type: object
          properties:
            type:
              type: string
              enum:
                - Point
                - MultiPoint
                - LineString
                - MultiLineString
                - Polygon
                - MultiPolygon
                - GeometryCollection
          required:
            - type
          discriminator:
            propertyName: type
    FlatAccessPoint:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the access point
        type:
          type:
            - string
            - 'null'
          description: Type of the access point
        stage:
          $ref: '#/components/schemas/LifetimeStage'
        project:
          type:
            - string
            - 'null'
          description: The id of the project this access point is part of
        geolocation:
          $ref: '#/components/schemas/Geometry'
      additionalProperties: false
      description: A access point resource
    Error:
      type: object
      properties:
        code:
          type:
            - string
            - 'null'
          description: An error code specifying a functional error
        message:
          type:
            - string
            - 'null'
          description: A message describing the cause of the functional error
      additionalProperties: false
    CoconPlatformError:
      type: object
      properties:
        timestamp:
          type:
            - string
            - 'null'
          readOnly: true
        id:
          type: string
          format: uuid
          readOnly: true
        status:
          type: integer
          format: int32
        errors:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/Error'
        message:
          type:
            - string
            - 'null'
      additionalProperties: false
    GeometryElement:
      description: |
        Abstract type for all GeoJSon 'Geometry' object the type of which is not 'GeometryCollection'
      externalDocs:
        url: https://tools.ietf.org/html/rfc7946#section-3
      allOf:
        - $ref: '#/components/schemas/Geometry'
        - type: object
          properties:
            type:
              type: string
              enum:
                - Point
                - MultiPoint
                - LineString
                - MultiLineString
                - Polygon
                - MultiPolygon
          required:
            - type
          discriminator:
            propertyName: type
    Position:
      description: |
        GeoJSon fundamental geometry construct. A position is an array of numbers. There MUST be two or more elements. The first two elements are longitude and latitude, or easting and northing, precisely in that order and using decimal numbers. Altitude or elevation MAY be included as an optional third element. Implementations SHOULD NOT extend positions beyond three elements because the semantics of extra elements are unspecified and ambiguous. Historically, some implementations have used a fourth element to carry a linear referencing measure (sometimes denoted as "M") or a numerical timestamp, but in most situations a parser will not be able to properly interpret these values. The interpretation and meaning of additional elements is beyond the scope of this specification, and additional elements MAY be ignored by parsers.
      externalDocs:
        url: https://tools.ietf.org/html/rfc7946#section-3.1.1
      type: array
      minItems: 2
      maxItems: 3
      items:
        type: number
    LinearRing:
      description: |
        A linear ring is a closed LineString with four or more positions. The first and last positions are equivalent, and they MUST contain identical values; their representation SHOULD also be identical. A linear ring is the boundary of a surface or the boundary of a hole in a surface. A linear ring MUST follow the right-hand rule with respect to the area it bounds, i.e., exterior rings are counterclockwise, and holes are clockwise.
      externalDocs:
        url: https://tools.ietf.org/html/rfc7946#section-3.1.6
      type: array
      items:
        $ref: '#/components/schemas/Position'
      minItems: 4
    Polygon:
      description: GeoJSon geometry
      externalDocs:
        url: https://tools.ietf.org/html/rfc7946#section-3.1.6
      allOf:
        - $ref: '#/components/schemas/GeometryElement'
        - type: object
          required:
            - coordinates
          properties:
            coordinates:
              type: array
              items:
                $ref: '#/components/schemas/LinearRing'
    FlatBuilding:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the building
        complexId:
          type:
            - string
            - 'null'
          description: Id of the complex that contains this building
        type:
          type:
            - string
            - 'null'
          description: Type of the building
        stage:
          $ref: '#/components/schemas/LifetimeStage'
        geometry:
          $ref: '#/components/schemas/Polygon'
      additionalProperties: false
      description: |
        A building resource.

        Buildings may be endpoints for ducts.

        Buildings may contain frames.
    ClientConnectionCableReference:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
        name:
          type:
            - string
            - 'null'
          description: Name of the cable
      additionalProperties: false
    CableEndpointType:
      enum:
        - Frame
        - Enclosure
        - Slack
      type: string
      description: Specifies the type of endpoint of a cable (i.e. where/how the cable terminates)
    ClientConnectionEndpointReference:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
        type:
          $ref: '#/components/schemas/CableEndpointType'
        geometry:
          $ref: '#/components/schemas/Geometry'
      additionalProperties: false
    ClientConnectionCableTypeReference:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
        name:
          type:
            - string
            - 'null'
          description: Name of the cable type
      additionalProperties: false
    ClientConnectionFiber:
      type: object
      properties:
        index:
          type:
            - integer
            - 'null'
          description: Index of the fiber
          format: int32
        attenuation:
          type:
            - number
            - 'null'
          description: Fiber attenuation
          format: double
      additionalProperties: false
    CableInformation:
      type: object
      properties:
        cableReference:
          $ref: '#/components/schemas/ClientConnectionCableReference'
        endpointReference:
          $ref: '#/components/schemas/ClientConnectionEndpointReference'
        cableTypeReference:
          $ref: '#/components/schemas/ClientConnectionCableTypeReference'
        fibers:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/ClientConnectionFiber'
          description: List of fibers in the cable
      additionalProperties: false
    ClientConnectionStatusResponse:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: The id of the building related to the connection status
        name:
          type:
            - string
            - 'null'
          description: The name of the building related to the connection
        complexName:
          type:
            - string
            - 'null'
          description: The name of the complex whenever the location for the connection resides in a complex
        frameNames:
          type:
            - array
            - 'null'
          items:
            type: string
          description: The name(s) of the frame(s) related to the connection
        terminationUnitTypes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: The termination unit type related to the connection
        installationCompanyName:
          type:
            - string
            - 'null'
          description: The name of the company responsible for installing the assets of the connection
        cableInformation:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/CableInformation'
          description: Additional information about the cable related to the connection
      additionalProperties: false
    PopConnection:
      type: object
      properties:
        fiberNumber:
          type: integer
          description: The fiber number connected to the customer FTU
          format: int32
        buildingName:
          type:
            - string
            - 'null'
          description: The name of the POP
        frameName:
          type:
            - string
            - 'null'
          description: The name of the frame within the POP
        frameRow:
          type:
            - string
            - 'null'
          description: The connection's row in the frame within the POP
        terminationUnitName:
          type:
            - string
            - 'null'
          description: The name of the connection's termination unit within the POP
        trayNumber:
          type: integer
          description: |
            The connection's tray number of the tray inside the termination unit within the POP.
            Possible values:
            - 1 and higher (valid tray value)
            - -1 (tray value not parseable to integer)
          format: int32
        patchPositionOnTray:
          type: integer
          description: The number of the connection's patch position on the tray
          format: int32
        attenuation:
          type: number
          description: The attenuation of the fiber measured from the POP to the client
          format: double
        additionalInformation:
          type:
            - object
            - 'null'
          additionalProperties:
            type: string
          description: Information about this PopConnection
      additionalProperties: false
      description: Information about the connection from the customer location to the POP
    CustomerConnection:
      type: object
      properties:
        addressDetails:
          type:
            - object
            - 'null'
          additionalProperties:
            type:
              - string
              - 'null'
          description: The address details for the customer connection
        complexName:
          type:
            - string
            - 'null'
          description: The name of the complex whenever the location for the connection resides in a complex
        projectName:
          type:
            - string
            - 'null'
          description: The name of the project the customer connection is part of
        cableName:
          type:
            - string
            - 'null'
          description: Name of the cable connected to the frame at the customer location
        frameName:
          type:
            - string
            - 'null'
          description: The name of the frame at the customer location
        ftuType:
          type:
            - string
            - 'null'
          description: The type of fiber termination unit present at the customer location
        popConnections:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/PopConnection'
          description: List of connections from the customer location to the POP
      additionalProperties: false
      description: Information about the customer location and connections to the POP that serves it
    CustomerConnectionsResponse:
      type: object
      properties:
        customerConnections:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/CustomerConnection'
          description: A list of customer connections
      additionalProperties: false
    LocationType:
      enum:
        - Unknown
        - Accesspoint
        - Building
      type: string
      description: The location type
    LocationReference:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
        locationType:
          $ref: '#/components/schemas/LocationType'
      additionalProperties: false
    ProjectReference:
      type: object
      description: Reference to a project
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
      additionalProperties: false
    CableReference:
      type: object
      description: Reference to a cable
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
        type:
          type:
            - string
            - 'null'
          description: Name of the cable type
      additionalProperties: false
    Point:
      description: GeoJSon geometry
      externalDocs:
        url: https://tools.ietf.org/html/rfc7946#section-3.1.2
      allOf:
        - $ref: '#/components/schemas/GeometryElement'
        - type: object
          required:
            - type
            - coordinates
          properties:
            type:
              type: string
              enum:
                - Point
            coordinates:
              $ref: '#/components/schemas/Position'
    Slack:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the slack
        stage:
          $ref: '#/components/schemas/LifetimeStage'
        location:
          $ref: '#/components/schemas/LocationReference'
        project:
          $ref: '#/components/schemas/ProjectReference'
        cable:
          $ref: '#/components/schemas/CableReference'
        geometry:
          $ref: '#/components/schemas/Point'
      additionalProperties: false
      description: |
        Slacks are located inside a building or access point.

        A slack can be connected on both sides (cable segment slack) or on
        one/no side(s) (cable endpoint slack).
    FlatCableEndpoint:
      type: object
      properties:
        name:
          type:
            - string
            - 'null'
          description: Name of the endpoint
        type:
          type:
            - string
            - 'null'
          description: Typde of the endpoint
        locationName:
          type:
            - string
            - 'null'
          description: Location name of the endpoint
      additionalProperties: false
    DuctReference:
      type: object
      description: Reference to a duct
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
      additionalProperties: false
    InnerductReference:
      type: object
      description: Reference to an inner duct
      properties:
        ductReference:
          $ref: '#/components/schemas/DuctReference'
        name:
          type:
            - string
            - 'null'
          description: Name of the inner duct
        color:
          type:
            - string
            - 'null'
          description: Color of the inner duct
        diameter:
          type:
            - number
            - 'null'
          description: Diameter of the inner duct
          format: double
        owner:
          type:
            - string
            - 'null'
          description: Owner of the inner duct
      additionalProperties: false
    LineStringCoordinates:
      description: |
        GeoJSon fundamental geometry construct, array of two or more positions.
      externalDocs:
        url: https://tools.ietf.org/html/rfc7946#section-3.1.4
      type: array
      items:
        $ref: '#/components/schemas/Position'
      minItems: 2
    LineString:
      description: GeoJSon geometry
      externalDocs:
        url: https://tools.ietf.org/html/rfc7946#section-3.1.4
      allOf:
        - $ref: '#/components/schemas/GeometryElement'
        - type: object
          required:
            - coordinates
          properties:
            coordinates:
              $ref: '#/components/schemas/LineStringCoordinates'
    FlatCable:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the cable
        endpoints:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/FlatCableEndpoint'
          description: List of cable endpoints
        type:
          type:
            - string
            - 'null'
          description: Type of the cable
        stage:
          $ref: '#/components/schemas/LifetimeStage'
        project:
          type:
            - string
            - 'null'
          description: The id of the project this cable is part of
        innerducts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/InnerductReference'
          description: List of innerducts which contain this cable
        capacity:
          type: integer
          description: Total capacity of the cable
          format: int32
        numberOfAvailableFibers:
          type:
            - integer
            - 'null'
          description: Available capacity of the cable
          format: int32
        geometry:
          $ref: '#/components/schemas/LineString'
      additionalProperties: false
    TypeReference:
      type: object
      description: Reference to a type
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
      additionalProperties: false
    Drilling:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the drilling
        type:
          $ref: '#/components/schemas/TypeReference'
        stage:
          $ref: '#/components/schemas/LifetimeStage'
        project:
          $ref: '#/components/schemas/ProjectReference'
        length:
          type:
            - number
            - 'null'
          description: The physical length of the drilling
          format: double
        owner:
          type:
            - string
            - 'null'
          description: The external owner of the drilling
        remarks:
          type:
            - string
            - 'null'
          description: Additional remarks related to the drilling
        geometry:
          $ref: '#/components/schemas/LineString'
      additionalProperties: false
      description: |
        Represents a drilling underneath a construction where regular trenches are no option, such as buildings or
        physical infrastructure
    FlatInnerduct:
      type: object
      properties:
        name:
          type:
            - string
            - 'null'
          description: Name of the inner duct
        color:
          type:
            - string
            - 'null'
          description: Color of the inner duct
        diameter:
          type:
            - number
            - 'null'
          description: The inner diameter of the inner duct
          format: double
        cable:
          type:
            - string
            - 'null'
          description: Name of the cable name containing the inner duct
        project:
          type:
            - string
            - 'null'
          description: Name of the project the inner duct is part of
        duct:
          type:
            - string
            - 'null'
          description: Name of the duct containing the inner duct
        owner:
          type:
            - string
            - 'null'
          description: Owner of the inner duct
      additionalProperties: false
    FlatDuct:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique id
        name:
          type:
            - string
            - 'null'
          description: Name of the duct
        type:
          type:
            - string
            - 'null'
          description: Type of the duct
        color:
          type:
            - string
            - 'null'
          description: Color of the duct
        diameter:
          type:
            - number
            - 'null'
          description: Diameter of the duct
          format: double
        stage:
          $ref: '#/components/schemas/LifetimeStage'
        geometry:
          $ref: '#/components/schemas/Geometry'
        length:
          type:
            - number
            - 'null'
          description: Geographical length of the duct
          format: double
        owner:
          type:
            - string
            - 'null'
          description: Owner of the duct
        innerducts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/FlatInnerduct'
          description: List of inner ducts contained in the duct
        numberOfAvailableInnerducts:
          type:
            - integer
            - 'null'
          description: Number of available (empty) inner ducts
          format: int32
        remarks:
          type:
            - string
            - 'null'
          description: Additional remarks related to the duct
        project:
          type:
            - string
            - 'null'
          description: Name of the project this duct is part of
        ductRoute:
          type:
            - string
            - 'null'
          description: Route of this duct
        locations:
          type:
            - array
            - 'null'
          items:
            type: string
          description: The endpoints of the duct (based on the duct route)
      additionalProperties: false
    FlatEnclosure:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        locationName:
          type:
            - string
            - 'null'
          description: Name of the location of the enclosure
        name:
          type:
            - string
            - 'null'
          description: Name of the enclosure
        type:
          type:
            - string
            - 'null'
          description: Type of the enclosure
        stage:
          $ref: '#/components/schemas/LifetimeStage'
        project:
          type:
            - string
            - 'null'
          description: The id of the project this enclosure is part of
        geometry:
          $ref: '#/components/schemas/Geometry'
      additionalProperties: false
    FlatFrame:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        locationName:
          type:
            - string
            - 'null'
          description: Name of the frame location
        name:
          type:
            - string
            - 'null'
          description: Name of the frame
        type:
          type:
            - string
            - 'null'
          description: Type of the frame
        stage:
          $ref: '#/components/schemas/LifetimeStage'
        project:
          type:
            - string
            - 'null'
          description: The id of the project this frame is part of
        geometry:
          $ref: '#/components/schemas/Geometry'
      additionalProperties: false
    Permit:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the permit
        issuer:
          type:
            - string
            - 'null'
          description: Authority that issued the permit
        issuerType:
          type:
            - string
            - 'null'
          description: Type of the issuer of the permit
        project:
          $ref: '#/components/schemas/ProjectReference'
        remarks:
          type:
            - string
            - 'null'
          description: Additional remarks related to the permit
        geometry:
          $ref: '#/components/schemas/Geometry'
      additionalProperties: false
      description: A permit represents a legal document containing information about a project
    FlatPermit:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the Permit
        issuer:
          type:
            - string
            - 'null'
          description: Authority which issued the permit
        issuerType:
          type:
            - string
            - 'null'
          description: Type of the issuer of the permit
        project:
          type:
            - string
            - 'null'
          description: Name of the project the permit is part of
        remarks:
          type:
            - string
            - 'null'
          description: Additional remarks with regard to the Permit
        geometry:
          $ref: '#/components/schemas/Geometry'
      additionalProperties: false
    Project:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the project
        description:
          type:
            - string
            - 'null'
          description: Description of the project
        type:
          type:
            - string
            - 'null'
          description: Type of the project
        locked:
          type: boolean
          description: |
            An indicator specifying whether the project is locked or not.

            Projects may not be modified when locked.
        defaultInstallationCompany:
          type:
            - string
            - 'null'
          description: The company responsible by default for installing the asset
        progressStatus:
          type:
            - string
            - 'null'
          description: |
            The status indicating the progress of a project.

            Among other things, it indicates whether design files may be imported to the project.
      additionalProperties: false
    SpliceTrayTypeReference:
      type: object
      description: Reference to a splice tray type
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
      additionalProperties: false
    SpliceTrayContainerType:
      enum:
        - Unknown
        - Enclosure
        - TerminationUnit
      type: string
      description: The type of the splice tray container
    SpliceTrayContainerReference:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
        position:
          type: integer
          description: The position of the splice tray in the container
          format: int32
        side:
          type:
            - string
            - 'null'
          description: The side of the container the splicetray is positioned on
        type:
          $ref: '#/components/schemas/SpliceTrayContainerType'
      additionalProperties: false
    FiberReference:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
      additionalProperties: false
    SplicePosition:
      type: object
      properties:
        position:
          type:
            - integer
            - 'null'
          description: The position of the splice in the splice tray
          format: int32
        fiber:
          $ref: '#/components/schemas/FiberReference'
        stage:
          $ref: '#/components/schemas/LifetimeStage'
      additionalProperties: false
    SpliceTray:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        type:
          $ref: '#/components/schemas/SpliceTrayTypeReference'
        spliceTrayContainer:
          $ref: '#/components/schemas/SpliceTrayContainerReference'
        splicePositions:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/SplicePosition'
          description: List of positions on this splice tray
      additionalProperties: false
    Trace-Endpoints:
      type: object
      properties:
        endpoints:
          type: array
          description: |
            The endpoints that the trace has encountered
            in case of a splitter, there can be more then one
          items:
            type: object
            properties:
              endpoint:
                description: Reference to an endpoint encountered by the trace
                type: object
                properties:
                  type:
                    type: string
                    enum:
                      - Unknown
                      - Slack
                      - SpliceTray
                      - PatchPosition
                    description: The type of the endpoint
                  id:
                    type: string
                    description: Id of the endpoint
                  href:
                    type:
                      - string
                      - 'null'
                    description: Path to the resource
              fiber:
                type: object
                description: Reference to the fiber this trace originates from
                properties:
                  id:
                    type: string
                    description: Id of the fiber
                  href:
                    type:
                      - string
                      - 'null'
                    description: Path to the resource
    AccessPointType:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the access point type
        isAllowed:
          type: boolean
          description: Specifies whether the type is allowed for use
        maximumEnclosures:
          type:
            - integer
            - 'null'
          description: The maximum number of enclosures that will fit inside an access point of this type
          format: int32
      additionalProperties: false
      description: Definition of an access point type
    BuildingType:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the building type
        isAllowed:
          type: boolean
          description: Specifies whether the type is allowed for use
      additionalProperties: false
      description: Definition of a building type
    CableMedium:
      enum:
        - 0
        - 1
        - 2
      type: integer
      description: |
        0 - Unknown
        1 - Fiber
        2 - Copper
      format: int32
    FiberTypeReference:
      type: object
      description: Reference to a fiber type
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
      additionalProperties: false
    CableTypeFiber:
      type: object
      properties:
        number:
          type: integer
          description: The fiber number
          format: int32
        color:
          type:
            - string
            - 'null'
          description: The fiber color
        type:
          $ref: '#/components/schemas/FiberTypeReference'
      additionalProperties: false
      description: Definition of a single fiber used by cables of this type
    CableTypeTube:
      type: object
      properties:
        number:
          type: integer
          description: The tube number
          format: int32
        color:
          type:
            - string
            - 'null'
          description: The tube color
        fibers:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/CableTypeFiber'
          description: The fibers within this tube
      additionalProperties: false
      description: Definition of a single tube used in cables of this type
    CableType:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the cable type
        medium:
          $ref: '#/components/schemas/CableMedium'
        layout:
          type:
            - string
            - 'null'
          description: Layout of cables of this type
        color:
          type:
            - string
            - 'null'
          description: Color of cables of this type
        remarks:
          type:
            - string
            - 'null'
          description: Additional remarks about the cable type
        diameter:
          type:
            - number
            - 'null'
          description: Diameter of cables of this type
          format: double
        numberOfFibers:
          type:
            - integer
            - 'null'
          description: The number of fibers that cables of this type can contain
          format: int32
          readOnly: true
        isAllowed:
          type: boolean
          description: Is this type allowed to be used
        numberOfTubes:
          type:
            - integer
            - 'null'
          description: The number of tubes that cables of this type can contain
          format: int32
          readOnly: true
        tubes:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/CableTypeTube'
          description: The tubes present in cables of this type
      additionalProperties: false
      description: Definition of a cable type
    DuctTypeInnerduct:
      type: object
      properties:
        color:
          type:
            - string
            - 'null'
          description: The color of the inner duct
        diameter:
          type: number
          description: The diameter of the inner duct
          format: double
      additionalProperties: false
    DuctType:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: The id of the Duct type
        name:
          type:
            - string
            - 'null'
          description: The name of the duct type
        numberOfInnerducts:
          type: integer
          description: The number of inner ducts in this type of duct
          format: int32
          readOnly: true
        innerducts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/DuctTypeInnerduct'
          description: The list of inner ducts in this type of duct
        isAllowed:
          type: boolean
          description: Is this duct type allowed for use?
      additionalProperties: false
      description: |
        A duct type

        Definition of a specific type of duct
    EnclosureType:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the enclosure type
        isAllowed:
          type: boolean
          description: Specifies whether the type is allowed for use
        maximumSpliceTrays:
          type:
            - integer
            - 'null'
          description: The maximum number of splice trays the enclosure type will allow
          format: int32
        numberOfSpliceTrayPositions:
          type:
            - integer
            - 'null'
          description: The number of splice tray positions that will fit in the enclosure type
          format: int32
      additionalProperties: false
    FrameType:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the frame type
        isAllowed:
          type: boolean
          description: Specifies whether the frame type is allowed for use
        numberOfRackUnits:
          type:
            - integer
            - 'null'
          description: The number of racks of which the type of frame consists
          format: int32
        numberingDirection:
          type:
            - string
            - 'null'
          description: The direction the racknumbers are counted in
        numberingStartsAt:
          type: integer
          description: The starting value used when numbering rack positions
          format: int32
      additionalProperties: false
    SpliceTrayType:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the splice tray type
        numberOfSplicePositions:
          type: integer
          description: The number of splice positions that fit in splice trays of this type
          format: int32
        heightInSpliceTrayPositions:
          type: integer
          description: The height of the positions in splice trays of this type
          format: int32
        numberOfTrays:
          type: integer
          description: The number of (sub)trays that splice trays of this type have
          format: int32
        isAllowed:
          type: boolean
          description: Specifies whether the splice tray type is allowed for use
      additionalProperties: false
  responses:
    CommonErrorResponse:
      description: Generic error response
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CoconPlatformError'
x-tagGroups:
  - name: Assets
    tags:
      - Access point
      - Building
      - Cable
      - Drilling
      - Duct
      - Enclosure
      - Frame
      - Permit
      - Project
      - Slack
      - Splice tray
      - Patch position
  - name: Asset types
    tags:
      - Access point type
      - Building type
      - Cable type
      - Duct type
      - Enclosure type
      - Frame type
      - Splice tray type
  - name: Connections
    tags:
      - Client connection
      - Customer connection
  - name: Traces
    tags:
      - Trace endpoints
