> ## 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.

# Upload a Batch of Objects

> Upload a batch of objects to a project. The batch is sent as multipart-encoded file content. Multiple batches can be sent in the same request as multiple files. On Speckle Cloud and Speckle Enterprise Server 2026.9 and later, this endpoint is deprecated: every response carries `Deprecation` and `Warning` headers, and it writes object graphs only. On the open-source Speckle Server it is current. To publish to Speckle Cloud, publish through ingestions instead.

> [!WARNING]
>
> Deprecated on Speckle Cloud and Speckle Enterprise Server 2026.9 and later, where it writes object graphs only. On Speckle Cloud, [publish through ingestions](https://docs.speckle.systems/developers/migration/publish-through-ingestions.md) instead. Current on the open-source Speckle Server.

## Notes

* The server accepts multiple batches as multiple files in the same call
* It's recommended to compress the batch with gzip and set the uploaded file `content_type` to `application/gzip`
* Otherwise, set it to `application/json`

## Limits

* Maximum size of each individual object: `10 MB` (large objects can be split into multiple objects using `chunkable` properties and `detachable` properties)
* Maximum size of each request: `50 MB` hard limit


## OpenAPI

````yaml /developers/api/rest-openapi.json post /objects/{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:
  /objects/{projectId}:
    post:
      tags:
        - Objects
      summary: Upload a Batch of Objects
      description: >-
        Upload a batch of objects to a project. The batch is sent as
        multipart-encoded file content. Multiple batches can be sent in the same
        request as multiple files. On Speckle Cloud and Speckle Enterprise
        Server 2026.9 and later, this endpoint is deprecated: every response
        carries `Deprecation` and `Warning` headers, and it writes object graphs
        only. On the open-source Speckle Server it is current. To publish to
        Speckle Cloud, publish through ingestions instead.
      operationId: uploadObjects
      parameters:
        - name: projectId
          in: path
          required: true
          schema:
            type: string
          description: The ID of the project
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              type: object
              properties:
                file:
                  type: string
                  format: binary
                  description: >-
                    JSON file containing an array of objects, optionally
                    gzip-compressed
          application/gzip:
            schema:
              type: string
              format: binary
              description: Gzip-compressed JSON file (recommended)
          application/json:
            schema:
              $ref: '#/components/schemas/ObjectArray'
      responses:
        '200':
          description: Objects uploaded successfully
        '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'
        '413':
          description: Payload too large - Request exceeds 50 MB limit
      deprecated: true
components:
  schemas:
    ObjectArray:
      type: array
      items:
        $ref: '#/components/schemas/SpeckleObject'
    Error:
      type: object
      properties:
        message:
          type: string
        statusCode:
          type: integer
    SpeckleObject:
      type: object
      description: A Speckle object
      properties:
        id:
          type: string
        speckle_type:
          type: string
        totalChildrenCount:
          type: integer
        numbers:
          type: array
          items:
            type: number
      example:
        id: 9b2cdb21da092dbd3558a4bc55b2cf7e
        speckle_type: Base
        totalChildrenCount: 0
        numbers:
          - 0.04667752874618203
          - 0.16370857295385177
          - 0.1008153029515465
  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.