curl "$ATAI_API_URL/agents/blueprints?limit=20" \
-H "Authorization: Bearer $ATAI_API_KEY"
curl "$ATAI_API_URL/agents/blueprints?key=osm" \
-H "Authorization: Bearer $ATAI_API_KEY"
import os
import requests
base_url = os.environ["ATAI_API_URL"]
api_key = os.environ["ATAI_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}"}
cursor = None
while True:
params = {"limit": 100}
if cursor:
params["after"] = cursor
response = requests.get(f"{base_url}/agents/blueprints", headers=headers, params=params)
page = response.json()
for blueprint in page["data"]:
print(f"{blueprint['blueprint_key']}: {blueprint['name']} ({blueprint['id']})")
if not page["has_more"]:
break
cursor = page["next_cursor"]
const response = await fetch(
`${process.env.ATAI_API_URL}/agents/blueprints?limit=20`,
{
headers: {
'Authorization': `Bearer ${process.env.ATAI_API_KEY}`
}
}
);
const page = await response.json();
page.data.forEach(blueprint => {
console.log(`${blueprint.blueprint_key}: ${blueprint.name} (${blueprint.id})`);
});
if (page.has_more) {
console.log(`Next cursor: ${page.next_cursor}`);
}
{
"data": [
{
"id": "blp_01jc9n7k3xf8mbq2v5t0ary6de",
"blueprint_key": "osm",
"name": "Open-set monitor",
"description": "Classifies incoming records against a known class vocabulary.",
"is_canonical": true,
"is_active": true,
"created_at": "2026-08-11T14:32:07Z"
},
{
"id": "blp_01jc8k2m9vr4te7hn5b3qdzx8w",
"blueprint_key": "osm-2026-07-02",
"name": "Open-set monitor",
"description": "Classifies incoming records against a known class vocabulary.",
"is_canonical": true,
"is_active": false,
"created_at": "2026-07-02T09:15:44Z"
}
],
"has_more": true,
"next_cursor": "blp_01jc8k2m9vr4te7hn5b3qdzx8w"
}
{
"data": [],
"has_more": false,
"next_cursor": null
}
Agents API
List Blueprints
Page through the blueprint catalog
GET
/
agents
/
blueprints
curl "$ATAI_API_URL/agents/blueprints?limit=20" \
-H "Authorization: Bearer $ATAI_API_KEY"
curl "$ATAI_API_URL/agents/blueprints?key=osm" \
-H "Authorization: Bearer $ATAI_API_KEY"
import os
import requests
base_url = os.environ["ATAI_API_URL"]
api_key = os.environ["ATAI_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}"}
cursor = None
while True:
params = {"limit": 100}
if cursor:
params["after"] = cursor
response = requests.get(f"{base_url}/agents/blueprints", headers=headers, params=params)
page = response.json()
for blueprint in page["data"]:
print(f"{blueprint['blueprint_key']}: {blueprint['name']} ({blueprint['id']})")
if not page["has_more"]:
break
cursor = page["next_cursor"]
const response = await fetch(
`${process.env.ATAI_API_URL}/agents/blueprints?limit=20`,
{
headers: {
'Authorization': `Bearer ${process.env.ATAI_API_KEY}`
}
}
);
const page = await response.json();
page.data.forEach(blueprint => {
console.log(`${blueprint.blueprint_key}: ${blueprint.name} (${blueprint.id})`);
});
if (page.has_more) {
console.log(`Next cursor: ${page.next_cursor}`);
}
{
"data": [
{
"id": "blp_01jc9n7k3xf8mbq2v5t0ary6de",
"blueprint_key": "osm",
"name": "Open-set monitor",
"description": "Classifies incoming records against a known class vocabulary.",
"is_canonical": true,
"is_active": true,
"created_at": "2026-08-11T14:32:07Z"
},
{
"id": "blp_01jc8k2m9vr4te7hn5b3qdzx8w",
"blueprint_key": "osm-2026-07-02",
"name": "Open-set monitor",
"description": "Classifies incoming records against a known class vocabulary.",
"is_canonical": true,
"is_active": false,
"created_at": "2026-07-02T09:15:44Z"
}
],
"has_more": true,
"next_cursor": "blp_01jc8k2m9vr4te7hn5b3qdzx8w"
}
{
"data": [],
"has_more": false,
"next_cursor": null
}
Requires version 1.1.9 or later of the Archetype platform.
Overview
This endpoint returns the blueprint catalog as a cursor-paginated page of blueprint summaries, newest first. Summaries omit the full blueprint document — fetch a single blueprint withGET /agents/blueprints/{reference} when you need its document or yaml_document.
Request
integer
default:"100"
Page size. Minimum
1, maximum 1000.string
Forward cursor: return blueprints older than the one with this id. Pass the
next_cursor of the previous page (or the id of its last blueprint) to fetch the next page. Mutually exclusive with before.string
Backward cursor: return blueprints newer than the one with this id. Pass the id of the first blueprint of the current page to walk back. Mutually exclusive with
after.string
Filter to a single key.
Response
array
required
The page, newest first. Each entry is a blueprint summary.
boolean
required
True when more results exist beyond this page in the direction of travel.
string
Cursor for the next page in the same direction — pass it as
after when paging forward, or as before when you supplied before. null when has_more is false.Blueprint summary object
string
required
TypeID-encoded blueprint identifier (
blp_ prefix).string
required
Human-readable key for the blueprint, e.g.
osm.string
required
Name of the blueprint.
string
required
Description of the blueprint.
boolean
required
True for platform-authored (gallery) blueprints shared with every org; false for blueprints owned by a specific org.
boolean
required
True for the current version of a key; false once it has been replaced by a newer blueprint (its key was archived to
<key>-<date>).string
required
Creation timestamp (date-time).
curl "$ATAI_API_URL/agents/blueprints?limit=20" \
-H "Authorization: Bearer $ATAI_API_KEY"
curl "$ATAI_API_URL/agents/blueprints?key=osm" \
-H "Authorization: Bearer $ATAI_API_KEY"
import os
import requests
base_url = os.environ["ATAI_API_URL"]
api_key = os.environ["ATAI_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}"}
cursor = None
while True:
params = {"limit": 100}
if cursor:
params["after"] = cursor
response = requests.get(f"{base_url}/agents/blueprints", headers=headers, params=params)
page = response.json()
for blueprint in page["data"]:
print(f"{blueprint['blueprint_key']}: {blueprint['name']} ({blueprint['id']})")
if not page["has_more"]:
break
cursor = page["next_cursor"]
const response = await fetch(
`${process.env.ATAI_API_URL}/agents/blueprints?limit=20`,
{
headers: {
'Authorization': `Bearer ${process.env.ATAI_API_KEY}`
}
}
);
const page = await response.json();
page.data.forEach(blueprint => {
console.log(`${blueprint.blueprint_key}: ${blueprint.name} (${blueprint.id})`);
});
if (page.has_more) {
console.log(`Next cursor: ${page.next_cursor}`);
}
{
"data": [
{
"id": "blp_01jc9n7k3xf8mbq2v5t0ary6de",
"blueprint_key": "osm",
"name": "Open-set monitor",
"description": "Classifies incoming records against a known class vocabulary.",
"is_canonical": true,
"is_active": true,
"created_at": "2026-08-11T14:32:07Z"
},
{
"id": "blp_01jc8k2m9vr4te7hn5b3qdzx8w",
"blueprint_key": "osm-2026-07-02",
"name": "Open-set monitor",
"description": "Classifies incoming records against a known class vocabulary.",
"is_canonical": true,
"is_active": false,
"created_at": "2026-07-02T09:15:44Z"
}
],
"has_more": true,
"next_cursor": "blp_01jc8k2m9vr4te7hn5b3qdzx8w"
}
{
"data": [],
"has_more": false,
"next_cursor": null
}
Important Notes
afterandbeforeare mutually exclusive — send at most one of them.- Results are ordered newest first in both cursor directions, so render
dataas returned. - An archived (replaced) blueprint stays in the catalog with
is_active: falseand a key of the form<key>-<date>.
Was this page helpful?