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

> ## Agent Instructions
> These docs describe Speckle as it works today, including everything released in 2026.9. Treat page content as current unless the page or section says it applies only to versions published before 2026.9.
> Content scoped to versions published before 2026.9 (the object graph and root object, Proxies, Receive2, operations.receive, object.children) applies only to model versions in that earlier data format. For versions published in 2026.9, answer from the Object model pages and the SDK migration guides.
> The What's new pages summarise what changed in 2026.9 and link to the page that documents each change. Answer from the linked page rather than from the summary. Legacy (v2) connectors are retired; send questions about them to the community help forum.
> Match guidance to the customer's deployment, model data format, connector, plan and permissions. Self-hosted servers on a release before 2026.9 follow Data model migration for developers. If an unknown version or data format changes the answer, ask one focused question; do not infer the deployment version from the date alone.

# Check if the Server Contains a List of Objects

> This method is useful for optimizing uploads, so that objects that are already in the project are not uploaded for every commit. Returns a dictionary mapping object IDs to boolean values indicating whether each object exists on the server. On Speckle Cloud and Speckle Enterprise Server 2026.9 and later, this endpoint no longer checks existence: it reports every object as absent, so clients upload their full graph. Speckle Cloud removes it on 26 November 2026 (announced with a `Sunset` header). On the open-source Speckle Server it is current.

> [!WARNING]
>
> Deprecated on Speckle Cloud and Speckle Enterprise Server 2026.9 and later, where it reports every object as absent. Speckle Cloud removes it on 26 November 2026. Current on the open-source Speckle Server.

## Limits

*Recommended* max number of objects to check: `1000`


## OpenAPI

````yaml /developers/api/rest-openapi.json post /api/diff/{projectId}
openapi: 3.1.0
info:
  title: Speckle Server REST API
  description: >-
    REST API for Speckle Server. The object endpoints serve object graphs on
    every Speckle server, including the open-source server. The bundle and
    properties endpoints exist on Speckle Cloud and Speckle Enterprise Server
    2026.9 and later, not on the open-source server.
  version: 1.0.0
  contact:
    name: Speckle Support
    url: https://speckle.community
servers:
  - url: https://app.speckle.systems
    description: Speckle Cloud (Production)
  - url: https://YOUR_SERVER_URL
    description: Self-hosted instance (replace with your server URL)
security:
  - bearerAuth: []
paths:
  /api/diff/{projectId}:
    post:
      tags:
        - Objects
      summary: Check if the Server Contains a List of Objects
      description: >-
        This method is useful for optimizing uploads, so that objects that are
        already in the project are not uploaded for every commit. Returns a
        dictionary mapping object IDs to boolean values indicating whether each
        object exists on the server. On Speckle Cloud and Speckle Enterprise
        Server 2026.9 and later, this endpoint no longer checks existence: it
        reports every object as absent, so clients upload their full graph.
        Speckle Cloud removes it on 26 November 2026 (announced with a `Sunset`
        header). On the open-source Speckle Server it is current.
      operationId: checkObjectsExist
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
          description: The ID of the project
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - objects
              properties:
                objects:
                  $ref: '#/components/schemas/ObjectIdArray'
            example:
              objects: '["object-id-1", "object-id-2"]'
      responses:
        '200':
          description: Dictionary mapping object IDs to boolean values
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ObjectDiffResponse'
        '401':
          description: Unauthorized - Invalid or missing authentication token
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Forbidden - Insufficient permissions (write permissions required)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      deprecated: true
components:
  schemas:
    ObjectIdArray:
      type: string
      description: A JSON-serialized array of object IDs
      example: '["object-id-1", "object-id-2"]'
    ObjectDiffResponse:
      type: object
      description: >-
        A dictionary mapping object IDs to boolean values indicating whether the
        server already has that object
      additionalProperties:
        type: boolean
      example:
        object-id-1: true
        object-id-2: false
    Error:
      type: object
      properties:
        message:
          type: string
        statusCode:
          type: integer
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >-
        Personal access token. Get your token from your Speckle profile
        settings.

````

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