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
Assemblyback. - 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
- Check the Quickstart below, then the runnable scripts in
examples/. reference.md: every endpoint of the API as exposed byclient.api.- Release notes.
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) andProcessPlan(a manufacturing process plan for one assembly, made ofStations). -
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 returnsT, or raisesOperationFailed/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)orrequest_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
httpxclient, 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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| autoassembler-0.3.1.tar.gz | 130.6 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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 logSecurity 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.
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 logA 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.