curl --request GET \
--url https://api.reasonmachines.ai/v3/organizations/{orgId}/sessions/{sessionId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reasonmachines.ai/v3/organizations/{orgId}/sessions/{sessionId}"
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.ai/v3/organizations/{orgId}/sessions/{sessionId}', 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.ai/v3/organizations/{orgId}/sessions/{sessionId}",
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.ai/v3/organizations/{orgId}/sessions/{sessionId}"
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.ai/v3/organizations/{orgId}/sessions/{sessionId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reasonmachines.ai/v3/organizations/{orgId}/sessions/{sessionId}")
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{
"session_policy": {
"version": 1,
"mode": "standard",
"components": {
"memoryRead": true,
"memoryWrite": true,
"skills": true,
"inheritedInstructions": true,
"integrations": true,
"secretInjection": true
},
"workspaceOwnership": "ara-managed"
},
"benchmark_profile": "coding-benchmark-v1",
"session_id": "<string>",
"status": "running",
"url": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"finished_at": "2023-11-07T05:31:56Z",
"title": "<string>",
"prompt": "<string>",
"prompt_truncated": true,
"prompt_bytes": 123,
"tags": [
"<string>"
],
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"repo": "<string>",
"provider": "github",
"model": "<string>",
"reasoning_effort": "<string>",
"hands_mode": "adaptive",
"branch": "<string>",
"pr_url": "<string>",
"pr_title": "<string>",
"result_summary": "<string>",
"outcome": "success",
"result": "<unknown>",
"error_class": "<string>",
"error_message": "<string>",
"failure_diagnostics": {
"failure_stage": "<string>",
"reason_code": "<string>",
"root_cause": "<string>"
},
"failure_stage": "<string>",
"reason_code": "<string>",
"root_cause": "<string>",
"diagnostic_message": "<string>",
"duration_ms": 123,
"cost_usd": 123,
"usage": {
"input_tokens": 123,
"output_tokens": 123,
"total_tokens": 123
},
"context": {
"tokens": 123,
"window": 123,
"percent": 123
},
"is_archived": true,
"session_type": "session",
"source_session_id": "<string>",
"read_only": true,
"repos": [
"<string>"
],
"change_requests": [
{
"url": "<string>",
"status": "active"
}
]
}{
"error": "session_not_found"
}Retrieve a session
Returns the stable Session identity with current execution state, a bounded redacted error_message, and best-effort failure_diagnostics. Unknown diagnostic fields are null. A previously returned physical Attempt UUID remains accepted as a compatibility alias, but the response always carries the Session session_id and URL.
sessions:readcurl --request GET \
--url https://api.reasonmachines.ai/v3/organizations/{orgId}/sessions/{sessionId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.reasonmachines.ai/v3/organizations/{orgId}/sessions/{sessionId}"
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.ai/v3/organizations/{orgId}/sessions/{sessionId}', 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.ai/v3/organizations/{orgId}/sessions/{sessionId}",
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.ai/v3/organizations/{orgId}/sessions/{sessionId}"
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.ai/v3/organizations/{orgId}/sessions/{sessionId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reasonmachines.ai/v3/organizations/{orgId}/sessions/{sessionId}")
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{
"session_policy": {
"version": 1,
"mode": "standard",
"components": {
"memoryRead": true,
"memoryWrite": true,
"skills": true,
"inheritedInstructions": true,
"integrations": true,
"secretInjection": true
},
"workspaceOwnership": "ara-managed"
},
"benchmark_profile": "coding-benchmark-v1",
"session_id": "<string>",
"status": "running",
"url": "<string>",
"created_at": "2023-11-07T05:31:56Z",
"started_at": "2023-11-07T05:31:56Z",
"finished_at": "2023-11-07T05:31:56Z",
"title": "<string>",
"prompt": "<string>",
"prompt_truncated": true,
"prompt_bytes": 123,
"tags": [
"<string>"
],
"project_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"repo": "<string>",
"provider": "github",
"model": "<string>",
"reasoning_effort": "<string>",
"hands_mode": "adaptive",
"branch": "<string>",
"pr_url": "<string>",
"pr_title": "<string>",
"result_summary": "<string>",
"outcome": "success",
"result": "<unknown>",
"error_class": "<string>",
"error_message": "<string>",
"failure_diagnostics": {
"failure_stage": "<string>",
"reason_code": "<string>",
"root_cause": "<string>"
},
"failure_stage": "<string>",
"reason_code": "<string>",
"root_cause": "<string>",
"diagnostic_message": "<string>",
"duration_ms": 123,
"cost_usd": 123,
"usage": {
"input_tokens": 123,
"output_tokens": 123,
"total_tokens": 123
},
"context": {
"tokens": 123,
"window": 123,
"percent": 123
},
"is_archived": true,
"session_type": "session",
"source_session_id": "<string>",
"read_only": true,
"repos": [
"<string>"
],
"change_requests": [
{
"url": "<string>",
"status": "active"
}
]
}{
"error": "session_not_found"
}Authorizations
Your Reason API key from Settings > API. 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, automations:read, automations:write, agent_auth:read. mcp:write manages MCP server configuration only; it does not authorize remote MCP-tool execution. sessions:debug is privileged: it expands diagnostic session events only for organization owners/admins.
Path Parameters
Organization id or slug. Resolve it with GET /v3/self.
The session id.
Response
The session.
Current lifecycle snapshot. Without sessions:debug, includes Session identity, status, timestamps, resolved session_policy, error_class, duration_ms, cost_usd and usage; excludes prompt, result content and diagnostic context.
Server-resolved immutable Session policy. Enabled components remain subject to normal permissions and configuration.
Show child attributes
Show child attributes
"coding-benchmark-v1"running, exit (completed), error, or suspended (cancelled/quota).
running, exit, error, suspended Web URL to watch the session.
The opening instruction, truncated to 16 KiB. Check prompt_truncated; read the session messages for the full text.
True when prompt was cut to the 16 KiB echo limit.
UTF-8 byte length of the full prompt, before truncation.
Project containing the session, or null for an unassigned session.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Source-control provider for the session repository.
github, gitlab Concrete model selected for this session, or null when inherited.
Durable physical execution policy. Brain-only sessions never acquire a shell, browser, sandbox, or physical secret environment.
adaptive, brain_only Caller-facing task outcome. Null when execution did not produce a task outcome.
success, failure, action_required Caller-defined JSON result for a noninteractive completion, or the ordinary final summary for legacy Sessions.
Stable runtime failure class when execution did not produce a task outcome.
Redacted persisted error preview, bounded to 1000 characters; null when unavailable.
Best-effort attribution from persisted failure signatures. Unknown stages and root causes remain null.
Show child attributes
Show child attributes
Execution stage where failure occurred.
Specific machine-readable reason code for the failure.
Root cause classification of the failure.
Fixed public message selected from an allowlisted persisted error class, never error prose, prompts or tool output. Null when unknown.
160Total model spend in USD across the session's turns. Null when usage was never reported.
Token usage totals for the session. Fields are null for runs that predate usage persistence.
Show child attributes
Show child attributes
Live context occupancy after the latest turn (not billing throughput).
Show child attributes
Show child attributes
Session, sidechat fork, or read-only subagent Session.
session, sidechat, subagent The fork source for a sidechat or spawning Session for a subagent; null for a normal Session.
True only for subagent Sessions.
Every repository currently attached to the session, as owner/name. Present on Retrieve a session only, and only when recorded.
Every change request the session opened, including ones in repositories other than repo. Present on Retrieve a session only, and only when recorded.
Show child attributes
Show child attributes

