Deprecation policy
Section titled “Deprecation policy”Breaking changes are announced a minimum of 60 days before they take effect. A breaking change is any change that requires existing integrations to update their code — removing a field, changing a field’s type, removing an endpoint, or changing authentication behavior.
Non-breaking changes (adding new fields, adding new endpoints, adding new optional parameters) may be made at any time without notice.
October 2026
Section titled “October 2026”Fixed — Approving a project (PATCH of a released project with "status": "approved") now needs the key’s user to be allowed to change items as well as projects, as approving in the web app does. The approval copies the products of the project’s tool assemblies into items, created as the project’s creator, so the key’s user must be allowed to create such items and to update the existing ones. A key without that right answers 401 Unauthorized with "You are not authorized to perform this action", and the project stays released with no item created, where it was approved and the items created. As it closes a write the web app refuses, this takes effect without the 60-day notice.
Fixed — Creating or updating a part (POST or PATCH of a part) with a drawing now stores that drawing as the part’s 2D drawing. The drawing was read from the picture field: a request that sent both stored the picture’s bytes as the drawing, and one that sent drawing alone failed. No field, type or response changes, so integrations that send only picture or model are not affected.
Fixed — Creating or updating a part (POST or PATCH of a part) with the material_id of another organization’s material now answers 422 Unprocessable Entity with the error on material_id, where it saved the part with that material. A part takes its organization’s own material or a shared one, as the web app’s part form now requires too.
Fixed — A request for one record (GET, PATCH or DELETE of a project, part or machine, a machine’s tool_crib, and GET /tool_assemblies/:id) now looks the record up only in the organization its URL names. A record of another organization answers 404 Not Found, with the same body as an id that doesn’t exist, as these docs already said; it was read, changed or deleted when the key’s user could do so in the record’s own organization. The Fusion plugin always names the record’s own organization, so it is not affected. As it brings the API in line with its documentation and closes reading and writing across organizations through another organization’s address, this takes effect without the 60-day notice.
Fixed — GET /tool_assemblies/:id now answers a tool assembly id that doesn’t exist with 404 Not Found and the singular error key, as Parts, Projects and Machines do, where it answered 500 Internal Server Error.
Fixed — A key no longer reads or changes anything of an organization in which its user is not approved: a user who asked to join it and waits for an admin, who was invited and has not accepted yet, or whom an admin suspended there. Whatever the user’s groups there grant, every endpoint of that organization (projects, parts, machines, materials and tool assemblies) answers 401 Unauthorized with "You are not authorized to perform this action", as for any other action the key’s bearer is not authorized for; the web app already sends such a user to its access request page. The Fusion tool library export (GET /tool_library/fusion) now answers the same 401 Unauthorized to such a key, and to any other key it refuses, such as one whose user may not list the organization’s tool assemblies, where it answered 200 OK with an error object in place of the library. It answers the same 401, with the same body, to an organization id that does not exist, and so does every other endpoint of an organization: a list, a search or a create answered 404 Not Found there, and an endpoint that names a record by id now answers an organization the key cannot reach with this 401 before it looks the record up. No endpoint tells which organization ids exist any more. A tool assembly the export cannot build is left out of the library, as before, and its user is notified; when the export cannot be built even without those assemblies, it answers 422 Unprocessable Entity with the reason in errors, and any other failure answers 500 Internal Server Error with "The tool library export failed", where both answered 200 OK with an error object too. 200 OK now carries a library, or null for a vendor the export does not support or an organization with nothing to export. As it closes access the web app already refused, no longer tells which organization ids exist, and makes the export answer its refusals and failures with an error status, this takes effect without the 60-day notice. The key of an active member of the organization, or of the owner of its site, answers as before, and GET /organizations already listed only the organizations the key’s user is an active member of.
Fixed — The Fusion tool library export (GET /tool_library/fusion) now writes a thread tool’s minimum-thread-pitch and maximum-thread-pitch as numbers, the type Fusion’s tool library format gives them, instead of strings. As it brings the export in line with Fusion’s format, this is a fix rather than a breaking change, and it takes effect without the 60-day notice. A thread mill or threading insert that gives its pitch range only in threads per inch now carries both fields as well, in mm. A thread mill or threading insert whose own pitch range has only one usable end no longer exports that end alone, as a string: it takes its range whole from its threads per inch, or writes neither field.
Fixed — In the same export, a tap’s type now names its thread’s hand: tap left hand for a left-hand tap and tap right hand for any other, a tap without a hand code included. It was plain tap for every tap but a right-hand one.
Fixed — In the same export, a tool whose data the export cannot read no longer fails the whole export, which answered with an error instead of the library. A property that is not a finite number, such as 1e400, or that is written with a decimal comma, such as 11,5, is left out of its tool, which is exported without it; a tooth or flute count (NT, NOF) that is not a number is left out too, where it was written as 0. A thread pitch so small that its threads per inch would be infinite, such as 1e-320 mm, counts as unusable, as a pitch of 0 does: the tool takes its TP from its threads per inch, or is exported without one. A tool the export cannot build is left out of the library, and the rest of the library is exported: a tool whose assembly does not have exactly one tool item; a turning holder whose insert shape has no included angle; a turning, grooving or threading holder that does not hold exactly one insert; and a tool whose data raises an error the export did not foresee, which is reported to us. The user the export runs for, the API key’s user, gets a notification in ToolingMetrics naming each tool left out, and each property, preset or insert dropped from a tool, with the reason. A turning insert without a readable corner radius now carries RE 0, as a grooving insert’s and a rotating tool’s do.
Added — In the same export, the cutting data presets carry more of the feeds Fusion’s tool library format requires. A spot drill’s, center drill’s or countersink’s preset carries use-feed-per-revolution (false) and v_f_retract beside its v_f_plunge, and every milling preset, and a boring bar’s, counterbore’s, spot drill’s, center drill’s or countersink’s, carries v_f_transition, equal to its v_f. A preset’s f_n is now the exact feed per revolution, the unrounded v_f over the unrounded n, where it was the rounded v_f over the rounded n: 0.2 mm instead of 0.200126 for a two-flute drill at 0.1 mm per tooth. No field is removed or changes its type.
Added — In the same export, every milling preset carries the ramp-angle Fusion’s tool library format requires of it: 2 degrees, as in Autodesk’s sample library, since no cutting data gives a ramp angle of its own. A threading insert, or a thread mill whose class lists the profile angle (PNA), that gives its own PNA now carries it as thread-profile-angle, which was written only when derived from the flank angles or thread form, and then even in place of its own. No field is removed or changes its type.
December 2024
Section titled “December 2024”Added — API Tokens are now created and revoked from Your profile → API Tokens, tied to your own account rather than a separate personal-access-token flow.
September 2024
Section titled “September 2024”Added — GET /machines/:id/tool_crib endpoint returning tools currently loaded at a machine, grouped by tool assembly.
Added — tool_assemblies responses now include a nested cutting_data array.
March 2024
Section titled “March 2024”Initial release — v1 API with endpoints for organizations, machines, parts, projects, and tool assemblies.