curl --request GET \
--url https://api.recursion.labelbox.com/managed-agents/v1/sessions/{sessionId}/events \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.recursion.labelbox.com/managed-agents/v1/sessions/{sessionId}/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.recursion.labelbox.com/managed-agents/v1/sessions/{sessionId}/events', 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.recursion.labelbox.com/managed-agents/v1/sessions/{sessionId}/events",
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.recursion.labelbox.com/managed-agents/v1/sessions/{sessionId}/events"
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.recursion.labelbox.com/managed-agents/v1/sessions/{sessionId}/events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.recursion.labelbox.com/managed-agents/v1/sessions/{sessionId}/events")
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{
"events": [
{
"actor": "<string>",
"content": {
"blocks": [
{
"type": "<string>",
"byte_size": 0,
"content": "<array>",
"context": "<string>",
"data": "<string>",
"encrypted_content": "<string>",
"height": 0,
"id": "<string>",
"input": {},
"is_error": true,
"media_type": "<string>",
"name": "<string>",
"omitted_bytes": 0,
"payload": true,
"provider": "<string>",
"provider_payload": true,
"redacted": true,
"semantic_hint": "<string>",
"sha256": "<string>",
"signature": "<string>",
"source": {
"file_id": "<string>",
"type": "file"
},
"summary": "<array>",
"text": "<string>",
"title": "<string>",
"tool_use_id": "<string>",
"uri": "<string>",
"url": "<string>",
"url_expires_at": "2023-11-07T05:31:56Z",
"width": 0
}
],
"assistantInteraction": {
"digest": "<string>",
"interactionId": "<string>",
"kind": "question",
"origin": "assistant",
"requestedAt": "2023-11-07T05:31:56Z",
"revision": 4503599627370496,
"status": "pending",
"title": "<string>",
"blueprint": {
"agents": [
{
"role": "<string>",
"model": "<string>",
"responsibilities": "<string>"
}
],
"capabilities": [
{
"capabilityId": "<string>",
"kind": "<string>",
"name": "<string>",
"status": "<string>",
"purpose": "<string>"
}
],
"trigger": {
"kind": "manual",
"detail": "<string>"
},
"checkpoints": [
"<string>"
],
"costClass": "low",
"environment": "<string>",
"evaluation": "<string>",
"gaps": [
"<string>"
],
"outputs": [
"<string>"
]
},
"decision": {
"decidedAt": "2023-11-07T05:31:56Z",
"decision": "answered",
"answers": [
{
"questionId": "<string>",
"optionIds": [
"<string>"
],
"text": "<string>"
}
],
"comments": [
{
"text": "<string>",
"field": "<string>",
"stepId": "<string>"
}
],
"decidedBy": "<string>",
"note": "<string>"
},
"plan": {
"steps": [
{
"action": "<string>",
"costClass": "none",
"enabled": true,
"input": {},
"stepId": "<string>",
"title": "<string>",
"dependsOn": [
"<string>"
],
"fields": [
{
"label": "<string>",
"name": "<string>",
"widget": "text",
"help": "<string>",
"options": [
{
"label": "<string>",
"optionId": "<string>",
"description": "<string>"
}
],
"required": true
}
],
"optional": true,
"warnings": [
"<string>"
]
}
],
"prerequisites": [
{
"kind": "connect_integration",
"label": "<string>",
"prerequisiteId": "<string>",
"satisfied": true,
"capabilityId": "<string>",
"detail": "<string>",
"link": "<string>"
}
]
},
"questions": [
{
"input": "single_select",
"prompt": "<string>",
"questionId": "<string>",
"allowOther": true,
"multiple": true,
"optional": true,
"options": [
{
"label": "<string>",
"optionId": "<string>",
"description": "<string>"
}
],
"picker": "agent"
}
],
"stepResults": [
{
"status": "running",
"stepId": "<string>",
"link": "<string>",
"message": "<string>",
"resourceId": "<string>",
"resourceKind": "<string>"
}
],
"summary": "<string>"
},
"metadata": {},
"plan": [
{
"content": "<string>",
"id": "<string>",
"status": "<string>"
}
],
"stop_reason": "<string>",
"tools": [
{
"description": "<string>",
"input_schema": {},
"name": "<string>"
}
],
"usage": {
"cache_read_tokens": 0,
"cache_write_tokens": 0,
"cost_usd": 123,
"input_tokens": 0,
"output_tokens": 0
}
},
"created_at": "2023-11-07T05:31:56Z",
"event_id": "<string>",
"event_type": "<string>",
"inference_config": {
"max_tokens": 0,
"provider_params": {},
"reasoning_effort": "<string>",
"temperature": 123,
"top_p": 123
},
"schema_version": 0,
"session_id": "<string>",
"agent_id": "<string>",
"cache_read_tokens": 0,
"cache_write_tokens": 0,
"causal_event_id": "<string>",
"content_hydration_status": "hydrated",
"content_payload_bytes": 0,
"content_payload_ref": "<string>",
"content_payload_sha256": "<string>",
"content_ref": "<string>",
"cost_micros": 0,
"environment_id": "<string>",
"event_status": "<string>",
"finish_reason": "<string>",
"input_tokens": 0,
"latency_ms": 0,
"model": {
"model": "<string>",
"provider": "<string>",
"base_url": "<string>",
"capabilities": {},
"context_window": 0,
"max_output_tokens": 0,
"metadata": {},
"model_ref_id": "<string>",
"model_version": "<string>",
"provider_id": "<string>",
"provider_type": "<string>",
"serving_backend": "<string>"
},
"model_ref_id": "<string>",
"organization_id": "<string>",
"output_tokens": 0,
"parent_event_id": "<string>",
"prompt_tokens": 0,
"provider_model_id": "<string>",
"provider_request_id": "<string>",
"provider_type": "<string>",
"role": "<string>",
"sandbox_instance_id": "<string>",
"thread_id": "<string>",
"tool_name": "<string>",
"tool_use_id": "<string>",
"turn_id": "<string>"
}
],
"next_page_token": "<string>"
}{
"code": "invalid_request",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "unauthorized",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "forbidden",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "not_found",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "payload_too_large",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "rate_limit_exceeded",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "internal_error",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "bad_gateway",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "content_store_unavailable",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "gateway_timeout",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}Get root timeline events
Returns one page of the root timeline’s events in chronological order, plus next_page_token to continue from. A page can come back shorter than limit because an aggregate serialized-byte budget applies as well as the count, so treat an empty page with no token as the end rather than inferring the end from the length. Large event payloads hydrate by default; pass payloads=refs for bounded stubs instead.
curl --request GET \
--url https://api.recursion.labelbox.com/managed-agents/v1/sessions/{sessionId}/events \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.recursion.labelbox.com/managed-agents/v1/sessions/{sessionId}/events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.recursion.labelbox.com/managed-agents/v1/sessions/{sessionId}/events', 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.recursion.labelbox.com/managed-agents/v1/sessions/{sessionId}/events",
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.recursion.labelbox.com/managed-agents/v1/sessions/{sessionId}/events"
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.recursion.labelbox.com/managed-agents/v1/sessions/{sessionId}/events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.recursion.labelbox.com/managed-agents/v1/sessions/{sessionId}/events")
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{
"events": [
{
"actor": "<string>",
"content": {
"blocks": [
{
"type": "<string>",
"byte_size": 0,
"content": "<array>",
"context": "<string>",
"data": "<string>",
"encrypted_content": "<string>",
"height": 0,
"id": "<string>",
"input": {},
"is_error": true,
"media_type": "<string>",
"name": "<string>",
"omitted_bytes": 0,
"payload": true,
"provider": "<string>",
"provider_payload": true,
"redacted": true,
"semantic_hint": "<string>",
"sha256": "<string>",
"signature": "<string>",
"source": {
"file_id": "<string>",
"type": "file"
},
"summary": "<array>",
"text": "<string>",
"title": "<string>",
"tool_use_id": "<string>",
"uri": "<string>",
"url": "<string>",
"url_expires_at": "2023-11-07T05:31:56Z",
"width": 0
}
],
"assistantInteraction": {
"digest": "<string>",
"interactionId": "<string>",
"kind": "question",
"origin": "assistant",
"requestedAt": "2023-11-07T05:31:56Z",
"revision": 4503599627370496,
"status": "pending",
"title": "<string>",
"blueprint": {
"agents": [
{
"role": "<string>",
"model": "<string>",
"responsibilities": "<string>"
}
],
"capabilities": [
{
"capabilityId": "<string>",
"kind": "<string>",
"name": "<string>",
"status": "<string>",
"purpose": "<string>"
}
],
"trigger": {
"kind": "manual",
"detail": "<string>"
},
"checkpoints": [
"<string>"
],
"costClass": "low",
"environment": "<string>",
"evaluation": "<string>",
"gaps": [
"<string>"
],
"outputs": [
"<string>"
]
},
"decision": {
"decidedAt": "2023-11-07T05:31:56Z",
"decision": "answered",
"answers": [
{
"questionId": "<string>",
"optionIds": [
"<string>"
],
"text": "<string>"
}
],
"comments": [
{
"text": "<string>",
"field": "<string>",
"stepId": "<string>"
}
],
"decidedBy": "<string>",
"note": "<string>"
},
"plan": {
"steps": [
{
"action": "<string>",
"costClass": "none",
"enabled": true,
"input": {},
"stepId": "<string>",
"title": "<string>",
"dependsOn": [
"<string>"
],
"fields": [
{
"label": "<string>",
"name": "<string>",
"widget": "text",
"help": "<string>",
"options": [
{
"label": "<string>",
"optionId": "<string>",
"description": "<string>"
}
],
"required": true
}
],
"optional": true,
"warnings": [
"<string>"
]
}
],
"prerequisites": [
{
"kind": "connect_integration",
"label": "<string>",
"prerequisiteId": "<string>",
"satisfied": true,
"capabilityId": "<string>",
"detail": "<string>",
"link": "<string>"
}
]
},
"questions": [
{
"input": "single_select",
"prompt": "<string>",
"questionId": "<string>",
"allowOther": true,
"multiple": true,
"optional": true,
"options": [
{
"label": "<string>",
"optionId": "<string>",
"description": "<string>"
}
],
"picker": "agent"
}
],
"stepResults": [
{
"status": "running",
"stepId": "<string>",
"link": "<string>",
"message": "<string>",
"resourceId": "<string>",
"resourceKind": "<string>"
}
],
"summary": "<string>"
},
"metadata": {},
"plan": [
{
"content": "<string>",
"id": "<string>",
"status": "<string>"
}
],
"stop_reason": "<string>",
"tools": [
{
"description": "<string>",
"input_schema": {},
"name": "<string>"
}
],
"usage": {
"cache_read_tokens": 0,
"cache_write_tokens": 0,
"cost_usd": 123,
"input_tokens": 0,
"output_tokens": 0
}
},
"created_at": "2023-11-07T05:31:56Z",
"event_id": "<string>",
"event_type": "<string>",
"inference_config": {
"max_tokens": 0,
"provider_params": {},
"reasoning_effort": "<string>",
"temperature": 123,
"top_p": 123
},
"schema_version": 0,
"session_id": "<string>",
"agent_id": "<string>",
"cache_read_tokens": 0,
"cache_write_tokens": 0,
"causal_event_id": "<string>",
"content_hydration_status": "hydrated",
"content_payload_bytes": 0,
"content_payload_ref": "<string>",
"content_payload_sha256": "<string>",
"content_ref": "<string>",
"cost_micros": 0,
"environment_id": "<string>",
"event_status": "<string>",
"finish_reason": "<string>",
"input_tokens": 0,
"latency_ms": 0,
"model": {
"model": "<string>",
"provider": "<string>",
"base_url": "<string>",
"capabilities": {},
"context_window": 0,
"max_output_tokens": 0,
"metadata": {},
"model_ref_id": "<string>",
"model_version": "<string>",
"provider_id": "<string>",
"provider_type": "<string>",
"serving_backend": "<string>"
},
"model_ref_id": "<string>",
"organization_id": "<string>",
"output_tokens": 0,
"parent_event_id": "<string>",
"prompt_tokens": 0,
"provider_model_id": "<string>",
"provider_request_id": "<string>",
"provider_type": "<string>",
"role": "<string>",
"sandbox_instance_id": "<string>",
"thread_id": "<string>",
"tool_name": "<string>",
"tool_use_id": "<string>",
"turn_id": "<string>"
}
],
"next_page_token": "<string>"
}{
"code": "invalid_request",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "unauthorized",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "forbidden",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "not_found",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "payload_too_large",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "rate_limit_exceeded",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "internal_error",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "bad_gateway",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "content_store_unavailable",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}{
"code": "gateway_timeout",
"message": "<string>",
"details": {
"field": "<string>",
"issues": [
"<string>"
],
"requestId": "<string>",
"retryable": true
}
}Authorizations
A Recursion API key, created in the console under API keys.
Headers
Optional tenant consistency check. When present, it must name the tenant bound to the API key, including when x-organization-id is default.
1Organization in which to act. Required for a tenant-scoped API key. Optional for an organization-scoped key, where it must name that same organization. The value may be an organization id or default.
1Path Parameters
Session id (UUID) whose root timeline is read.
Query Parameters
Exclusive continuation cursor: a lowercase canonical UUID event id, normally the previous page's next_page_token. Malformed values return 400.
Maximum event count requested. The response may contain fewer events when the aggregate serialized-byte budget is reached.
-9007199254740991 <= x <= 9007199254740991Opt-in compatibility mode. images rehydrates private image refs under strict response caps; omitted by default.
images Set to signed to add a short-lived url (and url_expires_at) to stored image blocks within the per-read signing budget. Omitted when signing is unavailable or the budget is exhausted; the authenticated managedAgentsGetSessionImage endpoint always works.
signed External event payloads hydrate by default. Set refs to return bounded stubs and private reference metadata only.
refs Response
Response body of GET /managed-agents/v1/sessions/{sessionId}/events: one page of the merged chronological timeline for the whole session tree the path session belongs to, not just that session's own events. The page is bounded twice, by the limit parameter and by an aggregate serialized-byte budget, and the byte budget wins; a single event too large for the budget is returned alone with its content marked oversized and must be fetched in full from the per-event content endpoint.
Response body of GET /managed-agents/v1/sessions/{sessionId}/events: one page of the merged chronological timeline for the whole session tree the path session belongs to, not just that session's own events. The page is bounded twice, by the limit parameter and by an aggregate serialized-byte budget, and the byte budget wins; a single event too large for the budget is returned alone with its content marked oversized and must be fetched in full from the per-event content endpoint.
One chronological page of the root timeline, oldest first. Null rather than an empty array when no event follows the requested watermark, which is the normal answer when a caller has already read to the end.
Show child attributes
Show child attributes
Watermark to continue from: pass it back as the after_event_id query parameter to fetch the next page. Its value is the event_id of the last event in this page. Always present, and an empty string means this page reached the end of the timeline as of this read. Because the page can be cut short by a byte budget before the requested limit is reached, a short events array with a non-empty token means more remain, not that the timeline ended.