Tool assemblies API
List and retrieve tool assembly models. Export the full library as a Fusion 360 package.
Base path: /v1/organizations/:organization_id/tool_assemblies
Endpoints
Section titled “Endpoints”| Method | Path | Description |
|---|---|---|
GET |
/tool_assemblies |
List tool assembly models ready for export |
GET |
/tool_assemblies/:id |
Get a tool assembly model |
GET |
/tool_library/:vendor |
Export library as a package for the given vendor |
Tool assemblies are read-only via the API — there is no POST, PATCH, or DELETE route for this resource. Create and manage them in the application under Library → Tool Assemblies.
Tool assembly object
Section titled “Tool assembly object”{ "id": 42, "name": "Face Mill Ø80 — ADKT", "designation": "TA-042", "status": "released", "created_at": "2025-01-10T08:00:00Z", "updated_at": "2025-06-01T10:00:00Z", "category": { "id": 3, "name": "Face Mills", "code": "FM" }, "created_by": { "id": 7, "email": "user@example.com", "firstname": "Long", "lastname": "Han" }, "cutting_data": [ { "id": "b1e1f7a0-1c2d-4e3f-9a8b-7c6d5e4f3a2b", "material_id": 2, "name": "42CrMo4 — Face milling", "operation": "milling_face", "parameters": { "cutting_speed": 180, "feed_per_tooth": 0.12 }, "unit_system": "metric", "created_at": "2025-01-10T08:00:00Z", "updated_at": "2025-01-10T08:00:00Z" } ]}Note the identifying field is designation, not number. cutting_data[].parameters is a free-form JSON object — its keys depend on operation and aren’t fixed by the schema; treat it as an opaque bag of cutting parameters rather than a stable contract.
List behavior
Section titled “List behavior”GET /tool_assemblies returns only tool assemblies that:
- Have a
statusin the organization’s configured “tool library exportable” statuses — the “Central tool assemblies library” checkbox set (Draft/Released/Active/To archive/Archived) in Admin Center → Organizations → Preferences, an org-level preference (organizations.preferences["engineering"]["tool_library_exportable"]), not a fixed list of statuses. This is a separate axis from the tool assembly’s own release-pipelinestatus— the org decides what counts as “CAM-usable” independent of what the state machine calls “released” - Have
assets_builded: true(the 3D/STEP assets have finished processing)
A tool assembly that exists and is visible in the app UI may not appear here if either condition isn’t met yet.
GET /tool_assemblies/:id, unlike the list endpoint, has no such filter — it returns any of the organization’s tool assemblies by id, subject to the normal authorization scoping (see Authentication).
Export library
Section titled “Export library”GET /v1/organizations/:organization_id/tool_library/:vendor:vendor is currently only implemented for fusion (Autodesk Fusion 360’s tool library JSON format, built from the same status/assets filter as the list endpoint). Any other vendor value returns a 200 OK with a null body rather than an error — check for an empty/null response rather than relying on an error status. To connect Autodesk Fusion, see ToolingMetrics CAM Connect for Autodesk Fusion.
Examples
Section titled “Examples”# List all exportable tool assembliescurl "https://api.toolingmetrics.com/v1/organizations/12/tool_assemblies" \ -H "Authorization: Bearer YOUR_TOKEN"
# Get a specific tool assembly with cutting datacurl "https://api.toolingmetrics.com/v1/organizations/12/tool_assemblies/42" \ -H "Authorization: Bearer YOUR_TOKEN"
# Export the full library as a Fusion 360 packagecurl "https://api.toolingmetrics.com/v1/organizations/12/tool_library/fusion" \ -H "Authorization: Bearer YOUR_TOKEN" \ -o tool_library.jsonimport requestsimport json
BASE = "https://api.toolingmetrics.com/v1"HEADERS = {"Authorization": "Bearer YOUR_TOKEN"}
# Fetch all exportable tool assemblies and index them by designation for lookupassemblies = requests.get( f"{BASE}/organizations/12/tool_assemblies", headers=HEADERS,).json()
by_designation = {a["designation"]: a for a in assemblies}ta = by_designation.get("TA-042")if ta: print(f"{ta['name']} — status: {ta['status']}")
# Download the Fusion 360 library packagefusion_pkg = requests.get( f"{BASE}/organizations/12/tool_library/fusion", headers=HEADERS,).json()
if fusion_pkg: with open("tool_library.json", "w") as f: json.dump(fusion_pkg, f, indent=2) print("Fusion 360 library exported.")else: print("Nothing exported — no exportable tool assemblies, or the vendor value isn't supported.")Common errors
Section titled “Common errors”| Status | Cause |
|---|---|
401 |
Not authorized to view tool assemblies in this organization, or no organization with this id |
404 |
GET /tool_assemblies/:id: no tool assembly with this id in this organization. The body uses the singular error key, as for Parts, Projects and Machines (see Errors) |
422 |
Export Library only: the export could not be built even without the tool assemblies it could not build, which it otherwise leaves out of the library, notifying their user; errors says why |
500 |
Export Library only: the export failed unexpectedly; errors holds "The tool library export failed" |