Genealogy
List company move requests
Read requests for one company tree. Pending requests past the current movement window appear expired without modifying stored rows. Requires members.view or the legacy users.view permission. The example uses illustrative fixture IDs. Substitute records visible to your authenticated company or member.
GET
/
api
/
company
/
v2026-10
/
genealogy
/
trees
/
{tree_id}
/
move-requests
List company move requests
curl -X GET 'https://api.fluid.app/api/company/v2026-10/genealogy/trees/7096ad49-7117-53f6-8f7f-4805473d14c5/move-requests?limit=1' \
-H 'Authorization: Bearer <company-token>'import requests
url = "https://api.fluid.app/api/company/v2026-10/genealogy/trees/{tree_id}/move-requests"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/company/v2026-10/genealogy/trees/{tree_id}/move-requests', 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/{tree_id}/move-requests",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/company/v2026-10/genealogy/trees/{tree_id}/move-requests"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fluid.app/api/company/v2026-10/genealogy/trees/{tree_id}/move-requests")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/company/v2026-10/genealogy/trees/{tree_id}/move-requests")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"move_requests": [
{
"id": "01a08944-f617-7428-a9af-de1073e7d616",
"created_at": "2026-09-10T03:03:13.175042Z",
"decided_at": null,
"decided_by_id": null,
"decided_by_type": null,
"decision_reason": null,
"expires_at": "2026-09-17T03:03:13.150632Z",
"leg": null,
"node_id": "01a08944-f5fe-7cbc-91dc-22088fa6c5cd",
"parent_node_id": "01a08944-f603-7ec5-b0d6-e61b6ddca410",
"placement_id": null,
"reason": "Second",
"requested_by_id": "c0dd6812-0ba6-56d2-879c-a36112f813c2",
"requested_by_type": "Company::Member",
"status": "pending",
"tree_id": "7096ad49-7117-53f6-8f7f-4805473d14c5"
}
],
"status": 200,
"meta": {
"request_uuid": null,
"timestamp": "2026-09-10T03:03:13Z",
"pagination": {
"cursor": null,
"limit": 1,
"prev_cursor": null,
"next_cursor": "eyJmIjp7ImdlbmVhbG9neV9tb3ZlX3JlcXVlc3RzLmNyZWF0ZWRfYXQiOiIyMDI2LTA5LTEwVDAzOjAzOjEzLjE3NTA0MloiLCJnZW5lYWxvZ3lfbW92ZV9yZXF1ZXN0cy5pZCI6IjAxYTA4OTQ0LWY2MTctNzQyOC1hOWFmLWRlMTA3M2U3ZDYxNiJ9LCJkIjoibmV4dCIsImMiOjE3ODkwMDkzOTMsImNzIjoiOWNjOTFjZGJmYzkzM2U2MTc0ZGM1OTQzZGIzYzhhM2IiLCJvcyI6IjEwMzZjNGNjMjNkZTAyYjBjZWQwZjA1ZDM4OTFjYTMzIiwicXMiOiJjNTk3MzU1NjYzMGM5ZTkwNWNhMTdiNThmN2FlNjY4NCJ9"
}
}
}{
"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"
}
}Authorizations
Company admin or company service token, subject to developer permissions.
Path Parameters
Company tree UUID.
Query Parameters
Currently effective request status.
Available options:
pending, approved, rejected, withdrawn, superseded, expired Maximum page size.
Required range:
1 <= x <= 100Opaque continuation cursor.
⌘I
List company move requests
curl -X GET 'https://api.fluid.app/api/company/v2026-10/genealogy/trees/7096ad49-7117-53f6-8f7f-4805473d14c5/move-requests?limit=1' \
-H 'Authorization: Bearer <company-token>'import requests
url = "https://api.fluid.app/api/company/v2026-10/genealogy/trees/{tree_id}/move-requests"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.fluid.app/api/company/v2026-10/genealogy/trees/{tree_id}/move-requests', 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/{tree_id}/move-requests",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.fluid.app/api/company/v2026-10/genealogy/trees/{tree_id}/move-requests"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.fluid.app/api/company/v2026-10/genealogy/trees/{tree_id}/move-requests")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.fluid.app/api/company/v2026-10/genealogy/trees/{tree_id}/move-requests")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"move_requests": [
{
"id": "01a08944-f617-7428-a9af-de1073e7d616",
"created_at": "2026-09-10T03:03:13.175042Z",
"decided_at": null,
"decided_by_id": null,
"decided_by_type": null,
"decision_reason": null,
"expires_at": "2026-09-17T03:03:13.150632Z",
"leg": null,
"node_id": "01a08944-f5fe-7cbc-91dc-22088fa6c5cd",
"parent_node_id": "01a08944-f603-7ec5-b0d6-e61b6ddca410",
"placement_id": null,
"reason": "Second",
"requested_by_id": "c0dd6812-0ba6-56d2-879c-a36112f813c2",
"requested_by_type": "Company::Member",
"status": "pending",
"tree_id": "7096ad49-7117-53f6-8f7f-4805473d14c5"
}
],
"status": 200,
"meta": {
"request_uuid": null,
"timestamp": "2026-09-10T03:03:13Z",
"pagination": {
"cursor": null,
"limit": 1,
"prev_cursor": null,
"next_cursor": "eyJmIjp7ImdlbmVhbG9neV9tb3ZlX3JlcXVlc3RzLmNyZWF0ZWRfYXQiOiIyMDI2LTA5LTEwVDAzOjAzOjEzLjE3NTA0MloiLCJnZW5lYWxvZ3lfbW92ZV9yZXF1ZXN0cy5pZCI6IjAxYTA4OTQ0LWY2MTctNzQyOC1hOWFmLWRlMTA3M2U3ZDYxNiJ9LCJkIjoibmV4dCIsImMiOjE3ODkwMDkzOTMsImNzIjoiOWNjOTFjZGJmYzkzM2U2MTc0ZGM1OTQzZGIzYzhhM2IiLCJvcyI6IjEwMzZjNGNjMjNkZTAyYjBjZWQwZjA1ZDM4OTFjYTMzIiwicXMiOiJjNTk3MzU1NjYzMGM5ZTkwNWNhMTdiNThmN2FlNjY4NCJ9"
}
}
}{
"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"
}
}