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

# Get a Project's Latest Preview

> The preview of the project's newest version on any model. Public projects need no token; otherwise send a token with read access to the project. On Speckle Cloud and Speckle Enterprise Server, a token restricted to particular models or versions must also cover the version the preview comes from. The response is an image even when there is nothing to show: a project, model or version without a preview gets a placeholder PNG, and the first request for an object without a preview queues its render. While a render is queued, running, or failed, the placeholder carries `X-Preview-Error: true` and is not cached. Append `/{angle}` to pick another image of the same preview; see the endpoint's angle variant. Add `?postprocess=og` for a 1200×627 Open Graph image with the project name over the preview.



## OpenAPI

````yaml /developers/api/previews/preview-openapi.json get /preview/{streamId}
openapi: 3.1.0
info:
  title: Speckle Preview Service API
  description: >-
    Preview images and videos of Speckle projects, models, versions, and
    objects. The paths keep the server's original names: `streamId` is the
    project id, `branchName` the model name, and `commitId` the version id.
  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:
  /preview/{streamId}:
    get:
      tags:
        - Previews
      summary: Get a Project's Latest Preview
      description: >-
        The preview of the project's newest version on any model. Public
        projects need no token; otherwise send a token with read access to the
        project. On Speckle Cloud and Speckle Enterprise Server, a token
        restricted to particular models or versions must also cover the version
        the preview comes from. The response is an image even when there is
        nothing to show: a project, model or version without a preview gets a
        placeholder PNG, and the first request for an object without a preview
        queues its render. While a render is queued, running, or failed, the
        placeholder carries `X-Preview-Error: true` and is not cached. Append
        `/{angle}` to pick another image of the same preview; see the endpoint's
        angle variant. Add `?postprocess=og` for a 1200×627 Open Graph image
        with the project name over the preview.
      operationId: getProjectPreview
      parameters:
        - name: streamId
          in: path
          required: true
          schema:
            type: string
          description: The project id.
        - name: postprocess
          in: query
          required: false
          schema:
            type: string
            enum:
              - og
          description: >-
            `og` returns a 1200×627 Open Graph image with the project name over
            the preview.
      responses:
        '200':
          description: >-
            The preview: a PNG, or a WebM video for the `spin` key. A
            placeholder PNG when there is no preview yet.
          headers:
            X-Preview-Error:
              description: '`true` when the body is a placeholder.'
              schema:
                type: string
            X-Preview-Error-Code:
              description: >-
                `PREVIEW_NOT_FOUND` (no finished render yet) or
                `ANGLE_NOT_FOUND` (the preview has no such key).
              schema:
                type: string
          content:
            image/png:
              schema:
                type: string
                format: binary
            video/webm:
              schema:
                type: string
                format: binary
        '401':
          description: >-
            No valid token for a non-public project. Speckle Cloud and
            Enterprise Server answer with this status and a placeholder image;
            the open-source server answers 200 with an error image.
          content:
            image/png:
              schema:
                type: string
                format: binary
        '403':
          description: >-
            The token cannot read the project, or is restricted to other models
            or versions.
          content:
            image/png:
              schema:
                type: string
                format: binary
        '404':
          description: >-
            No such project. On Speckle Cloud and Enterprise Server, also an
            archived project or a missing preview file.
          content:
            image/png:
              schema:
                type: string
                format: binary
      security:
        - bearerAuth: []
        - {}
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        Personal access token with the `streams:read` scope. Only needed for
        private projects.

````

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