curl --request GET \
--url https://api.reasonmachines.com/v3/organizations/{orgId}/agent-network/team \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reasonmachines.com/v3/organizations/{orgId}/agent-network/team"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.reasonmachines.com/v3/organizations/{orgId}/agent-network/team', 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.reasonmachines.com/v3/organizations/{orgId}/agent-network/team",
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.reasonmachines.com/v3/organizations/{orgId}/agent-network/team"
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.reasonmachines.com/v3/organizations/{orgId}/agent-network/team")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reasonmachines.com/v3/organizations/{orgId}/agent-network/team")
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{
"team": "<string>",
"me": "<string>",
"sessions": [
{
"address": "<string>",
"machine": "<string>",
"agent": "<string>",
"status": "<string>",
"since": 123,
"repo": "<string>",
"branch": "<string>",
"doing": "<string>",
"tier": "<string>",
"worker": true,
"is_me": true
}
],
"unreachable": 123,
"unread": {
"count": 123,
"from": [
"<string>"
]
},
"note": "<string>"
}{
"error": "missing_bearer",
"message": "Authorization required"
}{
"error": "missing_scope",
"required_scope": "sessions:read"
}{
"error": {
"type": "rate_limited",
"message": "This API key exceeded its request-rate limit"
}
}List the agent sessions on the caller's Reason Network
Reason Network’s list_team: the live agent sessions on the caller’s Reason Network (the workspace’s network, or the one a connector grant joined) across its computers (Claude Code, Codex, Cursor, workers and others), read through a member’s computer that is online with Reason running, with the caller’s own address under me and its unread messages under unread. Sessions that can’t receive (not on Reason Network) are left out and counted in unreachable, as the engine shows them to agents. Answers 409 agent_network_offline when no member computer is online, and 409 agent_network_no_answer when one is but didn’t read the network in time or said why it couldn’t (trying again is safe). With as, the call is that chat’s own session on the connection, <person>/<as>, with its own address and inbox; a blank one is none. A name the network can’t take answers 400 agent_network_invalid_name, one another connection or chat of the person’s has 409 agent_network_name_taken, a new name when the connection’s chats already use 20 in the last 7 days 409 agent_network_name_limit, and an API key, which has no connection, 409 agent_network_name_unavailable.
sessions:readcurl --request GET \
--url https://api.reasonmachines.com/v3/organizations/{orgId}/agent-network/team \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reasonmachines.com/v3/organizations/{orgId}/agent-network/team"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.reasonmachines.com/v3/organizations/{orgId}/agent-network/team', 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.reasonmachines.com/v3/organizations/{orgId}/agent-network/team",
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.reasonmachines.com/v3/organizations/{orgId}/agent-network/team"
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.reasonmachines.com/v3/organizations/{orgId}/agent-network/team")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reasonmachines.com/v3/organizations/{orgId}/agent-network/team")
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{
"team": "<string>",
"me": "<string>",
"sessions": [
{
"address": "<string>",
"machine": "<string>",
"agent": "<string>",
"status": "<string>",
"since": 123,
"repo": "<string>",
"branch": "<string>",
"doing": "<string>",
"tier": "<string>",
"worker": true,
"is_me": true
}
],
"unreachable": 123,
"unread": {
"count": 123,
"from": [
"<string>"
]
},
"note": "<string>"
}{
"error": "missing_bearer",
"message": "Authorization required"
}{
"error": "missing_scope",
"required_scope": "sessions:read"
}{
"error": {
"type": "rate_limited",
"message": "This API key exceeded its request-rate limit"
}
}Authorizations
Your Reason API key from Settings › API keys. New keys use reason_; legacy ara_ keys remain accepted. Keys are capability-scoped: run, mcp:read, mcp:write, secrets:read, secrets:write, sessions:read, sessions:debug, knowledge:read, memory:read, memory:write, skills:read, skills:write, repos:read, repos:write, reviews:read, reviews:write, deployment:read, analytics:read, org:read, org:write, attachments:read, attachments:write, guardrails:read, guardrails:write, network:read, network:write, automations:read, automations:write, agent_auth:read. network:read and network:write are opt-in, excluded from default keys. network:read reads the saved workspace network policy; network:write replaces custom allowed hosts and requires a current organization owner/admin. Legacy project PATCH requests containing network_allowed_hosts also require network:write plus their existing run scope and project management permission; saved project hosts do not affect current session egress. Only owners/admins can mint or manage keys with network:write; keys cannot grant themselves more authority. See /docs/network-policies for replacement semantics and runtime applicability. mcp:write manages MCP server configuration only; it does not authorize remote MCP-tool execution. sessions:read reads sessions, including the assistant, reasoning and tool activity in their events. sessions:debug is privileged: only for organization owners/admins, it expands session events to the full diagnostic projection (diagnostic event kinds, status text and raw event metadata).
Path Parameters
Organization id or slug. Resolve it with GET /v3/self.
Query Parameters
Only sessions matching this text (person, session, machine, agent, repo, branch or what it's doing).
Also list sessions that are offline.
This chat's own name, such as editor, when the user talks to Reason Network from several chats of this app: the call is then that chat's own session, person/editor, with its own inbox, and a name another connection or chat of the user's has is refused. 1 to 32 lowercase letters, digits and dashes. Left out or blank, the connection's own session.
300Response
The network's sessions.
The network's name.
The caller's own address, person/agent, which its messages go out from and replies reach.
Show child attributes
Show child attributes
Sessions left out because they aren't on Reason Network and can't be messaged.
Messages to the caller's agent it hasn't read, and who sent them, as check_inbox returns them; null when there are none.
Show child attributes
Show child attributes
What the caller should know: no computer to send from, a listing that couldn't do what was asked, a computer of the user's that needs a Reason CLI update, or that messages to it don't start its routine yet.

