feature_hole
Drills simple, counterbore, or countersink holes—optionally tapped—into Fusion 360 bodies using face, sketch-point, center, or offset placements.
Instructions
Drill simple, counterbore or countersink holes - optionally tapped - into a body.
Units: diameters, depths, offsets and points are in units (default mm); angles in
degrees; a string is a Fusion expression ("bolt_d + 0.5"). Refs: planar faces and
edges from inspect_query (refs go stale after later features - use the latest
results), sketch points from sketch_draw (all points of one call in one sketch on the
face), construction planes from construction_plane.
Kinds: simple needs only diameter; counterbore needs cb_diameter and cb_depth; countersink needs cs_diameter (cs_angle default 90). Fields of another kind are refused. tip_angle defaults to 118 deg (180 = flat bottom). The hole always cuts; participant_bodies limits which bodies.
Tapped hole: thread={"designation": "M6x1"} (ThreadSpec: thread_type default "ISO Metric profile", designation, thread_class, modeled=false (cosmetic), full_length=true or length + offset, location high|low). Drill the tap-drill diameter (M6x1 -> 5). If the thread cannot be created the whole call fails and neither the hole nor the thread stays. See feature_thread_options for valid designations.
Errors: a missing kind field, a non-planar face, a non-circular center edge, an unknown designation (details.available) -> INVALID_PARAMS (nothing changed); a hole or thread Fusion computes with an error -> FUSION_API_ERROR and the timeline is rolled back.
Returns {"feature": {ref, type, name}, "health": {"state", "message"}, "created_bodies": [], "modified_bodies": [{ref, type, name}] (the drilled body), "removed_bodies": [], "holes": , "thread"?: {"type", "designation", "class", "internal": true, "modeled", "feature": {ref, type, name}, "health", "faces"}}.
Examples:
feature_hole(placement={"type": "sketch_points", "points": [p1, p2, p3, p4]}, kind="counterbore", diameter=5.5, cb_diameter=10, cb_depth=5.5, extent={"type": "through_all"})
feature_hole(placement={"type": "point", "face": , "point": [10, 10, 20]}, diameter=5, extent={"type": "distance", "depth": 12}, thread={"designation": "M6x1"})
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| flip | No | Drill the other way from the face | |
| kind | No | simple (default), counterbore or countersink | simple |
| units | No | Unit of plain-number lengths and points | mm |
| extent | Yes | How deep: {"type": "distance", "depth"} | {"type": "through_all"} | {"type": "to_entity", "entity"} | |
| thread | No | Tapped hole: thread on the bore in the same call, e.g. {"designation": "M6x1"}; omit designation to let Fusion pick it from the bore diameter | |
| cb_depth | No | counterbore only: counterbore depth | |
| cs_angle | No | countersink only: included angle, degrees (default 90) | |
| diameter | Yes | Hole (bore) diameter | |
| placement | Yes | Where: {"type": "point", "face", "point": [x,y,z]} | {"type": "sketch_points", "points": [refs]} (one hole per point) | {"type": "face_offsets", "face", "point", "edge1", "offset1", "edge2", "offset2"} | {"type": "center", "face", "edge"} (circular edge) | |
| tip_angle | No | Drill point angle at the bottom, degrees | |
| cb_diameter | No | counterbore only: counterbore diameter | |
| cs_diameter | No | countersink only: countersink diameter | |
| participant_bodies | No | Body refs the hole may cut (default: every body it meets) |