Skip to main content

What You’ll Build

In this quickstart, you’ll learn how to:
  1. Authenticate with Speckle Server
  2. Create a project and model
  3. Send geometry data to Speckle
  4. Receive geometry data from Speckle
  5. Create a version (commit)
Let’s get started!

Prerequisites

1

Install specklepy

bash pip install specklepy
2

Set up authentication

Get a personal access token from your Speckle profile
(Avatar → Settings → Developer → Access Tokens)

Full Workflow

Step 1: Authentication

First, let’s authenticate with Speckle Server:
If this works, you’ll see your name printed!

Step 2: Create a Project

Projects are the top-level containers for your data:
If the workspace plan is already at your maximum project limit, you’ll need to delete some projects before creating a new one.
Projects replace what used to be called “Streams” in prior versions of Speckle.

Step 3: Create Geometry

Now let’s create some geometry objects:
Important: Sending geometry primitives (Point, Line, Mesh) directly will NOT make them visible in the 3D viewer! You must wrap them in a container object. This is why we use Base() below to group the geometry.
The Base class is the foundation of all Speckle objects. You can attach any properties to it dynamically! Wrapping geometry in Base ensures it’s visible in the 3D viewer.

Step 4: Send Data to Speckle

Use operations.send() to send your data:
The object_id is a unique hash that represents your data. You’ll use this to create a version. The hash is of the serialized data, not the object itself. Learn more about serialization.
Transports continue to use the v2 nomenclature of stream_id in place of project_id. This will likely be deprecated in the future.

Step 5: Create a Version

Versions capture a snapshot of your data:
Go to that URL to see your data in the 3D viewer!

Step 6: Receive Data

Now let’s receive the data back:
Why two steps?: Versions store metadata (author, timestamp, message) separately from the actual object data. This keeps version lists fast and lightweight. You only download the full data when you explicitly receive() it.
You’ve now completed your first full Speckle workflow with Python! 🎉

Complete Example

Here’s the complete script:

What’s Next?

Now that you understand the basics, explore more advanced topics:

Core Concepts

Learn about Projects, Models, Versions, and Transports

Working with Geometry

Explore all available geometry types

API Reference

Dive into the complete API documentation

Need Help?

Community Forum

Ask questions and get help

GitHub

View source code and report issues
Last modified on July 18, 2026