## Soft Remove **delete** `/v1/taxonomy/nodes/{node_id}` Soft-removes a taxonomy node (sets removed_at/removed_by) and records a soft_remove event attributed to actor_id. The node is retained for audit but excluded from tree responses. Tenant-scoped; returns 404 if the node does not belong to the tenant. While a tenant data purge runs for the same tenant_id, the request is rejected with HTTP 409 (code `tenant_write_conflict`). ### Path Parameters - `node_id: string` ### Query Parameters - `actor_id: string` Identifier of the actor performing the removal (recorded in the audit event). - `tenant_id: string` Tenant that owns the node. ### Returns - `Node = object { id, created_at, label, 13 more }` A node in a taxonomy tree. Non-root nodes have a parent; leaf nodes reference the cluster they summarize. - `id: string` - `created_at: string` - `label: string` - `level: number` Depth in the tree; the root is level 0. - `node_type: "root" or "branch" or "leaf"` Position of a node within the taxonomy tree. - `"root"` - `"branch"` - `"leaf"` - `run_id: string` - `sort_order: number` - `updated_at: string` - `children: optional array of Node` Child nodes, present when the tree is returned hierarchically. - `cluster_id: optional string` Cluster this node summarizes; typically present on leaf nodes. - `description: optional string` - `metadata: optional map[unknown]` - `original_label: optional string` Label as originally generated, before any rename. - `parent_id: optional string` Parent node ID; absent for the root node. - `removed_at: optional string` Set when the node has been soft-removed. - `removed_by: optional string` Actor that soft-removed the node. ### Example ```http curl http://localhost:8080/v1/taxonomy/nodes/$NODE_ID \ -X DELETE \ -H "Authorization: Bearer $HUB_API_KEY" ```