Command catalog¶
Every command an agent may issue, with the payload each one takes. It is the
same list get_command_catalog returns at runtime, driving the same pipeline
the UI does.
execute_command fills in project_id; the other required fields are yours.
A command whose type is not on this list is refused before it reaches the model.
Generated from the app's catalog at version 0.2.0. Regenerate with
make docs-catalog.
assembly.create_child¶
Create a new empty sub-assembly definition and place one occurrence of it inside assembly_id (the parent). Returns the new definition's assembly_id (add parts to it) and the occurrence_id that places it. Editing a definition updates every occurrence of it.
| Field | Type | Required | Default |
|---|---|---|---|
assembly_id |
string | yes | |
name |
string | no | "Sub-assembly" |
assembly.joint.set_value¶
Move a joint to a position and leave it there. 'angle' is degrees about the joint axis, 'offset' is mm along it, both measured from where the joint was created (so 0 is its build pose). Revolute has an angle, slider an offset, cylindrical both; planar and ball are not drivable this way. Everything mated to the joint follows, and the new placements are saved — use it to pose a mechanism. A target beyond the joint's limits stops at the limit rather than failing. Read positions back with get_motion_state.
| Field | Type | Required | Default |
|---|---|---|---|
assembly_id |
string | yes | |
mate_id |
string | yes | |
coordinate |
angle | offset |
no | "angle" |
value |
number | yes |
assembly.mate.create¶
Constrain two bodies in an assembly, or give them a joint. Both references name a body (instance_id + target_kind) and a face or edge on it (entity_kind + entity_id from get_topology); target_kind 'origin' means an assembly datum plane/axis instead of a body. Constraints: 'coincident' (faces flush), 'concentric' (axes aligned), 'distance' / 'angle' (need value, mm or degrees), 'fixed' (ground one body, ref_b omitted). Joints leave motion open instead of removing it: 'revolute' (hinge, rotates about the axis), 'slider' (translates along it), 'cylindrical' (both), 'planar' (stays flush, slides and spins), 'ball' (pivots about a point). A joint takes no value; bound it with limit_rot_min_deg / limit_rot_max_deg or limit_trans_min_mm / limit_trans_max_mm. Its position is measured from wherever the parts sit when you create it, so place them at the pose you want to call zero first. Set flip to reverse the direction. Returns the mate id.
| Field | Type | Required | Default |
|---|---|---|---|
assembly_id |
string | yes | |
mate_type |
coincident | concentric | distance | angle | fixed | revolute | slider | cylindrical | planar | ball |
yes | |
ref_a |
MateReferencePayload | yes | |
ref_b |
MateReferencePayload (optional) | no | |
name |
string | no | "" |
value |
number (optional) | no | |
expression |
string (optional) | no | |
flip |
boolean | no | false |
limit_rot_min_deg |
number (optional) | no | |
limit_rot_max_deg |
number (optional) | no | |
limit_trans_min_mm |
number (optional) | no | |
limit_trans_max_mm |
number (optional) | no |
assembly.mate.delete¶
Delete a mate or joint by id.
| Field | Type | Required | Default |
|---|---|---|---|
assembly_id |
string | yes | |
mate_id |
string | yes |
assembly.mate.update¶
Edit a mate or joint by mate_id; only provided fields change. Use disabled to switch one off without deleting it, and the limit_* fields to bound a joint's travel.
| Field | Type | Required | Default |
|---|---|---|---|
assembly_id |
string | yes | |
mate_id |
string | yes | |
name |
string (optional) | no | |
value |
number (optional) | no | |
expression |
string (optional) | no | |
flip |
boolean (optional) | no | |
disabled |
boolean (optional) | no | |
limit_rot_min_deg |
number (optional) | no | |
limit_rot_max_deg |
number (optional) | no | |
limit_trans_min_mm |
number (optional) | no | |
limit_trans_max_mm |
number (optional) | no |
assembly_boolean.break¶
Sever a boolean result's link to its sources, freezing the current shape. The part keeps its geometry but stops tracking source edits.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes |
assembly_boolean.create¶
Combine placed parts into a new result part: 'union' merges them, 'cut' subtracts every later source from the first, 'intersect' keeps only the shared volume. Sources are combined where the assembly puts them (world space), not at their model origins, and they are kept rather than consumed — the result is an extra part alongside them, so hide the sources if the result should stand alone. link_mode 'follow_latest' (default) re-captures the result whenever a source changes; 'locked' freezes it. Use check_interference first if you want to know whether the sources actually overlap.
| Field | Type | Required | Default |
|---|---|---|---|
sources |
list of BooleanSourceRequest | yes | |
operation |
union | cut | intersect |
no | "union" |
assembly_id |
string (optional) | no | |
link_mode |
follow_latest | locked |
no | "follow_latest" |
assembly_boolean.refresh¶
Re-capture a boolean result part from its current sources. Only needed for a 'locked' result; 'follow_latest' updates on its own.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes |
assembly_instance.create¶
Place another occurrence of an existing assembly definition (assembly_id) inside parent_assembly_id. One definition placed N times is stored once; placement is parent-frame (translation mm, rotation degrees). Placing a definition inside itself (directly or transitively) is rejected as a conflict.
| Field | Type | Required | Default |
|---|---|---|---|
assembly_id |
string | yes | |
parent_assembly_id |
string (optional) | no | |
name |
string (optional) | no | |
placement |
PlacementRequest (optional) | no |
assembly_instance.delete¶
Remove one occurrence (its definition and other occurrences survive; removing the last occurrence re-promotes the definition to a root).
| Field | Type | Required | Default |
|---|---|---|---|
occurrence_id |
string | yes |
assembly_instance.rename¶
Rename a sub-assembly occurrence.
| Field | Type | Required | Default |
|---|---|---|---|
occurrence_id |
string | yes | |
name |
string | yes |
assembly_instance.update_placement¶
Move one sub-assembly occurrence (the whole placed sub-assembly moves as a rigid body); mates reaching through it re-solve.
| Field | Type | Required | Default |
|---|---|---|---|
occurrence_id |
string | yes | |
placement |
PlacementRequest | yes |
cam.setup.create¶
Define a CAM manufacturing setup on a part: stock (bbox + margins) plus a list of 2.5D operations. Each operation is {kind, tool_id, face_ids, depth, ...}: kind 'contour' profiles a planar face's outer boundary (side outside/inside/on, climb), 'pocket' area-clears a planar face (its holes become islands; stepover overrides the tool), 'drill' peck-drills selected cylindrical faces (peck, dwell). face_ids are topology ids from get_topology; the target face/hole axis must point along ±Z (top-down 3-axis). depth is the cut depth in mm below the face. Returns the setup id; then call the toolpath generate endpoint to compute paths + G-code.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
name |
string (optional) | no | |
stock |
CamStock (optional) | no | |
operations |
list of CamOperationInput | no | [] |
clearance |
number (optional) | no | |
units |
mm | inch (optional) |
no |
cam.setup.delete¶
Delete a CAM setup by id.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
setup_id |
string | yes |
cam.setup.update¶
Edit a CAM setup (setup_id): name, stock, clearance, or the full operations list. Only provided fields change.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
setup_id |
string | yes | |
name |
string (optional) | no | |
stock |
CamStock (optional) | no | |
operations |
list of CamOperationInput (optional) | no | |
clearance |
number (optional) | no |
cam.tool.create¶
Create a project-level CAM cutting tool (reusable across parts/operations). Fields: name, type ('flat_endmill'), diameter (mm), feed_rate/plunge_rate (mm/min), spindle_rpm, stepover (mm, pocket pass spacing), stepdown (mm, depth per Z level). Returns the tool id. Reference it from CAM operations.
| Field | Type | Required | Default |
|---|---|---|---|
name |
string (optional) | no | |
type |
flat_endmill | ball_endmill | drill (optional) |
no | |
diameter |
number (optional) | no | |
flutes |
integer (optional) | no | |
feed_rate |
number (optional) | no | |
plunge_rate |
number (optional) | no | |
spindle_rpm |
number (optional) | no | |
stepover |
number (optional) | no | |
stepdown |
number (optional) | no |
cam.tool.delete¶
Delete a CAM tool; clears it from any operations referencing it.
| Field | Type | Required | Default |
|---|---|---|---|
tool_id |
string | yes |
cam.tool.update¶
Edit a CAM tool by tool_id; only provided fields change.
| Field | Type | Required | Default |
|---|---|---|---|
name |
string (optional) | no | |
type |
flat_endmill | ball_endmill | drill (optional) |
no | |
diameter |
number (optional) | no | |
flutes |
integer (optional) | no | |
feed_rate |
number (optional) | no | |
plunge_rate |
number (optional) | no | |
spindle_rpm |
number (optional) | no | |
stepover |
number (optional) | no | |
stepdown |
number (optional) | no | |
tool_id |
string | yes |
configuration.activate¶
Activate a configuration by id (its overrides overlay the model on rebuild), or pass configuration_id=null to revert to the base model.
| Field | Type | Required | Default |
|---|---|---|---|
configuration_id |
string (optional) | no |
configuration.clear_override¶
Remove one override from a configuration (kind + target_id), reverting that parameter/feature to its base behaviour in this configuration.
| Field | Type | Required | Default |
|---|---|---|---|
kind |
parameter | suppression |
yes | |
target_id |
string | yes | |
configuration_id |
string | yes |
configuration.create¶
Create a named configuration (variant) — a set of scoped overrides stored on the project, not a copied model. Returns the new configuration id. Add overrides with configuration.set_override and switch with configuration.activate.
| Field | Type | Required | Default |
|---|---|---|---|
name |
string | yes | |
description |
string | no | "" |
configuration.delete¶
Delete a configuration; if it was active the model reverts to base.
| Field | Type | Required | Default |
|---|---|---|---|
configuration_id |
string | yes |
configuration.set_override¶
Set one scoped override on a configuration. kind='parameter' with expression overrides a parameter (target_id = parameter id); kind='suppression' with suppressed=true/false force-suppresses or force-enables a feature (target_id = feature id). This is how a variant differs from the base.
| Field | Type | Required | Default |
|---|---|---|---|
kind |
parameter | suppression |
yes | |
target_id |
string | yes | |
expression |
string (optional) | no | |
suppressed |
boolean (optional) | no | |
configuration_id |
string | yes |
configuration.update¶
Rename a configuration or change its description (only provided fields change).
| Field | Type | Required | Default |
|---|---|---|---|
name |
string (optional) | no | |
description |
string (optional) | no | |
configuration_id |
string | yes |
feature.create¶
Extrude a sketch profile into a solid (boolean_mode new/add/cut/intersect). When the sketch has several closed regions, pick them with region_anchors (an [x,y] point inside each wanted region; preferred — get them from get_sketch_regions) or wire_indices; omit to extrude every region. For a cut, set through_all=true to cut clean through the whole part instead of a fixed distance. Returns the new feature id.
| Field | Type | Required | Default |
|---|---|---|---|
sketch_id |
string | yes | |
distance |
number | no | 10.0 |
distance_expression |
string (optional) | no | |
distance2 |
number (optional) | no | |
distance2_expression |
string (optional) | no | |
start_offset |
number | no | 0.0 |
start_offset_expression |
string (optional) | no | |
start_face |
object (optional) | no | |
name |
string | no | "Extrude" |
boolean_mode |
new | add | cut | intersect |
no | "new" |
through_all |
boolean | no | false |
wire_index |
integer (optional) | no | |
wire_indices |
list of integer (optional) | no | |
region_anchors |
list of list of any (optional) | no | |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.create.chamfer¶
Bevel one or more edges by a distance (and optional angle, default 45deg). edge_ids are topology ids from get_topology.
| Field | Type | Required | Default |
|---|---|---|---|
edge_ids |
list of integer | yes | |
allow_best_guess |
boolean (optional) | no | |
distance |
number | yes | |
distance_expression |
string (optional) | no | |
angle |
number | no | 45.0 |
angle_expression |
string (optional) | no | |
name |
string | no | "Chamfer" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.create.circular_pattern¶
Repeat the part geometry around an axis. count copies spread over total_angle (default 360deg). The axis defaults to Z through the origin (axis_origin=(0,0,0), axis_dir=(0,0,1)); set axis_origin/axis_dir or datum_axis_id for any other axis.
| Field | Type | Required | Default |
|---|---|---|---|
axis_origin |
list of any | no | [0.0, 0.0, 0.0] |
axis_dir |
list of any | no | [0.0, 0.0, 1.0] |
datum_axis_id |
string (optional) | no | |
count |
integer | no | 4 |
count_expression |
string (optional) | no | |
total_angle |
number | no | 360.0 |
total_angle_expression |
string (optional) | no | |
equal_spacing |
boolean | no | true |
cp_radius |
number | no | 0.0 |
cp_radius_expression |
string (optional) | no | |
name |
string | no | "Circular Pattern" |
boolean_mode |
new | add | cut | intersect |
no | "add" |
source_solid_id |
integer (optional) | no | |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.create.datum_axis¶
Create a reference axis (no solid) by mode: 'two_point', 'face_axis', 'plane_intersection', or 'reference_line'. refs lists the referenced entities.
| Field | Type | Required | Default |
|---|---|---|---|
mode |
two_point | face_axis | plane_intersection | reference_line |
yes | |
refs |
list of DatumReferenceRequest | yes | |
flip |
boolean | no | false |
name |
string | no | "Datum Axis" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.create.datum_plane¶
Create a reference plane (no solid) by mode: 'offset' from a base plane (by offset mm), 'midplane' between two parallel planes, 'three_point' through three vertices, 'angle' rotating a base plane by angle degrees around an axis, or 'perpendicular' to an axis or edge at its origin/midpoint. refs lists the referenced entities (one per mode's arity); flip negates the resulting normal. Mirror and split define their plane the same way.
| Field | Type | Required | Default |
|---|---|---|---|
mode |
offset | midplane | three_point | angle | perpendicular |
yes | |
refs |
list of DatumReferenceRequest | yes | |
offset |
number | no | 0.0 |
offset_expression |
string (optional) | no | |
angle |
number | no | 0.0 |
angle_expression |
string (optional) | no | |
flip |
boolean | no | false |
name |
string | no | "Datum Plane" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.create.draft¶
Taper faces by a constant draft angle about a neutral plane (for mold release). face_ids and neutral_plane_face_id are topology ids from get_topology; neutral_plane_face_id is a planar face whose outward normal is the pull direction; angle is in degrees (0–90). Set reverse to flip the taper direction.
| Field | Type | Required | Default |
|---|---|---|---|
face_ids |
list of integer | yes | |
allow_best_guess |
boolean (optional) | no | |
angle |
number | yes | |
angle_expression |
string (optional) | no | |
neutral_plane_face_id |
integer | yes | |
reverse |
boolean | no | false |
name |
string | no | "Draft" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.create.fillet¶
Round one or more edges with a constant radius. edge_ids are topology ids of the current part shape (from get_topology). Returns the new feature id.
| Field | Type | Required | Default |
|---|---|---|---|
edge_ids |
list of integer | yes | |
allow_best_guess |
boolean (optional) | no | |
radius |
number | yes | |
radius_expression |
string (optional) | no | |
name |
string | no | "Fillet" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.create.hole¶
Drill a parametric hole into a single planar face. face_ids is the planar face id from get_topology; position is the [x, y] face-plane offset (mm) from the face centre. hole_type is 'simple', 'counterbore', or 'countersink'; depth_mode is 'through_all' or 'blind' (then set depth). Size from a standard table (sizing_mode='standard', standard_id 'iso_metric'/'unc', designation e.g. 'M6', fit 'close'/'normal'/'loose'; tapped=true sizes the bore to the tap-drill diameter) or a custom diameter (sizing_mode='custom').
| Field | Type | Required | Default |
|---|---|---|---|
face_ids |
list of integer | yes | |
allow_best_guess |
boolean (optional) | no | |
position |
list of any | no | [0.0, 0.0] |
hole_type |
simple | counterbore | countersink |
no | "simple" |
depth_mode |
blind | through_all |
no | "through_all" |
depth |
number (optional) | no | |
depth_expression |
string (optional) | no | |
cbore_diameter |
number (optional) | no | |
cbore_depth |
number (optional) | no | |
csink_diameter |
number (optional) | no | |
csink_angle |
number | no | 90.0 |
sizing_mode |
standard | custom |
no | "standard" |
standard_id |
string (optional) | no | |
designation |
string (optional) | no | |
fit |
close | normal | loose |
no | "normal" |
tapped |
boolean | no | false |
diameter |
number (optional) | no | |
diameter_expression |
string (optional) | no | |
direction_ref |
DatumReferenceRequest (optional) | no | |
back_clearance |
number (optional) | no | |
name |
string | no | "Hole" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.create.linear_pattern¶
Repeat the part geometry along one or two linear directions. Each direction has a count (>=2) and spacing; boolean_mode 'add' fuses the copies.
| Field | Type | Required | Default |
|---|---|---|---|
dir1 |
list of any | no | [1.0, 0.0, 0.0] |
spacing1 |
number | no | 10.0 |
spacing1_expression |
string (optional) | no | |
count1 |
integer | no | 2 |
count1_expression |
string (optional) | no | |
dir2 |
list of any | no | [0.0, 1.0, 0.0] |
spacing2 |
number | no | 10.0 |
spacing2_expression |
string (optional) | no | |
count2 |
integer | no | 1 |
count2_expression |
string (optional) | no | |
name |
string | no | "Linear Pattern" |
boolean_mode |
new | add | cut | intersect |
no | "add" |
source_solid_id |
integer (optional) | no | |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.create.loft¶
Loft a solid through two or more sketch profiles (ruled or smooth) — the tool for shapes that change cross-section along their length (e.g. a twisted blade). sketch_ids lists the profiles in order, usually on offset/datum planes at different heights. Pick each profile's region with region_anchors ([x,y] inside each, aligned 1:1 with sketch_ids; from get_sketch_regions) or wire_indices.
| Field | Type | Required | Default |
|---|---|---|---|
sketch_ids |
list of string | yes | |
ruled |
boolean | no | false |
solid |
boolean | no | true |
name |
string | no | "Loft" |
boolean_mode |
new | add | cut | intersect |
no | "new" |
wire_indices |
list of integer (optional) | no | |
region_anchors |
list of list of any (optional) | no | |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.create.mirror¶
Mirror the part geometry across a plane. The plane is defined like a datum plane (mode + refs, see FEATURE_CREATE_DATUM_PLANE). boolean_mode 'new' (default) keeps the copy as a separate body, 'add' fuses it, 'cut' subtracts it, 'intersect' keeps the overlap.
| Field | Type | Required | Default |
|---|---|---|---|
mode |
offset | midplane | three_point | angle | perpendicular |
yes | |
refs |
list of DatumReferenceRequest | yes | |
offset |
number | no | 0.0 |
offset_expression |
string (optional) | no | |
angle |
number | no | 0.0 |
angle_expression |
string (optional) | no | |
flip |
boolean | no | false |
name |
string | no | "Mirror" |
boolean_mode |
new | add | cut | intersect |
no | "new" |
source_solid_id |
integer (optional) | no | |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.create.revolve¶
Revolve a sketch profile around an axis (sketch-plane 'x'/'y', an explicit axis_origin/axis_dir, or a datum_axis_id). angle defaults to 360deg for a full revolution. Select the profile region with region_anchor ([x,y] inside it, from get_sketch_regions) or wire_index. The cross-section must be closed and not cross the axis.
| Field | Type | Required | Default |
|---|---|---|---|
sketch_id |
string | yes | |
axis |
x | y |
no | "x" |
axis_origin |
list of any (optional) | no | |
axis_dir |
list of any (optional) | no | |
datum_axis_id |
string (optional) | no | |
angle |
number | no | 360.0 |
angle_expression |
string (optional) | no | |
angle2 |
number (optional) | no | |
angle2_expression |
string (optional) | no | |
name |
string | no | "Revolve" |
boolean_mode |
new | add | cut | intersect |
no | "new" |
wire_index |
integer (optional) | no | |
region_anchor |
list of any (optional) | no | |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.create.rib¶
Thicken a sketch profile into a thin support wall (rib/web) unioned with the part. sketch_id references the rib sketch; an open chain is offset by thickness (mm), a closed region (wire_indices/region_anchors) is used directly; side ('symmetric'|'one'|'other') sets the growth direction along the sketch-plane normal. Requires existing geometry.
| Field | Type | Required | Default |
|---|---|---|---|
sketch_id |
string | yes | |
thickness |
number | yes | |
thickness_expression |
string (optional) | no | |
side |
symmetric | one | other |
no | "symmetric" |
wire_indices |
list of integer (optional) | no | |
region_anchors |
list of list of any (optional) | no | |
name |
string | no | "Rib" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.create.shell¶
Hollow the part to a uniform wall thickness, removing the given faces. face_ids are topology ids from get_topology; thickness > 0 is inward.
| Field | Type | Required | Default |
|---|---|---|---|
face_ids |
list of integer | yes | |
allow_best_guess |
boolean (optional) | no | |
thickness |
number | yes | |
thickness_expression |
string (optional) | no | |
name |
string | no | "Shell" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.create.split¶
Split a solid by a plane into separate bodies. The plane is defined like a datum plane (mode + refs, see FEATURE_CREATE_DATUM_PLANE). source_solid_id picks which solid to split (None = whole shape); keep_solid_ids (indices into the ordered pieces, -normal side first, so flip reverses them) keeps a subset, None keeps all.
| Field | Type | Required | Default |
|---|---|---|---|
mode |
offset | midplane | three_point | angle | perpendicular |
yes | |
refs |
list of DatumReferenceRequest | yes | |
offset |
number | no | 0.0 |
offset_expression |
string (optional) | no | |
angle |
number | no | 0.0 |
angle_expression |
string (optional) | no | |
flip |
boolean | no | false |
name |
string | no | "Split" |
source_solid_id |
integer (optional) | no | |
keep_solid_ids |
list of integer (optional) | no | |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.create.surface_pattern¶
Apply a mathematically-defined relief pattern to a single face. face_ids is the face id from get_topology; function is a displacement expression of u,v (normalised [0,1]) and x,y,z (mm), scaled by amplitude (mm) along the face normal. mode 'smooth' fits a B-spline surface (waves); 'faceted' builds planar facets (low-poly / grips). resolution sets the grid/facet density.
| Field | Type | Required | Default |
|---|---|---|---|
face_ids |
list of integer | yes | |
allow_best_guess |
boolean (optional) | no | |
function |
string | yes | |
amplitude |
number | no | 1.0 |
amplitude_expression |
string (optional) | no | |
mode |
smooth | faceted |
no | "faceted" |
resolution |
integer | no | 32 |
name |
string | no | "Surface Pattern" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.create.sweep¶
Sweep a profile sketch along a path sketch to create a solid.
| Field | Type | Required | Default |
|---|---|---|---|
profile_sketch_id |
string | yes | |
path_sketch_id |
string | yes | |
name |
string | no | "Sweep" |
boolean_mode |
new | add | cut | intersect |
no | "new" |
wire_index |
integer (optional) | no | |
region_anchor |
list of any (optional) | no | |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.create.thread¶
Cut a real helical thread into a single cylindrical face. face_ids is the cylindrical face id from get_topology; pitch is the thread pitch in mm.
| Field | Type | Required | Default |
|---|---|---|---|
face_ids |
list of integer | yes | |
allow_best_guess |
boolean (optional) | no | |
pitch |
number | yes | |
pitch_expression |
string (optional) | no | |
handedness |
right | left |
no | "right" |
designation |
string (optional) | no | |
nominal_diameter |
number (optional) | no | |
depth_override |
number (optional) | no | |
depth_override_expression |
string (optional) | no | |
start_depth |
number (optional) | no | |
start_depth_expression |
string (optional) | no | |
end_depth |
number (optional) | no | |
end_depth_expression |
string (optional) | no | |
depth_face |
object (optional) | no | |
standard |
string (optional) | no | |
name |
string | no | "Thread" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
feature.delete¶
Delete a feature; cascade-deletes dependents.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
feature_id |
string | yes |
feature.reorder¶
Move a feature to a different position in the part history: it is placed after insert_after_history_id (a feature, sketch or mate id; null moves it to the very start). Reordering is organisational only, so the server trial-rebuilds the new order and refuses anything that would change the resulting model (409) or that breaks the history rules, e.g. a fillet before the solid it rounds (422). Requires the rollback bar to be cleared. Returns the part's feature timeline.
| Field | Type | Required | Default |
|---|---|---|---|
insert_after_history_id |
string (optional) | no | |
allow_model_change |
boolean | no | false |
part_id |
string | yes | |
feature_id |
string | yes |
feature.set_detail¶
Pin how a feature is classified for the simplified display representation of large assemblies. detail=true always omits it, detail=false always keeps it, detail=null reverts to the automatic rule (threads, text emboss and surface patterns are always detail; fillets/chamfers at or below the project simplify threshold are). Display-only: modeled geometry, exports, mass properties and simulation are unaffected.
| Field | Type | Required | Default |
|---|---|---|---|
detail |
boolean (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.suppress¶
Suppress (suppressed=true) or un-suppress a feature, excluding it from the shape build. Set include_downstream=true to also suppress later features broken by this one — a one-click clear of a broken cascade. Returns the part's feature timeline with rebuild statuses.
| Field | Type | Required | Default |
|---|---|---|---|
suppressed |
boolean | yes | |
include_downstream |
boolean | no | false |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update¶
Edit an existing extrude feature (feature_id) — change distance, boolean_mode, through_all, etc. Re-sends the full extrude definition.
| Field | Type | Required | Default |
|---|---|---|---|
sketch_id |
string | yes | |
distance |
number | no | 10.0 |
distance_expression |
string (optional) | no | |
distance2 |
number (optional) | no | |
distance2_expression |
string (optional) | no | |
start_offset |
number | no | 0.0 |
start_offset_expression |
string (optional) | no | |
start_face |
object (optional) | no | |
name |
string | no | "Extrude" |
boolean_mode |
new | add | cut | intersect |
no | "new" |
through_all |
boolean | no | false |
wire_index |
integer (optional) | no | |
wire_indices |
list of integer (optional) | no | |
region_anchors |
list of list of any (optional) | no | |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update.chamfer¶
Edit an existing chamfer (feature_id): change distance/angle/edges.
| Field | Type | Required | Default |
|---|---|---|---|
edge_ids |
list of integer | yes | |
allow_best_guess |
boolean (optional) | no | |
distance |
number | yes | |
distance_expression |
string (optional) | no | |
angle |
number | no | 45.0 |
angle_expression |
string (optional) | no | |
name |
string | no | "Chamfer" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update.circular_pattern¶
Edit an existing circular pattern (feature_id): change axis/count/angle.
| Field | Type | Required | Default |
|---|---|---|---|
axis_origin |
list of any | no | [0.0, 0.0, 0.0] |
axis_dir |
list of any | no | [0.0, 0.0, 1.0] |
datum_axis_id |
string (optional) | no | |
count |
integer | no | 4 |
count_expression |
string (optional) | no | |
total_angle |
number | no | 360.0 |
total_angle_expression |
string (optional) | no | |
equal_spacing |
boolean | no | true |
cp_radius |
number | no | 0.0 |
cp_radius_expression |
string (optional) | no | |
name |
string | no | "Circular Pattern" |
boolean_mode |
new | add | cut | intersect |
no | "add" |
source_solid_id |
integer (optional) | no | |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update.datum_axis¶
Edit an existing datum axis (feature_id): change its definition.
| Field | Type | Required | Default |
|---|---|---|---|
mode |
two_point | face_axis | plane_intersection | reference_line |
yes | |
refs |
list of DatumReferenceRequest | yes | |
flip |
boolean | no | false |
name |
string | no | "Datum Axis" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update.datum_plane¶
Edit an existing datum plane (feature_id): change its definition.
| Field | Type | Required | Default |
|---|---|---|---|
mode |
offset | midplane | three_point | angle | perpendicular |
yes | |
refs |
list of DatumReferenceRequest | yes | |
offset |
number | no | 0.0 |
offset_expression |
string (optional) | no | |
angle |
number | no | 0.0 |
angle_expression |
string (optional) | no | |
flip |
boolean | no | false |
name |
string | no | "Datum Plane" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update.draft¶
Edit an existing draft (feature_id): change angle/faces/neutral plane/reverse.
| Field | Type | Required | Default |
|---|---|---|---|
face_ids |
list of integer | yes | |
allow_best_guess |
boolean (optional) | no | |
angle |
number | yes | |
angle_expression |
string (optional) | no | |
neutral_plane_face_id |
integer | yes | |
reverse |
boolean | no | false |
name |
string | no | "Draft" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update.fillet¶
Edit an existing fillet (feature_id): change radius/edges. Re-sends the full fillet definition.
| Field | Type | Required | Default |
|---|---|---|---|
edge_ids |
list of integer | yes | |
allow_best_guess |
boolean (optional) | no | |
radius |
number | yes | |
radius_expression |
string (optional) | no | |
name |
string | no | "Fillet" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update.hole¶
Edit an existing hole (feature_id): change size/type/depth/position/tapped/face.
| Field | Type | Required | Default |
|---|---|---|---|
face_ids |
list of integer | yes | |
allow_best_guess |
boolean (optional) | no | |
position |
list of any | no | [0.0, 0.0] |
hole_type |
simple | counterbore | countersink |
no | "simple" |
depth_mode |
blind | through_all |
no | "through_all" |
depth |
number (optional) | no | |
depth_expression |
string (optional) | no | |
cbore_diameter |
number (optional) | no | |
cbore_depth |
number (optional) | no | |
csink_diameter |
number (optional) | no | |
csink_angle |
number | no | 90.0 |
sizing_mode |
standard | custom |
no | "standard" |
standard_id |
string (optional) | no | |
designation |
string (optional) | no | |
fit |
close | normal | loose |
no | "normal" |
tapped |
boolean | no | false |
diameter |
number (optional) | no | |
diameter_expression |
string (optional) | no | |
direction_ref |
DatumReferenceRequest (optional) | no | |
back_clearance |
number (optional) | no | |
name |
string | no | "Hole" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update.linear_pattern¶
Edit an existing linear pattern (feature_id): change direction/count/spacing.
| Field | Type | Required | Default |
|---|---|---|---|
dir1 |
list of any | no | [1.0, 0.0, 0.0] |
spacing1 |
number | no | 10.0 |
spacing1_expression |
string (optional) | no | |
count1 |
integer | no | 2 |
count1_expression |
string (optional) | no | |
dir2 |
list of any | no | [0.0, 1.0, 0.0] |
spacing2 |
number | no | 10.0 |
spacing2_expression |
string (optional) | no | |
count2 |
integer | no | 1 |
count2_expression |
string (optional) | no | |
name |
string | no | "Linear Pattern" |
boolean_mode |
new | add | cut | intersect |
no | "add" |
source_solid_id |
integer (optional) | no | |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update.loft¶
Edit an existing loft (feature_id): change profiles/ruled/solid.
| Field | Type | Required | Default |
|---|---|---|---|
sketch_ids |
list of string | yes | |
ruled |
boolean | no | false |
solid |
boolean | no | true |
name |
string | no | "Loft" |
boolean_mode |
new | add | cut | intersect |
no | "new" |
wire_indices |
list of integer (optional) | no | |
region_anchors |
list of list of any (optional) | no | |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update.mirror¶
Edit an existing mirror (feature_id): re-sends the full plane definition (mode + refs) and boolean_mode.
| Field | Type | Required | Default |
|---|---|---|---|
mode |
offset | midplane | three_point | angle | perpendicular |
yes | |
refs |
list of DatumReferenceRequest | yes | |
offset |
number | no | 0.0 |
offset_expression |
string (optional) | no | |
angle |
number | no | 0.0 |
angle_expression |
string (optional) | no | |
flip |
boolean | no | false |
name |
string | no | "Mirror" |
boolean_mode |
new | add | cut | intersect |
no | "new" |
source_solid_id |
integer (optional) | no | |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update.revolve¶
Edit an existing revolve (feature_id): change axis/angle/etc.
| Field | Type | Required | Default |
|---|---|---|---|
sketch_id |
string | yes | |
axis |
x | y |
no | "x" |
axis_origin |
list of any (optional) | no | |
axis_dir |
list of any (optional) | no | |
datum_axis_id |
string (optional) | no | |
angle |
number | no | 360.0 |
angle_expression |
string (optional) | no | |
angle2 |
number (optional) | no | |
angle2_expression |
string (optional) | no | |
name |
string | no | "Revolve" |
boolean_mode |
new | add | cut | intersect |
no | "new" |
wire_index |
integer (optional) | no | |
region_anchor |
list of any (optional) | no | |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update.rib¶
Edit an existing rib (feature_id): change sketch/thickness/side/region.
| Field | Type | Required | Default |
|---|---|---|---|
sketch_id |
string | yes | |
thickness |
number | yes | |
thickness_expression |
string (optional) | no | |
side |
symmetric | one | other |
no | "symmetric" |
wire_indices |
list of integer (optional) | no | |
region_anchors |
list of list of any (optional) | no | |
name |
string | no | "Rib" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update.shell¶
Edit an existing shell (feature_id): change thickness/removed faces.
| Field | Type | Required | Default |
|---|---|---|---|
face_ids |
list of integer | yes | |
allow_best_guess |
boolean (optional) | no | |
thickness |
number | yes | |
thickness_expression |
string (optional) | no | |
name |
string | no | "Shell" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update.split¶
Edit an existing split (feature_id): re-sends the full plane definition (mode + refs), source_solid_id and keep_solid_ids.
| Field | Type | Required | Default |
|---|---|---|---|
mode |
offset | midplane | three_point | angle | perpendicular |
yes | |
refs |
list of DatumReferenceRequest | yes | |
offset |
number | no | 0.0 |
offset_expression |
string (optional) | no | |
angle |
number | no | 0.0 |
angle_expression |
string (optional) | no | |
flip |
boolean | no | false |
name |
string | no | "Split" |
source_solid_id |
integer (optional) | no | |
keep_solid_ids |
list of integer (optional) | no | |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update.surface_pattern¶
Edit an existing surface pattern (feature_id): change function/amplitude/mode/resolution/face.
| Field | Type | Required | Default |
|---|---|---|---|
face_ids |
list of integer | yes | |
allow_best_guess |
boolean (optional) | no | |
function |
string | yes | |
amplitude |
number | no | 1.0 |
amplitude_expression |
string (optional) | no | |
mode |
smooth | faceted |
no | "faceted" |
resolution |
integer | no | 32 |
name |
string | no | "Surface Pattern" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update.sweep¶
Edit an existing sweep (feature_id): change profile/path sketches.
| Field | Type | Required | Default |
|---|---|---|---|
profile_sketch_id |
string | yes | |
path_sketch_id |
string | yes | |
name |
string | no | "Sweep" |
boolean_mode |
new | add | cut | intersect |
no | "new" |
wire_index |
integer (optional) | no | |
region_anchor |
list of any (optional) | no | |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
feature.update.thread¶
Edit an existing thread (feature_id): change pitch/handedness/etc.
| Field | Type | Required | Default |
|---|---|---|---|
face_ids |
list of integer | yes | |
allow_best_guess |
boolean (optional) | no | |
pitch |
number | yes | |
pitch_expression |
string (optional) | no | |
handedness |
right | left |
no | "right" |
designation |
string (optional) | no | |
nominal_diameter |
number (optional) | no | |
depth_override |
number (optional) | no | |
depth_override_expression |
string (optional) | no | |
start_depth |
number (optional) | no | |
start_depth_expression |
string (optional) | no | |
end_depth |
number (optional) | no | |
end_depth_expression |
string (optional) | no | |
depth_face |
object (optional) | no | |
standard |
string (optional) | no | |
name |
string | no | "Thread" |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes | |
feature_id |
string | yes |
flow.create¶
Define a flow (CFD) study on a part: air or water moving around it, or the part spinning in it. mode 'tunnel' (default) blows a free stream at speed m/s along inlet_axis ('+x'..'-z') and reports the force and the moment on the body (10 m/s is a reasonable default in air, 1 m/s in water — water is a thousand times denser, so air's speeds pose a Reynolds number this method has no business answering); mode 'rotation' spins the part at rpm about axis_origin/axis_dir and reports volumetric flow rate and torque. Any body may rotate, not only a bladed one; the axis is required in rotation mode, and a study created on a part that has a circular pattern is seeded from it. An axis on a tunnel study is optional and means something different: the result then also reports axis_torque_n_mm, how hard the stream twists the static part about it. fluid picks the working fluid {preset: 'air'|'water'|'custom', density kg/m3, dynamic_viscosity Pa*s}. resolution is a runtime budget, 'draft' | 'standard' | 'fine' (roughly 1, 5 and 10 minutes); the lattice cell size is derived from it, so leave cell_size unset unless reproducing an exact run. domain is the flow volume {min, max} in mm and is auto-sized around the part when unset: a tunnel about two and a half body-lengths long with the part forward of centre, a rotating body in a duct at 1.2x the tip radius. Returns the study id; then call run_flow_study to solve it. This is a design-stage trend tool on a staircase lattice, not a certified answer: read every number it returns as an order of magnitude with a reliable direction, and a rotating body's torque and shaft power especially so.
| Field | Type | Required | Default |
|---|---|---|---|
mode |
tunnel | rotation (optional) |
no | |
fluid |
FlowFluidInput (optional) | no | |
inlet_axis |
+x | -x | +y | -y | +z | -z (optional) |
no | |
speed |
number (optional) | no | |
flow_throughs |
number (optional) | no | |
axis_origin |
list of any (optional) | no | |
axis_dir |
list of any (optional) | no | |
rpm |
number (optional) | no | |
revolutions |
number (optional) | no | |
domain |
FlowDomainInput (optional) | no | |
resolution |
draft | standard | fine (optional) |
no | |
cell_size |
number (optional) | no | |
slice |
FlowSliceInput (optional) | no | |
streamline_seeds |
integer (optional) | no | |
part_id |
string | yes | |
name |
string (optional) | no |
flow.delete¶
Delete a flow study by id.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
study_id |
string | yes |
flow.update¶
Edit a flow study (study_id): change name, mode, fluid, inlet_axis, speed, flow_throughs, rpm, revolutions, axis_origin/axis_dir, domain, resolution, cell_size, slice or streamline_seeds. Only provided fields change; send domain or cell_size as null to put them back on auto. Switching mode to 'rotation' does not seed an axis — only creating a study does — so set axis_origin/axis_dir if the study has none. Changing a tunnel study's axis does not invalidate a finished solve: the torque about it is projected from the result when it is read.
| Field | Type | Required | Default |
|---|---|---|---|
mode |
tunnel | rotation (optional) |
no | |
fluid |
FlowFluidInput (optional) | no | |
inlet_axis |
+x | -x | +y | -y | +z | -z (optional) |
no | |
speed |
number (optional) | no | |
flow_throughs |
number (optional) | no | |
axis_origin |
list of any (optional) | no | |
axis_dir |
list of any (optional) | no | |
rpm |
number (optional) | no | |
revolutions |
number (optional) | no | |
domain |
FlowDomainInput (optional) | no | |
resolution |
draft | standard | fine (optional) |
no | |
cell_size |
number (optional) | no | |
slice |
FlowSliceInput (optional) | no | |
streamline_seeds |
integer (optional) | no | |
part_id |
string | yes | |
study_id |
string | yes | |
name |
string (optional) | no |
import.heal¶
Heal an imported part's geometry (feature_id of its import feature): sew open shells, fix invalid wires/solids, and merge coplanar faces. heal=true applies the repair, heal=false reverts to the raw import. Returns the rebuild status, diagnostics, and a before/after summary. Useful before referencing or remodeling imported geometry.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
feature_id |
string | yes | |
heal |
boolean | no | true |
import.set_units¶
Correct an imported part's unit scale (feature_id of its import feature). units_mm is millimetres per source unit (1=mm, 10=cm, 1000=m, 25.4=inch, 304.8=ft); use it when an STL has no units or a STEP/IGES was tagged with the wrong unit. Rescales without re-import.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
feature_id |
string | yes | |
units_mm |
number | yes |
material.create¶
Create a custom project material. Pass derive_from='builtin:
| Field | Type | Required | Default |
|---|---|---|---|
derive_from |
string (optional) | no | |
library_id |
string (optional) | no | |
name |
string (optional) | no | |
category |
thermoplastic | filled_composite | bio_based | metal | custom (optional) |
no | |
appearance |
MaterialAppearance (optional) | no | |
mechanical |
MaterialMechanical (optional) | no | |
thermal |
MaterialThermal (optional) | no | |
chemical |
MaterialChemical (optional) | no | |
rheology |
MaterialRheology (optional) | no | |
filler |
MaterialFiller (optional) | no | |
printing |
MaterialPrinting (optional) | no |
material.delete¶
Delete a custom material; clears it from any parts referencing it.
| Field | Type | Required | Default |
|---|---|---|---|
material_id |
string | yes |
material.update¶
Edit a custom material (name/category/appearance/mechanical/printing). Only provided fields change; printing=null makes a material unprintable. Built-in materials are read-only — derive a copy first.
| Field | Type | Required | Default |
|---|---|---|---|
material_id |
string | yes | |
name |
string (optional) | no | |
category |
thermoplastic | filled_composite | bio_based | metal | custom (optional) |
no | |
appearance |
MaterialAppearance (optional) | no | |
mechanical |
MaterialMechanical (optional) | no | |
thermal |
MaterialThermal (optional) | no | |
chemical |
MaterialChemical (optional) | no | |
rheology |
MaterialRheology (optional) | no | |
filler |
MaterialFiller (optional) | no | |
printing |
MaterialPrinting (optional) | no |
parameter.create¶
Create a named project parameter from an expression (e.g. 'width' = '40'). Parameters can be referenced in dimension expressions.
| Field | Type | Required | Default |
|---|---|---|---|
name |
string | yes | |
expression |
string | yes | |
description |
string | no | "" |
parameter.delete¶
Delete a parameter by id.
| Field | Type | Required | Default |
|---|---|---|---|
param_id |
string | yes |
parameter.update¶
Rename or re-express an existing parameter.
| Field | Type | Required | Default |
|---|---|---|---|
name |
string | yes | |
expression |
string | yes | |
description |
string | no | "" |
param_id |
string | yes |
part.assign_material¶
Assign a material (built-in or custom id) to a part, or clear it with material_id=null. Drives appearance, mass, 3MF export colour, and the filament settings a slice setup prints the part with. For a part made of several solids, solid_id (a 0-based solid ordinal, as reported by get_topology) assigns that solid alone, overriding the part's own material; giving two solids different printable materials is what makes the part print multi-material.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
material_id |
string (optional) | no | |
solid_id |
integer (optional) | no |
part.create¶
Create a new (empty) part to hold sketches and features. Returns the new part id. The first step when modeling from scratch.
| Field | Type | Required | Default |
|---|---|---|---|
name |
string | yes | |
assembly_id |
string (optional) | no |
part.delete¶
Delete a part (and all its sketches/features).
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes |
part.duplicate¶
Deep-copy a part (all sketches, features, bodies) into an independent, editable part. Returns the new part id.
| Field | Type | Required | Default |
|---|---|---|---|
name |
string (optional) | no | |
assembly_id |
string (optional) | no | |
part_id |
string | yes |
part.rename¶
Rename a part by id.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
name |
string | yes |
part.update_rollback¶
Move the part's rollback bar: feature_id builds only up to and including that feature (later ones are rolled back); null clears the bar and rebuilds everything.
| Field | Type | Required | Default |
|---|---|---|---|
feature_id |
string (optional) | no | |
before_start |
boolean | no | false |
part_id |
string | yes |
project.redo¶
Re-apply the last change undone by project.undo.
| Field | Type | Required | Default |
|---|---|---|---|
project.set_simplify_threshold¶
Set the project's simplify threshold in mm (default 2). Fillets with radius and chamfers with distance at or below it are omitted from the simplified display representation. Display-only: it never changes the modeled geometry.
| Field | Type | Required | Default |
|---|---|---|---|
threshold |
number | yes |
project.undo¶
Revert the most recent change (undo the last mutation). Use this to back out a mistake instead of deleting and rebuilding geometry.
| Field | Type | Required | Default |
|---|---|---|---|
simulation.create¶
Define a stress study on a part. kind 'static' (default) is the linear-static analysis described below; kind 'warpage' instead predicts the residual stress and distortion the part is left with after printing — it needs print_setup_id and ignores fixtures, loads and gravity, being driven by the part's own contraction while it stands on the bed. For a static study: fixed_face_ids are faces to fully clamp and fixed_edge_ids are edges to clamp the same way (use a face where one exists — an edge clamp is a stress singularity, so the peak stress and factor of safety at it are mesh-dependent); loads is a list of {kind, target_kind, face_id|edge_id, magnitude, direction, flip}: target_kind 'face' (default) loads a face by face_id, 'edge' applies a line load to an edge by edge_id (force only, needs an explicit direction). kind 'force' applies magnitude N along direction (a 3-vector; defaults to a face's inward normal), kind 'pressure' applies magnitude MPa along the inward face normal. Set direction_mode='radial' (force only, on a cylindrical face or circular edge) to push magnitude N radially outward from the geometry's axis, or 'tangential' to apply it circumferentially about the axis (a torque — for gears/shaft torsion); axis_origin/axis_dir override the auto-detected axis. Set flip=true to reverse the direction (force/radial/tangential) or pull outward in tension (pressure). Set gravity to a 3-vector acceleration in m/s² (e.g. (0, 0, -9.81)) to add self-weight over the whole part; omit for none. All face_id/edge_id values are topology ids from get_topology. The part needs a material with Young's modulus, Poisson ratio and yield strength (assign one with part.assign_material; derive a built-in metal/plastic if needed). Returns the study id. Then call run_stress_study to solve and read max von Mises stress, displacement and factor of safety — if the factor of safety is too low, thicken the geometry or pick a stronger material and re-run to close the loop.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
name |
string (optional) | no | |
kind |
static | warpage |
no | "static" |
fixed_face_ids |
list of integer | yes | |
fixed_edge_ids |
list of integer | no | [] |
loads |
list of SimLoadInput | yes | |
gravity |
list of any (optional) | no | |
max_size |
number (optional) | no | |
print_setup_id |
string (optional) | no |
simulation.delete¶
Delete a stress study by id.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
study_id |
string | yes |
simulation.update¶
Edit a stress study (study_id): change name, kind ('static'/'warpage'), fixed_face_ids, fixed_edge_ids, loads, gravity (self-weight m/s² 3-vector, or null to disable), print_setup_id (null to solve as solid material) or max_size (target mesh element size in mm). Only provided fields change.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
study_id |
string | yes | |
name |
string (optional) | no | |
kind |
static | warpage (optional) |
no | |
fixed_face_ids |
list of integer (optional) | no | |
fixed_edge_ids |
list of integer (optional) | no | |
loads |
list of SimLoadInput (optional) | no | |
gravity |
list of any (optional) | no | |
max_size |
number (optional) | no | |
print_setup_id |
string (optional) | no |
sketch.arc3¶
Create a single arc through three points p1 (start), p2 (on the arc), p3 (end), each [x,y]. Use this instead of authoring raw arc [cx,cy,r,start,end] params, which are error-prone to compute.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
sketch_id |
string | yes | |
p1 |
list of any | yes | |
p2 |
list of any | yes | |
p3 |
list of any | yes |
sketch.chamfer¶
Bevel a sketch corner with the given setback distance. Same selection modes as sketch.fillet.
| Field | Type | Required | Default |
|---|---|---|---|
element_id_a |
string (optional) | no | |
element_id_b |
string (optional) | no | |
element_ids |
list of string (optional) | no | |
distance |
number | yes | |
part_id |
string | yes | |
sketch_id |
string | yes |
sketch.constraint.add¶
Add geometric/dimensional constraints to a sketch and run the solver. Use to make a sketch fully constrained. Supported operand combinations: tangent — line/axis with circle/arc, or two curves; equal — two lines or two curves; parallel/perpendicular/collinear/angle — lines and origin axes; concentric — two curves; radius/diameter — one circle or arc; midpoint — a point then the line it bisects; point_on_line/point_on_circle/point_on_arc — a point then the curve; distance — two points, one line's length, or a line with another line/axis. Point indices: line 0-1, arc 0=centre 1-2=endpoints, circle/point 0. distance/distance_x/distance_y/radius/diameter/angle require a value (angle in radians); symmetric requires axis 'x' or 'y'. Other combinations are rejected.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
sketch_id |
string | yes | |
constraints |
list of SketchConstraintRequest | yes |
sketch.constraint.delete¶
Remove a constraint (constraint_id) from a sketch and re-solve.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
sketch_id |
string | yes | |
constraint_id |
string | yes |
sketch.constraint.toggle¶
Edit a constraint (constraint_id): disable/enable, set value or expression, toggle driving, rename, or re-state the same operands as another constraint_type (e.g. point_on_arc -> point_on_circle, keeping the id), then re-solve.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
sketch_id |
string | yes | |
constraint_id |
string | yes | |
disabled |
boolean (optional) | no | |
value |
number (optional) | no | |
expression |
string (optional) | no | |
driving |
boolean (optional) | no | |
name |
string (optional) | no | |
constraint_type |
string (optional) | no | |
source |
string (optional) | no |
sketch.copy¶
Deep-copy a sketch (elements + constraints) to target_part_id (may be the same part).
| Field | Type | Required | Default |
|---|---|---|---|
target_part_id |
string | yes | |
name |
string (optional) | no | |
part_id |
string | yes | |
sketch_id |
string | yes |
sketch.create¶
Create a sketch on an origin plane (XY/XZ/YZ) or off-origin. For a raised or pitched sketch set offset (mm along the plane normal) and/or tilt_angle (deg about the plane X axis) — useful for stacking loft profiles or angling a feature. Or pass plane_def {origin,normal,x_dir}, face_ref {part_id,face_id} to sketch on a face, edge_ref, or datum_ref. Returns the new sketch id.
| Field | Type | Required | Default |
|---|---|---|---|
name |
string | no | "Sketch" |
plane |
string | no | "XY" |
plane_def |
PlaneDefRequest (optional) | no | |
offset |
number | no | 0.0 |
tilt_angle |
number | no | 0.0 |
face_ref |
object (optional) | no | |
edge_ref |
object (optional) | no | |
datum_ref |
object (optional) | no | |
insert_after_feature_id |
string (optional) | no | |
part_id |
string | yes |
sketch.delete¶
Delete a sketch; cascade-deletes features that consume it.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
sketch_id |
string | yes |
sketch.element.delete¶
Delete one or more sketch elements (element_ids) and any constraints referencing them, then re-solve.
| Field | Type | Required | Default |
|---|---|---|---|
element_ids |
list of string | yes | |
part_id |
string | yes | |
sketch_id |
string | yes |
sketch.element.toggle_construction¶
Set the construction flag on sketch elements (element_ids). Construction geometry is auxiliary and not part of profiles.
| Field | Type | Required | Default |
|---|---|---|---|
element_ids |
list of string | yes | |
construction |
boolean | yes | |
part_id |
string | yes | |
sketch_id |
string | yes |
sketch.element.trim¶
Trim a sketch element at its intersections; the segment nearest (click_x, click_y) is removed, remaining segments kept.
| Field | Type | Required | Default |
|---|---|---|---|
element_id |
string | yes | |
click_x |
number | yes | |
click_y |
number | yes | |
part_id |
string | yes | |
sketch_id |
string | yes |
sketch.elements.add¶
Add geometry elements (line/circle/arc/point) to a sketch. Each element has a geometry_type and a flat params list in sketch-plane coordinates (line [x1,y1,x2,y2]; circle [cx,cy,r]; arc [cx,cy,r,start_deg,end_deg]; point [x,y]). Each line/circle/arc is AUTOMATICALLY given a driving dimension (length/radius) and touching endpoints are AUTOMATICALLY welded with coincident constraints, so a connected chain closes without extra work — do not re-add those dimensions or coincidences. For a rectangle or an arc through three points, prefer sketch.rectangle / sketch.arc3.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
sketch_id |
string | yes | |
elements |
list of SketchElementRequest | yes |
sketch.elements.offset¶
Create associative parallel offset copies of element_ids at the given distance (positive = outward; negative = inward).
| Field | Type | Required | Default |
|---|---|---|---|
element_ids |
list of string | no | |
distance |
number | yes | |
distance_expression |
string (optional) | no | |
part_id |
string | yes | |
sketch_id |
string | yes |
sketch.fillet¶
Round a sketch corner with an arc of the given radius. Provide element_id_a + element_id_b for one corner, or element_ids (>=2) for all shared corners.
| Field | Type | Required | Default |
|---|---|---|---|
element_id_a |
string (optional) | no | |
element_id_b |
string (optional) | no | |
element_ids |
list of string (optional) | no | |
radius |
number | yes | |
part_id |
string | yes | |
sketch_id |
string | yes |
sketch.intersect_geometry¶
Intersect the part body with the sketch plane, adding the cross-section outline as static (non-associative) sketch geometry. Set construction=true to add it as construction geometry. Section curves the sketch cannot represent (an ellipse from an oblique cylinder, a spline) are returned in 'skipped'.
| Field | Type | Required | Default |
|---|---|---|---|
construction |
boolean | no | false |
part_id |
string | yes | |
sketch_id |
string | yes |
sketch.mirror¶
Create associative mirror copies of element_ids reflected across the straight line element axis_element_id. Copies follow their sources and the axis on every solve.
| Field | Type | Required | Default |
|---|---|---|---|
element_ids |
list of string | no | |
axis_element_id |
string | yes | |
part_id |
string | yes | |
sketch_id |
string | yes |
sketch.pattern.delete¶
Delete a sketch pattern (pattern_id). keep_elements=true leaves the copies as independent geometry; false removes them.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
sketch_id |
string | yes | |
pattern_id |
string | yes | |
keep_elements |
boolean | no | true |
sketch.polygon¶
Create a regular polygon: center [x,y], radius, sides (>=3), optional rotation (deg). inscribed=true (default) puts the vertices on the radius (across-corners); inscribed=false puts the edge midpoints on it (across-flats, e.g. a hex nut). Emits a welded closed loop with equal sides and fixed corner angles.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
sketch_id |
string | yes | |
center |
list of any | yes | |
radius |
number | yes | |
sides |
integer | yes | |
rotation |
number | no | 0.0 |
inscribed |
boolean | no | true |
sketch.project_geometry¶
Project a source body's edges/faces onto the sketch plane as associative geometry that re-resolves from the live body on every rebuild (like 'Convert Entities' / 'Project'). Give edge_ids and/or a face_id (a face is expanded to its boundary edges); source_part_id defaults to the sketch's own part. Projected elements participate in profiles unless construction=true. Only lines and circles/arcs whose plane is parallel to the sketch are projected; oblique/unsupported edges are returned in 'skipped'.
| Field | Type | Required | Default |
|---|---|---|---|
source_part_id |
string (optional) | no | |
source_path |
list of string | no | |
edge_ids |
list of integer | no | |
face_ids |
list of integer | no | |
construction |
boolean | no | false |
part_id |
string | yes | |
sketch_id |
string | yes |
sketch.rectangle¶
Create a rectangle from two opposite corners p1 and p2 ([x,y] each), optionally tilted in-plane by rotation degrees about its centre. Emits four welded, closed sides — a ready-to-use closed profile in one call. A thin rotated rectangle is the canonical pitched blade/vane section; vary rotation between lofted sections to twist a blade.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
sketch_id |
string | yes | |
p1 |
list of any | yes | |
p2 |
list of any | yes | |
rotation |
number | no | 0.0 |
sketch.slot¶
Create a rounded linear slot between two centre points center_a / center_b ([x,y]) with end radius — two parallel sides capped by semicircles. A ready-to-use closed profile (e.g. a fastener slot).
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string | yes | |
sketch_id |
string | yes | |
center_a |
list of any | yes | |
center_b |
list of any | yes | |
radius |
number | yes |
sketch.update_plane¶
Re-define an existing sketch's plane (origin plane, plane_def, offset, tilt, face/edge/datum ref). Only provided fields change; dependent features rebuild.
| Field | Type | Required | Default |
|---|---|---|---|
name |
string (optional) | no | |
plane |
string (optional) | no | |
plane_def |
PlaneDefRequest (optional) | no | |
offset |
number (optional) | no | |
tilt_angle |
number (optional) | no | |
datum_ref |
object (optional) | no | |
face_ref |
object (optional) | no | |
edge_ref |
object (optional) | no | |
part_id |
string | yes | |
sketch_id |
string | yes |
slicer.printer.create¶
Create a project-level 3D printer (reusable across parts/setups). machine_preset ('generic' or 'bambu_x1c') picks a builtin engine preset; the physical facts bed_x/bed_y/bed_z (mm), nozzle_diameter (mm) and gcode_flavor ('marlin2' or 'bambu') default from it when omitted, and can be overridden. The filament is not part of the printer: it follows the sliced part's material. Returns the printer id; reference it from a slice setup.
| Field | Type | Required | Default |
|---|---|---|---|
name |
string (optional) | no | |
machine_preset |
string (optional) | no | |
bed_x |
number (optional) | no | |
bed_y |
number (optional) | no | |
bed_z |
number (optional) | no | |
nozzle_diameter |
number (optional) | no | |
gcode_flavor |
marlin2 | bambu (optional) |
no |
slicer.printer.delete¶
Delete a printer; clears it from any slice setups referencing it.
| Field | Type | Required | Default |
|---|---|---|---|
printer_id |
string | yes |
slicer.printer.update¶
Edit a printer by printer_id; only provided fields change. Changing machine_preset re-materializes bed/nozzle/flavor from the new preset unless those are also given explicitly.
| Field | Type | Required | Default |
|---|---|---|---|
printer_id |
string | yes | |
name |
string (optional) | no | |
machine_preset |
string (optional) | no | |
bed_x |
number (optional) | no | |
bed_y |
number (optional) | no | |
bed_z |
number (optional) | no | |
nozzle_diameter |
number (optional) | no | |
gcode_flavor |
marlin2 | bambu (optional) |
no |
slicer.setup.create¶
Define an FDM slicing setup on a part (part_id) or a whole assembly (assembly_id, printed as one plate with placements applied): a printer_id plus process settings. process_preset ('draft' 0.28mm / 'standard' 0.20mm / 'fine' 0.12mm) is the base; every other field overrides one preset value and may be omitted to use the preset (null = preset value). Overridable: layer_height (mm), wall_count, top_layers, bottom_layers, infill_density (0..1 fraction), infill_pattern (rectilinear/grid/triangles/cubic/honeycomb/gyroid), seam (nearest/aligned/back), print_speed & first_layer_speed (mm/s), skirt_loops, brim_width (mm, 0=off). Supports: support_enabled (default off), support_type (normal grid / tree branching), support_angle (overhang threshold degrees from horizontal). Filament settings (temperatures, cooling, flow) are not set here: they come from the part's assigned material — see material.create / part.assign_material. material_id names a printable stand-in used only when the part's own material isn't printable (e.g. prototyping a steel part in PLA). Returns the setup id; then call the slice generate endpoint (or slice_part) to compute layers + G-code.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string (optional) | no | |
assembly_id |
string (optional) | no | |
name |
string (optional) | no | |
printer_id |
string (optional) | no | |
process_preset |
string (optional) | no | |
layer_height |
number (optional) | no | |
wall_count |
integer (optional) | no | |
top_layers |
integer (optional) | no | |
bottom_layers |
integer (optional) | no | |
infill_density |
number (optional) | no | |
infill_pattern |
rectilinear | grid | triangles | cubic | honeycomb | gyroid (optional) |
no | |
seam |
nearest | aligned | back (optional) |
no | |
wall_generator |
classic | arachne (optional) |
no | |
gap_fill |
boolean (optional) | no | |
ironing |
boolean (optional) | no | |
print_speed |
number (optional) | no | |
first_layer_speed |
number (optional) | no | |
skirt_loops |
integer (optional) | no | |
brim_width |
number (optional) | no | |
support_enabled |
boolean (optional) | no | |
support_type |
normal | tree (optional) |
no | |
support_angle |
number (optional) | no | |
material_id |
string (optional) | no | |
placement |
SlicePlacement (optional) | no |
slicer.setup.delete¶
Delete a slice setup by id.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string (optional) | no | |
assembly_id |
string (optional) | no | |
setup_id |
string | yes |
slicer.setup.update¶
Edit a slice setup (setup_id): any of the create fields. Only provided fields change; set an override to null to fall back to the preset.
| Field | Type | Required | Default |
|---|---|---|---|
part_id |
string (optional) | no | |
assembly_id |
string (optional) | no | |
name |
string (optional) | no | |
printer_id |
string (optional) | no | |
process_preset |
string (optional) | no | |
layer_height |
number (optional) | no | |
wall_count |
integer (optional) | no | |
top_layers |
integer (optional) | no | |
bottom_layers |
integer (optional) | no | |
infill_density |
number (optional) | no | |
infill_pattern |
rectilinear | grid | triangles | cubic | honeycomb | gyroid (optional) |
no | |
seam |
nearest | aligned | back (optional) |
no | |
wall_generator |
classic | arachne (optional) |
no | |
gap_fill |
boolean (optional) | no | |
ironing |
boolean (optional) | no | |
print_speed |
number (optional) | no | |
first_layer_speed |
number (optional) | no | |
skirt_loops |
integer (optional) | no | |
brim_width |
number (optional) | no | |
support_enabled |
boolean (optional) | no | |
support_type |
normal | tree (optional) |
no | |
support_angle |
number (optional) | no | |
material_id |
string (optional) | no | |
placement |
SlicePlacement (optional) | no | |
setup_id |
string | yes |