openapi: 3.0.3
info:
  title: API Reference
  version: '1.0'
externalDocs:
  description: Find out more about the Catenda API
  url: 'https://developers.catenda.com/'
servers:
  - url: 'https://api.catenda.com'
tags:
  - name: Topic Board
  - name: Topic Board Extension
  - name: Topic Board Status
  - name: Topic Board Type
  - name: Topic Board User
  - name: Topic
  - name: Topic Comment
  - name: Topic Document
  - name: Topic Event
  - name: Topic Object
  - name: Topic Point
  - name: Topic Relation
  - name: Topic Viewpoint
  - name: Topic Import
  - name: Topic Export
security:
  - Bearer: []
paths:
  '/v2/projects/{project-id}/issues/boards/{topic-board-id}':
    get:
      tags:
        - Topic Board
      summary: Get topic board
      operationId: getTopicBoard
      description: Get a single topic board.
      parameters:
        - $ref: '#/components/parameters/project-id'
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-board-include'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topic-board'
    patch:
      tags:
        - Topic Board
      summary: Update a topic board
      operationId: updateTopicBoard
      description: |
        Update a topic board.

        Only custom fields and custom field instances are supported.
      parameters:
        - $ref: '#/components/parameters/project-id'
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-board-include'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                customFieldsToAdd:
                  type: array
                  description: Custom fields to create.
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: 'A unique identifier for the custom field, represented as compacted UUID using 32 hexadecimal characters.'
                        example: 324809076a694255b589d236517a55da
                      required:
                        type: boolean
                        description: Whether the value of the instance is non nullable.
                        example: false
                      defaultValue:
                        type: object
                        description: 'Default value for the custom field instance, required if instance is non nullable.'
                      disabled:
                        type: boolean
                        description: Whether the custom field instance is disabled.
                        example: false
                customFieldsToModify:
                  type: array
                  description: Custom fields to update.
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: 'A unique identifier for the custom field, represented as compacted UUID using 32 hexadecimal characters.'
                        example: 324809076a694255b589d236517a55da
                      required:
                        type: boolean
                        description: Whether the value of the instance is non nullable.
                        example: false
                      defaultValue:
                        type: object
                        description: 'Default value for the custom field instance, required if instance is non nullable.'
                      disabled:
                        type: boolean
                        description: Whether the custom field instance is disabled.
                        example: false
                customFieldsToDisable:
                  type: array
                  description: Custom fields to disable.
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: 'Id of the custom field instance, represented as compacted UUID using 32 hexadecimal characters.'
                        example: 324809076a694255b589d236517a55da
                customFieldstoRestore:
                  type: array
                  description: Custom fields to restore.
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: 'Id of the custom field instance, represented as compacted UUID using 32 hexadecimal characters.'
                        example: 324809076a694255b589d236517a55da
                customFieldsToDelete:
                  type: array
                  description: Custom fields to delete.
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: 'Id of the custom field instance, represented as compacted UUID using 32 hexadecimal characters.'
                        example: 324809076a694255b589d236517a55da
                customFieldsToMove:
                  type: array
                  description: Custom fields to move.
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                        description: 'Id of the custom field instance, represented as compacted UUID using 32 hexadecimal characters.'
                        example: 324809076a694255b589d236517a55da
                      itemBeforeId:
                        type: string
                        description: Id of the custom field instance that appears before the current one. Use null if the item should be the first one.
                        nullable: true
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topic-board'
  /opencde/bcf/3.0/projects:
    get:
      tags:
        - Topic Board
      summary: List topic boards
      operationId: getTopicBoards
      description: |
        List all the topic boards the current user has access to.

        Multiple topic boards may belong to a single Catenda project.
      parameters:
        - $ref: '#/components/parameters/bimsync-project-id'
        - $ref: '#/components/parameters/bimsync-archived'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/bcf-topic-board'
    post:
      tags:
        - Topic Board
      summary: Create topic board
      operationId: createTopicBoard
      description: Add a new topic board.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - name
                - bimsync_project_id
              properties:
                name:
                  type: string
                  description: The name of the topic board
                  example: Tasks
                bimsync_project_id:
                  type: string
                  description: The Catenda project the topic board will belong to
                  example: 2439e0a3-a21e-4135-8c09-9ae57ee12681
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bcf-topic-board'
  '/opencde/bcf/3.0/projects/{topic-board-id}':
    get:
      tags:
        - Topic Board
      summary: Get topic board
      operationId: getBCFTopicBoard
      description: Get a single topic board.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bcf-topic-board'
    put:
      tags:
        - Topic Board
      summary: Update topic board
      operationId: updateBCFTopicBoard
      description: Update a topic board.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - name
              properties:
                name:
                  type: string
                  description: The name for the topic board
                  example: Subcontractor tasks
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/bcf-topic-board'
  '/opencde/bcf/3.0/projects/{topic-board-id}/extensions':
    get:
      tags:
        - Topic Board Extension
      summary: List extensions
      operationId: getTopicBoardExtensions
      description: List all the topic board extensions.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topic-board-extensions'
  '/opencde/bcf/3.0/projects/{topic-board-id}/extensions/statuses':
    get:
      tags:
        - Topic Board Status
      summary: List statuses
      operationId: getStatuses
      description: List all the topic board statuses.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/status-include-unlinked'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/topic-board-status'
    post:
      tags:
        - Topic Board Status
      summary: Create status
      operationId: createStatus
      description: Add a new topic board status.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - name
              properties:
                name:
                  type: string
                  description: The name of the status
                  example: Pending review
                color:
                  type: string
                  description: Valid RGB hexadecimal color of the status
                  example: '#FFFF00'
                type:
                  type: string
                  description: 'Type of the status, valid values are "open", "closed" and "candidate"'
                  enum:
                    - open
                    - closed
                    - candidate
                  example: open
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topic-board-status'
    put:
      tags:
        - Topic Board Status
      summary: Update status
      operationId: updateStatus
      description: |
        Update a topic board status.

        When updating the type of a status to a value other than "open" there must be at least one other status of type "open".
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - existingName
              properties:
                existingName:
                  type: string
                  description: The name of the status to update
                  example: Pending review
                name:
                  type: string
                  description: The updated name of the status
                  example: Pending electrician review
                color:
                  type: string
                  description: Valid RGB hexadecimal color of the status
                  example: '#FFFF00'
                type:
                  type: string
                  description: 'Type of the status, valid values are "open", "closed" and "candidate"'
                  enum:
                    - open
                    - closed
                    - candidate
                  example: open
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topic-board-status'
    delete:
      tags:
        - Topic Board Status
      summary: Delete status
      operationId: deleteStatus
      description: |
        Delete a topic board status.

        The status to be deleted must not be currently assigned to any topic or be the last status of type "open".
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - name
              properties:
                name:
                  type: string
                  description: The name of the status to delete
                  example: Pending review
      responses:
        '204':
          $ref: '#/components/responses/204'
  '/opencde/bcf/3.0/projects/{topic-board-id}/extensions/statuses/link':
    put:
      tags:
        - Topic Board Status
      summary: Link status
      operationId: linkStatus
      description: Merge an unlinked status into an existing topic board status.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - name
                - unlinkedName
              properties:
                name:
                  type: string
                  description: The name of the existing status
                  example: Pending review
                unlinkedName:
                  type: string
                  description: The name of the status to link
                  example: review
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topic-board-status'
  '/opencde/bcf/3.0/projects/{topic-board-id}/extensions/types':
    get:
      tags:
        - Topic Board Type
      summary: List types
      operationId: getTypes
      description: List all the topic board types.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/type-include-unlinked'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/topic-board-type'
    post:
      tags:
        - Topic Board Type
      summary: Create type
      operationId: createType
      description: Add a new topic board type.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - name
              properties:
                name:
                  type: string
                  description: The name of the type
                  example: Repair
                color:
                  type: string
                  description: Valid RGB hexadecimal color of the type
                  example: '#CCCCCC'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topic-board-type'
    put:
      tags:
        - Topic Board Type
      summary: Update type
      operationId: updateType
      description: Update a topic board type.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - existingName
              properties:
                existingName:
                  type: string
                  description: The name of the type to update
                  example: Repair
                name:
                  type: string
                  description: The updated name of the type
                  example: Needs repair
                color:
                  type: string
                  description: Valid RGB hexadecimal color of the type
                  example: '#CCCCCC'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topic-board-type'
    delete:
      tags:
        - Topic Board Type
      summary: Delete type
      operationId: deleteType
      description: |
        Delete a topic board type.

        The type to be deleted must not be currently assigned to any topic or be the last type.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - name
              properties:
                name:
                  type: string
                  description: The name of the type to delete
                  example: Needs repair
      responses:
        '204':
          $ref: '#/components/responses/204'
  '/opencde/bcf/3.0/projects/{topic-board-id}/extensions/types/link':
    put:
      tags:
        - Topic Board Type
      summary: Link type
      operationId: linkType
      description: Merge an unlinked type into an existing topic board type.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - name
                - unlinkedName
              properties:
                name:
                  type: string
                  description: The name of the existing type
                  example: Needs repair
                unlinkedName:
                  type: string
                  description: The name of the type to link
                  example: Repair
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topic-board-type'
  '/opencde/bcf/3.0/projects/{topic-board-id}/extensions/users':
    get:
      tags:
        - Topic Board User
      summary: List users
      operationId: getUsers
      description: List all the topic board users.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/user-include-unlinked'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/topic-board-user'
  '/opencde/bcf/3.0/projects/{topic-board-id}/extensions/users/link':
    put:
      tags:
        - Topic Board User
      summary: Link user
      operationId: linkUser
      description: Merge an unlinked user into an existing topic board user.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - existingUserId
                - unlinkedUser
              properties:
                existingUserId:
                  type: string
                  description: The id of the existing user
                  example: john@doe.com
                unlinkedUser:
                  type: string
                  description: The id of the user to link
                  example: john@doe.net
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topic-board-user'
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics':
    get:
      tags:
        - Topic
      summary: List topics
      operationId: getTopics
      description: |
        List topics.

        Filter, search, sort, skip and limit using OData.

        Not all properties are included in the response by default, make use of the OData select feature to adjust the response fields.

        Nullable fields without a value may not be included in the response.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/include-authorization'
        - $ref: '#/components/parameters/odata-filter'
        - $ref: '#/components/parameters/odata-search'
        - $ref: '#/components/parameters/odata-sort'
        - $ref: '#/components/parameters/odata-select'
        - $ref: '#/components/parameters/odata-top'
        - $ref: '#/components/parameters/odata-skip'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/topic'
    post:
      tags:
        - Topic
      summary: Create topic
      operationId: createTopic
      description: Add a new topic.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/include-authorization'
        - $ref: '#/components/parameters/odata-select'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - title
              properties:
                guid:
                  type: string
                  description: Represented as compacted UUID using 32 hexadecimal characters
                  example: 18d0273d-e15c-4924-97b3-6f47b233eebe
                topic_type:
                  type: string
                  description: Name of topic type
                  example: Info
                topic_status:
                  type: string
                  description: Name of topic status
                  example: Open
                title:
                  type: string
                  description: Title of topic
                  example: Topic 1
                priority:
                  type: string
                  description: 'Priority of topic, valid values in topic board extensions'
                  example: High
                labels:
                  type: array
                  description: List of topic labels
                  items:
                    type: string
                  example:
                    - Electrical
                    - Basement
                assigned_to:
                  type: string
                  description: 'Email of the assigned user, valid values in topic board extensions'
                  example: john@doe.com
                stage:
                  type: string
                  description: 'Milestone of the topic, valid values in topic board extensions'
                  example: Phase one
                description:
                  type: string
                  description: Topic description
                  example: The topic description
                due_date:
                  type: string
                  description: Due date of the topic
                  example: '2024-05-28T15:29:41.199+0000'
                bimsync_assigned_to:
                  type: object
                  description: Set assigned to providing a Catenda user or team
                  properties:
                    user:
                      $ref: '#/components/schemas/user-ref'
                      nullable: true
                    team:
                      $ref: '#/components/schemas/user-ref'
                      nullable: true
                bimsync_custom_fields:
                  type: array
                  description: List of topic custom fields
                  items:
                    $ref: '#/components/schemas/custom-field-instance'
                bimsync_labels:
                  type: array
                  description: List of topic labels
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                  example:
                    - id: 397t0ccc8f74619096c738de15dc6512
                bimsync_requester:
                  type: object
                  description: Set assigned to providing a Catenda user or team
                  properties:
                    user:
                      $ref: '#/components/schemas/user-ref'
                      nullable: true
                    team:
                      $ref: '#/components/schemas/user-ref'
                      nullable: true
                creation_date:
                  type: string
                  description: Creation date of the topic if not now
                  example: '2024-05-08T11:28:35.317+0000'
                creation_author:
                  type: string
                  description: User creating the topic if not current user
                  example: john@doe.com
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topic'
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/{topic-id}':
    get:
      tags:
        - Topic
      summary: Get topic
      operationId: getTopic
      description: |
        Get a single topic.

        Not all properties are included in the response by default, make use of the OData select feature to adjust the response fields.

        Nullable fields without a value may not be included in the response.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/include-authorization'
        - $ref: '#/components/parameters/odata-select'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topic'
    put:
      tags:
        - Topic
      summary: Update topic
      operationId: updateTopic
      description: |
        Update a topic.

        Not all properties are included in the response by default, make use of the OData select feature to adjust the response fields.

        Nullable fields without a value may not be included in the response.

        Values for Catenda fields (usually prefixed with **bimsync_**) are persistent across updates. Other fields are not and their values will be unset if not included in the update request. For example, an update request that doesn't include a **description** will remove any existing value for **description**.

        BCF fields that have a corresponding Catenda field will be updated when setting the Catenda field. For example setting **bimsync_assigned_to** will also set **assigned_to** and viceversa if the assignee is a Catenda user. This means that the **assigned_to** field of a topic doesn't need to be set if **bimsync_assigned_to** is being used. But if the assignee is not a member of the project then the **assigned_to** field should always be set when updating a topic to avoid losing its value.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/include-authorization'
        - $ref: '#/components/parameters/odata-select'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - title
              properties:
                topic_type:
                  type: string
                  description: Name of topic type
                  example: Info
                topic_status:
                  type: string
                  description: Name of topic status
                  example: Open
                title:
                  type: string
                  description: Title of topic
                  example: Topic 1
                priority:
                  type: string
                  description: 'Priority of topic, valid values in topic board extensions'
                  example: High
                labels:
                  type: array
                  description: List of topic labels
                  items:
                    type: string
                  example:
                    - Electrical
                    - Basement
                assigned_to:
                  type: string
                  description: 'Email of the assigned user, valid values in topic board extensions'
                  example: john@doe.com
                stage:
                  type: string
                  description: 'Milestone of the topic, valid values in topic board extensions'
                  example: Phase one
                description:
                  type: string
                  description: Topic description
                  example: The topic description
                due_date:
                  type: string
                  description: Due date of the topic
                  example: '2024-05-28T15:29:41.199+0000'
                bimsync_assigned_to:
                  type: object
                  description: Set topic assignee providing a Catenda user or team
                  properties:
                    user:
                      $ref: '#/components/schemas/user-ref'
                      nullable: true
                    team:
                      $ref: '#/components/schemas/user-ref'
                      nullable: true
                bimsync_custom_fields:
                  type: array
                  description: List of topic custom fields
                  items:
                    $ref: '#/components/schemas/custom-field-instance'
                bimsync_labels:
                  type: array
                  description: List of topic labels
                  items:
                    type: object
                    properties:
                      id:
                        type: string
                  example:
                    - id: 397t0ccc8f74619096c738de15dc6512
                bimsync_requester:
                  type: object
                  description: Set topic requester providing a Catenda user or team
                  properties:
                    user:
                      $ref: '#/components/schemas/user-ref'
                      nullable: true
                    team:
                      $ref: '#/components/schemas/user-ref'
                      nullable: true
                creation_date:
                  type: string
                  description: Creation date of the topic if not now
                  example: '2024-05-08T11:28:35.317+0000'
                creation_author:
                  type: string
                  description: User creating the topic if not current user
                  example: john@doe.com
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topic'
    delete:
      tags:
        - Topic
      summary: Delete topic
      operationId: deleteTopic
      description: Delete a topic.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
      responses:
        '204':
          $ref: '#/components/responses/204'
  '/opencde/bcf/3.0/bimsync-projects/{project-id}/topics':
    get:
      tags:
        - Topic
      summary: List project topics
      operationId: getProjectTopics
      description: |
        List all topics in a Catenda project. 

        Requires applying a topic board filter.

        Filter, sort, skip and limit using OData.
      parameters:
        - $ref: '#/components/parameters/project-id'
        - $ref: '#/components/parameters/include-authorization'
        - $ref: '#/components/parameters/odata-filter'
        - $ref: '#/components/parameters/odata-select'
        - $ref: '#/components/parameters/odata-skip'
        - $ref: '#/components/parameters/odata-sort'
        - $ref: '#/components/parameters/odata-top'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  allOf:
                    - $ref: '#/components/schemas/topic'
                    - type: object
                      properties:
                        bimsync_issue_board:
                          type: object
                          properties:
                            id:
                              type: string
                              description: Id of the topic board
                              example: e18a2d10-1595-4e52-a941-22d43bf8d7ad
                            name:
                              type: string
                              description: Name of the topic board
                              example: Issues
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/{topic-id}/comments':
    get:
      tags:
        - Topic Comment
      summary: List comments
      operationId: getComments
      description: List all topic comments.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/include-authorization'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/comment'
    post:
      tags:
        - Topic Comment
      summary: Create comment
      operationId: createComment
      description: Add a new topic comment.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/include-authorization'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - comment
              properties:
                guid:
                  type: string
                  description: Represented as compacted UUID using 32 hexadecimal characters
                  example: b53a16c8-9ce7-4289-8b27-375e8810d360
                comment:
                  type: string
                  description: The comment text
                  example: Comment text
                viewpoint_guid:
                  type: string
                  description: Id of an existing viewpoint to associate
                  example: e765db1f-d705-4d6e-955c-28bf1a897818
                date:
                  type: string
                  description: Creation date before now
                  example: '2024-05-08T14:29:08.000+0000'
                author:
                  type: string
                  description: User name authoring the comment if not current user
                  example: sue@doe.com
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/comment'
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/{topic-id}/comments/{comment-id}':
    get:
      tags:
        - Topic Comment
      summary: Get comment
      operationId: getComment
      description: Get a single topic comment.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/comment-id'
        - $ref: '#/components/parameters/include-authorization'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/comment'
    put:
      tags:
        - Topic Comment
      summary: Update comment
      operationId: updateComment
      description: Update a topic comment.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/comment-id'
        - $ref: '#/components/parameters/include-authorization'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - comment
              properties:
                comment:
                  type: string
                  description: The comment text
                  example: Comment text
                viewpoint_guid:
                  type: string
                  description: Id of an existing viewpoint to associate
                  example: e765db1f-d705-4d6e-955c-28bf1a897818
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/comment'
    delete:
      tags:
        - Topic Comment
      summary: Delete comment
      operationId: deleteComment
      description: Delete a topic comment.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/comment-id'
      responses:
        '204':
          $ref: '#/components/responses/204'
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/{topic-id}/document_references':
    get:
      tags:
        - Topic Document
      summary: List document references
      operationId: getDocumentReferences
      description: List all topic document references.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                oneOf:
                  - type: array
                    items:
                      $ref: '#/components/schemas/document-reference-document'
                  - type: array
                    items:
                      $ref: '#/components/schemas/document-reference-link'
    post:
      tags:
        - Topic Document
      summary: Create document reference
      operationId: createDocumentReference
      description: |
        Add a new topic document reference.

        To reference a document set `document_guid`. To reference a link set `url`.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                guid:
                  type: string
                  description: Id of the document reference
                  example: cd8daaee-1775-4b9d-a1c4-01bf503658f4
                document_guid:
                  type: string
                  description: Id of the referenced document
                  example: bd266fbe-78bd-493c-8751-3c8925e7fbc2
                url:
                  type: string
                  description: Referenced URL
                  example: 'https://www.example.com'
                description:
                  type: string
                  description: Description of the document reference
                  example: Document reference description
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                oneOf:
                  - type: array
                    items:
                      $ref: '#/components/schemas/document-reference-document'
                  - type: array
                    items:
                      $ref: '#/components/schemas/document-reference-link'
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/{topic-id}/document_references/{document-reference-id}':
    put:
      tags:
        - Topic Document
      summary: Update document reference
      operationId: updateDocumentReference
      description: |
        Update a topic document reference.

        To reference a document set `document_guid`. To reference a link set `url`.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/document-reference-id'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                document_guid:
                  type: string
                  description: Id of the referenced document
                url:
                  type: string
                  description: Referenced URL
                description:
                  type: string
                  description: Description of the document reference
                  example: Document reference description
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                oneOf:
                  - $ref: '#/components/schemas/document-reference-document'
                  - $ref: '#/components/schemas/document-reference-link'
    delete:
      tags:
        - Topic Document
      summary: Delete document reference
      operationId: deleteDocumentReference
      description: Delete a topic document reference.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/document-reference-id'
      responses:
        '204':
          $ref: '#/components/responses/204'
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/events':
    get:
      tags:
        - Topic Event
      summary: List topics events
      operationId: getTopicsEvents
      description: List all events for all topics.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/topic-event'
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/{topic-id}/events':
    get:
      tags:
        - Topic Event
      summary: List topic events
      operationId: getTopicEvents
      description: List all events for a topic.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/topic-event'
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/{topic-id}/objects':
    get:
      tags:
        - Topic Object
      summary: List linked objects
      operationId: getObjects
      description: List all topic linked IFC entities.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/topic-object'
    post:
      tags:
        - Topic Object
      summary: Create linked objects
      operationId: createLinkedObjects
      description: Add topic linked IFC entities.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - ifcGuids
              properties:
                ifcGuids:
                  type: array
                  description: List of IFC guids of objects to link
                  items:
                    type: object
                    description: IFC guid of the linked object
                    example: 3BY5alwwL00QXHtY2qmHYZ
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topic-object'
    delete:
      tags:
        - Topic Object
      summary: Delete linked objects
      operationId: deleteLinkedObjects
      description: Remove topic linked IFC entities.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - ifcGuids
              properties:
                ifcGuids:
                  type: array
                  description: List of IFC guids of objects to unlink
                  items:
                    type: object
                    description: IFC guid of the linked object
                    example: 3BY5alwwL00QXHtY2qmHYZ
      responses:
        '204':
          $ref: '#/components/responses/204'
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/{topic-id}/points':
    get:
      tags:
        - Topic Point
      summary: Get points
      operationId: getPoints
      description: List all topic points.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/topic-point'
    post:
      tags:
        - Topic Point
      summary: Create points
      operationId: createPoints
      description: Add topic points.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                required:
                  - x
                  - 'y'
                  - z
                properties:
                  x:
                    type: number
                    description: X coordinate of the point
                    example: 100
                  'y':
                    type: number
                    description: Y coordinate of the point
                    example: 100
                  z:
                    type: number
                    description: Z coordinate of the point
                    example: 100
                  models:
                    type: array
                    description: List of models
                    items:
                      type: object
                      properties:
                        modelRef:
                          type: string
                          description: Id of the model
                          example: 11a9bb2984ee4a999875c4cd9560f319
                        revisionRef:
                          type: string
                          description: Id of the model revision
                          example: eed6ae36-5fe0-4f1f-89da-fba8efcf8b97
                        ref:
                          type: string
                          description: A reference for this model revision relation
                          example: 827f4b14-af0c-44e5-90ce-4e58fa79d7b3
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topic-point'
    put:
      tags:
        - Topic Point
      summary: Update points
      operationId: updatePoints
      description: Update topic points.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                required:
                  - id
                  - x
                  - 'y'
                  - z
                properties:
                  id:
                    type: string
                    description: The id of the point
                    example: db3cffcf-2217-4503-8e51-ab2740d5043a
                  x:
                    type: number
                    description: X coordinate of the point
                    example: 100
                  'y':
                    type: number
                    description: Y coordinate of the point
                    example: 100
                  z:
                    type: number
                    description: Z coordinate of the point
                    example: 100
                  models:
                    type: array
                    description: List of models
                    items:
                      type: object
                      properties:
                        modelRef:
                          type: string
                          description: Id of the model
                          example: 11a9bb2984ee4a999875c4cd9560f319
                        revisionRef:
                          type: string
                          description: Id of the model revision
                          example: eed6ae36-5fe0-4f1f-89da-fba8efcf8b97
                        ref:
                          type: string
                          description: A reference for this model revision relation
                          example: 827f4b14-af0c-44e5-90ce-4e58fa79d7b3
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/topic-point'
    delete:
      tags:
        - Topic Point
      summary: Delete points
      operationId: deletePoints
      description: Delete topic points.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              items:
                type: object
                required:
                  - id
                properties:
                  id:
                    type: string
                    description: The id of the point
                    example: db3cffcf-2217-4503-8e51-ab2740d5043a
      responses:
        '204':
          $ref: '#/components/responses/204'
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/{topic-id}/related_topics':
    get:
      tags:
        - Topic Relation
      summary: List related topics
      operationId: getRelatedTopics
      description: List all related topics.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/include-bimsync-project-topics'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                description: List of related topics
                items:
                  type: object
                  properties:
                    related_topic_guid:
                      type: string
                      description: Id of the related topic
                      example: 5ae3214f-7333-4b3c-8b0a-1f8dca44616a
                    bimsync_issue_board_ref:
                      type: string
                      description: Id of the topic board the related topic belongs
                      example: e18a2d10-1595-4e52-a941-22d43bf8d7ad
                    bimsync_issue_number:
                      type: integer
                      description: Unique auto incremented number assigned when a new topic is created
                      example: 24
    put:
      tags:
        - Topic Relation
      summary: Create topic relations
      operationId: createTopicRelations
      description: Create new topic relations.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
      requestBody:
        content:
          application/json:
            schema:
              type: array
              description: List of related topic ids
              items:
                type: object
                required:
                  - related_topic_guid
                properties:
                  related_topic_guid:
                    type: string
                    example: 5ae3214f-7333-4b3c-8b0a-1f8dca44616a
        required: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                description: List of related topics
                items:
                  type: object
                  properties:
                    related_topic_guid:
                      type: string
                      description: Id of the related topic
                      example: 5ae3214f-7333-4b3c-8b0a-1f8dca44616a
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/{topic-id}/related_topics/{related-topic-id}':
    delete:
      tags:
        - Topic Relation
      summary: Delete topic relation
      operationId: deleteTopicRelation
      description: Delete a topic relation.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/related-topic-id'
      responses:
        '204':
          $ref: '#/components/responses/204'
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/{topic-id}/viewpoints':
    get:
      tags:
        - Topic Viewpoint
      summary: List viewpoints
      operationId: getViewpoints
      description: List all topic viewpoints.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/include-authorization'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/viewpoint'
    post:
      tags:
        - Topic Viewpoint
      summary: Create viewpoint
      operationId: createViewpoint
      description: |
        Add a new topic viewpoint.

        A viewpoint doesn't have to contain any camera data and can be used to add an arbitrary image to a topic. A viewpoint can then be referenced from a topic comment by its guid allowing comments with images.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/include-authorization'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                guid:
                  type: string
                  description: Id of the viewpoint
                  example: 52959166-dbd2-44eb-81bb-74f955f30e0f
                bimsync_models:
                  type: array
                  description: List of models
                  items:
                    type: object
                    properties:
                      modelRef:
                        type: string
                        description: Id of the model
                        example: 11a9bb2984ee4a999875c4cd9560f319
                      revisionRef:
                        type: string
                        description: Id of the model revision
                        example: eed6ae36-5fe0-4f1f-89da-fba8efcf8b97
                orthogonal_camera:
                  type: object
                  description: Details of orthogonal camera
                  required:
                    - camera_view_point
                    - camera_direction
                    - camera_up_vector
                    - view_to_world_scale
                    - aspect_ratio
                  properties:
                    camera_view_point:
                      type: object
                      description: Location of the camera
                      properties:
                        x:
                          type: number
                          description: X coordinate of camera location
                          example: 100
                        'y':
                          type: number
                          description: Y coordinate of camera location
                          example: 100
                        z:
                          type: number
                          description: Z coordinate of camera location
                          example: 100
                    camera_direction:
                      type: object
                      description: Direction of the camera
                      properties:
                        x:
                          type: number
                          description: X coordinate of camera direction
                          example: 100
                        'y':
                          type: number
                          description: Y coordinate of camera direction
                          example: 100
                        z:
                          type: number
                          description: Z coordinate of camera direction
                          example: 100
                    camera_up_vector:
                      type: object
                      description: Normalized vector describing the camera orientation
                      properties:
                        x:
                          type: number
                          description: X coordinate of vector
                          example: 0
                        'y':
                          type: number
                          description: Y coordinate of vector
                          example: 0
                        z:
                          type: number
                          description: Z coordinate of vector
                          example: 1
                    view_to_world_scale:
                      type: number
                      description: The scale factor between the camera and the scene
                      example: 14
                    aspect_ratio:
                      type: number
                      description: Aspect ratio of the scene
                      example: 1
                perspective_camera:
                  type: object
                  description: Details of perspective camera
                  required:
                    - camera_view_point
                    - camera_direction
                    - camera_up_vector
                    - field_of_view
                    - aspect_ratio
                  properties:
                    camera_view_point:
                      type: object
                      description: Location of the camera
                      properties:
                        x:
                          type: number
                          description: X coordinate of camera location
                          example: 100
                        'y':
                          type: number
                          description: Y coordinate of camera location
                          example: 100
                        z:
                          type: number
                          description: Z coordinate of camera location
                          example: 100
                    camera_direction:
                      type: object
                      description: Direction of the camera
                      properties:
                        x:
                          type: number
                          description: X coordinate of camera direction
                          example: 100
                        'y':
                          type: number
                          description: Y coordinate of camera direction
                          example: 100
                        z:
                          type: number
                          description: Z coordinate of camera direction
                          example: 100
                    camera_up_vector:
                      type: object
                      description: Normalized vector describing the camera orientation
                      properties:
                        x:
                          type: number
                          description: X coordinate of vector
                          example: 0
                        'y':
                          type: number
                          description: Y coordinate of vector
                          example: 0
                        z:
                          type: number
                          description: Z coordinate of vector
                          example: 1
                    field_of_view:
                      type: number
                      description: Field of view of the camera in degrees
                      example: 60
                    aspect_ratio:
                      type: number
                      description: Aspect ratio of the scene
                      example: 1
                lines:
                  type: array
                  description: List of graphical lines
                  items:
                    type: object
                    required:
                      - start_point
                      - end_point
                    properties:
                      start_point:
                        type: object
                        description: Start point of the line
                        properties:
                          x:
                            type: number
                            description: X coordinate of start point
                            example: 100
                          'y':
                            type: number
                            description: Y coordinate of start point
                            example: 100
                          z:
                            type: number
                            description: Z coordinate of start point
                            example: 100
                      end_point:
                        type: object
                        description: End point of the line
                        properties:
                          x:
                            type: number
                            description: X coordinate of end point
                            example: 200
                          'y':
                            type: number
                            description: Y coordinate of end point
                            example: 200
                          z:
                            type: number
                            description: Z coordinate of end point
                            example: 200
                clipping_planes:
                  type: array
                  description: List of clipping planes
                  items:
                    type: object
                    required:
                      - location
                      - direction
                    properties:
                      location:
                        type: object
                        description: Location of the camera
                        properties:
                          x:
                            type: number
                            description: X coordinate of location
                            example: 100
                          'y':
                            type: number
                            description: Y coordinate of location
                            example: 100
                          z:
                            type: number
                            description: Z coordinate of location
                            example: 100
                      direction:
                        type: object
                        description: Direction of the camera
                        properties:
                          x:
                            type: number
                            description: X coordinate of direction
                            example: 0
                          'y':
                            type: number
                            description: Y coordinate of direction
                            example: 0
                          z:
                            type: number
                            description: Z coordinate of direction
                            example: 1
                bitmaps:
                  type: array
                  description: List of embedded images
                  items:
                    type: object
                    required:
                      - bitmap_type
                      - bitmap_data
                      - location
                      - normal
                      - up
                      - height
                    properties:
                      bitmap_type:
                        type: string
                        description: 'Type of the bitmap, valid values are "jpg" and "png"'
                        enum:
                          - jpg
                          - png
                        example: png
                      bitmap_data:
                        type: string
                        description: Image date as base64 encoded string
                        example: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAFUlEQVR42mP8z8BQz0AEYBxVSF+FABJADveWkH6oAAAAAElFTkSuQmCC'
                      location:
                        type: object
                        description: Location of the center of the bitmap
                        properties:
                          x:
                            type: number
                            description: X coordinate of location
                            example: 100
                          'y':
                            type: number
                            description: Y coordinate of location
                            example: 100
                          z:
                            type: number
                            description: Z coordinate of location
                            example: 100
                      normal:
                        type: object
                        description: Normalized vector describing the bitmap direction
                        properties:
                          x:
                            type: number
                            description: X coordinate of vector
                            example: 0
                          'y':
                            type: number
                            description: Y coordinate of vector
                            example: 1
                          z:
                            type: number
                            description: Z coordinate of vector
                            example: 0
                      up:
                        type: object
                        description: Normalized vector describing the bitmap orientation
                        properties:
                          x:
                            type: number
                            description: X coordinate of vector
                            example: 0
                          'y':
                            type: number
                            description: Y coordinate of vector
                            example: 0
                          z:
                            type: number
                            description: Z coordinate of vector
                            example: 1
                      height:
                        type: number
                        description: Height of bitmap in the scene
                        example: 20
                snapshot:
                  type: object
                  required:
                    - snapshot_type
                    - snapshot_data
                  properties:
                    snapshot_type:
                      type: string
                      description: 'Format of snapshot, valid values are "jpg" and "png"'
                      enum:
                        - jpg
                        - png
                      example: png
                    snapshot_data:
                      type: string
                      description: Image date as base64 encoded string
                      example: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAFUlEQVR42mP8z8BQz0AEYBxVSF+FABJADveWkH6oAAAAAElFTkSuQmCC'
                components:
                  type: object
                  description: Components of the viewpoint
                  required:
                    - visibility
                  properties:
                    selection:
                      type: array
                      description: List of selected components
                      items:
                        type: object
                        properties:
                          ifc_guid:
                            type: string
                            description: IFC guid of the component
                            example: 3BY5alwwL00QXHtY2qmHYZ
                          originating_system:
                            description: Originating system of the component
                            type: string
                          authoring_tool_id:
                            description: Id of the component in the authoring tool
                            type: string
                    coloring:
                      type: array
                      description: List of colored components
                      items:
                        type: object
                        required:
                          - color
                          - components
                        properties:
                          color:
                            type: string
                            description: Color of the components
                            example: '#dddddd'
                          components:
                            type: array
                            items:
                              type: object
                              properties:
                                ifc_guid:
                                  type: string
                                  description: IFC guid of the component
                                  example: 3BY5alwwL00QXHtY2qmHYZ
                                originating_system:
                                  description: Originating system of the component
                                  type: string
                                authoring_tool_id:
                                  description: Id of the component in the authoring tool
                                  type: string
                    visibility:
                      type: object
                      properties:
                        default_visibility:
                          type: boolean
                          description: 'Visibility of exception components, default is false'
                          example: true
                        exceptions:
                          type: array
                          description: Exception components
                          items:
                            type: object
                            properties:
                              ifc_guid:
                                type: string
                                description: IFC guid of the component
                                example: 3BY5alwwL00QXHtY2qmHYZ
                              originating_system:
                                description: Originating system of the component
                                type: string
                              authoring_tool_id:
                                description: Id of the component in the authoring tool
                                type: string
                        view_setup_hints:
                          type: object
                          properties:
                            spaces_visible:
                              type: boolean
                              description: 'Visibility of spaces, default is false'
                              example: true
                            space_boundaries_visible:
                              type: boolean
                              description: 'Visibility of space boundaries, default is false'
                              example: true
                            openings_visible:
                              type: boolean
                              description: 'Visibility of openings, default is false'
                              example: true
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/viewpoint'
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/{topic-id}/viewpoints/{viewpoint-id}':
    get:
      tags:
        - Topic Viewpoint
      summary: Get viewpoint
      operationId: getViewpoint
      description: Get a single topic viewpoint.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/viewpoint-id'
        - $ref: '#/components/parameters/include-authorization'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/viewpoint'
    delete:
      tags:
        - Topic Viewpoint
      summary: Delete viewpoint
      operationId: deleteViewpoint
      description: Delete a topic viewpoint.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/viewpoint-id'
      responses:
        '204':
          $ref: '#/components/responses/204'
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/{topic-id}/viewpoints/{viewpoint-id}/coloring':
    get:
      tags:
        - Topic Viewpoint
      summary: Get coloring
      operationId: getViewpointColoring
      description: Get the coloring of a topic viewpoint.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/viewpoint-id'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/viewpoint-coloring'
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/{topic-id}/viewpoints/{viewpoint-id}/models':
    get:
      tags:
        - Topic Viewpoint
      summary: Get models
      operationId: getViewpointModels
      description: |
        Get the models of a topic viewpoint.

        Viewpoints created without specifying any models will result in the system making a best guess based on components selected/visiblity states.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/viewpoint-id'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/viewpoint-model'
    post:
      tags:
        - Topic Viewpoint
      summary: Update models
      operationId: updateViewpointModels
      description: |
        Update the models of a topic viewpoint.

        Models must have at least one revision.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/viewpoint-id'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - modelRef
              properties:
                modelRef:
                  type: string
                  description: Id of the model
                  example: 11a9bb2984ee4a999875c4cd9560f319
                revisionRef:
                  type: string
                  description: Id of the model revision
                  example: eed6ae36-5fe0-4f1f-89da-fba8efcf8b97
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/viewpoint-model'
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/{topic-id}/viewpoints/{viewpoint-id}/selection':
    get:
      tags:
        - Topic Viewpoint
      summary: Get selection
      operationId: getViewpointSelection
      description: Get the selection of a topic viewpoint.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/viewpoint-id'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/viewpoint-selection'
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/{topic-id}/viewpoints/{viewpoint-id}/snapshot':
    get:
      tags:
        - Topic Viewpoint
      summary: Get snapshot
      operationId: getViewpointSnapshot
      description: Get the snapshot of a topic viewpoint.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/viewpoint-id'
        - $ref: '#/components/parameters/bimsync-image-size'
      responses:
        '200':
          description: The PNG snapshot image.
          content:
            image/png:
              schema:
                type: string
                format: binary
  '/opencde/bcf/3.0/projects/{topic-board-id}/topics/{topic-id}/viewpoints/{viewpoint-id}/visibility':
    get:
      tags:
        - Topic Viewpoint
      summary: Get visibility
      operationId: getViewpointVisibility
      description: Get the visibility of a topic viewpoint.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/topic-id'
        - $ref: '#/components/parameters/viewpoint-id'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/viewpoint-visibility'
  '/opencde/bcf/3.0/projects/{topic-board-id}/imports':
    post:
      tags:
        - Topic Import
      summary: Import topics
      operationId: importTopics
      description: |
        Upload and import a BCF file.

        File must be a BCF 3.0 file with the extension `.bcf`.

        Include **Content-Type: multipart/form-data** in request headers.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - in: header
          name: Content-Disposition
          schema:
            type: string
            description: Value must be 'attachment; filename="YOUR_FILENAME"’
            example: attachment; filename="topics.bcf"
          required: true
      requestBody:
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: The BCF file to import.
                  example: topics.bcf
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/import-status'
  '/opencde/bcf/3.0/projects/{topic-board-id}/imports/{import-id}':
    get:
      tags:
        - Topic Import
      summary: Get import status
      operationId: getImportStatus
      description: Get the status of a topics import.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/import-id'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/import-status'
  '/opencde/bcf/3.0/projects/{topic-board-id}/exports':
    post:
      tags:
        - Topic Export
      summary: Export topics
      operationId: exportTopics
      description: Start an export topics process.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/export-format'
        - $ref: '#/components/parameters/odata-filter'
        - $ref: '#/components/parameters/odata-sort'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/export-status'
  '/opencde/bcf/3.0/projects/{topic-board-id}/exports/{export-id}':
    get:
      tags:
        - Topic Export
      summary: Get export status
      operationId: getExportStatus
      description: Get the status of a topics export.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/export-id'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/export-status'
  '/opencde/bcf/3.0/projects/{topic-board-id}/exports/{export-id}/download':
    get:
      tags:
        - Topic Export
      summary: Download export
      operationId: downloadExport
      description: |
        Download topics export.

        Include **Content-Type: application/octet-stream** in request headers.
      parameters:
        - $ref: '#/components/parameters/topic-board-id'
        - $ref: '#/components/parameters/export-id'
      responses:
        '200':
          description: The topics export file.
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
components:
  parameters:
    classification-id:
      name: object-id
      in: path
      required: true
      description: Object id of the classification
      schema:
        type: integer
        format: int64
    classification-reference-id:
      name: object-id
      in: path
      required: true
      description: Object id of the classification reference
      schema:
        type: integer
        format: int64
    collection-id:
      name: collection-id
      in: path
      required: true
      description: Id of the document library item collection
      schema:
        type: string
    comment-id:
      name: comment-id
      in: path
      required: true
      description: Comment id
      schema:
        type: string
        example: b53a16c8-9ce7-4289-8b27-375e8810d360
    custom-field-id:
      name: custom-field-id
      in: path
      required: true
      description: Id of the custom field
      schema:
        type: string
    document-id:
      name: document-id
      in: path
      required: true
      description: Id of a document
      schema:
        type: string
        example: bd266fbe78bd493c87513c8925e7fbc2
    document-reference-id:
      name: document-reference-id
      in: path
      required: true
      description: Document reference id
      schema:
        type: string
        example: cd8daaee-1775-4b9d-a1c4-01bf503658f4
    export-id:
      name: export-id
      in: path
      required: true
      description: Id of topics export
      schema:
        type: string
        example: f4ba7d63-54a8-44a9-93f5-83f4697af216
    group-id:
      name: object-id
      in: path
      required: true
      description: Object id of the group
      schema:
        type: integer
        format: int64
    import-id:
      name: import-id
      in: path
      required: true
      description: Id of topics import
      schema:
        type: string
        example: f4ba7d63-54a8-44a9-93f5-83f4697af216
    label-group-id:
      name: label-group-id
      in: path
      required: true
      description: Id of the label group
      schema:
        type: string
    label-id:
      name: label-id
      in: path
      required: true
      description: Id of the label
      schema:
        type: string
    layer-id:
      name: object-id
      in: path
      required: true
      description: Object id of the layer
      schema:
        type: integer
        format: int64
    library-id:
      name: library-id
      in: path
      required: true
      description: Id of the library
      schema:
        type: string
    library-item-id:
      name: library-item-id
      in: path
      required: true
      description: Id of the library item
      schema:
        type: string
    library-item-revision-id:
      name: library-item-revision-id
      in: path
      required: true
      description: Id of the library item revision
      schema:
        type: string
    model-id:
      name: model-id
      in: path
      required: true
      description: Id of the model
      schema:
        type: string
    model-revision-id:
      name: model-revision-id
      in: path
      required: true
      description: Id of the model revision
      schema:
        type: string
    model-revision-status-id:
      name: model-revision-status-id
      in: path
      required: true
      description: Id of the model revision status
      schema:
        type: string
    organization-id:
      name: organization-id
      in: path
      required: true
      description: Id of the organization
      schema:
        type: string
    owner-history-id:
      name: object-id
      in: path
      required: true
      description: Object id of the owner history
      schema:
        type: integer
        format: int64
    product-id:
      name: object-id
      in: path
      required: true
      description: Object id of the product
      schema:
        type: integer
        format: int64
    project-id:
      name: project-id
      in: path
      required: true
      description: Catenda project id
      schema:
        type: string
        example: af2d8af0fa54465b89bf26dd3d92cfd0
    related-topic-id:
      name: related-topic-id
      in: path
      required: true
      description: Topic id
      schema:
        type: string
        example: 18d0273d-e15c-4924-97b3-6f47b233eebe
    schema-uri:
      name: schema-uri
      in: path
      required: true
      description: Schema uri
      schema:
        type: string
        example: 'urn:ietf:params:scim:schemas:core:2.0:User'
    team-id:
      name: team-id
      in: path
      required: true
      description: Id of the team
      schema:
        type: string
    topic-id:
      name: topic-id
      in: path
      required: true
      description: Topic id
      schema:
        type: string
        example: 18d0273d-e15c-4924-97b3-6f47b233eebe
    topic-board-id:
      name: topic-board-id
      in: path
      required: true
      description: Id of the topic board
      schema:
        type: string
        example: e18a2d10-1595-4e52-a941-22d43bf8d7ad
    type-id:
      name: object-id
      in: path
      required: true
      description: Object id of the type
      schema:
        type: integer
        format: int64
    user-id:
      name: user-id
      in: path
      required: true
      description: Id of the user
      schema:
        type: string
    viewpoint-id:
      name: viewpoint-id
      in: path
      required: true
      description: Id of viewpoint
      schema:
        type: string
        example: 52959166-dbd2-44eb-81bb-74f955f30e0f
    webhook-id:
      name: webhook-id
      in: path
      required: true
      description: Id of the webhook
      schema:
        type: string
    bimsync-archived:
      name: bimsync_archived
      in: query
      description: 'Limit to topic boards based on archived status, valid values are "archived", "not-archived" and "all".'
      schema:
        type: string
    bimsync-image-size:
      name: bimsync-image-size
      in: query
      description: 'Resize the image, valid values are "xs" (130px), "s" (220px), "m" (400px), "l" (600px), "xl" (1200px), "full" (original)'
      schema:
        type: string
    bimsync-project-id:
      name: bimsync_project_id
      in: query
      description: Limit to topic boards that belong to the specified Catenda project id
      schema:
        type: string
    collection-created-by:
      name: createdBy
      in: query
      description: Limit result to only contain collections created by the specified users. Provide a comma separated list of user ids.
      schema:
        type: string
    collection-fields:
      name: fields
      in: query
      description: Specify which fields to include in the response. Provide a comma separated list of valid values. Valid values are **id**.
      schema:
        type: string
    collection-files:
      name: files
      in: query
      description: Limit result to only contain collections containing the specified library item revisions. Provide a comma separated list of library item revision ids.
      schema:
        type: string
    collection-finalized:
      name: finalized
      in: query
      description: Limit result to only contain finalized collections.
      schema:
        type: boolean
    collection-follow-latest-revision:
      name: followLatestRevision
      in: query
      description: Limit result to only contain collections that follow the latest revision of all items.
      schema:
        type: boolean
    collection-followers:
      name: followers
      in: query
      description: Limit result to only contain collections followed by the specified users. Provide a comma separated list of user ids.
      schema:
        type: string
    collection-include:
      name: include
      in: query
      description: Specify which additional fields to include in the response. Provide a comma separated list of valid values. Valid values are **libraryItem**.
      schema:
        type: string
    collection-library-item-include:
      name: libraryItemInclude
      in: query
      description: Specify which additional library item fields to include in the response. Combine with include parameter and provide a comma separated list of valid values. Valid values are **path**.
      schema:
        type: string
    collection-library-items:
      name: libraryItems
      in: query
      description: Limit result to only contain collections containing the specified library items. Provide a comma separated list of library item ids.
      schema:
        type: string
    collection-search:
      name: search
      in: query
      description: Limit result to only contain collections with names that match the search term.
      schema:
        type: string
    collection-shared-by:
      name: sharedBy
      in: query
      description: 'Limit result to only contain collections with the specified shared methods. Provide a comma separated list of valid values. Valid values are **link**, **email** or **not-shared**.'
      schema:
        type: string
    collection-visibility:
      name: visibility
      in: query
      description: Limit result to only contain collections with the specified visibility. Provide a comma separated list of valid values. Valid values are **private** or **project-members**.
      schema:
        type: string
    document-upload-id:
      name: guid
      in: query
      description: Id to give uploaded document
      schema:
        type: string
    export-format:
      name: format
      in: query
      description: 'Format of export, default is BCF 3.0, valid values are "bcf", "excel" or "pdf"'
      schema:
        type: string
    include-authorization:
      name: includeAuthorization
      in: query
      description: Include authorization field in response
      schema:
        type: boolean
    include-bimsync-project-topics:
      name: includeBimsyncProjectTopics
      in: query
      description: Include topics from other topic boards that belong to the same Catenda project
      schema:
        type: boolean
    ifc-model:
      name: model
      in: query
      description: Filter by latest revision of model id
      schema:
        type: string
    ifc-page:
      name: page
      in: query
      description: Default value is 1
      schema:
        type: integer
    ifc-page-size:
      name: pageSize
      in: query
      description: 'Default 100, max 1000'
      schema:
        type: integer
    ifc-revision:
      name: revision
      in: query
      description: Filter by revision id
      schema:
        type: string
    ifc-type:
      name: ifcType
      in: query
      description: Filter by IFC type
      schema:
        type: string
    label-include:
      name: include
      in: query
      description: |
        Use value `group` to include associated label group in the result
      schema:
        type: string
    library-item-associations:
      name: associations
      in: query
      description: Limit result to only contain library items linked to the specified IFC guids. Provide a comma separated list of IFC guids.
      schema:
        type: string
    library-item-created-at-from:
      name: createdAtFrom
      in: query
      description: |
        Filter the result by providing a date in ISO 8601 format.

        Result will only contain items created after this date.
      schema:
        type: string
    library-item-created-at-to:
      name: createdAtTo
      in: query
      description: |
        Filter the result by providing a date in ISO 8601 format.

        Result will only contain items created before this date.
      schema:
        type: string
    library-item-format:
      name: format
      in: query
      description: Optionally specify an alternative format when download a library item.
      schema:
        type: string
    library-item-include:
      name: include
      in: query
      description: |
        Comma separated list of referenced properties that will be added to the items of the result. Valid values are **labels**, **labelGroups** and **path**.
      schema:
        type: string
    library-item-labels:
      name: labels
      in: query
      description: Filter the result by providing a comma separated list of label ids.
      schema:
        type: string
    library-item-revision-created-at-from:
      name: createdAtFrom
      in: query
      description: |
        Limit the result by providing a date in ISO 8601 format.

        Result will only contain items created after this date.
      schema:
        type: string
    library-item-revision-created-at-to:
      name: createdAtTo
      in: query
      description: |
        Limit the result by providing a date in ISO 8601 format.

        Result will only contain items created before this date.
      schema:
        type: string
    library-item-scope:
      name: scope
      in: query
      description: |
        Determine which revision of the library item to return.

        - `all`: Return latest revision.
        - `published`: Return latest published revision.
      schema:
        type: string
        enum:
          - all
          - published
    library-item-parent-id:
      name: parentId
      in: query
      description: |
        Parent item of the library items, represented as compacted UUID using 32 hexadecimal characters. Setting this will only list the items with this parentId, to specify the root items, set parentId to **root**.
      schema:
        type: string
    library-items-revision-created-at-from:
      name: revisionCreatedAtFrom
      in: query
      description: |
        Filter the result by providing a date in ISO 8601 format.

        Result will only contain items with the last revision being created after this date.
      schema:
        type: string
    library-items-revision-created-at-to:
      name: revisionCreatedAtTo
      in: query
      description: |
        Filter the result by providing a date in ISO 8601 format.

        Result will only contain items with the last revision being created before this date.
      schema:
        type: string
    library-item-revision-scope:
      name: scope
      in: query
      description: |
        Limit the result by revision publication status.

        - `all`: Return all revisions.
        - `published`: Return only published revisions.
      schema:
        type: string
        enum:
          - all
          - published
    library-item-search:
      name: search
      in: query
      description: Filter the result by search text.
      schema:
        type: string
    library-item-sub-folders:
      name: subFolders
      in: query
      description: 'Include library items within folders in result, recursive search.'
      schema:
        type: boolean
    library-items-scope:
      name: scope
      in: query
      description: |
        Determine which library items to return.

        - `all`: Return all library items.
        - `published`: Return all library items with published revisions.
      schema:
        type: string
        enum:
          - all
          - published
    library-page:
      name: page
      in: query
      description: Default value is 1
      schema:
        type: integer
    library-page-size:
      name: pageSize
      in: query
      description: 'Default 100, max 1000'
      schema:
        type: integer
    model-normalize:
      name: normalize
      in: query
      description: |
        Applies to IFC downloads. By default, STEP instance names correspond to their Catenda object id, by setting `true` the STEP instance names will instead start at #1.
      schema:
        type: string
    model-revision-scope:
      name: scope
      in: query
      description: |
        Limit the result based on the document revision that originates the model revision.

        - `all`: Return all model revisions.
        - `published`: Return all model revisions originating from published document revisions.
      schema:
        type: string
        enum:
          - all
          - published
    model-revision-model:
      name: model
      in: query
      description: Filter by model id
      schema:
        type: string
    model-revision-product:
      name: product
      in: query
      description: Filter by the object id of an IFC product
      schema:
        type: string
    model-scope:
      name: scope
      in: query
      description: |
        Limit the result based on the document that originates the model.

        - `all`: Return all models.
        - `published`: Return models with revisions originating from published document revisions.
      schema:
        type: string
        enum:
          - all
          - published
    odata-filter:
      name: $filter
      in: query
      description: Filter topics with OData
      schema:
        type: string
    odata-search:
      name: $search
      in: query
      description: Search topic title and description
      schema:
        type: string
    odata-select:
      name: $select
      in: query
      description: Limit topic fields with OData
      schema:
        type: string
    odata-skip:
      name: $skip
      in: query
      description: |
        Position of topic cursor. Example: With `$top` value of 50, set `$skip` to 50 to retrieve page 2, to 100 for page 3, etc...
      schema:
        type: string
    odata-sort:
      name: $orderby
      in: query
      description: Sort topics with OData
      schema:
        type: string
    odata-top:
      name: $top
      in: query
      description: 'Number of topics in result (page size). Default 100, max 500.'
      schema:
        type: string
    scim-count:
      name: count
      in: query
      description: 'Page size, default value is 100'
      schema:
        type: integer
    scim-start-index:
      name: startIndex
      in: query
      description: 'Page number, default value is 1'
      schema:
        type: integer
    status-include-unlinked:
      name: include-unlinked
      in: query
      description: Include unlinked statuses
      schema:
        type: boolean
    topic-board-include:
      name: include
      in: query
      description: Comma separated list of referenced properties that will be added to the result. Valid values are **customFields**.
      schema:
        type: string
    type-include-unlinked:
      name: include-unlinked
      in: query
      description: Include unlinked types
      schema:
        type: boolean
    user-include-unlinked:
      name: include-unlinked
      in: query
      description: Include unlinked users
      schema:
        type: boolean
  responses:
    '204':
      description: No Content
  schemas:
    api-versions:
      type: object
      properties:
        versions:
          type: array
          items:
            type: object
            properties:
              api_id:
                type: string
                description: Type of API
                example: bcf
              version_id:
                type: string
                description: The API version
                example: '3.0'
              detailed_version:
                type: string
                description: Description of the API
                example: Catenda OpenCDE BCF 3.0
              api_base_url:
                type: string
                description: Base URL of all endpoints for this API version
                example: 'https://api.catenda.com/opencde/bcf/3.0'
    bcf-topic-board:
      type: object
      properties:
        project_id:
          type: string
          description: The topic board id
          example: e18a2d10-1595-4e52-a941-22d43bf8d7ad
        name:
          type: string
          description: The topic board name
          example: Issues
        bimsync_project_id:
          type: string
          description: Id of the Catenda project the topic board belongs to
          example: 2439e0a3-a21e-4135-8c09-9ae57ee12681
        bimsync_issue_board_name:
          type: string
          description: The topic board name on Catenda Hub
          example: Issues
        bimsync_project_name:
          type: string
          description: Name of the Catenda project the topic board belongs to
          example: Site A
        bimsync_extension_acl:
          type: object
          description: Map of access control features to access value for the current user
          properties:
            canCloseIssues:
              type: string
              description: 'Whether the current user can close topics, valid values are "all", "own" and "none".'
              enum:
                - all
                - own
                - none
              example: all
    collection:
      type: object
      properties:
        id:
          type: string
          description: 'Id of the collection, represented as compacted UUID using 32 hexadecimal characters.'
          example: 924809076a694255b589d236517a55da
        name:
          type: string
          description: The name of the collection.
          example: Collection name
        description:
          type: string
          description: The description of the collection.
          example: Collection description
        finalized:
          type: boolean
          description: |
            Indicates whether the collection is finalized.

            Finalized collections can no longer be edited.
          example: false
        followLatestRevision:
          type: boolean
          description: Determines whether collection items follow the latest revision of a library item or the revision when added to the collection.
          example: true
        visibility:
          type: string
          description: |
            Determines whether the collection is available to all project members.

            By default a collection becomes available to project members when it is finalized.

            Valid values are:
              - private
              - project-members
          enum:
            - private
            - project-members
          example: private
        createdAt:
          type: string
          description: The date and time the collection was created in ISO 8601 format.
          example: 2023-12-09T10:07:56.000Z
        createdBy:
          type: string
          description: The user id of the user who created the collection.
          example: 524809076a694255b989d236517a55da
    collection-item:
      type: object
      properties:
        id:
          type: string
          description: 'Id of the collection item, represented as compacted UUID using 32 hexadecimal characters.'
          example: 924809076a694255b589d236517a55da
        libraryId:
          type: string
          description: The library id of the library item.
          example: ead9b194e6024e6b92cae1d791797b68
        libraryItemId:
          type: string
          description: Id of the library item.
          example: 5badf33213ae420ebf81e727d5281850
        fileId:
          type: string
          description: Id of the library item revision.
          example: 5dc75452-29a4-4c4a-8415-991b92a92001
        createdAt:
          type: string
          description: The date and time the collection was created in ISO 8601 format.
          example: 2023-12-09T10:07:56.000Z
        createdBy:
          type: string
          description: The user id of the user who created the collection.
          example: 524809076a694255b989d236517a55da
    comment:
      type: object
      properties:
        guid:
          type: string
          description: Represented as compacted UUID using 32 hexadecimal characters
          example: b53a16c8-9ce7-4289-8b27-375e8810d360
        date:
          type: string
          description: Creation date of comment
          example: '2024-05-08T14:29:08.000+0000'
        author:
          type: string
          description: User name of comment author
          example: john@doe.com
        comment:
          type: string
          description: Text of the comment
          example: Comment text
        topic_guid:
          type: string
          description: Id of the topic comment belongs to
          example: 18d0273d-e15c-4924-97b3-6f47b233eebe
        modified_date:
          type: string
          description: Last modified date of the comment
          example: '2024-05-08T15:29:08.000+0000'
          nullable: true
        modified_author:
          type: string
          description: User name of last user to modify the comment
          example: john@doe.com
          nullable: true
        viewpoint_guid:
          type: string
          description: 'Id of the associated viewpoint, useful for attaching an image to a comment'
          example: e765db1f-d705-4d6e-955c-28bf1a897818
          nullable: true
        authorization:
          type: object
          description: Local variations from the global authorization defaults for this resource
          properties:
            comment_actions:
              type: array
              description: List of comment actions
              example:
                - update
                - delete
    custom-field:
      type: object
      description: Represents a single custom field.
      properties:
        id:
          type: string
          description: 'Id of the custom field, represented as compacted UUID using 32 hexadecimal characters.'
          example: 324409076a694255b589d236517a55da
        name:
          type: string
          description: The name of the custom field.
          example: Custom field name
        description:
          type: string
          description: Description of the custom field.
          example: Custom field description
        type:
          type: string
          description: 'Type of the custom field. Valid values are "text", "integer", "double", "enumeration" or "date".'
          enum:
            - text
            - integer
            - double
            - enumeration
            - date
          example: text
        createdAt:
          type: string
          description: The date and time the custom field was created in ISO 8601 format.
          example: 2023-03-06T11:52:45.000Z
        createdBy:
          type: string
          description: Id of the user that created the custom field.
          example: 624809076a694255b989d236517a55da
        archived:
          type: boolean
          description: Whether the custom field is archived.
          example: false
        dropdownItems:
          type: array
          description: List of dropdown items for custom fields of type enumeration. Value is null for other custom field types.
          items:
            type: object
            properties:
              id:
                type: string
                description: 'Id of the custom field, represented as compacted UUID using 32 hexadecimal characters.'
              name:
                type: string
                description: Name of the dropdown item
                example: Dropdown item 1
              code:
                type: string
                description: 'The code of the enumeration item, value is unique for a custom field.'
                example: Item name
              disabled:
                type: boolean
                description: Whether the enumeration item is disabled.
                example: false
          nullable: true
    custom-field-enumeration:
      type: object
      description: Represents a single custom field enumeration item.
      properties:
        id:
          type: string
          description: 'Id of the enumeration item, represented as compacted UUID using 32 hexadecimal characters.'
          example: 324409076a694255b589d236517a55da
        name:
          type: string
          description: The name of the enumeration item.
          example: Custom field name
        code:
          type: string
          description: 'The code of the enumeration item, value is unique for a custom field.'
          example: Item name
        disabled:
          type: boolean
          description: Whether the enumeration item is disabled.
          example: false
    custom-field-instance:
      type: object
      description: Represents a single custom field.
      properties:
        id:
          type: string
          description: 'Id of the custom field, represented as compacted UUID using 32 hexadecimal characters.'
          example: 324809076a694255b589d236517a55da
        disabled:
          type: boolean
          description: Whether the instance is disabled.
          example: false
        required:
          type: boolean
          description: Whether the value of the instance is non nullable.
          example: false
        defaultValue:
          type: object
          description: 'Default value for the custom field instance, required if instance is non nullable.'
        itemBeforeId:
          type: string
          description: Id of the custom field that appears before the current one. Use null if the item should be the first one.
          nullable: true
    document:
      type: object
      properties:
        guid:
          type: string
          description: Id of the document
          example: bd266fbe-78bd-493c-8751-3c8925e7fbc2
        filename:
          type: string
          description: File name of the document
          example: document.pdf
    document-reference-document:
      type: object
      properties:
        guid:
          type: string
          description: Id of the document reference
          example: cd8daaee-1775-4b9d-a1c4-01bf503658f4
        document_guid:
          type: string
          description: Id of the referenced document
          example: bd266fbe-78bd-493c-8751-3c8925e7fbc2
        description:
          type: string
          description: Description of the document reference
          example: Document reference description
    document-reference-link:
      type: object
      properties:
        guid:
          type: string
          description: Id of the document reference
          example: cd8daaee-1775-4b9d-a1c4-01bf503658f4
        url:
          type: string
          description: URL content of the referenced link
        description:
          type: string
          description: Description of the document reference
          example: Document reference description
    error:
      type: object
      properties:
        code:
          type: integer
          description: The error code
        message:
          type: string
          description: The error message
    export-status:
      type: object
      properties:
        id:
          type: string
          description: Id of the export process
          example: c9549c4c4e214538a2b327815cfe99f3
        createdAt:
          type: string
          description: Timestamp of when export process was initiated
          example: '2024-05-30T15:08:00Z'
        status:
          type: string
          description: 'Current export processing status, valid values are "processing", "success" or "failed"'
          enum:
            - processing
            - success
            - failed
          example: processing
    file:
      type: object
      properties:
        type:
          type: string
          description: Value is file
          example: file
        createdAt:
          type: string
          description: The date and time the file was created in ISO 8601 format
          example: 2023-12-09T10:07:56.000Z
        owner:
          type: string
          description: User id of the file owner
          example: gh7fe246cea6442834052404eth08drj
        revision:
          $ref: '#/components/schemas/library-item-document-file-revision'
    folder:
      type: object
      properties:
        type:
          type: string
          description: Value is folder
          example: folder
        createdAt:
          type: string
          description: The date and time the folder was created in ISO 8601 format
          example: 2023-12-09T10:07:56.000Z
        owner:
          type: string
          description: User id of the folder owner
          example: gh7fe246cea6442834052404eth08drj
    foundation-authentication-urls:
      type: object
      properties:
        oauth2_auth_url:
          type: string
          description: The OAuth 2.0 authorization URL
          example: 'https://api.catenda.com/oauth2/authorize'
        oauth2_token_url:
          type: string
          description: The OAuth 2.0 token URL
          example: 'https://api.catenda.com/oauth2/token'
        http_basic_supported:
          type: boolean
          description: Whether basic auth is supported
          example: false
        supported_oauth2_flows:
          type: array
          description: List of support OAuth 2.0 flows
          items:
            type: string
            example: authorization_code_grant
    foundation-current-user:
      type: object
      properties:
        id:
          type: string
          description: The user id
          example: john@doe.com
        name:
          type: string
          description: The user name
          example: John Doe
    ifc-classification:
      type: object
      properties:
        revisionId:
          type: string
          description: The id of the model revision
          example: 924809076a694255c489d236517a55da
        objectId:
          type: integer
          format: int64
          description: The object id of the classification
          example: 83749689
        ifcType:
          type: string
          description: The entity type of the classification
          example: IfcClassification
        attributes:
          type: object
          description: The attributes of the classification including the name and source
    ifc-classification-reference:
      type: object
      properties:
        revisionId:
          type: string
          description: The id of the model revision
          example: 924809076a694255c489d236517a55da
        objectId:
          type: integer
          format: int64
          description: The object id of the classification reference
          example: 317636045083
        ifcType:
          type: string
          description: The entity type of the classification reference
          example: IfcClassificationReference
        attributes:
          type: object
          description: The attributes of the classification reference including the name and identitifier
    ifc-classification-reference-relation:
      type: object
      properties:
        objectId:
          type: integer
          format: int64
          description: The object id of the classification reference
          example: 417236566151
        name:
          type: string
          description: The name of the classification reference
          example: Showers
        ifcType:
          type: string
          description: The entity type of the classification reference
          example: IfcClassificationReference
        attributes:
          type: object
          description: The attributes of the classification reference including the identifier
        products:
          description: The products related to the classification reference
          type: array
          items:
            type: object
            properties:
              url:
                type: string
                description: The product resource URL
                example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/products/417236566121'
              objectId:
                type: integer
                format: int64
                description: The object id of the product
                example: 417236566121
              globalId:
                type: string
                description: A 22 character IfcGloballyUniqueId
                example: 2z$4$ZtGH92fufpaUQ_65c
              name:
                type: string
                description: The name of the product
                example: 'Strainers-Carbon_Steel_Flanged:80 mm:3589667'
              ifcType:
                type: string
                description: The entity type of the product
                example: IfcFlowController
        classification:
          type: object
          description: The classification related to the classification reference
          properties:
            url:
              type: string
              description: The classification resource URL
              example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/classifications/417236566342'
            objectId:
              type: integer
              format: int64
              description: The object id of the classification
              example: 417236566342
            name:
              type: string
              description: The name of the classification
              example: Uniformat
            ifcType:
              type: string
              description: The entity type of the classification
              example: IfcClassification
    ifc-classification-relations:
      type: object
      properties:
        objectId:
          type: integer
          format: int64
          description: The object id of the classification
          example: 317236045075
        name:
          type: string
          description: The name of the classification
          example: Uniformat
        ifcType:
          type: string
          description: The entity type of the classification
          example: IfcClassification
        classificationReferences:
          type: array
          description: The classification references related to the classification
          items:
            type: object
            properties:
              url:
                type: string
                description: The classification reference resource URL
                example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/classification_references/317636045083'
              objectId:
                type: integer
                format: int64
                description: The object id of the classification reference
                example: 317636045083
              name:
                type: string
                description: The name of the classification reference
                example: Showers
              ifcType:
                type: string
                description: The entity type of the classification reference
                example: IfcClassificationReference
              attributes:
                type: object
                description: The attributes of the classification reference including the identifier
    ifc-field:
      type: object
      properties:
        field:
          type: string
          description: The name of the field
          example: objectId
        type:
          type: integer
          format: string
          description: The type of the field
          example: string
        measureType:
          type: string
          description: The measure type of the field
          example: length
          nullable: true
    ifc-group-relation:
      type: object
      properties:
        objectId:
          type: integer
          format: int64
          description: The object id of the group
          example: 317236464192
        globalId:
          type: string
          description: A 22 character IfcGloballyUniqueId
          example: 5Db9ZjqSKLKf3kfFSB$pnK
        name:
          type: string
          description: The name of the group
          example: 'Model Group:bal 3:5053794'
        ifcType:
          type: string
          description: The entity type of the group
          example: IfcGroup
        products:
          type: array
          description: The products related to the group
          items:
            type: object
            properties:
              url:
                type: string
                description: The product resource URL
                example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/products/417235853289'
              objectId:
                type: integer
                format: int64
                description: The object id of the product
                example: 417235853289
              globalId:
                type: string
                description: A 22 character IfcGloballyUniqueId
                example: 9dYMac7Ar51vpH7fe7CB7F
              name:
                type: string
                description: The name of the product
                example: null
                nullable: true
              ifcType:
                type: string
                description: The entity type of the product
                example: IfcWall
        children:
          type: array
          description: The related child groups
          items:
            type: object
            properties:
              url:
                type: string
                description: The group resource URL
                example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/products/417235853289'
              objectId:
                type: integer
                format: int64
                description: The object id of the group
                example: 417235853289
              globalId:
                type: string
                description: A 22 character IfcGloballyUniqueId
                example: 9dYMac7Ar51vpH7fe7CB7F
              name:
                type: string
                description: The name of the group
                example: null
                nullable: true
              ifcType:
                type: string
                description: The entity type of the group
                example: IfcGroup
        ownerHistory:
          type: object
          description: The owner history related to the group
          properties:
            url:
              type: string
              description: The owner history resource URL
              example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/ownerhistory/217235853093'
            objectId:
              type: integer
              format: int64
              description: The object id of the owner history
              example: 217235853093
            name:
              type: string
              description: The name of the owner history
              example: null
              nullable: true
            ifcType:
              type: string
              description: The entity type of the owner history
              example: IfcOwnerHistory
        parent:
          type: object
          description: The related parent group
          properties:
            url:
              type: string
              description: The group resource URL
              example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/products/417235853289'
            objectId:
              type: integer
              format: int64
              description: The object id of the group
              example: 417235853289
            globalId:
              type: string
              description: A 22 character IfcGloballyUniqueId
              example: 9dYMac7Ar51vpH7fe7CB7F
            name:
              type: string
              description: The name of the group
              example: null
              nullable: true
            ifcType:
              type: string
              description: The entity type of the group
              example: IfcGroup
    ifc-group:
      type: object
      properties:
        revisionId:
          type: string
          description: The id of the model revision
          example: 924809076a694255c489d236517a55da
        objectId:
          type: integer
          format: int64
          description: The object id of the group
          example: 417236464138
        ifcType:
          type: string
          description: The entity type of the group
          example: IfcGroup
        ifcSchema:
          type: string
          description: The IFC schema of the model revision
          example: IFC2X3
        attributes:
          type: object
          description: The attributes of the group including the name and global id
    ifc-layer-relation:
      type: object
      properties:
        objectId:
          type: integer
          format: int64
          description: The object id of the layer
          example: 417236997413
        name:
          type: string
          description: The name of the layer
          example: S-STRS-____-OTLN
        ifcType:
          type: string
          description: The entity type of the layer
          example: IfcPresentationLayerAssignment
        products:
          type: array
          description: The products related to the layer
          items:
            type: object
            properties:
              url:
                type: string
                description: The product resource URL
                example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/products/617236039783'
              objectId:
                type: integer
                format: int64
                description: The object id of the product
                example: 617236039783
              globalId:
                type: string
                description: A 22 character IfcGloballyUniqueId
                example: 5YznyLUif7kPKJZOIB9Nkf
              name:
                type: string
                description: The name of the product
                example: 'Stair:Monobloc PMR:6036293'
              ifcType:
                type: string
                description: The entity type of the product
                example: IfcStair
    ifc-layer:
      type: object
      properties:
        revisionId:
          type: string
          description: The id of the model revision
          example: 924809076a694255c489d236517a55da
        objectId:
          type: integer
          format: int64
          description: The object id of the layer
          example: 417236997303
        ifcType:
          type: string
          description: The entity type of the layer
          example: IfcPresentationLayerAssignment
        attributes:
          type: object
          description: The attributes of the layer including name
    ifc-material:
      type: object
      properties:
        objectId:
          type: integer
          format: int64
          description: The object id of the material
          example: 217235939073
        attributes:
          type: object
          description: The attributes of the material including the name
        ifcSchema:
          type: string
          description: The IFC schema of the model revision
          example: IFC2X3
        ifcType:
          type: string
          description: The entity type of the material
          example: IfcMaterialLayerSet
    ifc-owner-history:
      type: object
      properties:
        revisionId:
          type: string
          description: The id of the model revision
          example: 924809076a694255c489d236517a55da
        objectId:
          type: integer
          format: int64
          description: The object id of the owner history
          example: 217235853033
        ifcType:
          type: string
          description: The entity type of the owner history
          example: IfcOwnerHistory
        attributes:
          type: object
          description: The attributes of the owner history including creation date and user
    ifc-product-relation:
      type: object
      properties:
        objectId:
          type: integer
          format: int64
          description: The object id of the product
          example: 317235853293
        globalId:
          type: string
          description: A 22 character IfcGloballyUniqueId
          example: 4qyyLM4ZzFQuLbRaVZ1xKE
        name:
          type: string
          description: The name of the product
          example: 'Basic Wall:0-LBA:1328157'
        ifcType:
          type: string
          description: The entity type of the product
          example: IfcWallStandardCase
        children:
          type: array
          description: The child products related to the product according to the containment hierarchy
          items:
            type: object
            properties:
              url:
                type: string
                description: The product resource URL
                example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/products/317235853294'
              objectId:
                type: integer
                format: int64
                description: The object id of the product
                example: 317235853294
              globalId:
                type: string
                description: A 22 character IfcGloballyUniqueId
                example: 3PhkPD2_j2ouX4hJTk7FKE
              name:
                type: string
                description: The name of the product
                example: 2F
              ifcType:
                type: string
                description: The entity type of the product
                example: IfcBuildingStorey
        parent:
          type: object
          description: The parent product related to the product according to the containment hierarchy
          properties:
            url:
              type: string
              description: The product resource URL
              example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/products/317235853294'
            objectId:
              type: integer
              format: int64
              description: The object id of the product
              example: 317235853294
            globalId:
              type: string
              description: A 22 character IfcGloballyUniqueId
              example: 3PhkPD2_j2ouX4hJTk7FKE
            name:
              type: string
              description: The name of the product
              example: 2F
            ifcType:
              type: string
              description: The entity type of the product
              example: IfcBuildingStorey
        type:
          type: object
          description: The type related to the product
          properties:
            url:
              type: string
              description: The type resource URL
              example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/types/317235940695'
            objectId:
              type: integer
              format: int64
              description: The object id of the type
              example: 317235940695
            globalId:
              type: string
              description: A 22 character IfcGloballyUniqueId
              example: 3qd5RL4ZTA7w3kEKe
            name:
              type: string
              description: The name of the type
              example: 'Basic Wall:0-LBA'
            ifcType:
              type: string
              description: The entity type of the type
              example: IfcWallType
        systems:
          type: array
          description: The system groups related to the product
          items:
            type: object
            properties:
              url:
                type: string
                description: The group resource URL
                example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/products/417235853289'
              objectId:
                type: integer
                format: int64
                description: The object id of the group
                example: 417235853289
              globalId:
                type: string
                description: A 22 character IfcGloballyUniqueId
                example: 9dYMac7Ar51vpH7fe7CB7F
              name:
                type: string
                description: The name of the group
                example: null
                nullable: true
              ifcType:
                type: string
                description: The entity type of the group
                example: IfcSystem
        zones:
          type: array
          description: The zone groups related to the product
          items:
            type: object
            properties:
              url:
                type: string
                description: The group resource URL
                example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/products/417235853289'
              objectId:
                type: integer
                format: int64
                description: The object id of the group
                example: 417235853289
              globalId:
                type: string
                description: A 22 character IfcGloballyUniqueId
                example: 9dYMac7Ar51vpH7fe7CB7F
              name:
                type: string
                description: The name of the group
                example: null
                nullable: true
              ifcType:
                type: string
                description: The entity type of the group
                example: IfcZone
        groups:
          type: array
          description: The groups related to the product
          items:
            type: object
            properties:
              url:
                type: string
                description: The group resource URL
                example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/products/417235853289'
              objectId:
                type: integer
                format: int64
                description: The object id of the group
                example: 417235853289
              globalId:
                type: string
                description: A 22 character IfcGloballyUniqueId
                example: 9dYMac7Ar51vpH7fe7CB7F
              name:
                type: string
                description: The name of the group
                example: null
                nullable: true
              ifcType:
                type: string
                description: The entity type of the group
                example: IfcGroup
        layers:
          type: array
          description: The layers related to the product
          items:
            type: object
            properties:
              url:
                type: string
                description: The layer resource URL
                example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/layers/'
              objectId:
                type: integer
                format: int64
                description: The object id of the layer
                example: 217236997495
              name:
                type: string
                description: The name of the layer
                example: A-WALL-____-OTLN
              ifcType:
                type: string
                description: The entity type of the layer
                example: IfcPresentationLayerAssignment
        classificationReferences:
          type: array
          description: The classification references related to the product
          items:
            type: object
            properties:
              url:
                type: string
                description: The classification reference resource URL
                example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/classification_references/317636045083'
              objectId:
                type: integer
                format: int64
                description: The object id of the classification reference
                example: 317636045083
              name:
                type: string
                description: The name of the classification reference
                example: Showers
              ifcType:
                type: string
                description: The entity type of the classification reference
                example: IfcClassificationReference
              attributes:
                type: object
                description: The attributes of the classification reference including the identifier
        ownerHistory:
          type: object
          description: The owner history related to the product
          properties:
            url:
              type: string
              description: The owner history resource URL
              example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/ownerhistory/617235853043'
            objectId:
              type: integer
              format: int64
              description: The object id of the owner history
              example: 617235853043
            name:
              type: string
              description: The name of the owner history
              example: null
              nullable: true
            ifcType:
              type: string
              description: The entity type of the owner history
              example: IfcOwnerHistory
    ifc-product:
      type: object
      properties:
        objectId:
          type: integer
          format: int64
          description: The object id of the product
          example: 73749689
        ifcType:
          type: string
          description: The entity type of the product
          example: IfcWall
        attributes:
          type: object
          description: The attributes of the product
        revisionId:
          type: string
          description: The id of the model revision
          example: 924809076a694255c489d236517a55da
        propertySets:
          type: object
          description: Map of property sets specific to this product ocurrence. The key is the name of the property set.
          additionalProperties:
            $ref: '#/components/schemas/ifc-property-set'
        quantitySets:
          type: object
          description: Map of quantity sets specific to this product ocurrence. The key is the name of the quantity set.
          additionalProperties:
            $ref: '#/components/schemas/ifc-quantity-set'
        materials:
          type: array
          items:
            $ref: '#/components/schemas/ifc-material'
        type:
          $ref: '#/components/schemas/ifc-type'
    ifc-property-set:
      type: object
      properties:
        revisionId:
          type: string
          description: The id of the model revision
          example: 924809076a694255c489d236517a55da
        objectId:
          type: integer
          format: int64
          description: The object id of the property set
          example: 12345678
        ifcType:
          type: string
          description: The entity type of the property set
          example: IfcPropertySet
        ifcSchema:
          type: string
          description: The IFC schema of the model revision
          example: IFC2X3
        attributes:
          type: object
          description: The attributes of the property set including name and global id
        properties:
          type: object
          description: Set of named properties
          example:
            Width:
              ifcType: IfcPropertySingleValue
              nominalValue:
                ifcType: IfcLengthMeasure
                type: number
                value: '5'
                unit: m
    ifc-quantity-set:
      type: object
      description: ''
      properties:
        revisionId:
          type: string
          description: The id of the model revision
          example: 924809076a694255c489d236517a55da
        objectId:
          type: integer
          format: int64
          description: The object id of the quantity set
          example: 12345678
        ifcType:
          type: string
          description: The entity type of the quantity set
          example: IfcQuantitySet
        ifcSchema:
          type: string
          description: The IFC schema of the model revision
          example: IFC2X3
        attributes:
          type: object
          description: The attributes of the quantity set including name and global id
        quantities:
          type: object
          description: Set of named quantities
          example:
            GrossArea:
              ifcType: IfcQuantityArea
              value:
                type: number
                ifcType: IfcAreaMeasure
                value: 15
                unit: m²
    ifc-type-relation:
      type: object
      properties:
        objectId:
          type: integer
          format: int64
          description: The object id of the type
          example: 317235939074
        globalId:
          type: string
          description: A 22 character IfcGloballyUniqueId
          example: 4bJZO1Wyv3kBqbZkwgAALf
        name:
          type: string
          description: The name of the type
          example: 'Basic Wall:0-LBA'
        ifcType:
          type: string
          description: The entity type of the type
          example: IfcWallType
        products:
          type: array
          description: The related products
          items:
            type: object
            properties:
              url:
                type: string
                description: The product resource URL
                example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/products/717235939038'
              objectId:
                type: integer
                format: int64
                description: The object id of the product
                example: 717235939038
              globalId:
                type: string
                description: A 22 character IfcGloballyUniqueId
                example: 6K4519Zt51AQBUMqG6OuG1
              name:
                type: string
                description: The name of the product
                example: 'Basic Wall:0-LBA:1328157'
              ifcType:
                type: string
                description: The entity type of the product
                example: IfcWall
        ownerHistory:
          type: object
          properties:
            url:
              type: string
              description: The owner history resource URL
              example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/ifc/ownerhistory/217235853093'
            objectId:
              type: integer
              format: int64
              description: The object id of the owner history
              example: 217235853093
            name:
              type: string
              description: The name of the owner history
              example: null
              nullable: true
            ifcType:
              type: string
              description: The entity type of the owner history
              example: IfcOwnerHistory
    ifc-type:
      type: object
      properties:
        revisionId:
          type: string
          description: The id of the model revision
          example: 924809076a694255c489d236517a55da
        objectId:
          type: integer
          format: int64
          description: The object id of the type
          example: 75749589
        ifcType:
          type: string
          description: The entity type of the type
          example: IfcWallType
        attributes:
          type: object
          description: The attributes of the type including name and predefined type
        propertySets:
          type: object
          description: Map of property sets common to all ocurrences of this type. The key is the name of the property set.
          additionalProperties:
            $ref: '#/components/schemas/ifc-property-set'
        quantitySets:
          type: object
          description: Map of quantity sets common to all ocurrences of this type. The key is the name of the quantity set.
          additionalProperties:
            $ref: '#/components/schemas/ifc-quantity-set'
        materials:
          type: array
          items:
            $ref: '#/components/schemas/ifc-material'
    ifc-value:
      type: object
      properties:
        ifcType:
          type: string
          description: The entity type of the value
          example: IfcInteger
        type:
          type: string
          example: integer
        unit:
          type: string
          example: m
        value:
          oneOf:
            - type: boolean
              example: true
            - type: number
              example: 1
            - type: integer
              example: 1
            - type: string
              example: value
            - type: array
              items:
                $ref: '#/components/schemas/ifc-product'
      example:
        ifcType: IfcInteger
        type: integer
        value: 1
        unit: m
    import-status:
      type: object
      properties:
        id:
          type: string
          description: Id of the import process
          example: c9549c4c4e214538a2b327815cfe99f3
        createdAt:
          type: string
          description: Timestamp of when import process was initiated
          example: '2024-05-30T15:08:00Z'
        status:
          type: string
          description: 'Current import processing status, valid values are "processing", "success" or "failed"'
          enum:
            - processing
            - success
            - failed
          example: processing
    label-group:
      type: object
      properties:
        id:
          type: string
          description: Id of the label group
          example: 357t0ccc8f74719096c734de18fc6512
        name:
          type: string
          description: Name of the label group
          example: Group name
    label:
      type: object
      properties:
        id:
          type: string
          description: Id of the label
          example: 397t0ccc8f74619096c738de15dc6512
        name:
          type: string
          description: Name of the label
          example: Label 1
        color:
          type: string
          description: Valid RGB hexadecimal color of the label
          example: '#6aa84f'
        group:
          $ref: '#/components/schemas/label-group'
        deleted:
          type: boolean
          description: Soft deletion state of the label
          example: false
    library:
      type: object
      description: |
        A library represents an object collection.

        Types of libraries that are supported contain either documents, links, embedded values or classifications.
      properties:
        id:
          type: string
          description: 'A unique identifier for a library, represented as compacted UUID using 32 hexadecimal characters'
          example: 954803076a694255b959d236517b55da
        name:
          type: string
          description: 'The name of the library, limited to 256 characters'
          example: Library Name
        type:
          type: string
          description: 'The type of the library, valid values are "document", "link", "embedded_value" or "classification"'
          enum:
            - document
            - link
            - embedded_value
            - classification
          example: document
        createdBy:
          $ref: '#/components/schemas/user'
    library-item-association:
      type: object
      properties:
        globalId:
          type: string
          description: A 22 character IfcGloballyUniqueId.
          example: 2_TmT90tD0x9tJSTsyTb1J
        createdAt:
          type: string
          description: The date and time the association was created.
          example: '2023-12-09T10:07:56Z'
        user:
          $ref: '#/components/schemas/user'
    library-item-classification:
      type: object
      properties:
        id:
          type: string
          description: 'A unique identifier for a library item, represented as compacted UUID using 32 hexadecimal characters.'
          example: tttbe1ce36ce4b4c37f7060c76d241e7
        libraryId:
          type: string
          description: Id of the library that the item belongs to
          example: 9f71c88b7d7942ffa316c7a450c89358
        name:
          type: string
          description: The name of the library item
          example: Library item 1
        type:
          type: string
          description: 'Type of the library item, valid values are "embedded_value"'
          enum:
            - embedded_value
          example: embedded_value
        parentId:
          type: string
          description: |
            A unique identifier for the parent of the library item. 

            Represented as compacted UUID using 32 hexadecimal characters.

            If no parent is present, the value is null.
          example: 502b06247f744b7492fd1a44e386f21e
          nullable: true
        classification:
          type: object
          properties:
            identification:
              type: string
              description: Identification of the classification
              example: A1
            description:
              type: string
              description: Description of the classification
              example: Classification description
        deleted:
          type: boolean
          description: Deletion status of the library item
          example: false
    library-item-classification-create:
      type: object
      properties:
        name:
          type: string
          description: The name of the library item
          example: Library item 1
        type:
          type: string
          description: 'Type of the library item, value must be set to "classification"'
          example: classification
          enum:
            - classification
        parentId:
          type: string
          description: |
            A unique identifier for the parent of the library item. 

            Represented as compacted UUID using 32 hexadecimal characters.

            If no parent is present, the value is null.
          example: 502b06247f744b7492fd1a44e386f21e
          nullable: true
        classification:
          type: object
          properties:
            identification:
              type: string
              description: Identification of the classification
              example: A1
            description:
              type: string
              description: Description of the classification
              example: Classification description
    library-item-document:
      type: object
      properties:
        id:
          type: string
          description: 'A unique identifier for a library item, represented as compacted UUID using 32 hexadecimal characters.'
          example: tttbe1ce36ce4b4c37f7060c76d241e7
        libraryId:
          type: string
          description: Id of the library that the item belongs to
          example: 9f71c88b7d7942ffa316c7a450c89358
        name:
          type: string
          description: The name of the library item
          example: Library item 1
        type:
          type: string
          description: |
            Type of the document library item, valid values are:
              - document
              - folder
          enum:
            - document
            - folder
          example: document
        parentId:
          type: string
          description: |
            A unique identifier for the parent of the library item. 

            Represented as compacted UUID using 32 hexadecimal characters.

            If no parent is present, the value is null.
          example: 502b06247f744b7492fd1a44e386f21e
          nullable: true
        document:
          oneOf:
            - $ref: '#/components/schemas/file'
            - $ref: '#/components/schemas/folder'
        deleted:
          type: boolean
          description: Deletion status of the library item
          example: false
    library-item-document-create:
      type: object
      properties:
        name:
          type: string
          description: The name of the folder
          example: Folder name 1
        type:
          type: string
          description: 'The type of document, value must be set to "folder"'
          example: folder
          enum:
            - folder
        parentId:
          type: string
          description: |
            A unique identifier for the parent of the library item. 

            Represented as compacted UUID using 32 hexadecimal characters.

            If no parent is present, the value is null.
          example: 502b06247f744b7492fd1a44e386f21e
          nullable: true
        document:
          properties:
            type:
              type: string
              description: Value is folder
              example: folder
    library-item-document-file-revision:
      type: object
      properties:
        id:
          type: string
          description: Id of the revision
          example: h4c21c0e89774c8e92f42959c73561yh
        parentId:
          type: string
          description: |
            A unique identifier for the parent of the library item. 

            Represented as compacted UUID using 32 hexadecimal characters.

            If no parent is present, the value is null.
          nullable: true
        version:
          type: number
          description: Version of the revision
          example: 9
        extendedVersion:
          type: object
          description: Extended version of the revision
          properties:
            major:
              type: number
              description: Major version of the revision
              example: 1
            minor:
              type: string
              description: Minor version of the revision
              example: 1
              nullable: true
        name:
          type: string
          description: File name of the revision
          example: File.txt
        createdAt:
          type: string
          description: The date and time the revision was created in ISO 8601 format
          example: 2023-03-01T11:52:45.000Z
        size:
          type: number
          description: Size of the file in bytes
          example: 3745
        createdBy:
          $ref: '#/components/schemas/user'
        additionalFormats:
          type: array
          description: Additional formats available for the file revision
          items:
            type: object
            properties:
              size:
                type: number
                description: Size of the file in bytes
                example: 7147
              mediaType:
                type: string
                description: Media type of the additional format file
                example: application/xod
        downloadFileName:
          type: string
          description: Filename on disk
          example: File-1.txt
    library-item-document-token:
      type: object
      properties:
        token:
          type: string
          description: 'The token value, valid for one hour.'
          example: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpdGVtLWlkIjoiZTc3NjU5YjliZTQzNDhkZDg1NjZiMWU3YmIwYmZkZjgiLCJsaWJyYXJ5LWlkIjoiNzZhZDFhYThjNmNiNDE1YTgxZTE0ZGVkNGU2M2Y3ZmUiLCJ1c2VyLWlkIjoiMjU1NGJiZDctMDkxZC00ZWVjLWIzMTMtOTI5OGZlNDE4YjQ5IiwidHlwZSI6ImxpYnJhcnktaXRlbSIsInByb2plY3QtaWQiOiIyYTA4OGJjZC0wOGZhLTQzOGEtODI1MS0yZDkxYjlhNTk3YTIiLCJjbGllbnQtaWQiOiI1bVBESFh6NFNJRHJ3VmYiLCJleHAiOjF3MTM5NzQ3NDF9.MJ67ENsOItZJybEYt7Yjes7AkWRuUXrT8_eWvQk5w98
        url:
          type: string
          description: A time limited URL to download the document.
          example: 'https://api.catenda.com/v2/download?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpdGVtLWlkIjoiZTc3NjU5YjliZTQzNDhkZDg1NjZiMWU3YmIwYmZkZjgiLCJsaWJyYXJ5LWlkIjoiNzZhZDFhYThjNkNiNDE1YTgxZTE0ZGVkNGU2M2Y3ZmUiLCJ1c2VyLWlkIjoiMjU1NGJiZDctMDkxZC00ZWVjLWIzMTMtOTI5OGZlNDE4YjQ5IiwidHlwZSI6ImxpYnJhcnktaXRlbSIsInByb2plY3QtaWQiOiIyYTA4OGJjZC0wOGZhLTQzOGEtODI1MS0yZDkxYjlhNTk3YTIiLCJjbGllbnQtaWQiOiI1bVBESFh6NFNJRHJ3VmYiLCJleHAiOjE3MTM5NzQ3NDF9.MJ67ENsOItZJybEYt7Yjes7AkWRuUXrT8_eWvQk5w98'
    library-item-embedded_value:
      type: object
      properties:
        id:
          type: string
          description: 'A unique identifier for a library item, represented as compacted UUID using 32 hexadecimal characters.'
          example: tttbe1ce36ce4b4c37f7060c76d241e7
        libraryId:
          type: string
          description: Id of the library that the item belongs to
          example: 9f71c88b7d7942ffa316c7a450c89358
        name:
          type: string
          description: The name of the library item
          example: Library item 1
        type:
          type: string
          description: 'Type of the library item, valid values are "embedded_value"'
          enum:
            - embedded_value
          example: embedded_value
        parentId:
          type: string
          description: |
            A unique identifier for the parent of the library item. 

            Represented as compacted UUID using 32 hexadecimal characters.

            If no parent is present, the value is null.
          example: 502b06247f744b7492fd1a44e386f21e
          nullable: true
        deleted:
          type: boolean
          description: Deletion status of the library item
          example: false
    library-item-link:
      type: object
      properties:
        id:
          type: string
          description: 'A unique identifier for a library item, represented as compacted UUID using 32 hexadecimal characters.'
          example: tttbe1ce36ce4b4c37f7060c76d241e7
        libraryId:
          type: string
          description: Id of the library that the item belongs to
          example: 9f71c88b7d7942ffa316c7a450c89358
        name:
          type: string
          description: The name of the library item
          example: Library item 1
        type:
          type: string
          description: 'Type of the library item, valid values are "link"'
          enum:
            - link
          example: link
        parentId:
          type: string
          description: |
            A unique identifier for the parent of the library item. 

            Represented as compacted UUID using 32 hexadecimal characters.

            If no parent is present, the value is null.
          example: 502b06247f744b7492fd1a44e386f21e
          nullable: true
        link:
          type: object
          properties:
            url:
              type: string
              description: The URL of the link
              example: 'https://www.example.com'
        deleted:
          type: boolean
          description: Deletion status of the library item
          example: false
    library-item-link-create:
      type: object
      properties:
        name:
          type: string
          description: The name of the library item
          example: Library item 1
        type:
          type: string
          description: 'Type of the library item, value must be set to "link"'
          example: link
          enum:
            - link
        link:
          type: object
          properties:
            url:
              type: string
              description: The URL of the link
              example: 'https://www.example.com'
    latitude-longitude:
      type: object
      description: Latitude and longitude
      properties:
        latitude:
          type: number
          description: 'Latitude, in degrees'
          example: 59.913600296798755
        longitude:
          type: number
          description: 'Longitude, in degrees'
          example: 10.644988059866593
      required:
        - latitude
        - longitude
    member:
      type: object
      properties:
        role:
          type: string
          description: |
            Valid values are:
              - owner
              - administrator
              - member
          enum:
            - owner
            - administrator
            - member
          example: member
        user:
          $ref: '#/components/schemas/user'
    model-revision-status:
      type: object
      properties:
        callbackUri:
          type: string
          description: The callback URI specified when uploading the revision
          example: 'https://example.com'
        filename:
          type: string
          description: The filename specified when uploading the revision
          example: ARC.ifc
        id:
          type: string
          description: 'A unique identifier for the status, represented as compacted UUID using 32 hexadecimal characters'
          example: fcbb72736862483f89d44890d47ec112
        model:
          $ref: '#/components/schemas/model'
        processing:
          type: object
          description: Represents the processing status of a pending revision
          properties:
            progress:
              type: number
              description: Processing progress as a number between 0.0 and 1.0
              example: 0
            status:
              type: string
              description: 'Valid values are "waiting", "processing", "success" or "failure"'
              enum:
                - waiting
                - processing
                - success
                - failure
              example: waiting
            error:
              $ref: '#/components/schemas/error'
        revision:
          $ref: '#/components/schemas/model-revision'
        user:
          $ref: '#/components/schemas/user'
    model-revision:
      type: object
      description: |
        Represents a revision of a Model.

        A new revision is created by uploading an IFC model.
      properties:
        comment:
          type: string
          description: 'Text describing the revision, limited to 64K characters'
          example: Revision description
        createdAt:
          type: string
          description: The date and time the revision was created in ISO 8601 format
          example: 2016-09-26T14:45:20.000Z
        extendedVersion:
          type: object
          description: Extended version of the revision
          properties:
            major:
              type: number
              description: Major version of the revision
              example: 1
            minor:
              type: string
              description: Minor version of the revision
              example: 1
              nullable: true
        id:
          type: string
          description: 'A unique identifier for the revision, represented as compacted UUID using 32 hexadecimal characters.'
          example: 924809076a694255c489d236517a55da
        model:
          $ref: '#/components/schemas/model'
        user:
          $ref: '#/components/schemas/user'
        version:
          type: integer
          description: A number that is incremented for each new revision of a model
          example: 1
    model:
      type: object
      description: |
        Represents an IFC model as a set of Revisions.

        A large building project can contain multiple IFC models.

        They are often divided by domain (architecture, electrical, etc.)
      properties:
        id:
          type: string
          description: 'A unique identifier for a model, represented as compacted UUID using 32 hexadecimal characters'
          example: 47024671cbd642a9c7c84808d4d509f5
        name:
          type: string
          description: 'The name of the model, limited to 512 characters'
          example: Model name
    project:
      type: object
      description: |
        All data in Catenda belongs to a project and has a single owner.
      properties:
        createdAt:
          type: string
          description: The date and time the project was created in ISO 8601 format
          example: 2016-09-26T14:45:05.000Z
        description:
          type: string
          description: 'A short text describing the project, limited to 1024 characters'
          example: Project description
        id:
          type: string
          description: 'A unique identifier for the project, represented as compacted UUID using 32 hexadecimal characters'
          example: af2d8af0fa54465b89bf26dd3d92cfd0
        imageUrl:
          type: string
          description: The URL for the project cover picture
          example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/image'
        name:
          type: string
          description: 'The name of the project, limited to 512 characters'
          example: Project name
        owner:
          $ref: '#/components/schemas/user'
        siteLocation:
          $ref: '#/components/schemas/latitude-longitude'
          description: 'The approximate location (latitude, longitude in WGS 84) of the project'
        updatedAt:
          type: string
          description: The date and time of the last change to the project in ISO 8601 format
          example: 2016-09-26T14:45:40.000Z
    scim-user:
      type: object
      properties:
        active:
          type: string
          description: Active state of the user
          example: true
        schemas:
          type: array
          description: List of schemas
          items:
            type: string
            description: The schema value
            example: 'urn:ietf:params:scim:schemas:core:2.0:User'
        id:
          type: string
          description: 'A unique identifier for the user, represented as compacted UUID using 32 hexadecimal characters'
          example: 2819c223-7f76-453a-919d-413861904646
        meta:
          type: object
          description: Meta object for the user
          properties:
            resourceType:
              type: string
              description: Resource type
              example: User
            created:
              type: string
              description: The date and time the user was created in ISO 8601 format
              example: '2011-08-01T18:29:49.793Z'
            lastModified:
              type: string
              description: The date and time the user was last modified in ISO 8601 format
              example: '2011-08-01T18:29:49.793Z'
            location:
              type: string
              description: The location of the user
              example: 'https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646'
            version:
              type: string
              description: The version of the user
              example: W\/\"f250dd84f0671c3\"
        userName:
          type: string
          description: Human readable user name
          example: john_smith@example.com
        externalId:
          type: string
          description: Identifier of the original source where the user data is taken from
          example: john_smith
        name:
          type: object
          description: Name object for the user
          properties:
            formatted:
              type: string
              description: Formatted representation of the user name
              example: JohnSmith
            familyName:
              type: string
              description: The family name of the user
              example: Smith
            givenName:
              type: string
              description: The given name of the user
              example: John
        emails:
          type: array
          description: List of emails for the user
          items:
            type: object
            properties:
              value:
                type: string
                description: Value of the email address
                example: john_smith@example.com
              primary:
                type: boolean
                description: Whether is the primary email address for the user
                example: true
              type:
                type: string
                description: Category of the email
                example: work
    topic:
      type: object
      properties:
        guid:
          type: string
          description: Represented as compacted UUID using 32 hexadecimal characters
          example: 18d0273d-e15c-4924-97b3-6f47b233eebe
        server_assigned_id:
          type: string
          description: Human readable identifier unique to this topic board
          example: '23'
        topic_type:
          type: string
          description: Name of topic type
          example: Info
        topic_status:
          type: string
          description: Name of topic status
          example: Open
        title:
          type: string
          description: Title of topic
          example: Topic 1
        labels:
          type: array
          description: List of topic labels
          items:
            type: string
          example:
            - Electrical
            - Basement
        creation_date:
          type: string
          description: Topic creation date
          example: '2024-05-08T11:28:35.317+0000'
        creation_author:
          type: string
          description: Topic creation author
          example: john@doe.com
        modified_date:
          type: string
          description: Topic last modified date
          example: '2024-05-08T14:29:41.199+0000'
        modified_author:
          type: string
          description: Topic last modified author
          example: john@doe.com
        assigned_to:
          type: string
          description: Topic assigned to user
          example: john@doe.com
        stage:
          type: string
          description: Topic milestone
          example: Phase one
        description:
          type: string
          description: Topic description
          example: The topic description
        due_date:
          type: string
          description: Topic due date
          example: '2024-05-02T10:00:00.000+0000'
        authorization:
          type: object
          description: Local variations from the global authorization defaults for this resource
          properties:
            topic_actions:
              type: array
              description: List of topic actions
              items:
                type: string
              example:
                - createComment
                - createViewpoint
                - update
                - delete
                - updateRelatedTopics
                - updateDocumentReferences
            topic_status:
              type: array
              description: List of topic board status names
              items:
                type: string
              example:
                - Open
                - Closed
        bimsync_issue_number:
          type: integer
          description: Unique auto incremented number assigned when a new topic is created
          example: 23
        bimsync_creation_author:
          type: object
          description: Topic created by Catenda user
          properties:
            user:
              $ref: '#/components/schemas/user-ref'
            importedBy:
              $ref: '#/components/schemas/user-ref'
              nullable: true
        bimsync_viewpoints:
          type: array
          description: List of topic viewpoints
          items:
            type: object
            properties:
              guid:
                type: string
                description: Represented as compacted UUID using 32 hexadecimal characters
                example: 52959166-dbd2-44eb-81bb-74f955f30e0f
              hasSnapshot:
                type: boolean
                description: Whether viewpoint has any snapshot
                example: true
        bimsync_points:
          type: array
          description: List of topic points
          items:
            type: object
            properties:
              x:
                type: number
                description: X coordinate of the point
                example: 100
              'y':
                type: number
                description: Y coordinate of the point
                example: 100
              z:
                type: number
                description: Z coordinate of the point
                example: 100
              models:
                type: array
                description: List of models
                items:
                  type: object
                  properties:
                    modelRef:
                      type: string
                      description: Id of the model
                      example: 11a9bb2984ee4a999875c4cd9560f319
                    revisionRef:
                      type: string
                      description: Id of the model revision
                      example: eed6ae36-5fe0-4f1f-89da-fba8efcf8b97
                    ref:
                      type: string
                      description: A reference for this model revision relation
                      example: 827f4b14-af0c-44e5-90ce-4e58fa79d7b3
              id:
                type: string
                description: Id of the point
                example: a08af3d4-edca-49ed-adf7-107a4a481188
        bimsync_requester:
          type: object
          description: Topic requested by Catenda user
          properties:
            user:
              $ref: '#/components/schemas/user-ref'
              nullable: true
            team:
              $ref: '#/components/schemas/user-ref'
              nullable: true
        bimsync_document_references:
          type: array
          description: List of document references
          items:
            type: object
            properties:
              guid:
                type: string
                description: Id of the document reference
                example: 86962ff9-b5fe-4537-996f-8dc15461422c
              document_guid:
                type: string
                description: Id of the document
                example: a8644754-b646-4f67-a767-a1fef44a51c9
        bimsync_comments_size:
          type: integer
          description: Count of topic comments
          example: 3
        bimsync_assigned_to:
          type: object
          description: Topic assigned to Catenda user
          properties:
            user:
              $ref: '#/components/schemas/user-ref'
              nullable: true
            team:
              $ref: '#/components/schemas/user-ref'
              nullable: true
        bimsync_labels:
          type: array
          description: List of topic labels
          items:
            $ref: '#/components/schemas/label'
        bimsync_custom_fields:
          type: array
          description: List of topic custom fields
          items:
            $ref: '#/components/schemas/custom-field'
    topic-board:
      type: object
      properties:
        id:
          type: string
          description: 'Id of a topic board, represented as compacted UUID using 32 hexadecimal characters.'
          example: 324404076a694255b589d236517a55da
        name:
          type: string
          description: Name of the topic board.
          example: Board name
        description:
          type: string
          description: Description of the topic board.
          example: Topic board description
        customFields:
          type: array
          description: List of custom fields.
          items:
            $ref: '#/components/schemas/custom-field'
        customFieldInstances:
          type: array
          description: List of custom fields currently configured in the topic board.
          items:
            $ref: '#/components/schemas/custom-field-instance'
    topic-board-extensions:
      type: object
      properties:
        topic_type:
          type: array
          description: List of topic types
          items:
            type: string
            example: Info
        topic_status:
          type: array
          description: List of topic statuses
          items:
            type: string
            example: Open
        topic_label:
          type: array
          description: List of topic labels
          items:
            type: string
            example: Electrical
        priority:
          type: array
          description: List of topic priorities
          items:
            type: string
          example:
            - High
            - Normal
            - Low
        users:
          type: array
          description: List of BCF users with access to the topic board
          items:
            type: string
            example: john@doe.com
        stage:
          type: array
          description: List of topic milestones
          example: Phase one
        project_actions:
          type: array
          description: List of topic board actions
          items:
            type: string
            example: createTopic
        topic_actions:
          type: array
          description: List of topic actions
          items:
            type: string
            example: update
        comment_actions:
          type: array
          description: List of topic comment actions
          items:
            type: string
            example: update
        bimsync_milestones:
          type: array
          description: List of topic milestones
          items:
            type: object
            properties:
              id:
                type: string
                description: Id of the milestone
                example: 1da81d1409ec43ecbe4f9e55a79236d9
              name:
                type: string
                description: Name of the milestone
                example: Phase one
    topic-board-status:
      type: object
      properties:
        id:
          type: string
          description: Id of the status
          example: 629a9b4e36ac4e68a05aedbcb21f53c0
        name:
          type: string
          description: Name of the status
          example: Open
        color:
          type: string
          description: Color associated with the status
          example: '#DD7E6B'
        type:
          type: string
          description: 'Type of the status, valid values are "open", "closed" and "candidate"'
          enum:
            - open
            - closed
            - candidate
          example: open
        unlinked:
          type: boolean
          description: Set when the status is not known to the topic board
    topic-board-type:
      type: object
      properties:
        id:
          type: string
          description: Id of the type
          example: 18b2a2e7509a4b528dbbd9d312fd45e6
        name:
          type: string
          description: Name of the type
          example: Info
        color:
          type: string
          description: Color associated with the type
          example: '#3D85C6'
        unlinked:
          type: boolean
          description: Set when the type is not known to the topic board
    topic-board-user:
      type: object
      properties:
        name:
          type: string
          description: Name of the user
          example: John Doe
        id:
          type: string
          description: Id of the user
          example: john@doe.com
        unlinked:
          type: boolean
          description: Set when the user is not known to the topic board
    topic-event:
      type: object
      properties:
        topic_guid:
          type: string
          description: Id of topic where event occurred
          example: 18d0273d-e15c-4924-97b3-6f47b233eebe
        date:
          type: string
          description: Date when event occurred
          example: '2023-11-15T12:10:17.000+0000'
        author:
          type: string
          description: User name that triggered the event
          example: john@doe.com
        actions:
          type: array
          description: List of actions involved in the event
          items:
            type: object
            properties:
              type:
                type: string
                description: |
                  The type of action, valid values are:
                    - assigned_to_removed
                    - assigned_to_updated
                    - description_removed
                    - description_updated
                    - due_date_removed
                    - due_date_updated
                    - label_added
                    - label_removed
                    - priority_removed
                    - priority_updated
                    - status_updated
                    - title_updated
                    - topic_created
                    - type_updated
                enum:
                  - assigned_to_removed
                  - assigned_to_updated
                  - description_removed
                  - description_updated
                  - due_date_removed
                  - due_date_updated
                  - label_added
                  - label_removed
                  - priority_removed
                  - priority_updated
                  - status_updated
                  - title_updated
                  - topic_created
                  - type_updated
                example: title_updated
              value:
                type: string
                description: Value associated with event if applicable
                example: 629a9b4e36ac4e68a05aedbcb21f53c0
    topic-label:
      type: object
      properties:
        id:
          type: string
          description: Id of the label
          example: 397t0ccc8f74619096c738de15dc6512
        name:
          type: string
          description: Name of the label
          example: Label 1
        color:
          type: string
          description: Valid RGB hexadecimal color of the label
          example: '#6aa84f'
        deleted:
          type: boolean
          description: Soft deletion state of the label
          example: false
    topic-object:
      type: object
      properties:
        ifcGuid:
          type: string
          description: IFC guid of the linked object
          example: 3BY5alwwL00QXHtY2qmHYZ
    topic-point:
      type: object
      properties:
        id:
          type: string
          description: Represented as compacted UUID using 32 hexadecimal characters
          example: db3cffcf-2217-4503-8e51-ab2740d5043a
        x:
          type: number
          description: X coordinate of the point
          example: 100
        'y':
          type: number
          description: Y coordinate of the point
          example: 100
        z:
          type: number
          description: Z coordinate of the point
          example: 100
        models:
          type: array
          description: List of models
          items:
            type: object
            properties:
              modelRef:
                type: string
                description: Id of the model
                example: 11a9bb2984ee4a999875c4cd9560f319
              revisionRef:
                type: string
                description: Id of the model revision
                example: eed6ae36-5fe0-4f1f-89da-fba8efcf8b97
              ref:
                type: string
                description: A reference for this model revision relation
                example: 827f4b14-af0c-44e5-90ce-4e58fa79d7b3
    user:
      type: object
      description: |
        Represents a User, Organization or Team.

        A User is someone with a Catenda account, commonly representing a person.

        An Organization represents a company, project organization or an application. Organizations do not have a username and cannot sign in to Catenda.

        A Team represents a group of users within a project. Teams do not have a username and cannot sign in to Catenda.
      properties:
        id:
          type: string
          description: Represented as compacted UUID using 32 hexadecimal characters
          example: 524809076a694255b989d236517a55da
        name:
          type: string
          description: 'The name of the user, limited to 128 characters'
          example: John Doe
        username:
          type: string
          description: |
            The handle the user identifies with. 

            Commonly the username will be in email address format. Usernames are unique but subject to change, we recommend using the id field to reference users instead.

            If the user represents an organization or a team the value is always null.

            Limited to 50 characters.
          example: john@doe.com
          nullable: true
        email:
          type: string
          description: Email address of the User
          example: john@doe.com
        createdAt:
          type: string
          description: The date and time the user was created in ISO 8601 format
          example: 2016-09-20T14:55:22.000Z
        avatarUrl:
          type: string
          description: The URL for the user avatar
          example: 'https://api.catenda.com/v2/avatar/397t0ccd8f74516096c738de15dc6512'
        type:
          type: string
          description: |
            The type of user, valid values are:
              - user
              - organization
              - team
          enum:
            - user
            - organization
            - team
          example: user
    user-ref:
      type: object
      properties:
        ref:
          type: string
          description: Id of the user
          example: 524809076a694255b989d236517a55da
        email:
          type: string
          description: Email of the user
          example: john@doe.com
        name:
          type: string
          description: Name of the user
          example: John Doe
    viewer-2d-token:
      type: object
      description: 'Represents a time limited access token to grant access to viewer data, valid for one hour.'
      properties:
        revisions:
          type: array
          description: The set of revisions the token grants access to
          items:
            $ref: '#/components/schemas/model-revision'
        token:
          type: string
          description: 'The token value, valid for one hour.'
          example: ba16ee5e36054019917210c4559bcca0
        url:
          type: string
          description: URL used to load models within a viewer instance
          example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/viewer2d/geometry?token=ba16ee5e36054019917210c4559bcca0'
    viewer-3d-token:
      type: object
      description: 'Represents a time limited access token to grant access to viewer data, valid for one hour.'
      properties:
        revisions:
          type: array
          description: The set of revisions the token grants access to
          items:
            $ref: '#/components/schemas/model-revision'
        token:
          type: string
          description: 'The token value, valid for one hour.'
          example: ba16ee5e36054019917210c4559bcca0
        url:
          type: string
          description: URL used to load models within a viewer instance
          example: 'https://api.catenda.com/v2/projects/67551168422040148d8ae198a321494d/viewer3d/data?token=ba16ee5e36054019917210c4559bcca0'
    viewpoint:
      type: object
      properties:
        guid:
          type: string
          description: Represented as compacted UUID using 32 hexadecimal characters
          example: 52959166-dbd2-44eb-81bb-74f955f30e0f
        orthogonal_camera:
          type: object
          description: Details of orthogonal camera if applicable
          properties:
            camera_view_point:
              type: object
              description: Location of the camera
              properties:
                x:
                  type: number
                  description: X coordinate of camera location
                  example: 100
                'y':
                  type: number
                  description: Y coordinate of camera location
                  example: 100
                z:
                  type: number
                  description: Z coordinate of camera location
                  example: 100
            camera_direction:
              type: object
              description: Direction of the camera
              properties:
                x:
                  type: number
                  description: X coordinate of camera direction
                  example: 100
                'y':
                  type: number
                  description: Y coordinate of camera direction
                  example: 100
                z:
                  type: number
                  description: Z coordinate of camera direction
                  example: 100
            camera_up_vector:
              type: object
              description: Normalized vector describing the camera orientation
              properties:
                x:
                  type: number
                  description: X coordinate of vector
                  example: 0
                'y':
                  type: number
                  description: Y coordinate of vector
                  example: 0
                z:
                  type: number
                  description: Z coordinate of vector
                  example: 1
            view_to_world_scale:
              type: number
              description: The scale factor between the camera and the scene
              example: 14
            aspect_ratio:
              type: number
              description: Aspect ratio of the scene
              example: 1
        perspective_camera:
          type: object
          description: Details of perspective camera if applicable
          properties:
            camera_view_point:
              type: object
              description: Location of the camera
              properties:
                x:
                  type: number
                  description: X coordinate of camera location
                  example: 100
                'y':
                  type: number
                  description: Y coordinate of camera location
                  example: 100
                z:
                  type: number
                  description: Z coordinate of camera location
                  example: 100
            camera_direction:
              type: object
              description: Direction of the camera
              properties:
                x:
                  type: number
                  description: X coordinate of camera direction
                  example: 100
                'y':
                  type: number
                  description: Y coordinate of camera direction
                  example: 100
                z:
                  type: number
                  description: Z coordinate of camera direction
                  example: 100
            camera_up_vector:
              type: object
              description: Normalized vector describing the camera orientation
              properties:
                x:
                  type: number
                  description: X coordinate of vector
                  example: 0
                'y':
                  type: number
                  description: Y coordinate of vector
                  example: 0
                z:
                  type: number
                  description: Z coordinate of vector
                  example: 1
            field_of_view:
              type: number
              description: Field of view of the camera in degrees
              example: 60
            aspect_ratio:
              type: number
              description: Aspect ratio of the scene
              example: 1
        lines:
          type: array
          description: List of graphical lines
          items:
            type: object
            properties:
              start_point:
                type: object
                description: Start point of the line
                properties:
                  x:
                    type: number
                    description: X coordinate of start point
                    example: 100
                  'y':
                    type: number
                    description: Y coordinate of start point
                    example: 100
                  z:
                    type: number
                    description: Z coordinate of start point
                    example: 100
              end_point:
                type: object
                description: End point of the line
                properties:
                  x:
                    type: number
                    description: X coordinate of end point
                    example: 200
                  'y':
                    type: number
                    description: Y coordinate of end point
                    example: 200
                  z:
                    type: number
                    description: Z coordinate of end point
                    example: 200
        clipping_planes:
          type: array
          description: List of clipping planes
          items:
            type: object
            properties:
              location:
                type: object
                description: Location of the clipping plane
                properties:
                  x:
                    type: number
                    description: X coordinate of location
                    example: 100
                  'y':
                    type: number
                    description: Y coordinate of location
                    example: 100
                  z:
                    type: number
                    description: Z coordinate of location
                    example: 100
              direction:
                type: object
                description: Direction of the clipping plane
                properties:
                  x:
                    type: number
                    description: X coordinate of direction
                    example: 0
                  'y':
                    type: number
                    description: Y coordinate of direction
                    example: 0
                  z:
                    type: number
                    description: Z coordinate of direction
                    example: 1
        bitmaps:
          type: array
          description: List of embedded images
          items:
            type: object
            properties:
              guid:
                type: string
                description: Id of the bitmap
                example: 8c2f8818-e413-49d4-8978-7f7d95d2b27e
              bitmap_type:
                type: string
                description: 'Type of the bitmap, valid values are "jpg" and "png"'
                enum:
                  - jpg
                  - png
                example: png
              location:
                type: object
                description: Location of the center of the bitmap
                properties:
                  x:
                    type: number
                    description: X coordinate of location
                    example: 100
                  'y':
                    type: number
                    description: Y coordinate of location
                    example: 100
                  z:
                    type: number
                    description: Z coordinate of location
                    example: 100
              normal:
                type: object
                description: Normalized vector describing the bitmap direction
                properties:
                  x:
                    type: number
                    description: X coordinate of vector
                    example: 0
                  'y':
                    type: number
                    description: Y coordinate of vector
                    example: 1
                  z:
                    type: number
                    description: Z coordinate of vector
                    example: 0
              up:
                type: object
                description: Normalized vector describing the bitmap orientation
                properties:
                  x:
                    type: number
                    description: X coordinate of vector
                    example: 0
                  'y':
                    type: number
                    description: Y coordinate of vector
                    example: 0
                  z:
                    type: number
                    description: Z coordinate of vector
                    example: 1
              height:
                type: number
                description: Height of bitmap in the scene
                example: 20
        snapshot:
          type: object
          properties:
            snapshot_type:
              type: string
              description: 'Format of snapshot, valid values are "jpg" and "png"'
              enum:
                - jpg
                - png
              example: png
        authorization:
          type: object
          properties:
            viewpoint_actions:
              type: array
              description: List of viewpoint actions
              items:
                type: string
              example:
                - delete
    viewpoint-coloring:
      type: object
      properties:
        coloring:
          type: array
          description: List of components
          items:
            type: object
            properties:
              color:
                type: string
                description: Color of the components
                example: '#dddddd'
              components:
                type: array
                items:
                  type: object
                  properties:
                    ifc_guid:
                      type: string
                      description: IFC guid of the component
                      example: 3BY5alwwL00QXHtY2qmHYZ
                    originating_system:
                      description: Originating system of the selection
                      type: string
                    authoring_tool_id:
                      type: string
                      description: Id of the selection in the authoring tool
                      nullable: true
    viewpoint-model:
      type: object
      properties:
        modelRef:
          type: string
          description: Id of the model
          example: 11a9bb2984ee4a999875c4cd9560f319
        revisionRef:
          type: string
          description: Id of the model revision
          example: eed6ae36-5fe0-4f1f-89da-fba8efcf8b97
    viewpoint-selection:
      type: object
      properties:
        selection:
          type: array
          description: List of selections
          items:
            type: object
            properties:
              ifc_guid:
                type: string
                description: IFC guid of the selection
                example: 3BY5alwwL00QXHtY2qmHYZ
              originating_system:
                description: Originating system of the selection
                type: string
              authoring_tool_id:
                type: string
                description: Id of the selection in the authoring tool
                nullable: true
    viewpoint-visibility:
      type: object
      properties:
        visibility:
          type: object
          properties:
            default_visibility:
              type: boolean
              description: 'Visibility of exception components, default is false'
              example: true
            exceptions:
              type: array
              description: Exception components
              items:
                type: object
                properties:
                  ifc_guid:
                    type: string
                    description: IFC guid of the component
                    example: 3BY5alwwL00QXHtY2qmHYZ
                  originating_system:
                    description: Originating system of the component
                    type: string
                  authoring_tool_id:
                    type: string
                    description: Id of the component in the authoring tool
                    nullable: true
            view_setup_hints:
              type: object
              properties:
                spaces_visible:
                  type: boolean
                  description: 'Visibility of spaces, default is false'
                  example: true
                space_boundaries_visible:
                  type: boolean
                  description: 'Visibility of space boundaries, default is false'
                  example: true
                openings_visible:
                  type: boolean
                  description: 'Visibility of openings, default is false'
                  example: true
    webhook-subscription:
      type: object
      description: Represents the subscription to an event with an associated callback.
      properties:
        id:
          type: string
          description: 'A unique identifier for a Webhook, represented as compacted UUID using 32 hexadecimal characters'
          example: 57d5457e09d64380af75da94ed96557h
        target_url:
          type: string
          description: The URL to be called when the event occurs
          example: 'https://hooks.zapier.com/hooks/catch/1028857/a8w0or/'
        createdAt:
          type: string
          description: Creation date of the Webhook
          example: '2019-02-13T14:15:18Z"'
        state:
          type: string
          description: |
            The state of the Webhook.

            Valid values are: 
              - ENABLED
              - DISABLED_GONE
              - DISABLED_TOO_MANY_FAILURES
              - DISABLED_BY_USER
        failureCount:
          type: number
          description: The number of times the Webhook has failed
          example: 0
        event:
          type: string
          description: |
            The event that triggers the callback URL.

            Valid values are: 
              - issue.created
              - issue.deleted
              - issue.modified
              - issue.status.changed
              - library.document.revision.published
              - model.created
              - revision.created
          example: issue.created
  securitySchemes:
    Bearer:
      type: http
      scheme: bearer
      bearerFormat: AccessToken
