openapi: 3.1.0
info:
  title: Cocon Fiber Sync API
  version: v1
  license:
    name: Proprietary
    url: https://www.speerit.nl
  description: |
    The Cocon Fiber Sync API enables synchronization of asset data between Cocon Fiber and external systems.

    The `Since` parameter can be used to specify from which point in time the changes should be returned.
servers:
  - url: https://platform.speerit.nl/external
security:
  - Api-Key-Header: []
  - Client-Id-Header: []
paths:
  /api/v1/access-points/changes:
    get:
      operationId: getAccessPointsChanges
      tags:
        - Asset synchronization
      summary: Get changes on access points
      description: Returns changes (new, updated and deleted) on access points since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessPointChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/buildings/changes:
    get:
      operationId: getBuildingsChanges
      tags:
        - Asset synchronization
      summary: Get changes on buildings
      description: Returns changes (new, updated and deleted) on buildings since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BuildingChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/cables/changes:
    get:
      operationId: getCablesChanges
      tags:
        - Asset synchronization
      summary: Get changes on cables
      description: Returns changes (new, updated and deleted) on cables since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CableChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/drillings/changes:
    get:
      operationId: getDrillingsChanges
      tags:
        - Asset synchronization
      summary: Get changes on drillings
      description: Returns changes (new, updated and deleted) on drillings since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DrillingChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/ducts/changes:
    get:
      operationId: getDuctsChanges
      tags:
        - Asset synchronization
      summary: Get changes on ducts
      description: Returns changes (new, updated and deleted) on ducts since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DuctChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/enclosures/changes:
    get:
      operationId: getEnclosuresChanges
      tags:
        - Asset synchronization
      summary: Get changes on enclosures
      description: Returns changes (new, updated and deleted) on enclosures since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnclosureChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/frames/changes:
    get:
      operationId: getFramesChanges
      tags:
        - Asset synchronization
      summary: Get changes on frames
      description: Returns changes (new, updated and deleted) on frames since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FrameChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/patch-positions/changes:
    get:
      operationId: getPatchPositionsChanges
      tags:
        - Asset synchronization
      summary: Get changes on patch positions
      description: Returns changes (new, updated and deleted) on patch positions since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PatchPositionChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/permits/changes:
    get:
      operationId: getPermitsChanges
      tags:
        - Asset synchronization
      summary: Get changes on permits
      description: Returns changes (new, updated and deleted) on permits since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PermitChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/projects/changes:
    get:
      operationId: getProjectsChanges
      tags:
        - Asset synchronization
      summary: Get changes on projects
      description: Returns changes (new, updated and deleted) on projects since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
        - $ref: '#/components/parameters/OffsetParam'
        - $ref: '#/components/parameters/LimitParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/splicetray/changes:
    get:
      operationId: getSpliceTrayChanges
      tags:
        - Asset synchronization
      summary: Get changes on splice trays
      description: Returns changes (new, updated and deleted) on splice trays since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SpliceTrayChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/termination-units/changes:
    get:
      operationId: getTerminationUnitsChanges
      tags:
        - Asset synchronization
      summary: Get changes on termination units
      description: Returns changes (new, updated and deleted) on termination units since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TerminationUnitChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/access-point-types/changes:
    get:
      operationId: getAccessPointTypesChanges
      tags:
        - Asset type synchronization
      summary: Get changes on access point types
      description: Returns changes (new, updated and deleted) on access point types since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccessPointTypeChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/building-types/changes:
    get:
      operationId: getBuildingTypesChanges
      tags:
        - Asset type synchronization
      summary: Get changes on building types
      description: Returns changes (new, updated and deleted) on building types since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BuildingTypeChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/cable-types/changes:
    get:
      operationId: getCableTypesChanges
      tags:
        - Asset type synchronization
      summary: Get changes on cable types
      description: Returns changes (new, updated and deleted) on cable types since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CableTypeChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/drilling-types/changes:
    get:
      operationId: getDrillingTypesChanges
      tags:
        - Asset type synchronization
      summary: Get changes on drilling types
      description: Returns changes (new, updated and deleted) on drilling types since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DrillingTypeChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/duct-types/changes:
    get:
      operationId: getDuctTypesChanges
      tags:
        - Asset type synchronization
      summary: Get changes on duct types
      description: Returns changes (new, updated and deleted) on duct types since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DuctTypeChangesChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/enclosure-types/changes:
    get:
      operationId: getEnclosureTypesChanges
      tags:
        - Asset type synchronization
      summary: Get changes on enclosure types
      description: Returns changes (new, updated and deleted) on enclosure types since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnclosureTypeChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/fiber-types/changes:
    get:
      operationId: getFiberTypesChanges
      tags:
        - Asset type synchronization
      summary: Get changes on fiber types
      description: Returns changes (new, updated and deleted) on fiber types since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FiberTypeChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/frame-types/changes:
    get:
      operationId: getFrameTypesChanges
      tags:
        - Asset type synchronization
      summary: Get changes on frame types
      description: Returns changes (new, updated and deleted) on frame types since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FrameTypeChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/project-types/changes:
    get:
      operationId: getProjectTypesChanges
      tags:
        - Asset type synchronization
      summary: Get changes on project types
      description: Returns changes (new, updated and deleted) on project types since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProjectTypeChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/splicetray-types/changes:
    get:
      operationId: getSpliceTrayTypesChanges
      tags:
        - Asset type synchronization
      summary: Get changes on splice tray types
      description: Returns changes (new, updated and deleted) on splice tray types since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SpliceTrayTypeChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $ref: '#/components/responses/CommonErrorResponse'
        '500':
          $ref: '#/components/responses/CommonErrorResponse'
  /api/v1/termination-unit-types/changes:
    get:
      operationId: getTerminationUnitTypesChanges
      tags:
        - Asset type synchronization
      summary: Get changes on termination unit types
      description: Returns changes (new, updated and deleted) on termination unit types since a given timestamp
      parameters:
        - $ref: '#/components/parameters/SinceParam'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TerminationUnitTypeChangeResponse'
        '401':
          $ref: '#/components/responses/CommonErrorResponse'
        '403':
          $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:
    SinceParam:
      name: since
      in: query
      required: false
      schema:
        type: string
        format: date-time
      description: |
        A specific point in time (date & time)
        The point of time should be in the past
      example: '2024-02-10T15:45:00Z'
    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
  schemas:
    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
    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
    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
    InstallationDetails:
      type: object
      properties:
        date:
          type:
            - string
            - 'null'
          description: The date the asset was installed on
          format: date
        installationCompany:
          type:
            - string
            - 'null'
          description: The company responsible for installing the asset
      additionalProperties: false
      description: Details with regard to the physical installation
    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
    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
    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'
    DuctRouteReference:
      type: object
      description: Reference to a duct route
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
      additionalProperties: false
    AccessPoint:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the access point
        type:
          $ref: '#/components/schemas/TypeReference'
        stage:
          $ref: '#/components/schemas/LifetimeStage'
        project:
          $ref: '#/components/schemas/ProjectReference'
        address:
          type:
            - object
            - 'null'
          additionalProperties:
            type:
              - string
              - 'null'
          description: Unstructured address information
        depth:
          type: number
          description: Depth of the access point below the surface (default specified in meters)
          format: double
        installationDetails:
          $ref: '#/components/schemas/InstallationDetails'
        remarks:
          type:
            - string
            - 'null'
          description: Additional remarks related to the access point
        geometry:
          $ref: '#/components/schemas/Point'
        ductRoutes:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/DuctRouteReference'
          description: List of duct routes that start or end at the access point
      additionalProperties: false
      description: |
        An access point resource, also known as a hand hole.

        Access points may contain enclosures.

        Access points are endpoints of ducts.
    AccessPointChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/AccessPoint'
          description: A collection of new and updated access points
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted access points
      additionalProperties: false
      description: Returns new, updated and deleted access points since the given timestamp
    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
    BuildingReference:
      type: object
      description: Reference to a building
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
      additionalProperties: false
    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'
    Building:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Id of the building
        complex:
          $ref: '#/components/schemas/BuildingReference'
        type:
          $ref: '#/components/schemas/TypeReference'
        name:
          type:
            - string
            - 'null'
          description: Name of the building
        stage:
          $ref: '#/components/schemas/LifetimeStage'
        project:
          $ref: '#/components/schemas/ProjectReference'
        address:
          type:
            - object
            - 'null'
          additionalProperties:
            type:
              - string
              - 'null'
          description: Unstructured address information
        remarks:
          type:
            - string
            - 'null'
          description: Additional remarks related to the building
        installationDetails:
          $ref: '#/components/schemas/InstallationDetails'
        geometry:
          $ref: '#/components/schemas/Polygon'
        ductRoutes:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/DuctRouteReference'
          description: List of duct routes that start or end in the building
        additionalInformation:
          type:
            - object
            - 'null'
          additionalProperties:
            type: string
          description: Additional information about this Building
      additionalProperties: false
      description: |
        A building.

        Buildings may be endpoints for ducts.

        Buildings may contain frames.
    BuildingChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/Building'
          description: A collection of new and updated buildings
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted buildings
      additionalProperties: false
      description: Returns new, updated and deleted buildings since the given timestamp
    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
    CableEndpointType:
      enum:
        - Frame
        - Enclosure
        - Slack
      type: string
      description: The type of endpoint of a cable (i.e. where/how the cable terminates)
    CableEndpointReference:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
        cableEndpointType:
          $ref: '#/components/schemas/CableEndpointType'
      additionalProperties: false
    CableSegmentType:
      enum:
        - Cable
        - Slack
      type: string
      description: The type of a specific cable segment
    CableSegment:
      type: object
      properties:
        type:
          $ref: '#/components/schemas/CableSegmentType'
        length:
          type: number
          description: Length of the cable segment
          format: double
        geometry:
          $ref: '#/components/schemas/Geometry'
      additionalProperties: false
      description: A segment of a cable
    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'
    Cable:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
        type:
          $ref: '#/components/schemas/TypeReference'
        project:
          $ref: '#/components/schemas/ProjectReference'
        innerducts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/InnerductReference'
          description: List of inner ducts that contain the cable
        endpoints:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/CableEndpointReference'
          description: The two endpoints of the cable
        cableSegments:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/CableSegment'
          description: List of cable segments that make up the cable
        stage:
          $ref: '#/components/schemas/LifetimeStage'
        installationDetails:
          $ref: '#/components/schemas/InstallationDetails'
        operator:
          type:
            - string
            - 'null'
          description: The company that operates the cable
        remarks:
          type:
            - string
            - 'null'
          description: Additional remarks related to the cable
        geometry:
          $ref: '#/components/schemas/LineString'
      additionalProperties: false
      description: |
        Cables are located in a innerduct.

        Cables contain fibers.
    CableChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/Cable'
          description: A collection of new and updated cables
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted cables
      additionalProperties: false
      description: Returns new, updated and deleted cables since the given timestamp
    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
        remarks:
          type:
            - string
            - 'null'
          description: Additional remarks related to the drilling
        geometry:
          $ref: '#/components/schemas/LineString'
      additionalProperties: false
      description: |
        A drilling is a physical asset which represents a drilling underneath a
        construction where regular trenches are no option, such as buildings or
        roads.
    DrillingChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/Drilling'
          description: A collection of new and updated drillings
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted drillings
      additionalProperties: false
      description: Returns new, updated and deleted drillings since the given timestamp
    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
    Innerduct:
      type: object
      properties:
        name:
          type:
            - string
            - 'null'
          description: Name of the inner duct
        color:
          type:
            - string
            - 'null'
          description: Color of the inner duct
        owner:
          type:
            - string
            - 'null'
          description: Owner of the inner duct
        diameter:
          type:
            - number
            - 'null'
          description: Specifies the diameter of the inner duct, in millimeters
          format: double
        duct:
          $ref: '#/components/schemas/DuctReference'
        cable:
          $ref: '#/components/schemas/CableReference'
        project:
          $ref: '#/components/schemas/ProjectReference'
      additionalProperties: false
      description: |
        A duct may contain multiple inner ducts with different colors for quick
        identification.

        When no diameter or color is specified for an inner duct, it indicates
        that the cable is deployed directly into the duct.
    DuctEndpointTypes:
      enum:
        - Unknown
        - Building
        - Accesspoint
      type: string
      description: Specifies the type of endpoint of a duct (i.e. where/how the duct terminates)
    DuctEndpointReference:
      type: object
      description: Reference to a duct endpoint
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
        type:
          $ref: '#/components/schemas/DuctEndpointTypes'
      additionalProperties: false
    Duct:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the duct
        type:
          $ref: '#/components/schemas/TypeReference'
        color:
          type:
            - string
            - 'null'
          description: Color of the duct
        owner:
          type:
            - string
            - 'null'
          description: Owner of the duct
        diameter:
          type:
            - number
            - 'null'
          description: Diameter of the duct
          format: double
        stage:
          $ref: '#/components/schemas/LifetimeStage'
        geometry:
          $ref: '#/components/schemas/LineString'
        length:
          type:
            - number
            - 'null'
          description: Geographical length of the duct (based on the duct route)
          format: double
        innerducts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/Innerduct'
          description: List of inner ducts contained within 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:
          $ref: '#/components/schemas/ProjectReference'
        ductRoute:
          $ref: '#/components/schemas/DuctRouteReference'
        locations:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/DuctEndpointReference'
          description: The locations of this duct (based on the duct route)
      additionalProperties: false
      description: |
        Ducts contain inner ducts.

        Buildings or access points can be endpoints for a duct.
    DuctChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/Duct'
          description: A collection of new and updated ducts
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted ducts
      additionalProperties: false
      description: Returns new, updated and deleted ducts since the given timestamp
    LocationType:
      enum:
        - Unknown
        - Accesspoint
        - Building
      type: string
      description: Type of a location
    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
    Enclosure:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the enclosure
        location:
          $ref: '#/components/schemas/LocationReference'
        type:
          $ref: '#/components/schemas/TypeReference'
        project:
          $ref: '#/components/schemas/ProjectReference'
        stage:
          $ref: '#/components/schemas/LifetimeStage'
        installationDetails:
          $ref: '#/components/schemas/InstallationDetails'
        remarks:
          type:
            - string
            - 'null'
          description: Additional remarks related to the enclosure
        geometry:
          $ref: '#/components/schemas/Point'
      additionalProperties: false
      description: |
        Enclosures are equipment located inside an access point.

        Enclosures may contain termination units that store splices.
    EnclosureChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/Enclosure'
          description: A collection of new and updated enclosure
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted enclosures
      additionalProperties: false
      description: Returns new, updated and deleted enclosures since the given timestamp
    Frame:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the frame
        location:
          $ref: '#/components/schemas/LocationReference'
        type:
          $ref: '#/components/schemas/TypeReference'
        project:
          $ref: '#/components/schemas/ProjectReference'
        stage:
          $ref: '#/components/schemas/LifetimeStage'
        installationDetails:
          $ref: '#/components/schemas/InstallationDetails'
        remarks:
          type:
            - string
            - 'null'
          description: Additional remarks related to the frame
        geometry:
          $ref: '#/components/schemas/Geometry'
      additionalProperties: false
      description: |
        A frame resides within a building and can store termination units (units
        that contain patches, splices or both).
    FrameChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/Frame'
          description: A collection of new and updated frames
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted frames
      additionalProperties: false
      description: Returns new, updated and deleted frames since the given timestamp
    TerminationUnitReference:
      type: object
      description: Reference to a termination unit
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
      additionalProperties: false
    FiberReference:
      type: object
      description: Reference to a fiber
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
      additionalProperties: false
    FiberConnection:
      type: object
      properties:
        fiber:
          $ref: '#/components/schemas/FiberReference'
        project:
          $ref: '#/components/schemas/ProjectReference'
        stage:
          $ref: '#/components/schemas/LifetimeStage'
        attenuation:
          type: number
          description: Attenuation of the fiber
          format: double
      additionalProperties: false
      description: A fiber connection. One or more may be connected to a single patch position
    PatchPosition:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        terminationUnit:
          $ref: '#/components/schemas/TerminationUnitReference'
        trayNumber:
          type: integer
          description: |
            The number of the tray inside the termination unit containing this patch position.
            Possible values:
            - 1 and higher (valid tray value)
            - -1 (tray value not parseable to integer. See TrayLabel for value)
          format: int32
        trayLabel:
          type: string
          description: Textual information on the tray.
        position:
          type: integer
          description: Position on the tray
          format: int32
        connectorType:
          type: string
          description: Type of connector
        fiberConnections:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/FiberConnection'
          description: A list of fibers connected to the patch position
      additionalProperties: false
      description: |
        A patch position represents a position within a termination unit.

        One side of the position may be connected to a fiber.

        The other side may be connected to a patch.
    PatchPositionChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/PatchPosition'
          description: A collection of new and updated patch positions
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted patch positions
      additionalProperties: false
      description: Returns new, updated and deleted patch positions since the given timestamp
    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 which 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
    PermitChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/Permit'
          description: A collection of new and updated permits
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted permits
      additionalProperties: false
      description: Returns new, updated and deleted permits since the given timestamp
    Project:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          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
    ProjectChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/Project'
          description: A collection of new and updated projects
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted projects
      additionalProperties: false
      description: Returns new, updated and deleted projects since the given timestamp
    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: Type of 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 its container
          format: int32
        side:
          type:
            - string
            - 'null'
          description: The side of the container this splice tray is on
        type:
          $ref: '#/components/schemas/SpliceTrayContainerType'
      additionalProperties: false
    SplicePosition:
      type: object
      properties:
        position:
          type:
            - integer
            - 'null'
          description: The position of a splice in a 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
      description: A splice tray resource
    SpliceTrayChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/SpliceTray'
          description: A collection of new and updated splice trays
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted splice trays
      additionalProperties: false
      description: Returns new, updated and deleted splice trays since the given timestamp
    FrameReference:
      type: object
      description: Reference to a frame
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        href:
          type:
            - string
            - 'null'
          description: Path to the resource
        position:
          type:
            - integer
            - 'null'
          description: The position of the the (termination) unit in the referenced frame
          format: int32
      additionalProperties: false
    TerminationUnit:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name (or number) of the termination unit.
        frame:
          $ref: '#/components/schemas/FrameReference'
        type:
          $ref: '#/components/schemas/TypeReference'
        project:
          $ref: '#/components/schemas/ProjectReference'
        stage:
          $ref: '#/components/schemas/LifetimeStage'
        installationDetails:
          $ref: '#/components/schemas/InstallationDetails'
      additionalProperties: false
      description: |
        A termination unit resides within a frame.

        A termination unit contains patch positions and/or splice positions.
    TerminationUnitChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/TerminationUnit'
          description: A collection of new and updated termination units
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted termination units
      additionalProperties: false
      description: Returns new, updated and deleted termination units since the given timestamp
    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 fit inside access points of this type
          format: int32
      additionalProperties: false
    AccessPointTypeChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/AccessPointType'
          description: A collection of new and updated access point types
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted access point types
      additionalProperties: false
      description: Returns new, updated and deleted access point types since the given timestamp
    BuildingType:
      type: object
      properties:
        id:
          type:
            - array
            - '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
    BuildingTypeChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/BuildingType'
          description: A collection of new and updated building types
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted building types
      additionalProperties: false
      description: Returns new, updated and deleted building types since the given timestamp
    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 number of the fiber in the cable
          format: int32
        color:
          type:
            - string
            - 'null'
          description: The color of this fiber in the cable
        type:
          $ref: '#/components/schemas/FiberTypeReference'
      additionalProperties: false
    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: List of fibers in this tube
      additionalProperties: false
    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 cables of this type
        color:
          type:
            - string
            - 'null'
          description: Color of cables of this type
        remarks:
          type:
            - string
            - 'null'
          description: Remarks regarding 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 contained in cables of this type
          format: int32
          readOnly: true
        isAllowed:
          type: boolean
          description: Is this type allowed to be used
        numberOfTubes:
          type:
            - integer
            - 'null'
          description: The number of tubes inside cables of this type
          format: int32
          readOnly: true
        tubes:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/CableTypeTube'
          description: A list of tubes in this cabletype
      additionalProperties: false
    CableTypeChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/CableType'
          description: A collection of new and updated cable types
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted cable types
      additionalProperties: false
      description: Returns new, updated and deleted cable types since the given timestamp
    DrillingType:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the drilling type
        isAllowed:
          type: boolean
          description: Specifies whether the drilling type is allowed for use
      additionalProperties: false
    DrillingTypeChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/DrillingType'
          description: A collection of new and updated drilling types
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted drilling types
      additionalProperties: false
      description: Returns new, updated and deleted drilling types since the given timestamp
    DuctTypeChanges:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the duct type
        isAllowed:
          type: boolean
          description: Specifies whether the duct type is allowed for use
        remarks:
          type:
            - string
            - 'null'
          description: Additional emarks about the duct type
      additionalProperties: false
      description: |
        Represents the type of a duct
    DuctTypeChangesChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/DuctTypeChanges'
          description: A collection of new and updated duct types
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted duct types
      additionalProperties: false
      description: Returns new, updated and deleted duct types since the given timestamp
    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 enclosure type is allowed for use
        maximumSpliceTrays:
          type:
            - integer
            - 'null'
          description: The maximum number of splice trays that fit enclosures of this type
          format: int32
        numberOfSpliceTrayPositions:
          type:
            - integer
            - 'null'
          description: The number of splice tray positions that fit enclosures of this type type
          format: int32
      additionalProperties: false
    EnclosureTypeChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/EnclosureType'
          description: A collection of new and updated enclosure types
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted enclosure types
      additionalProperties: false
      description: Returns new, updated and deleted enclosure types since the given timestamp
    FrequenciesMeasurement:
      type: object
      properties:
        nm1310:
          type:
            - number
            - 'null'
          format: double
        nm1550:
          type:
            - number
            - 'null'
          format: double
        nm1625:
          type:
            - number
            - 'null'
          format: double
      additionalProperties: false
      description: Measurements of specific optic frequencies
    FiberType:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Type name
        attenuation:
          $ref: '#/components/schemas/FrequenciesMeasurement'
        chromaticDispersion:
          $ref: '#/components/schemas/FrequenciesMeasurement'
        isAllowed:
          type: boolean
          description: Specifies whether the fiber type is allowed for use
      additionalProperties: false
    FiberTypeChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/FiberType'
          description: A collection of new and updated fiber types
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted fiber types
      additionalProperties: false
      description: Returns new, updated and deleted fiber types since the given timestamp
    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
    FrameTypeChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/FrameType'
          description: A collection of new and updated frame types
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted frames types
      additionalProperties: false
      description: Returns new, updated and deleted frame types since the given timestamp
    ProjectType:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the project type
        isAllowed:
          type: boolean
          description: Specifies whether the project type is allowed for use
      additionalProperties: false
    ProjectTypeChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/ProjectType'
          description: A collection of new and updated project types
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted project types
      additionalProperties: false
      description: Returns new, updated and deleted project types since the given timestamp
    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 on splice trays of this type
          format: int32
        heightInSpliceTrayPositions:
          type: integer
          description: The number of height units occupied by the splice tray type
          format: int32
        numberOfTrays:
          type: integer
          description: The number of (sub)trays in splice trays of this type
          format: int32
        isAllowed:
          type: boolean
          description: Specifies whether the type is allowed for use
      additionalProperties: false
      description: A splice tray resource
    SpliceTrayTypeChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/SpliceTrayType'
          description: A collection of new and updated splice tray types
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted splice tray types
      additionalProperties: false
      description: Returns new, updated and deleted splice tray types since the given timestamp
    TerminationUnitType:
      type: object
      properties:
        id:
          type:
            - string
            - 'null'
          description: Unique identifier
        name:
          type:
            - string
            - 'null'
          description: Name of the termination unit type
        heightInRackUnits:
          type:
            - integer
            - 'null'
          description: The number of rack units termination units of this type occupy
          format: int32
        maximumCables:
          type:
            - integer
            - 'null'
          description: The maximum number of cables that can be connected to termination units of this type type.
          format: int32
        width:
          type:
            - number
            - 'null'
          description: The width of termination units of this type
          format: double
        isAllowed:
          type: boolean
          description: Specifies whether the type is allowed for use
      additionalProperties: false
    TerminationUnitTypeChangeResponse:
      type: object
      properties:
        upserts:
          type:
            - array
            - 'null'
          items:
            $ref: '#/components/schemas/TerminationUnitType'
          description: A collection of new and updated termination unit types
        deletes:
          type:
            - array
            - 'null'
          items:
            type: string
          description: Ids of deleted termination unit types
      additionalProperties: false
      description: Returns new, updated and deleted termination unit types since the given timestamp
  responses:
    CommonErrorResponse:
      description: Generic error response
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/CoconPlatformError'
