curl --request PATCH \
--url https://api.reasonmachines.ai/v3/organizations/{orgId}/automations/{automationId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"instructions": "<string>",
"model": "<string>",
"tools": {
"mcp_servers": [
"<string>"
],
"app_tools": [
"<string>"
]
},
"enabled": true
}
'import requests
url = "https://api.reasonmachines.ai/v3/organizations/{orgId}/automations/{automationId}"
payload = {
"name": "<string>",
"instructions": "<string>",
"model": "<string>",
"tools": {
"mcp_servers": ["<string>"],
"app_tools": ["<string>"]
},
"enabled": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
instructions: '<string>',
model: '<string>',
tools: {mcp_servers: ['<string>'], app_tools: ['<string>']},
enabled: true
})
};
fetch('https://api.reasonmachines.ai/v3/organizations/{orgId}/automations/{automationId}', 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.reasonmachines.ai/v3/organizations/{orgId}/automations/{automationId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'instructions' => '<string>',
'model' => '<string>',
'tools' => [
'mcp_servers' => [
'<string>'
],
'app_tools' => [
'<string>'
]
],
'enabled' => 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.reasonmachines.ai/v3/organizations/{orgId}/automations/{automationId}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"model\": \"<string>\",\n \"tools\": {\n \"mcp_servers\": [\n \"<string>\"\n ],\n \"app_tools\": [\n \"<string>\"\n ]\n },\n \"enabled\": true\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.reasonmachines.ai/v3/organizations/{orgId}/automations/{automationId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"model\": \"<string>\",\n \"tools\": {\n \"mcp_servers\": [\n \"<string>\"\n ],\n \"app_tools\": [\n \"<string>\"\n ]\n },\n \"enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reasonmachines.ai/v3/organizations/{orgId}/automations/{automationId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"model\": \"<string>\",\n \"tools\": {\n \"mcp_servers\": [\n \"<string>\"\n ],\n \"app_tools\": [\n \"<string>\"\n ]\n },\n \"enabled\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"org_id": "<string>",
"name": "<string>",
"instructions": "<string>",
"model": "<string>",
"enabled": true,
"tools": {
"mcp_servers": [
"<string>"
],
"app_tools": [
"<string>"
]
},
"environment": {
"repo": "<string>",
"provider": "github"
},
"triggers": [
{
"id": "<string>",
"kind": "schedule",
"enabled": true,
"schedule": {
"kind": "cron",
"expression": "<string>",
"every_seconds": 123,
"next_run_at": "2023-11-07T05:31:56Z"
},
"github": {
"event": "<string>",
"action": "<string>",
"repo": "<string>"
},
"webhook": {
"configured": true
},
"run_kind": "<string>",
"last_fired_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "session_not_found"
}Update an automation
Partial update of the automation’s configuration. Send only the fields you want to change. Triggers are managed through the triggers sub-resource.
Scope:automations:writecurl --request PATCH \
--url https://api.reasonmachines.ai/v3/organizations/{orgId}/automations/{automationId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"instructions": "<string>",
"model": "<string>",
"tools": {
"mcp_servers": [
"<string>"
],
"app_tools": [
"<string>"
]
},
"enabled": true
}
'import requests
url = "https://api.reasonmachines.ai/v3/organizations/{orgId}/automations/{automationId}"
payload = {
"name": "<string>",
"instructions": "<string>",
"model": "<string>",
"tools": {
"mcp_servers": ["<string>"],
"app_tools": ["<string>"]
},
"enabled": True
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
instructions: '<string>',
model: '<string>',
tools: {mcp_servers: ['<string>'], app_tools: ['<string>']},
enabled: true
})
};
fetch('https://api.reasonmachines.ai/v3/organizations/{orgId}/automations/{automationId}', 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.reasonmachines.ai/v3/organizations/{orgId}/automations/{automationId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'name' => '<string>',
'instructions' => '<string>',
'model' => '<string>',
'tools' => [
'mcp_servers' => [
'<string>'
],
'app_tools' => [
'<string>'
]
],
'enabled' => 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.reasonmachines.ai/v3/organizations/{orgId}/automations/{automationId}"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"model\": \"<string>\",\n \"tools\": {\n \"mcp_servers\": [\n \"<string>\"\n ],\n \"app_tools\": [\n \"<string>\"\n ]\n },\n \"enabled\": true\n}")
req, _ := http.NewRequest("PATCH", 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.patch("https://api.reasonmachines.ai/v3/organizations/{orgId}/automations/{automationId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"model\": \"<string>\",\n \"tools\": {\n \"mcp_servers\": [\n \"<string>\"\n ],\n \"app_tools\": [\n \"<string>\"\n ]\n },\n \"enabled\": true\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.reasonmachines.ai/v3/organizations/{orgId}/automations/{automationId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"model\": \"<string>\",\n \"tools\": {\n \"mcp_servers\": [\n \"<string>\"\n ],\n \"app_tools\": [\n \"<string>\"\n ]\n },\n \"enabled\": true\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"org_id": "<string>",
"name": "<string>",
"instructions": "<string>",
"model": "<string>",
"enabled": true,
"tools": {
"mcp_servers": [
"<string>"
],
"app_tools": [
"<string>"
]
},
"environment": {
"repo": "<string>",
"provider": "github"
},
"triggers": [
{
"id": "<string>",
"kind": "schedule",
"enabled": true,
"schedule": {
"kind": "cron",
"expression": "<string>",
"every_seconds": 123,
"next_run_at": "2023-11-07T05:31:56Z"
},
"github": {
"event": "<string>",
"action": "<string>",
"repo": "<string>"
},
"webhook": {
"configured": true
},
"run_kind": "<string>",
"last_fired_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z"
}{
"error": "session_not_found"
}Authorizations
Your Reason API key from Settings > API. New keys use reason_; legacy ara_ keys remain accepted. Keys are capability-scoped: run, mcp:read, mcp:write, secrets:read, secrets:write, sessions:read, sessions:debug, knowledge:read, memory:read, memory:write, skills:read, skills:write, repos:read, repos:write, reviews:read, reviews:write, deployment:read, analytics:read, org:read, org:write, attachments:read, attachments:write, guardrails:read, guardrails:write, automations:read, automations:write, agent_auth:read. mcp:write manages MCP server configuration only; it does not authorize remote MCP-tool execution. sessions:debug is privileged: it expands diagnostic session events only for organization owners/admins.
Path Parameters
Organization id or slug. Resolve it with GET /v3/self.
Body
Response
Updated.
An automation: its instructions, tools, environment binding, and triggers.
The system instructions the automation runs with.
A paused (false) automation's triggers never fire.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Every condition that fires this automation. Empty until you add one.
Show child attributes
Show child attributes

