Get Research Run Detail
curl --request GET \
--url https://api.example.com/api/graph/v1/research-runs/{run_id}import requests
url = "https://api.example.com/api/graph/v1/research-runs/{run_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/api/graph/v1/research-runs/{run_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.example.com/api/graph/v1/research-runs/{run_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.example.com/api/graph/v1/research-runs/{run_id}"
req, _ := http.NewRequest("GET", url, nil)
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.example.com/api/graph/v1/research-runs/{run_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/graph/v1/research-runs/{run_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"run_id": "<string>",
"status": "<string>",
"gates": [
{
"key": "<string>",
"role": "<string>",
"mandate": "<string>",
"state": "<string>",
"note": "<string>",
"when": "2023-11-07T05:31:56Z"
}
],
"evidence": [
{
"key": "<string>",
"value": "<string>",
"trend": "<string>"
}
],
"advisors": [
{
"lens": "<string>",
"stance": "<string>",
"concern": "<string>",
"severity": "<string>"
}
],
"launch_edge": [
"<string>"
],
"forkable": true,
"created_at": "2023-11-07T05:31:56Z",
"name": "<string>",
"edge": "<string>",
"verdict": "<string>",
"regime": "<string>",
"confidence": "<string>",
"rationale": "<string>",
"phase": "<string>",
"origin_thesis": "<string>",
"origin_edge": "<string>",
"exits": [
{
"rule": "<string>",
"detail": "<string>",
"val": "<string>"
}
],
"next_step": "<string>",
"launch_goal": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}research-runs
Get Research Run Detail
Full per-run dossier for the Prop-Firm Command detail view / future Run Room (read-only, tenant-scoped, no new persistence).
Tenant scope mirrors fork_from_run (routes/strategies.py:549-553):
fetch by id via store.read_run (there is no read_run_for_user on
ResearchRunStore — store.py’s Protocol has no such method), then
compare user_id — a cross-tenant run and a nonexistent run both 404
identically, so existence is never leaked.
GET
/
api
/
graph
/
v1
/
research-runs
/
{run_id}
Get Research Run Detail
curl --request GET \
--url https://api.example.com/api/graph/v1/research-runs/{run_id}import requests
url = "https://api.example.com/api/graph/v1/research-runs/{run_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/api/graph/v1/research-runs/{run_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.example.com/api/graph/v1/research-runs/{run_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.example.com/api/graph/v1/research-runs/{run_id}"
req, _ := http.NewRequest("GET", url, nil)
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.example.com/api/graph/v1/research-runs/{run_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/graph/v1/research-runs/{run_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_body{
"run_id": "<string>",
"status": "<string>",
"gates": [
{
"key": "<string>",
"role": "<string>",
"mandate": "<string>",
"state": "<string>",
"note": "<string>",
"when": "2023-11-07T05:31:56Z"
}
],
"evidence": [
{
"key": "<string>",
"value": "<string>",
"trend": "<string>"
}
],
"advisors": [
{
"lens": "<string>",
"stance": "<string>",
"concern": "<string>",
"severity": "<string>"
}
],
"launch_edge": [
"<string>"
],
"forkable": true,
"created_at": "2023-11-07T05:31:56Z",
"name": "<string>",
"edge": "<string>",
"verdict": "<string>",
"regime": "<string>",
"confidence": "<string>",
"rationale": "<string>",
"phase": "<string>",
"origin_thesis": "<string>",
"origin_edge": "<string>",
"exits": [
{
"rule": "<string>",
"detail": "<string>",
"val": "<string>"
}
],
"next_step": "<string>",
"launch_goal": "<string>"
}{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Path Parameters
Response
Successful Response
Full per-run dossier -- every field the list row's ResearchRunSummary
omits. All fields nullable/optional where the corresponding stage may not
have run yet.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes