curl --request POST \
--url https://api.replicas.dev/v1/automations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"triggers": [
{
"config": {
"schedule": "0 9 * * 1-5",
"timezone": "America/New_York"
}
}
],
"prompt": "<string>",
"environment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"description": "<string>",
"scope": "org",
"debounce_seconds": 43200,
"github_check_names": [
"<string>"
],
"enabled": true,
"workspace_auto_stop_minutes": 721,
"workspace_size": "small",
"config": {
"memoryRetentionEnabled": true,
"capabilities": {
"pr_followups": true,
"read_only_contents": true
},
"preferences": {
"keep_open_on_pr_merge": false,
"keep_open_on_pr_close": false
},
"provisioning_error": {
"message": "<string>"
}
},
"model": "<string>",
"plan_mode": true,
"goal_mode": true,
"fast_mode": true
}
'import requests
url = "https://api.replicas.dev/v1/automations"
payload = {
"name": "<string>",
"triggers": [{ "config": {
"schedule": "0 9 * * 1-5",
"timezone": "America/New_York"
} }],
"prompt": "<string>",
"environment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"description": "<string>",
"scope": "org",
"debounce_seconds": 43200,
"github_check_names": ["<string>"],
"enabled": True,
"workspace_auto_stop_minutes": 721,
"workspace_size": "small",
"config": {
"memoryRetentionEnabled": True,
"capabilities": {
"pr_followups": True,
"read_only_contents": True
},
"preferences": {
"keep_open_on_pr_merge": False,
"keep_open_on_pr_close": False
},
"provisioning_error": { "message": "<string>" }
},
"model": "<string>",
"plan_mode": True,
"goal_mode": True,
"fast_mode": True
}
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({
name: '<string>',
triggers: [{config: {schedule: '0 9 * * 1-5', timezone: 'America/New_York'}}],
prompt: '<string>',
environment_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
description: '<string>',
scope: 'org',
debounce_seconds: 43200,
github_check_names: ['<string>'],
enabled: true,
workspace_auto_stop_minutes: 721,
workspace_size: 'small',
config: {
memoryRetentionEnabled: true,
capabilities: {pr_followups: true, read_only_contents: true},
preferences: {keep_open_on_pr_merge: false, keep_open_on_pr_close: false},
provisioning_error: {message: '<string>'}
},
model: '<string>',
plan_mode: true,
goal_mode: true,
fast_mode: true
})
};
fetch('https://api.replicas.dev/v1/automations', 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.replicas.dev/v1/automations",
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([
'name' => '<string>',
'triggers' => [
[
'config' => [
'schedule' => '0 9 * * 1-5',
'timezone' => 'America/New_York'
]
]
],
'prompt' => '<string>',
'environment_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'description' => '<string>',
'scope' => 'org',
'debounce_seconds' => 43200,
'github_check_names' => [
'<string>'
],
'enabled' => true,
'workspace_auto_stop_minutes' => 721,
'workspace_size' => 'small',
'config' => [
'memoryRetentionEnabled' => true,
'capabilities' => [
'pr_followups' => true,
'read_only_contents' => true
],
'preferences' => [
'keep_open_on_pr_merge' => false,
'keep_open_on_pr_close' => false
],
'provisioning_error' => [
'message' => '<string>'
]
],
'model' => '<string>',
'plan_mode' => true,
'goal_mode' => true,
'fast_mode' => true
]),
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.replicas.dev/v1/automations"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"triggers\": [\n {\n \"config\": {\n \"schedule\": \"0 9 * * 1-5\",\n \"timezone\": \"America/New_York\"\n }\n }\n ],\n \"prompt\": \"<string>\",\n \"environment_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"description\": \"<string>\",\n \"scope\": \"org\",\n \"debounce_seconds\": 43200,\n \"github_check_names\": [\n \"<string>\"\n ],\n \"enabled\": true,\n \"workspace_auto_stop_minutes\": 721,\n \"workspace_size\": \"small\",\n \"config\": {\n \"memoryRetentionEnabled\": true,\n \"capabilities\": {\n \"pr_followups\": true,\n \"read_only_contents\": true\n },\n \"preferences\": {\n \"keep_open_on_pr_merge\": false,\n \"keep_open_on_pr_close\": false\n },\n \"provisioning_error\": {\n \"message\": \"<string>\"\n }\n },\n \"model\": \"<string>\",\n \"plan_mode\": true,\n \"goal_mode\": true,\n \"fast_mode\": true\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.replicas.dev/v1/automations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"triggers\": [\n {\n \"config\": {\n \"schedule\": \"0 9 * * 1-5\",\n \"timezone\": \"America/New_York\"\n }\n }\n ],\n \"prompt\": \"<string>\",\n \"environment_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"description\": \"<string>\",\n \"scope\": \"org\",\n \"debounce_seconds\": 43200,\n \"github_check_names\": [\n \"<string>\"\n ],\n \"enabled\": true,\n \"workspace_auto_stop_minutes\": 721,\n \"workspace_size\": \"small\",\n \"config\": {\n \"memoryRetentionEnabled\": true,\n \"capabilities\": {\n \"pr_followups\": true,\n \"read_only_contents\": true\n },\n \"preferences\": {\n \"keep_open_on_pr_merge\": false,\n \"keep_open_on_pr_close\": false\n },\n \"provisioning_error\": {\n \"message\": \"<string>\"\n }\n },\n \"model\": \"<string>\",\n \"plan_mode\": true,\n \"goal_mode\": true,\n \"fast_mode\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.replicas.dev/v1/automations")
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 \"name\": \"<string>\",\n \"triggers\": [\n {\n \"config\": {\n \"schedule\": \"0 9 * * 1-5\",\n \"timezone\": \"America/New_York\"\n }\n }\n ],\n \"prompt\": \"<string>\",\n \"environment_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"description\": \"<string>\",\n \"scope\": \"org\",\n \"debounce_seconds\": 43200,\n \"github_check_names\": [\n \"<string>\"\n ],\n \"enabled\": true,\n \"workspace_auto_stop_minutes\": 721,\n \"workspace_size\": \"small\",\n \"config\": {\n \"memoryRetentionEnabled\": true,\n \"capabilities\": {\n \"pr_followups\": true,\n \"read_only_contents\": true\n },\n \"preferences\": {\n \"keep_open_on_pr_merge\": false,\n \"keep_open_on_pr_close\": false\n },\n \"provisioning_error\": {\n \"message\": \"<string>\"\n }\n },\n \"model\": \"<string>\",\n \"plan_mode\": true,\n \"goal_mode\": true,\n \"fast_mode\": true\n}"
response = http.request(request)
puts response.read_body{
"automation": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"organization_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"triggers": [
{
"type": "cron",
"config": {
"schedule": "0 9 * * 1-5",
"timezone": "America/New_York"
}
}
],
"prompt": "<string>",
"debounce_seconds": 43200,
"github_check_names": [
"<string>"
],
"environment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"enabled": true,
"webhook_token": "<string>",
"cron_expression": "<string>",
"cron_timezone": "<string>",
"cron_next_fire_at": "2023-11-07T05:31:56Z",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workspace_lifecycle_policy": "default",
"workspace_auto_stop_minutes": 721,
"workspace_size": "small",
"config": {
"memoryRetentionEnabled": true,
"capabilities": {
"pr_followups": true,
"read_only_contents": true
},
"preferences": {
"keep_open_on_pr_merge": false,
"keep_open_on_pr_close": false
},
"provisioning_error": {
"message": "<string>"
}
},
"agent_provider": "claude",
"model": "<string>",
"thinking_level": "low",
"plan_mode": true,
"goal_mode": true,
"fast_mode": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"access": {
"can_write": true,
"can_read": true
}
}
}{
"error": "<string>",
"details": "<string>",
"code": "<string>"
}{
"error": "<string>",
"details": "<string>",
"code": "<string>"
}{
"error": "<string>",
"details": "<string>",
"code": "<string>"
}{
"error": "<string>",
"details": "<string>",
"code": "<string>"
}Create automation
See Automations for triggers and lifecycle policies.
curl --request POST \
--url https://api.replicas.dev/v1/automations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"triggers": [
{
"config": {
"schedule": "0 9 * * 1-5",
"timezone": "America/New_York"
}
}
],
"prompt": "<string>",
"environment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"description": "<string>",
"scope": "org",
"debounce_seconds": 43200,
"github_check_names": [
"<string>"
],
"enabled": true,
"workspace_auto_stop_minutes": 721,
"workspace_size": "small",
"config": {
"memoryRetentionEnabled": true,
"capabilities": {
"pr_followups": true,
"read_only_contents": true
},
"preferences": {
"keep_open_on_pr_merge": false,
"keep_open_on_pr_close": false
},
"provisioning_error": {
"message": "<string>"
}
},
"model": "<string>",
"plan_mode": true,
"goal_mode": true,
"fast_mode": true
}
'import requests
url = "https://api.replicas.dev/v1/automations"
payload = {
"name": "<string>",
"triggers": [{ "config": {
"schedule": "0 9 * * 1-5",
"timezone": "America/New_York"
} }],
"prompt": "<string>",
"environment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"description": "<string>",
"scope": "org",
"debounce_seconds": 43200,
"github_check_names": ["<string>"],
"enabled": True,
"workspace_auto_stop_minutes": 721,
"workspace_size": "small",
"config": {
"memoryRetentionEnabled": True,
"capabilities": {
"pr_followups": True,
"read_only_contents": True
},
"preferences": {
"keep_open_on_pr_merge": False,
"keep_open_on_pr_close": False
},
"provisioning_error": { "message": "<string>" }
},
"model": "<string>",
"plan_mode": True,
"goal_mode": True,
"fast_mode": True
}
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({
name: '<string>',
triggers: [{config: {schedule: '0 9 * * 1-5', timezone: 'America/New_York'}}],
prompt: '<string>',
environment_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
description: '<string>',
scope: 'org',
debounce_seconds: 43200,
github_check_names: ['<string>'],
enabled: true,
workspace_auto_stop_minutes: 721,
workspace_size: 'small',
config: {
memoryRetentionEnabled: true,
capabilities: {pr_followups: true, read_only_contents: true},
preferences: {keep_open_on_pr_merge: false, keep_open_on_pr_close: false},
provisioning_error: {message: '<string>'}
},
model: '<string>',
plan_mode: true,
goal_mode: true,
fast_mode: true
})
};
fetch('https://api.replicas.dev/v1/automations', 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.replicas.dev/v1/automations",
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([
'name' => '<string>',
'triggers' => [
[
'config' => [
'schedule' => '0 9 * * 1-5',
'timezone' => 'America/New_York'
]
]
],
'prompt' => '<string>',
'environment_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'description' => '<string>',
'scope' => 'org',
'debounce_seconds' => 43200,
'github_check_names' => [
'<string>'
],
'enabled' => true,
'workspace_auto_stop_minutes' => 721,
'workspace_size' => 'small',
'config' => [
'memoryRetentionEnabled' => true,
'capabilities' => [
'pr_followups' => true,
'read_only_contents' => true
],
'preferences' => [
'keep_open_on_pr_merge' => false,
'keep_open_on_pr_close' => false
],
'provisioning_error' => [
'message' => '<string>'
]
],
'model' => '<string>',
'plan_mode' => true,
'goal_mode' => true,
'fast_mode' => true
]),
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.replicas.dev/v1/automations"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"triggers\": [\n {\n \"config\": {\n \"schedule\": \"0 9 * * 1-5\",\n \"timezone\": \"America/New_York\"\n }\n }\n ],\n \"prompt\": \"<string>\",\n \"environment_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"description\": \"<string>\",\n \"scope\": \"org\",\n \"debounce_seconds\": 43200,\n \"github_check_names\": [\n \"<string>\"\n ],\n \"enabled\": true,\n \"workspace_auto_stop_minutes\": 721,\n \"workspace_size\": \"small\",\n \"config\": {\n \"memoryRetentionEnabled\": true,\n \"capabilities\": {\n \"pr_followups\": true,\n \"read_only_contents\": true\n },\n \"preferences\": {\n \"keep_open_on_pr_merge\": false,\n \"keep_open_on_pr_close\": false\n },\n \"provisioning_error\": {\n \"message\": \"<string>\"\n }\n },\n \"model\": \"<string>\",\n \"plan_mode\": true,\n \"goal_mode\": true,\n \"fast_mode\": true\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.replicas.dev/v1/automations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"triggers\": [\n {\n \"config\": {\n \"schedule\": \"0 9 * * 1-5\",\n \"timezone\": \"America/New_York\"\n }\n }\n ],\n \"prompt\": \"<string>\",\n \"environment_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"description\": \"<string>\",\n \"scope\": \"org\",\n \"debounce_seconds\": 43200,\n \"github_check_names\": [\n \"<string>\"\n ],\n \"enabled\": true,\n \"workspace_auto_stop_minutes\": 721,\n \"workspace_size\": \"small\",\n \"config\": {\n \"memoryRetentionEnabled\": true,\n \"capabilities\": {\n \"pr_followups\": true,\n \"read_only_contents\": true\n },\n \"preferences\": {\n \"keep_open_on_pr_merge\": false,\n \"keep_open_on_pr_close\": false\n },\n \"provisioning_error\": {\n \"message\": \"<string>\"\n }\n },\n \"model\": \"<string>\",\n \"plan_mode\": true,\n \"goal_mode\": true,\n \"fast_mode\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.replicas.dev/v1/automations")
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 \"name\": \"<string>\",\n \"triggers\": [\n {\n \"config\": {\n \"schedule\": \"0 9 * * 1-5\",\n \"timezone\": \"America/New_York\"\n }\n }\n ],\n \"prompt\": \"<string>\",\n \"environment_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"description\": \"<string>\",\n \"scope\": \"org\",\n \"debounce_seconds\": 43200,\n \"github_check_names\": [\n \"<string>\"\n ],\n \"enabled\": true,\n \"workspace_auto_stop_minutes\": 721,\n \"workspace_size\": \"small\",\n \"config\": {\n \"memoryRetentionEnabled\": true,\n \"capabilities\": {\n \"pr_followups\": true,\n \"read_only_contents\": true\n },\n \"preferences\": {\n \"keep_open_on_pr_merge\": false,\n \"keep_open_on_pr_close\": false\n },\n \"provisioning_error\": {\n \"message\": \"<string>\"\n }\n },\n \"model\": \"<string>\",\n \"plan_mode\": true,\n \"goal_mode\": true,\n \"fast_mode\": true\n}"
response = http.request(request)
puts response.read_body{
"automation": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"organization_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"description": "<string>",
"triggers": [
{
"type": "cron",
"config": {
"schedule": "0 9 * * 1-5",
"timezone": "America/New_York"
}
}
],
"prompt": "<string>",
"debounce_seconds": 43200,
"github_check_names": [
"<string>"
],
"environment_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"enabled": true,
"webhook_token": "<string>",
"cron_expression": "<string>",
"cron_timezone": "<string>",
"cron_next_fire_at": "2023-11-07T05:31:56Z",
"user_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_by": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workspace_lifecycle_policy": "default",
"workspace_auto_stop_minutes": 721,
"workspace_size": "small",
"config": {
"memoryRetentionEnabled": true,
"capabilities": {
"pr_followups": true,
"read_only_contents": true
},
"preferences": {
"keep_open_on_pr_merge": false,
"keep_open_on_pr_close": false
},
"provisioning_error": {
"message": "<string>"
}
},
"agent_provider": "claude",
"model": "<string>",
"thinking_level": "low",
"plan_mode": true,
"goal_mode": true,
"fast_mode": true,
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"access": {
"can_write": true,
"can_read": true
}
}
}{
"error": "<string>",
"details": "<string>",
"code": "<string>"
}{
"error": "<string>",
"details": "<string>",
"code": "<string>"
}{
"error": "<string>",
"details": "<string>",
"code": "<string>"
}{
"error": "<string>",
"details": "<string>",
"code": "<string>"
}Authorizations
Organization or personal API key from Settings → API Keys.
Headers
API version. 2026-10-07 returns snake_case responses. See versioning.
2026-10-07 Body
Request body for creating a new automation. The automation runs in a single environment specified by environment_id.
Human-readable name for the automation
At most one cron trigger and one trigger per event.
1Show child attributes
Show child attributes
The instruction sent to the coding agent when the automation fires
ID of the environment this automation runs in. Required. The environment supplies resolved env vars / MCPs / skills and may optionally bind a repository or repository set.
Optional description
Automation scope. org (default) creates an org-owned automation visible to all members. user creates a personal automation scoped to the authenticated user.
org, user Seconds to wait for trigger events to stop before running once with the latest payload. GitHub and GitLab events debounce per pull or merge request. null or 0 disables debouncing.
0 <= x <= 86400GitHub check names the automation reports a verdict on. Each starts as an in-progress check on the pull request, so required checks wait for the agent. Requires a pull_request.opened or pull_request.synchronize trigger.
10100Whether the automation should be active (defaults to true)
Lifecycle policy for workspaces created by this automation
default, archive_when_done, sleep_when_done Inactivity timeout in minutes for the default keep-alive policy
3 <= x <= 1440Compute size for every workspace this automation fires off. small (2 vCPU, 8 GB memory) bills at $0.008/min, large (4 vCPU, 16 GB memory) at $0.016/min, and ultra (8 vCPU, 32 GB memory) at $0.032/min. Defaults to small.
small, large, ultra Workspace behavior configuration. Defaults depend on the workspace source; see each setting.
Show child attributes
Show child attributes
Coding agent override. Null inherits the organization default.
claude, codex, cursor, muse, opencode, pi, null Model override. Requires agent_provider when set. Must be a model your organization allows for that agent; hidden models are rejected with 400.
Thinking/reasoning level override. ultra is available for Codex and Muse Code; ultracode is Claude Code-only.
low, medium, high, xhigh, max, ultra, ultracode, null Run automation messages in plan mode.
Set automation messages as goals. Null inherits the resolved agent default; false explicitly disables it. Only applies when the resolved agent is Claude Code or Codex.
Run automation messages in fast mode. Null inherits the resolved agent default; false explicitly disables it.
Response
Automation created successfully
Response containing a single automation
An automation record
Show child attributes
Show child attributes