Genealogy
Modify a tree definition
Company admin access is required. Writes require developer.update. Droplet installation tokens are not supported. This registry API does not place or move members. Default role trees cannot be removed or have their role cleared. The example uses illustrative fixture IDs. Substitute records visible to your authenticated company or member.
PATCH
/
api
/
company
/
v2026-10
/
genealogy
/
trees
/
{id}
Modify a tree definition
curl -X PATCH 'https://api.fluid.app/api/company/v2026-10/genealogy/trees/9b7310f6-6dac-5a77-9726-21c9fade457a' \
-H 'Authorization: Bearer <company-token>' \
-H 'Content-Type: application/json' \
--data \{\"tree\":\{\"lock_version\":1,\"allow_multiple_positions\":false,\"volume_key\":null\}\}import requests
url = "https://api.fluid.app/api/company/v2026-10/genealogy/trees/{id}"
payload = { "tree": {
"lock_version": 1,
"allow_multiple_positions": False,
"volume_key": None
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({tree: {lock_version: 1, allow_multiple_positions: false, volume_key: null}})
};
fetch('https://api.fluid.app/api/company/v2026-10/genealogy/trees/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fluid.app/api/company/v2026-10/genealogy/trees/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'tree' => [
'lock_version' => 1,
'allow_multiple_positions' => false,
'volume_key' => null
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/company/v2026-10/genealogy/trees/{id}"
payload := strings.NewReader("{\n \"tree\": {\n \"lock_version\": 1,\n \"allow_multiple_positions\": false,\n \"volume_key\": null\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.fluid.app/api/company/v2026-10/genealogy/trees/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"tree\": {\n \"lock_version\": 1,\n \"allow_multiple_positions\": false,\n \"volume_key\": null\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/company/v2026-10/genealogy/trees/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"tree\": {\n \"lock_version\": 1,\n \"allow_multiple_positions\": false,\n \"volume_key\": null\n }\n}"
response = http.request(request)
puts response.read_body{
"tree": {
"allow_multiple_positions": false,
"authority": "unconfigured",
"created_at": "2026-09-10T03:03:10Z",
"default_placement_rule": "under_enroller",
"external_integration_market_id": null,
"holding_tank_days": 0,
"id": "9b7310f6-6dac-5a77-9726-21c9fade457a",
"key": "enrollment",
"kind": "unilevel",
"leg_names": [],
"lock_version": 2,
"max_depth": 300,
"max_movement_levels": 0,
"movement_approval": "immediate",
"movement_window_days": 0,
"name": "Enrollment",
"owning_company_integration_id": null,
"role": "enrollment",
"updated_at": "2026-09-10T03:03:17Z",
"upstream_tree_ref": null,
"volume_key": null,
"volume_on_move": null
},
"status": 200,
"meta": {
"request_uuid": null,
"timestamp": "2026-09-10T03:03:17Z"
}
}{
"message": "<string>",
"error": "<unknown>"
}{
"message": "<string>",
"error": "<unknown>"
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}Authorizations
Company admin or company service token, subject to developer permissions.
Path Parameters
Identifier of a tree owned by the authenticated company.
Body
application/json
Tree definition fields. Ownership must be declared explicitly on creation.
Include lock_version and at least one tree attribute to update.
Show child attributes
Show child attributes
⌘I
Modify a tree definition
curl -X PATCH 'https://api.fluid.app/api/company/v2026-10/genealogy/trees/9b7310f6-6dac-5a77-9726-21c9fade457a' \
-H 'Authorization: Bearer <company-token>' \
-H 'Content-Type: application/json' \
--data \{\"tree\":\{\"lock_version\":1,\"allow_multiple_positions\":false,\"volume_key\":null\}\}import requests
url = "https://api.fluid.app/api/company/v2026-10/genealogy/trees/{id}"
payload = { "tree": {
"lock_version": 1,
"allow_multiple_positions": False,
"volume_key": None
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({tree: {lock_version: 1, allow_multiple_positions: false, volume_key: null}})
};
fetch('https://api.fluid.app/api/company/v2026-10/genealogy/trees/{id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.fluid.app/api/company/v2026-10/genealogy/trees/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'tree' => [
'lock_version' => 1,
'allow_multiple_positions' => false,
'volume_key' => null
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/company/v2026-10/genealogy/trees/{id}"
payload := strings.NewReader("{\n \"tree\": {\n \"lock_version\": 1,\n \"allow_multiple_positions\": false,\n \"volume_key\": null\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://api.fluid.app/api/company/v2026-10/genealogy/trees/{id}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"tree\": {\n \"lock_version\": 1,\n \"allow_multiple_positions\": false,\n \"volume_key\": null\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/company/v2026-10/genealogy/trees/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"tree\": {\n \"lock_version\": 1,\n \"allow_multiple_positions\": false,\n \"volume_key\": null\n }\n}"
response = http.request(request)
puts response.read_body{
"tree": {
"allow_multiple_positions": false,
"authority": "unconfigured",
"created_at": "2026-09-10T03:03:10Z",
"default_placement_rule": "under_enroller",
"external_integration_market_id": null,
"holding_tank_days": 0,
"id": "9b7310f6-6dac-5a77-9726-21c9fade457a",
"key": "enrollment",
"kind": "unilevel",
"leg_names": [],
"lock_version": 2,
"max_depth": 300,
"max_movement_levels": 0,
"movement_approval": "immediate",
"movement_window_days": 0,
"name": "Enrollment",
"owning_company_integration_id": null,
"role": "enrollment",
"updated_at": "2026-09-10T03:03:17Z",
"upstream_tree_ref": null,
"volume_key": null,
"volume_on_move": null
},
"status": 200,
"meta": {
"request_uuid": null,
"timestamp": "2026-09-10T03:03:17Z"
}
}{
"message": "<string>",
"error": "<unknown>"
}{
"message": "<string>",
"error": "<unknown>"
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"status": 123,
"error": {
"message": "<string>",
"details": {}
},
"meta": {
"request_uuid": "<string>",
"timestamp": "2023-11-07T05:31:56Z"
}
}