curl --request GET \
--url https://api.recursion.labelbox.com/managed-agents/v1/agents/{agent_id}/versions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.recursion.labelbox.com/managed-agents/v1/agents/{agent_id}/versions"
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/agents/{agent_id}/versions', 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/agents/{agent_id}/versions",
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/agents/{agent_id}/versions"
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/agents/{agent_id}/versions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.recursion.labelbox.com/managed-agents/v1/agents/{agent_id}/versions")
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{
"agent_versions": [
{
"agent_id": "9f8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d",
"agent_version_id": "9f8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d",
"built_in_integrations": [
{
"connection_id": "9f8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d",
"tools": []
}
],
"created_at": "2026-02-18T09:30:00.000Z",
"created_by": "example",
"default_credential_refs": [
{
"credential_id": "9f8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d",
"vault_id": "9f8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d"
}
],
"default_rubric": "example",
"default_vault_ids": [
"example"
],
"description": "example",
"disabled_integration_mcp_providers": [
"example"
],
"max_concurrent_sessions": 1,
"mcp_servers": [
{
"key": "example"
}
],
"metadata": {
"key": "example"
},
"model": "example",
"model_config": {
"max_tokens": 1,
"provider_params": {
"key": "example"
},
"reasoning_effort": "example",
"temperature": 1.5,
"top_p": 1.5
},
"multiagent": {
"key": "example"
},
"name": "example-name",
"nativeIntegrations": [
{
"connectionId": "9f8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d",
"permission": "example",
"resources": [
"example"
]
}
],
"organization_id": "9f8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d",
"skills": [
{
"key": "example"
}
],
"system": "example",
"toolsets": [
{
"type": "evaluation"
}
],
"version_number": 1,
"web_search_enabled": true
}
]
}{
"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": "ios_client_update_required",
"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": "managed_agents_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
}
}List an agent's immutable version history
Returns all immutable agent versions, newest to oldest, projected through the current public contract. Prompt, model, and supported capabilities remain visible; inert legacy tool declarations remain stored but are omitted from these responses. The response is not paginated.
curl --request GET \
--url https://api.recursion.labelbox.com/managed-agents/v1/agents/{agent_id}/versions \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.recursion.labelbox.com/managed-agents/v1/agents/{agent_id}/versions"
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/agents/{agent_id}/versions', 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/agents/{agent_id}/versions",
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/agents/{agent_id}/versions"
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/agents/{agent_id}/versions")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.recursion.labelbox.com/managed-agents/v1/agents/{agent_id}/versions")
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{
"agent_versions": [
{
"agent_id": "9f8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d",
"agent_version_id": "9f8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d",
"built_in_integrations": [
{
"connection_id": "9f8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d",
"tools": []
}
],
"created_at": "2026-02-18T09:30:00.000Z",
"created_by": "example",
"default_credential_refs": [
{
"credential_id": "9f8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d",
"vault_id": "9f8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d"
}
],
"default_rubric": "example",
"default_vault_ids": [
"example"
],
"description": "example",
"disabled_integration_mcp_providers": [
"example"
],
"max_concurrent_sessions": 1,
"mcp_servers": [
{
"key": "example"
}
],
"metadata": {
"key": "example"
},
"model": "example",
"model_config": {
"max_tokens": 1,
"provider_params": {
"key": "example"
},
"reasoning_effort": "example",
"temperature": 1.5,
"top_p": 1.5
},
"multiagent": {
"key": "example"
},
"name": "example-name",
"nativeIntegrations": [
{
"connectionId": "9f8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d",
"permission": "example",
"resources": [
"example"
]
}
],
"organization_id": "9f8b1c2d-3e4f-5a6b-7c8d-9e0f1a2b3c4d",
"skills": [
{
"key": "example"
}
],
"system": "example",
"toolsets": [
{
"type": "evaluation"
}
],
"version_number": 1,
"web_search_enabled": true
}
]
}{
"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": "ios_client_update_required",
"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": "managed_agents_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.
Path Parameters
Agent id (UUID) as returned by createAgent or listAgents.
Response
Response body of GET /v1/agents/{agent_id}/versions. Scoped to the one agent in the path, so an empty list means that agent has no versions yet, not that no agents exist. Versions are immutable snapshots: pin one to make a session reproducible.
Response body of GET /v1/agents/{agent_id}/versions. Scoped to the one agent in the path, so an empty list means that agent has no versions yet, not that no agents exist. Versions are immutable snapshots: pin one to make a session reproducible.
Every published version of the requested agent, newest first. Null rather than an empty array when the agent exists but has never been versioned.
Show child attributes
Show child attributes