curl --request POST \
--url https://api.recursion.labelbox.com/managed-agents/v2/skills/disclosure-preview \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"skills": [
{
"description": "<string>",
"document": "<string>",
"id": "<string>",
"instructions": "<string>",
"name": "<string>",
"resources": [
"<string>"
],
"skillGroupId": "<string>",
"skillId": "<string>",
"source": "<string>",
"type": "<string>",
"version": "<string>"
}
],
"contextWindowTokens": 0
}
'import requests
url = "https://api.recursion.labelbox.com/managed-agents/v2/skills/disclosure-preview"
payload = {
"skills": [
{
"description": "<string>",
"document": "<string>",
"id": "<string>",
"instructions": "<string>",
"name": "<string>",
"resources": ["<string>"],
"skillGroupId": "<string>",
"skillId": "<string>",
"source": "<string>",
"type": "<string>",
"version": "<string>"
}
],
"contextWindowTokens": 0
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
skills: [
{
description: '<string>',
document: '<string>',
id: '<string>',
instructions: '<string>',
name: '<string>',
resources: ['<string>'],
skillGroupId: '<string>',
skillId: '<string>',
source: '<string>',
type: '<string>',
version: '<string>'
}
],
contextWindowTokens: 0
})
};
fetch('https://api.recursion.labelbox.com/managed-agents/v2/skills/disclosure-preview', 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/v2/skills/disclosure-preview",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'skills' => [
[
'description' => '<string>',
'document' => '<string>',
'id' => '<string>',
'instructions' => '<string>',
'name' => '<string>',
'resources' => [
'<string>'
],
'skillGroupId' => '<string>',
'skillId' => '<string>',
'source' => '<string>',
'type' => '<string>',
'version' => '<string>'
]
],
'contextWindowTokens' => 0
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.recursion.labelbox.com/managed-agents/v2/skills/disclosure-preview"
payload := strings.NewReader("{\n \"skills\": [\n {\n \"description\": \"<string>\",\n \"document\": \"<string>\",\n \"id\": \"<string>\",\n \"instructions\": \"<string>\",\n \"name\": \"<string>\",\n \"resources\": [\n \"<string>\"\n ],\n \"skillGroupId\": \"<string>\",\n \"skillId\": \"<string>\",\n \"source\": \"<string>\",\n \"type\": \"<string>\",\n \"version\": \"<string>\"\n }\n ],\n \"contextWindowTokens\": 0\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.recursion.labelbox.com/managed-agents/v2/skills/disclosure-preview")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"skills\": [\n {\n \"description\": \"<string>\",\n \"document\": \"<string>\",\n \"id\": \"<string>\",\n \"instructions\": \"<string>\",\n \"name\": \"<string>\",\n \"resources\": [\n \"<string>\"\n ],\n \"skillGroupId\": \"<string>\",\n \"skillId\": \"<string>\",\n \"source\": \"<string>\",\n \"type\": \"<string>\",\n \"version\": \"<string>\"\n }\n ],\n \"contextWindowTokens\": 0\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.recursion.labelbox.com/managed-agents/v2/skills/disclosure-preview")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"skills\": [\n {\n \"description\": \"<string>\",\n \"document\": \"<string>\",\n \"id\": \"<string>\",\n \"instructions\": \"<string>\",\n \"name\": \"<string>\",\n \"resources\": [\n \"<string>\"\n ],\n \"skillGroupId\": \"<string>\",\n \"skillId\": \"<string>\",\n \"source\": \"<string>\",\n \"type\": \"<string>\",\n \"version\": \"<string>\"\n }\n ],\n \"contextWindowTokens\": 0\n}"
response = http.request(request)
puts response.read_body{
"budgetChars": 0,
"entries": [
{
"descriptionIncluded": true,
"name": "<string>",
"attachmentIndex": 0,
"skillId": "<string>"
}
],
"usedChars": 0,
"warnings": [
"<string>"
]
}{
"code": "invalid_json",
"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": "unsupported_media_type",
"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
}
}Preview what a skill set costs the prompt
Reports how a proposed skills list would appear in an agent’s prompt, without saving anything. The list is resolved the way a session start resolves it: group attachments expand to their skills, catalog references are read, and skills that share a name collapse to one. The response lists the resulting skills in prompt order, says which of them the budget leaves room to describe, and how many characters of that budget they use. The budget is sized from context_window_tokens, and is the smallest one this service uses when that is omitted; the saved-agent skill disclosure read reports the budget a saved agent’s sessions get. A skill listed without its description can still be activated but is unlikely to be chosen, because the description is all there is to choose it by. An entry that came from an attachment carries attachmentIndex, and skillId when that attachment is a catalog skill, so it can be matched to the attachment and the catalog skill it came from. Read-only: nothing is stored.
curl --request POST \
--url https://api.recursion.labelbox.com/managed-agents/v2/skills/disclosure-preview \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"skills": [
{
"description": "<string>",
"document": "<string>",
"id": "<string>",
"instructions": "<string>",
"name": "<string>",
"resources": [
"<string>"
],
"skillGroupId": "<string>",
"skillId": "<string>",
"source": "<string>",
"type": "<string>",
"version": "<string>"
}
],
"contextWindowTokens": 0
}
'import requests
url = "https://api.recursion.labelbox.com/managed-agents/v2/skills/disclosure-preview"
payload = {
"skills": [
{
"description": "<string>",
"document": "<string>",
"id": "<string>",
"instructions": "<string>",
"name": "<string>",
"resources": ["<string>"],
"skillGroupId": "<string>",
"skillId": "<string>",
"source": "<string>",
"type": "<string>",
"version": "<string>"
}
],
"contextWindowTokens": 0
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
skills: [
{
description: '<string>',
document: '<string>',
id: '<string>',
instructions: '<string>',
name: '<string>',
resources: ['<string>'],
skillGroupId: '<string>',
skillId: '<string>',
source: '<string>',
type: '<string>',
version: '<string>'
}
],
contextWindowTokens: 0
})
};
fetch('https://api.recursion.labelbox.com/managed-agents/v2/skills/disclosure-preview', 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/v2/skills/disclosure-preview",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'skills' => [
[
'description' => '<string>',
'document' => '<string>',
'id' => '<string>',
'instructions' => '<string>',
'name' => '<string>',
'resources' => [
'<string>'
],
'skillGroupId' => '<string>',
'skillId' => '<string>',
'source' => '<string>',
'type' => '<string>',
'version' => '<string>'
]
],
'contextWindowTokens' => 0
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.recursion.labelbox.com/managed-agents/v2/skills/disclosure-preview"
payload := strings.NewReader("{\n \"skills\": [\n {\n \"description\": \"<string>\",\n \"document\": \"<string>\",\n \"id\": \"<string>\",\n \"instructions\": \"<string>\",\n \"name\": \"<string>\",\n \"resources\": [\n \"<string>\"\n ],\n \"skillGroupId\": \"<string>\",\n \"skillId\": \"<string>\",\n \"source\": \"<string>\",\n \"type\": \"<string>\",\n \"version\": \"<string>\"\n }\n ],\n \"contextWindowTokens\": 0\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.recursion.labelbox.com/managed-agents/v2/skills/disclosure-preview")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"skills\": [\n {\n \"description\": \"<string>\",\n \"document\": \"<string>\",\n \"id\": \"<string>\",\n \"instructions\": \"<string>\",\n \"name\": \"<string>\",\n \"resources\": [\n \"<string>\"\n ],\n \"skillGroupId\": \"<string>\",\n \"skillId\": \"<string>\",\n \"source\": \"<string>\",\n \"type\": \"<string>\",\n \"version\": \"<string>\"\n }\n ],\n \"contextWindowTokens\": 0\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.recursion.labelbox.com/managed-agents/v2/skills/disclosure-preview")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"skills\": [\n {\n \"description\": \"<string>\",\n \"document\": \"<string>\",\n \"id\": \"<string>\",\n \"instructions\": \"<string>\",\n \"name\": \"<string>\",\n \"resources\": [\n \"<string>\"\n ],\n \"skillGroupId\": \"<string>\",\n \"skillId\": \"<string>\",\n \"source\": \"<string>\",\n \"type\": \"<string>\",\n \"version\": \"<string>\"\n }\n ],\n \"contextWindowTokens\": 0\n}"
response = http.request(request)
puts response.read_body{
"budgetChars": 0,
"entries": [
{
"descriptionIncluded": true,
"name": "<string>",
"attachmentIndex": 0,
"skillId": "<string>"
}
],
"usedChars": 0,
"warnings": [
"<string>"
]
}{
"code": "invalid_json",
"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": "unsupported_media_type",
"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.
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.
1