Skip to main content

AutoAssembler Python SDK

AutoAssembler is C-Infinity's foundational AI for assembly process planning: read a CAD assembly, analyze its geometry, motion and production logic, and turn that into manufacturing process plans, diff analysis, DFA analysis, work instructions and more. This package is the official Python client for the AutoAssembler API. From a script or a notebook you can:

  • Upload a CAD assembly (STEP, PVZ) and get a processed Assembly back.
  • Plan it: create a process plan, assign parts to stations, let the planner work out the assembly sequence, then validate that every station is physically buildable.
  • Diff two revisions of an assembly and adapt an existing plan to the new one.

Status: 0.x. The surface may still change between minor releases; see Versioning. The v4 API is stable, except the operations under client.alpha.

Documentation

Installation

pip install autoassembler        # or: uv add autoassembler

Requires Python 3.12+. The only runtime dependencies are httpx, pydantic>=2.5 and typing-extensions.

Authentication

Create an API key in the AutoAssembler app under Settings → API keys → Create API key, then either pass it explicitly, set AA_TOKEN, or log in interactively once:

from autoassembler import AutoAssembler

client = AutoAssembler(token="aa_...")     # explicit (CI, scripts)
client = AutoAssembler()                   # reads AA_TOKEN, or the token stored by login()
import autoassembler
_ = autoassembler.login()   # confirm in your browser; stores the token for 30 days

login() stores tokens in ~/.config/autoassembler/credentials.json; logout() forgets them. login() also returns the token: assign its result as above to avoid displaying it in a notebook or interactive shell. Do not commit credentials or include them in reports. logout() removes the local copy; it does not revoke the token on the server. Pass base_url= to both login() and AutoAssembler() for anything but https://app.autoassembler.com, including your own deployment.

Quickstart

Use your own CAD files in place of the example filenames below; no CAD data is bundled. These calls upload the files to the configured service and create resources in your account.

from autoassembler import AutoAssembler

client = AutoAssembler()

# Upload two revisions of a design. Processing overlaps on the server; wait for both.
v1, v2 = (op.result() for op in (client.assemblies.upload("gearbox_v1.step"),
                                  client.assemblies.upload("gearbox_v2.step")))

# Plan v1 from scratch: one station with every part, plan it, check it is buildable.
mpp = client.planning.create_mpp(v1, name="Gearbox v1")   # a manufacturing process plan
station = mpp.add_station("Final assembly")
outcome = mpp.plan(station).result()           # complete | partial | failed
verdict = mpp.validate(station).result()       # feasible | infeasible
print(outcome[station].status, verdict[station].status, mpp.viewer_url)

# What changed in v2, and v1's plan carried over to it.
diff = client.assemblies.diff(v1, v2).result()
mpp_v2 = client.planning.adapt(mpp, v2, diff=diff).result()

Runnable versions of each step, with flags and error handling, live in examples/.

How the SDK is organized

  • Concepts. Assembly (a CAD file the service knows) and ProcessPlan (a manufacturing process plan for one assembly, made of Stations).

  • Actions. upload, diff, plan, validate, evaluate_dfa, adapt. An action that creates a resource lives on a namespace (client.assemblies.upload, client.planning.adapt); an action that acts on an existing resource lives on that resource's handle (mpp.plan(station)).

  • Waiting. Anything that outlives its HTTP request returns an Operation[T]. op.result(timeout=None) polls with backoff and returns T, or raises OperationFailed / OperationTimeout; op.done() checks without blocking. Start several, then collect:

    ops = [client.assemblies.upload(p) for p in cad_files]
    assemblies = [op.result() for op in ops]
    

Outcomes use the document's own words: a station's planning status is pending, complete, partial (a usable partial plan) or failed; its validation verdict is feasible or infeasible, with the issues behind it; an assembly is processing, ready or failed.

The full API: client.api

The curated layer above is built on a client generated from the v4 OpenAPI spec, available as client.api (client.api.assemblies.get_status(...), client.api.planning.get_mpp(...)). Use it when the vocabulary above does not cover what you need, and tell us what was missing. Every endpoint is documented in reference.md.

An operation can be resumed by name from any process: client.operations.handle("operations/…").result().

Errors

Failure Raised as
The server answered with an error status ApiError (status_code, body, headers), or a typed subclass: BadRequestError, UnauthorizedError, ForbiddenError, NotFoundError, ConflictError, UnprocessableEntityError
The response did not match the expected schema ParsingError (not an ApiError)
No response at all (DNS, connection, timeout) httpx.HTTPError subclasses
A long-running operation failed or was cancelled OperationFailed (code, message, operation)
A long-running operation did not finish in time OperationTimeout (a TimeoutError)

Async

AsyncAutoAssembler currently exposes the generated client (client.api) and client.operations; the curated assemblies / planning namespaces arrive on the async client in a later release under the same names, with asyncio.gather as the natural way to run work in parallel.

Advanced

  • Timeouts. 60 s per request by default: AutoAssembler(timeout=20.0) or request_options={"timeout": 5} per call.
  • Retries. Requests that fail with 408, 409, 429 or 5xx are retried twice with backoff; request_options={"max_retries": 0} turns it off per call.
  • Your own httpx client, for proxies or transports: AutoAssembler(httpx_client=httpx.Client(proxy="http://...")).
  • Raw responses. client.api.<namespace>.with_raw_response.<method>() returns headers and status alongside the parsed data.
  • Context managers. with AutoAssembler() as client: closes the connection pool.

Compatibility

API AutoAssembler v4 (autoassembler.API_VERSION == "v4"). The client is generated from the published v4 OpenAPI spec; fern/openapi/source.json records which revision.
Servers https://app.autoassembler.com by default; any AutoAssembler deployment that serves the v4 API via base_url=.

Versioning

The package follows semantic versioning, independently of the API version. While 0.x, a minor release may change the surface and a patch release only fixes; from 1.0, breaking changes need a major release and removals are deprecated for one minor release first. Each release's notes are on GitHub Releases.

Alpha

Operations the API offers before they are stable sit under client.alpha (also client.api.alpha): today client.alpha.jobs and client.alpha.planning.apply_ops. They are outside these guarantees: any release may change or remove them. An operation that becomes stable moves out of alpha, to its namespace's usual place.

Contributing

Bug reports and feature requests: issues. Most of python/src/autoassembler/ is generated from the OpenAPI spec and regenerated on every API change, so changes there cannot be merged directly; the hand-written layer (client.py, operation.py, _custom/), the examples and the docs welcome pull requests. See CONTRIBUTING.md and, for maintainers, DEVELOPMENT.md.

License

MIT © C-Infinity.

Metadata

Release files for autoassembler 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for autoassembler 0.3.1
File Size Uploaded Provenance
autoassembler-0.3.1.tar.gz 130.6 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for autoassembler 0.3.1
File Interpreter ABI Platform
autoassembler-0.3.1-py3-none-any.whl Python 3 none any Details

Total release size: 319.1 kB

Release files / autoassembler-0.3.1.tar.gz

Download URL autoassembler-0.3.1.tar.gz
Size 130.6 kB
Tags Source
SHA-256 checksum
How to use checksums
43a363450ea3e2eb88d789573a4f133672a4438be927586ce214bc7b2dca272a
BLAKE2b-256 checksum
How to use checksums
cc99e18e149e17e72cd10dfbd34572c437f9744ef2b40b501178953e506d2e71
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Release files / autoassembler-0.3.1-py3-none-any.whl

Download URL autoassembler-0.3.1-py3-none-any.whl
Size 188.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c6380a4cd02bf5b3852c79f8f4226098c6465a8a3c810d10e03e96776fb3fea9
BLAKE2b-256 checksum
How to use checksums
d71e2c100265e245f1825ae8d3acc7b912313c4032df3f17b50dd712fd05a671
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

Security for autoassembler 0.3.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for autoassembler-0.3.1.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 9, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.3.1 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page