Create Agent
curl --request POST \
--url https://app.opencomputer.dev/v1/agents \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"id": "<string>",
"display_name": "<string>",
"core": "<string>",
"config": {},
"config.snapshot": "<string>",
"config.entrypoint": "<string>",
"config.agent_config": {},
"config.env": {},
"config.elasticity": {},
"config.idle_timeout_s": 123,
"secrets": {}
}
'import requests
url = "https://app.opencomputer.dev/v1/agents"
payload = {
"id": "<string>",
"display_name": "<string>",
"core": "<string>",
"config": {},
"config.snapshot": "<string>",
"config.entrypoint": "<string>",
"config.agent_config": {},
"config.env": {},
"config.elasticity": {},
"config.idle_timeout_s": 123,
"secrets": {}
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
id: '<string>',
display_name: '<string>',
core: '<string>',
config: {},
'config.snapshot': '<string>',
'config.entrypoint': '<string>',
'config.agent_config': {},
'config.env': {},
'config.elasticity': {},
'config.idle_timeout_s': 123,
secrets: {}
})
};
fetch('https://app.opencomputer.dev/v1/agents', 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://app.opencomputer.dev/v1/agents",
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([
'id' => '<string>',
'display_name' => '<string>',
'core' => '<string>',
'config' => [
],
'config.snapshot' => '<string>',
'config.entrypoint' => '<string>',
'config.agent_config' => [
],
'config.env' => [
],
'config.elasticity' => [
],
'config.idle_timeout_s' => 123,
'secrets' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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://app.opencomputer.dev/v1/agents"
payload := strings.NewReader("{\n \"id\": \"<string>\",\n \"display_name\": \"<string>\",\n \"core\": \"<string>\",\n \"config\": {},\n \"config.snapshot\": \"<string>\",\n \"config.entrypoint\": \"<string>\",\n \"config.agent_config\": {},\n \"config.env\": {},\n \"config.elasticity\": {},\n \"config.idle_timeout_s\": 123,\n \"secrets\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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://app.opencomputer.dev/v1/agents")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"<string>\",\n \"display_name\": \"<string>\",\n \"core\": \"<string>\",\n \"config\": {},\n \"config.snapshot\": \"<string>\",\n \"config.entrypoint\": \"<string>\",\n \"config.agent_config\": {},\n \"config.env\": {},\n \"config.elasticity\": {},\n \"config.idle_timeout_s\": 123,\n \"secrets\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.opencomputer.dev/v1/agents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"<string>\",\n \"display_name\": \"<string>\",\n \"core\": \"<string>\",\n \"config\": {},\n \"config.snapshot\": \"<string>\",\n \"config.entrypoint\": \"<string>\",\n \"config.agent_config\": {},\n \"config.env\": {},\n \"config.elasticity\": {},\n \"config.idle_timeout_s\": 123,\n \"secrets\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "my-hermes",
"display_name": "my-hermes",
"core": "hermes",
"channels": [],
"packages": [],
"secret_store": "agent:my-hermes",
"config": null,
"created_at": "2026-04-09T10:30:00Z",
"updated_at": "2026-04-09T10:30:00Z"
}
Agents
Create Agent
POST
/
v1
/
agents
Create Agent
curl --request POST \
--url https://app.opencomputer.dev/v1/agents \
--header 'Content-Type: application/json' \
--header 'X-API-Key: <api-key>' \
--data '
{
"id": "<string>",
"display_name": "<string>",
"core": "<string>",
"config": {},
"config.snapshot": "<string>",
"config.entrypoint": "<string>",
"config.agent_config": {},
"config.env": {},
"config.elasticity": {},
"config.idle_timeout_s": 123,
"secrets": {}
}
'import requests
url = "https://app.opencomputer.dev/v1/agents"
payload = {
"id": "<string>",
"display_name": "<string>",
"core": "<string>",
"config": {},
"config.snapshot": "<string>",
"config.entrypoint": "<string>",
"config.agent_config": {},
"config.env": {},
"config.elasticity": {},
"config.idle_timeout_s": 123,
"secrets": {}
}
headers = {
"X-API-Key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'X-API-Key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
id: '<string>',
display_name: '<string>',
core: '<string>',
config: {},
'config.snapshot': '<string>',
'config.entrypoint': '<string>',
'config.agent_config': {},
'config.env': {},
'config.elasticity': {},
'config.idle_timeout_s': 123,
secrets: {}
})
};
fetch('https://app.opencomputer.dev/v1/agents', 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://app.opencomputer.dev/v1/agents",
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([
'id' => '<string>',
'display_name' => '<string>',
'core' => '<string>',
'config' => [
],
'config.snapshot' => '<string>',
'config.entrypoint' => '<string>',
'config.agent_config' => [
],
'config.env' => [
],
'config.elasticity' => [
],
'config.idle_timeout_s' => 123,
'secrets' => [
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"X-API-Key: <api-key>"
],
]);
$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://app.opencomputer.dev/v1/agents"
payload := strings.NewReader("{\n \"id\": \"<string>\",\n \"display_name\": \"<string>\",\n \"core\": \"<string>\",\n \"config\": {},\n \"config.snapshot\": \"<string>\",\n \"config.entrypoint\": \"<string>\",\n \"config.agent_config\": {},\n \"config.env\": {},\n \"config.elasticity\": {},\n \"config.idle_timeout_s\": 123,\n \"secrets\": {}\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("X-API-Key", "<api-key>")
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://app.opencomputer.dev/v1/agents")
.header("X-API-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"<string>\",\n \"display_name\": \"<string>\",\n \"core\": \"<string>\",\n \"config\": {},\n \"config.snapshot\": \"<string>\",\n \"config.entrypoint\": \"<string>\",\n \"config.agent_config\": {},\n \"config.env\": {},\n \"config.elasticity\": {},\n \"config.idle_timeout_s\": 123,\n \"secrets\": {}\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.opencomputer.dev/v1/agents")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["X-API-Key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"id\": \"<string>\",\n \"display_name\": \"<string>\",\n \"core\": \"<string>\",\n \"config\": {},\n \"config.snapshot\": \"<string>\",\n \"config.entrypoint\": \"<string>\",\n \"config.agent_config\": {},\n \"config.env\": {},\n \"config.elasticity\": {},\n \"config.idle_timeout_s\": 123,\n \"secrets\": {}\n}"
response = http.request(request)
puts response.read_body{
"id": "my-hermes",
"display_name": "my-hermes",
"core": "hermes",
"channels": [],
"packages": [],
"secret_store": "agent:my-hermes",
"config": null,
"created_at": "2026-04-09T10:30:00Z",
"updated_at": "2026-04-09T10:30:00Z"
}
Create a new agent. For managed agents, pass
core to get a pre-configured runtime. For raw agents, pass config with your own snapshot and entrypoint.
CLI equivalent: oc agent create <id> [--core <core>] [--secret KEY=VALUE]
string
required
Agent ID. Must be DNS-safe (lowercase alphanumeric + hyphens).
string
Human-readable display name
string
Managed core (
hermes or openclaw). Mutually exclusive with config.object
Raw agent configuration. Mutually exclusive with
core.string
Snapshot to boot the sandbox from
string
Command to run on sandbox start
object
Alternative to entrypoint — uses
sandbox.agent.start() with system_prompt and allowed_toolsobject
Environment variables
object
Memory elasticity.
baseline_mb and max_mb.integer
Idle timeout in seconds
object
Key-value map of secrets to set on creation
{
"id": "my-hermes",
"display_name": "my-hermes",
"core": "hermes",
"channels": [],
"packages": [],
"secret_store": "agent:my-hermes",
"config": null,
"created_at": "2026-04-09T10:30:00Z",
"updated_at": "2026-04-09T10:30:00Z"
}
⌘I