Move a node inside an organization
/api/v1/organizations/{id}/nodes/{nodeId}/moveMoves the node beneath parent_node_id, a node inside the same organization. Authorized at both ends, as Google Cloud and Azure authorize a move: the caller needs the developer's hierarchy.manage, or canopy:structure.manage, at the node's current parent and at the destination, so an office's admin reorganizes teams inside the office and can move none of them out of it, nor move the office itself. The schema, depth and cycle rules of POST /nodes/{id}/move apply. Preview it first with POST .../move/preview and send the version it answers as If-Match and its parent_version in the body: a node or destination changed since answers 409. Emits node.moved.
Authentication
Authorization Option A JWT access token. Never send alongside X-API-Key: a request carrying both is refused.
X-API-Key Option B API key for management-tier access. Never send alongside an Authorization header: a request carrying both is refused.
Path Parameters
idstring Required nodeIdstring Required Headers
If-MatchOptimistic-lock version of the resource. Send the `version` field returned on read; the server rejects with 409 if the row has changed since.
Request body
application/json
parent_node_idstring Required parent_versionnumber Optional The destination's `version`, as the move's preview read it: the move answers `409 version_mismatch` when the destination has changed since
Responses
application/json
data *NodeResponseDto
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
application/json
error *ApiErrorBodyDto
Returned object
curl -X POST "https://auth.canopy-io.com/api/v1/organizations/value/nodes/value/move" \ -H "If-Match: "3"" \ -H "X-API-Key: $CANOPY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "parent_node_id": "string", "parent_version": 0 }'
{ "data": { "id": "string", "application_id": "string", "parent_node_id": "string", "node_type": "string", "name": "string", "description": "string", "slug": "string", "status": "string", "metadata": {}, "created_at": "2026-04-20T12:00:00.000Z", "updated_at": "2026-04-20T12:00:00.000Z", "version": 0 } }
Tell us how we can improve this guide.