openapi: 3.1.0 info: title: Trimble Connect API description: >- The Trimble Connect API enables integration with Trimble's cloud-based construction collaboration platform. Provides access to project data, BIM models, document management, issues (BCF Topics), and team collaboration features for construction project management. Trimble Connect acts as the BIM collaboration hub integrating Tekla, SketchUp, and third-party tools. version: "2.0" contact: name: Trimble Developer Support url: https://developer.trimble.com license: name: Trimble Developer Terms url: https://www.trimble.com/legal/developer-terms servers: - url: https://app.connect.trimble.com/tc/api/2.0 description: Trimble Connect Production API security: - BearerAuth: [] tags: - name: BCF Topics description: Building Collaboration Format issue tracking - name: Files description: File and document management - name: Projects description: Project management - name: Users description: User and team management paths: /projects: get: operationId: listProjects summary: List projects description: Returns a list of Trimble Connect projects accessible to the authenticated user. tags: - Projects parameters: - name: includeDeleted in: query schema: type: boolean default: false - name: page in: query schema: type: integer default: 1 - name: pageSize in: query schema: type: integer default: 50 maximum: 100 responses: '200': description: List of projects content: application/json: schema: $ref: '#/components/schemas/ProjectListResponse' '401': description: Unauthorized post: operationId: createProject summary: Create a project description: Creates a new Trimble Connect project. tags: - Projects requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ProjectCreate' responses: '201': description: Project created content: application/json: schema: $ref: '#/components/schemas/Project' /projects/{projectId}: get: operationId: getProject summary: Get project details description: Returns detailed information for a specific project. tags: - Projects parameters: - $ref: '#/components/parameters/ProjectId' responses: '200': description: Project details content: application/json: schema: $ref: '#/components/schemas/Project' '404': description: Project not found patch: operationId: updateProject summary: Update a project description: Updates mutable project properties such as name, description, and status. tags: - Projects parameters: - $ref: '#/components/parameters/ProjectId' requestBody: content: application/json: schema: $ref: '#/components/schemas/ProjectUpdate' responses: '200': description: Project updated content: application/json: schema: $ref: '#/components/schemas/Project' /projects/{projectId}/files: get: operationId: listProjectFiles summary: List project files description: Returns files and folders within a project directory. tags: - Files parameters: - $ref: '#/components/parameters/ProjectId' - name: path in: query schema: type: string description: Parent folder path example: "/Models/Structural" - name: page in: query schema: type: integer default: 1 - name: pageSize in: query schema: type: integer default: 50 responses: '200': description: List of files content: application/json: schema: $ref: '#/components/schemas/FileListResponse' post: operationId: uploadFile summary: Upload a file to a project description: >- Uploads a file to the specified project folder. Supports BIM model files (IFC, RVT, SKP, NWD, NWC), drawings (PDF, DWG), and documents. tags: - Files parameters: - $ref: '#/components/parameters/ProjectId' requestBody: required: true content: multipart/form-data: schema: type: object required: - file properties: file: type: string format: binary description: File binary content path: type: string description: Target folder path description: type: string responses: '201': description: File uploaded content: application/json: schema: $ref: '#/components/schemas/File' /projects/{projectId}/files/{fileId}: get: operationId: getFile summary: Get file metadata description: Returns metadata for a specific file. tags: - Files parameters: - $ref: '#/components/parameters/ProjectId' - name: fileId in: path required: true schema: type: string responses: '200': description: File metadata content: application/json: schema: $ref: '#/components/schemas/File' /projects/{projectId}/topics: get: operationId: listBCFTopics summary: List BCF topics (issues) description: >- Returns BIM Collaboration Format (BCF) topics for a project. BCF topics represent issues, clashes, comments, and design queries tied to specific locations or objects in BIM models. tags: - BCF Topics parameters: - $ref: '#/components/parameters/ProjectId' - name: topicType in: query schema: type: string enum: [ISSUE, REQUEST_FOR_INFORMATION, CLASH, COMMENT, TASK] - name: topicStatus in: query schema: type: string enum: [OPEN, IN_PROGRESS, RESOLVED, CLOSED] - name: assignedTo in: query schema: type: string - name: page in: query schema: type: integer default: 1 responses: '200': description: List of BCF topics content: application/json: schema: $ref: '#/components/schemas/TopicListResponse' post: operationId: createBCFTopic summary: Create a BCF topic description: Creates a new BCF topic (issue) in the project. tags: - BCF Topics parameters: - $ref: '#/components/parameters/ProjectId' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/TopicCreate' responses: '201': description: Topic created content: application/json: schema: $ref: '#/components/schemas/Topic' /projects/{projectId}/topics/{topicGuid}: get: operationId: getBCFTopic summary: Get a BCF topic description: Returns details for a specific BCF topic. tags: - BCF Topics parameters: - $ref: '#/components/parameters/ProjectId' - name: topicGuid in: path required: true schema: type: string format: uuid responses: '200': description: BCF topic details content: application/json: schema: $ref: '#/components/schemas/Topic' put: operationId: updateBCFTopic summary: Update a BCF topic description: Updates a BCF topic status, assignee, or other fields. tags: - BCF Topics parameters: - $ref: '#/components/parameters/ProjectId' - name: topicGuid in: path required: true schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/TopicUpdate' responses: '200': description: Topic updated content: application/json: schema: $ref: '#/components/schemas/Topic' /projects/{projectId}/members: get: operationId: listProjectMembers summary: List project members description: Returns all users and their roles within a project. tags: - Users parameters: - $ref: '#/components/parameters/ProjectId' responses: '200': description: Project members content: application/json: schema: $ref: '#/components/schemas/MemberListResponse' components: securitySchemes: BearerAuth: type: http scheme: bearer bearerFormat: JWT description: Trimble Identity OAuth2 Bearer token parameters: ProjectId: name: projectId in: path required: true schema: type: string format: uuid description: Trimble Connect project UUID schemas: Project: type: object properties: id: type: string format: uuid name: type: string description: type: string status: type: string enum: [ACTIVE, ARCHIVED, DELETED] type: type: string enum: [CONSTRUCTION, INFRASTRUCTURE, ENGINEERING, OTHER] location: type: string createdAt: type: string format: date-time updatedAt: type: string format: date-time createdBy: type: string thumbnail: type: string format: uri memberCount: type: integer fileCount: type: integer ProjectCreate: type: object required: - name properties: name: type: string description: type: string type: type: string enum: [CONSTRUCTION, INFRASTRUCTURE, ENGINEERING, OTHER] location: type: string ProjectUpdate: type: object properties: name: type: string description: type: string status: type: string enum: [ACTIVE, ARCHIVED] location: type: string ProjectListResponse: type: object properties: projects: type: array items: $ref: '#/components/schemas/Project' totalCount: type: integer page: type: integer pageSize: type: integer File: type: object properties: id: type: string name: type: string path: type: string description: Full folder path fileType: type: string enum: [FILE, FOLDER] contentType: type: string description: MIME type size: type: integer description: File size in bytes version: type: integer createdAt: type: string format: date-time updatedAt: type: string format: date-time createdBy: type: string description: type: string downloadUrl: type: string format: uri description: Pre-signed download URL (time-limited) thumbnailUrl: type: string format: uri FileListResponse: type: object properties: files: type: array items: $ref: '#/components/schemas/File' totalCount: type: integer path: type: string Topic: type: object description: BCF topic (issue) in BIM Collaboration Format properties: guid: type: string format: uuid topicType: type: string enum: [ISSUE, REQUEST_FOR_INFORMATION, CLASH, COMMENT, TASK] topicStatus: type: string enum: [OPEN, IN_PROGRESS, RESOLVED, CLOSED] title: type: string description: type: string priority: type: string enum: [CRITICAL, HIGH, NORMAL, LOW] assignedTo: type: string description: User email or ID dueDate: type: string format: date label: type: string createdDate: type: string format: date-time modifiedDate: type: string format: date-time creationAuthor: type: string modifiedAuthor: type: string viewpoints: type: array items: type: object properties: guid: type: string format: uuid snapshotUrl: type: string format: uri referenceLinks: type: array items: type: string TopicCreate: type: object required: - title - topicType - topicStatus properties: title: type: string description: type: string topicType: type: string enum: [ISSUE, REQUEST_FOR_INFORMATION, CLASH, COMMENT, TASK] topicStatus: type: string enum: [OPEN, IN_PROGRESS] default: OPEN priority: type: string enum: [CRITICAL, HIGH, NORMAL, LOW] default: NORMAL assignedTo: type: string dueDate: type: string format: date label: type: string TopicUpdate: type: object properties: title: type: string description: type: string topicStatus: type: string enum: [OPEN, IN_PROGRESS, RESOLVED, CLOSED] priority: type: string enum: [CRITICAL, HIGH, NORMAL, LOW] assignedTo: type: string dueDate: type: string format: date TopicListResponse: type: object properties: topics: type: array items: $ref: '#/components/schemas/Topic' totalCount: type: integer Member: type: object properties: userId: type: string email: type: string format: email displayName: type: string role: type: string enum: [ADMIN, MEMBER, VIEWER] joinedAt: type: string format: date-time MemberListResponse: type: object properties: members: type: array items: $ref: '#/components/schemas/Member' totalCount: type: integer