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

# Check whether a Procore project is connected to Procore AI

> Reports whether Procore AI has a Datagrid teamspace bound to one Procore project. The caller must be able to open the project in Procore. `connected` uses the same rule as the project list: true when a non-deleted teamspace under the company's Datagrid account is bound to the project, false when the project is visible and no such teamspace exists.




## OpenAPI

````yaml get /procore/companies/{company_id}/projects/{project_id}/connection
openapi: 3.0.3
info:
  version: 0.1.1
  title: Datagrid API
  description: Datagrid API
servers:
  - url: https://api.datagrid.com/v1
security:
  - BearerAuth: []
paths:
  /procore/companies/{company_id}/projects/{project_id}/connection:
    get:
      tags:
        - Procore
      summary: Check whether a Procore project is connected to Procore AI
      description: >
        Reports whether Procore AI has a Datagrid teamspace bound to one Procore
        project. The caller must be able to open the project in Procore.
        `connected` uses the same rule as the project list: true when a
        non-deleted teamspace under the company's Datagrid account is bound to
        the project, false when the project is visible and no such teamspace
        exists.
      operationId: ProcoreAccess.retrieveProjectConnection
      parameters:
        - name: company_id
          in: path
          required: true
          description: The Procore company ID (digits only).
          schema:
            type: string
            pattern: ^[0-9]+$
        - name: project_id
          in: path
          required: true
          description: The Procore project ID (digits only).
          schema:
            type: string
            pattern: ^[0-9]+$
      responses:
        '200':
          description: Whether the project is connected to Procore AI
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProcoreProjectConnection'
        '400':
          description: '`company_id` or `project_id` is not a positive integer.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestError'
        '404':
          description: The project does not exist or the user cannot access it.
        '409':
          description: >-
            The user has no connected Procore session (`error` is
            `procore_not_connected`).
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProcoreNotConnectedError'
        '429':
          description: >-
            Rate limit exceeded. The request has been throttled because the rate
            limit for this endpoint has been reached. Check the `Retry-After`
            response header and retry after the specified number of seconds.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitError'
        '502':
          description: Procore did not return a usable response.
components:
  schemas:
    ProcoreProjectConnection:
      type: object
      required:
        - object
        - company_id
        - project_id
        - connected
      properties:
        object:
          type: string
          enum:
            - procore_project_connection
        company_id:
          type: string
        project_id:
          type: string
        connected:
          type: boolean
          description: |
            The same value the project list reports for this project.
    BadRequestError:
      type: object
      description: >-
        Returned when the request is invalid. For skill-related errors,
        `details.unresolved` lists each token that failed resolution with its
        reason.
      required:
        - error
        - message
        - status_code
      properties:
        status_code:
          type: integer
          description: The HTTP status code (400).
        error:
          type: string
          description: A machine-readable error code.
        message:
          type: string
          description: A human-readable error message.
        details:
          type: object
          description: Additional structured error details.
          properties:
            reason:
              type: string
              description: A short description of the validation failure.
            unresolved:
              type: array
              description: >-
                For skill resolution errors: the tokens that could not be
                resolved.
              items:
                type: object
                required:
                  - token
                  - reason
                properties:
                  token:
                    type: string
                    description: >-
                      The skill ID or slash key that could not be resolved,
                      exactly as supplied in the request.
                  reason:
                    type: string
                    enum:
                      - not-found
                      - disabled
                    description: >-
                      `not-found`: no skill reachable by this API key matches
                      the ID or slash key. Skills that exist but are out of
                      scope (user-scoped, or owned by another account) report
                      `not-found` as well. `disabled`: the skill is reachable
                      but has been disabled.
    ProcoreNotConnectedError:
      type: object
      required:
        - error
        - message
        - status_code
      properties:
        status_code:
          type: integer
          description: The HTTP status code (409).
        error:
          type: string
          enum:
            - procore_not_connected
          description: A machine-readable error code.
        message:
          type: string
          description: A human-readable error message.
    RateLimitError:
      type: object
      description: >-
        Returned when the rate limit is exceeded. Rate limits are enforced per
        teamspace, endpoint path, and HTTP method over a 60-second sliding
        window. Each endpoint may have its own limit — check the
        X-RateLimit-Limit response header for the effective value.
      required:
        - error
        - message
        - retryable
        - status_code
      properties:
        status_code:
          type: integer
          description: The HTTP status code (429).
        statusCode:
          type: integer
          deprecated: true
          description: Deprecated. Use status_code instead.
        error:
          type: string
          enum:
            - rate_limit_exceeded
          description: The error code identifying this as a rate limit error.
        message:
          type: string
          description: A human-readable error message.
        mitigation:
          type: string
          description: Suggested action to resolve the error.
        retryable:
          type: boolean
          description: Whether the request can be retried after a delay.
        details:
          type: object
          properties:
            reason:
              type: string
              description: A detailed explanation of why the rate limit was exceeded.
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer

````

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