curl --request GET \
--url https://api.atako.ai/floor/state \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.atako.ai/floor/state"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.atako.ai/floor/state', 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.atako.ai/floor/state",
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.atako.ai/floor/state"
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.atako.ai/floor/state")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.atako.ai/floor/state")
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{
"teams": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"parentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"companyId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"lead": {
"kind": "human",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"leadIsDefault": true
}
],
"agents": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"status": "active",
"teamId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"avatarSeed": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"lastActivityAt": "2023-11-07T05:31:56Z",
"clientId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"managerHumanId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"managerSource": "own",
"engine": "openclaw"
}
],
"members": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"title": "<string>",
"teamId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"positions": [
{
"teamId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"positionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>"
}
],
"image": "<string>"
}
],
"layout": {
"pods": [
{
"teamId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"x": 123,
"z": 123
}
],
"agents": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slot": 123
}
],
"members": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slot": 123
}
]
},
"layoutVersion": 123
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Aggregated Agent Floor state (teams, agents, members)
Single-shot read for the Agent Floor 3D scene: your company’s teams (with org-chart positions), non-completed agents (with a derived managerHumanId), and members. Open to any company member — admin and member get the exact same shape. 404 (not 403) when you have no company, so the route is invisible rather than merely blocked. The floor is open to every company.
curl --request GET \
--url https://api.atako.ai/floor/state \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.atako.ai/floor/state"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.atako.ai/floor/state', 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.atako.ai/floor/state",
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.atako.ai/floor/state"
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.atako.ai/floor/state")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.atako.ai/floor/state")
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{
"teams": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"parentId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"companyId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"lead": {
"kind": "human",
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
},
"leadIsDefault": true
}
],
"agents": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"status": "active",
"teamId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"avatarSeed": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"lastActivityAt": "2023-11-07T05:31:56Z",
"clientId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"managerHumanId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"managerSource": "own",
"engine": "openclaw"
}
],
"members": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"title": "<string>",
"teamId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"positions": [
{
"teamId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"positionId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"title": "<string>"
}
],
"image": "<string>"
}
],
"layout": {
"pods": [
{
"teamId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"x": 123,
"z": 123
}
],
"agents": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slot": 123
}
],
"members": [
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"slot": 123
}
]
},
"layoutVersion": 123
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Authorizations
An aik_… programmatic API key (app.atako.ai → Settings → API keys) or a Supabase session JWT.
Response
GET /floor/state — single-shot aggregated read for the Agent Floor 3D scene. Nothing stored anew: teams/positions and members come from getTeamsByCompanyId/listCompanyMembers, agents from a floor-specific minimal query.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
null = automatic layout (nobody ever moved anything on this floor).
Show child attributes
Show child attributes
Optimistic version of the stored layout; null when there is none.