Templates
List curated templates
Browse the templates Orgo publishes and maintains.
GET
/
templates
/
global
List curated templates
curl --request GET \
--url https://www.orgo.ai/api/templates/global \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.orgo.ai/api/templates/global"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.orgo.ai/api/templates/global', 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://www.orgo.ai/api/templates/global",
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://www.orgo.ai/api/templates/global"
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://www.orgo.ai/api/templates/global")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.orgo.ai/api/templates/global")
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{
"templates": [
{
"ref": "default/claude-code@1.0.0",
"digest": "<string>",
"published": "2023-11-07T05:31:56Z",
"template": {
"api_version": "orgo.ai/v1",
"template": {
"name": "claude-code",
"version": "1.0.0",
"description": "<string>"
},
"hardware": {},
"secrets": [
{}
],
"vars": {},
"env": {},
"build": {},
"files": "<array>",
"apps": "<array>",
"triggers": "<array>",
"terminal": "<array>",
"hooks": {},
"telemetry": {},
"egress_policy": {},
"streaming": "<array>"
}
}
]
}Lists the curated templates Orgo builds and keeps up to date: ready-to-launch environments like Claude Code, OpenClaw, and Hermes. Any authenticated account can list them, on any plan.
To launch one, pass its
An error forwarded from the registry also carries
ref as template_ref to Create computer. Launching needs a paid plan. You don’t need a Scale plan to launch a curated template, only to publish your own. A free account has a zero-computer quota, so the create returns 403 with code UPGRADE_REQUIRED. See pricing.
Response
array
Array of curated template list items, each with
ref, digest, published, and the full template document. Empty when the curated registry has no entries.Example
curl https://www.orgo.ai/api/templates/global \
-H "Authorization: Bearer $ORGO_API_KEY"
import os, requests
r = requests.get(
"https://www.orgo.ai/api/templates/global",
headers={"Authorization": f"Bearer {os.environ['ORGO_API_KEY']}"},
)
for t in r.json()["templates"]:
print(t["ref"])
const r = await fetch("https://www.orgo.ai/api/templates/global", {
headers: { Authorization: `Bearer ${process.env.ORGO_API_KEY}` },
});
const { templates } = await r.json();
console.log(templates.map((t) => t.ref));
Response
{
"templates": [
{
"ref": "system/claude-code@1.0.0",
"digest": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2",
"published": "2026-06-08T17:00:00Z"
},
{
"ref": "system/openclaw@1.0.0",
"digest": "b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3",
"published": "2026-06-08T17:00:00Z"
},
{
"ref": "system/hermes-agent@1.0.0",
"digest": "c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4",
"published": "2026-06-08T17:00:00Z"
}
]
}
To list every version of a single curated template, call
GET /templates/global/{namespace}/{name}, e.g. https://www.orgo.ai/api/templates/global/system/claude-code. That route returns { "versions": [...] }, and 404 { "error": "not found" } when no curated template matches.Errors
| Status | Body | Meaning |
|---|---|---|
401 | { "error": "Invalid API key" } | The Bearer token starts with sk_ but is not a known Orgo key. |
401 | { "error": "Authentication required" } | No Authorization header, or a Bearer token that is not an sk_ key. |
500 | { "error": "internal error" } | Unexpected server error. |
503 | { "error": string } | No fleet host is available to serve the template registry. Retry. |
code and, for validation failures, details.
Launch a curated template
Go from a curated
ref to a running computer in one API call.⌘I
List curated templates
curl --request GET \
--url https://www.orgo.ai/api/templates/global \
--header 'Authorization: Bearer <token>'import requests
url = "https://www.orgo.ai/api/templates/global"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://www.orgo.ai/api/templates/global', 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://www.orgo.ai/api/templates/global",
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://www.orgo.ai/api/templates/global"
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://www.orgo.ai/api/templates/global")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://www.orgo.ai/api/templates/global")
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{
"templates": [
{
"ref": "default/claude-code@1.0.0",
"digest": "<string>",
"published": "2023-11-07T05:31:56Z",
"template": {
"api_version": "orgo.ai/v1",
"template": {
"name": "claude-code",
"version": "1.0.0",
"description": "<string>"
},
"hardware": {},
"secrets": [
{}
],
"vars": {},
"env": {},
"build": {},
"files": "<array>",
"apps": "<array>",
"triggers": "<array>",
"terminal": "<array>",
"hooks": {},
"telemetry": {},
"egress_policy": {},
"streaming": "<array>"
}
}
]
}