Create automation
Delegates to AgentWorkflowService.createInternal — runs the full pipeline including cron + timezone validation and JobRunr recurring-job registration. Schedules created via API DO fire (was a bug in the initial PR).
curl --request POST \
--url https://api.gennia.ai/public/api/v1/agents/{agentPublicId}/automations \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"description": "Runs every morning and emails the invoice digest.",
"name": "Daily invoice summary",
"prompt": "Summarize the invoices created in the last 24 hours and send the digest.",
"schedule": "@daily",
"timezone": "America/Sao_Paulo",
"triggerConfig": {},
"triggerSlug": "GMAIL_NEW_EMAIL",
"triggerToolkitSlug": "gmail"
}
'import requests
url = "https://api.gennia.ai/public/api/v1/agents/{agentPublicId}/automations"
payload = {
"description": "Runs every morning and emails the invoice digest.",
"name": "Daily invoice summary",
"prompt": "Summarize the invoices created in the last 24 hours and send the digest.",
"schedule": "@daily",
"timezone": "America/Sao_Paulo",
"triggerConfig": {},
"triggerSlug": "GMAIL_NEW_EMAIL",
"triggerToolkitSlug": "gmail"
}
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({
description: 'Runs every morning and emails the invoice digest.',
name: 'Daily invoice summary',
prompt: 'Summarize the invoices created in the last 24 hours and send the digest.',
schedule: '@daily',
timezone: 'America/Sao_Paulo',
triggerConfig: {},
triggerSlug: 'GMAIL_NEW_EMAIL',
triggerToolkitSlug: 'gmail'
})
};
fetch('https://api.gennia.ai/public/api/v1/agents/{agentPublicId}/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.gennia.ai/public/api/v1/agents/{agentPublicId}/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([
'description' => 'Runs every morning and emails the invoice digest.',
'name' => 'Daily invoice summary',
'prompt' => 'Summarize the invoices created in the last 24 hours and send the digest.',
'schedule' => '@daily',
'timezone' => 'America/Sao_Paulo',
'triggerConfig' => [
],
'triggerSlug' => 'GMAIL_NEW_EMAIL',
'triggerToolkitSlug' => 'gmail'
]),
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://api.gennia.ai/public/api/v1/agents/{agentPublicId}/automations"
payload := strings.NewReader("{\n \"description\": \"Runs every morning and emails the invoice digest.\",\n \"name\": \"Daily invoice summary\",\n \"prompt\": \"Summarize the invoices created in the last 24 hours and send the digest.\",\n \"schedule\": \"@daily\",\n \"timezone\": \"America/Sao_Paulo\",\n \"triggerConfig\": {},\n \"triggerSlug\": \"GMAIL_NEW_EMAIL\",\n \"triggerToolkitSlug\": \"gmail\"\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://api.gennia.ai/public/api/v1/agents/{agentPublicId}/automations")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"Runs every morning and emails the invoice digest.\",\n \"name\": \"Daily invoice summary\",\n \"prompt\": \"Summarize the invoices created in the last 24 hours and send the digest.\",\n \"schedule\": \"@daily\",\n \"timezone\": \"America/Sao_Paulo\",\n \"triggerConfig\": {},\n \"triggerSlug\": \"GMAIL_NEW_EMAIL\",\n \"triggerToolkitSlug\": \"gmail\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gennia.ai/public/api/v1/agents/{agentPublicId}/automations")
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 \"description\": \"Runs every morning and emails the invoice digest.\",\n \"name\": \"Daily invoice summary\",\n \"prompt\": \"Summarize the invoices created in the last 24 hours and send the digest.\",\n \"schedule\": \"@daily\",\n \"timezone\": \"America/Sao_Paulo\",\n \"triggerConfig\": {},\n \"triggerSlug\": \"GMAIL_NEW_EMAIL\",\n \"triggerToolkitSlug\": \"gmail\"\n}"
response = http.request(request)
puts response.read_body{
"createdAt": "2023-11-07T05:31:56Z",
"description": "<string>",
"hitlMode": "auto_approve",
"lastRunAt": "2023-11-07T05:31:56Z",
"lastRunStatus": "<string>",
"name": "<string>",
"nextRunAt": "2023-11-07T05:31:56Z",
"prompt": "<string>",
"publicId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"schedule": "<string>",
"status": "active",
"timezone": "<string>",
"triggerConfig": {},
"triggerMode": "manual",
"triggerSlug": "<string>",
"triggerToolkitSlug": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"createdAt": "2023-11-07T05:31:56Z",
"description": "<string>",
"hitlMode": "auto_approve",
"lastRunAt": "2023-11-07T05:31:56Z",
"lastRunStatus": "<string>",
"name": "<string>",
"nextRunAt": "2023-11-07T05:31:56Z",
"prompt": "<string>",
"publicId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"schedule": "<string>",
"status": "active",
"timezone": "<string>",
"triggerConfig": {},
"triggerMode": "manual",
"triggerSlug": "<string>",
"triggerToolkitSlug": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"createdAt": "2023-11-07T05:31:56Z",
"description": "<string>",
"hitlMode": "auto_approve",
"lastRunAt": "2023-11-07T05:31:56Z",
"lastRunStatus": "<string>",
"name": "<string>",
"nextRunAt": "2023-11-07T05:31:56Z",
"prompt": "<string>",
"publicId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"schedule": "<string>",
"status": "active",
"timezone": "<string>",
"triggerConfig": {},
"triggerMode": "manual",
"triggerSlug": "<string>",
"triggerToolkitSlug": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"createdAt": "2023-11-07T05:31:56Z",
"description": "<string>",
"hitlMode": "auto_approve",
"lastRunAt": "2023-11-07T05:31:56Z",
"lastRunStatus": "<string>",
"name": "<string>",
"nextRunAt": "2023-11-07T05:31:56Z",
"prompt": "<string>",
"publicId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"schedule": "<string>",
"status": "active",
"timezone": "<string>",
"triggerConfig": {},
"triggerMode": "manual",
"triggerSlug": "<string>",
"triggerToolkitSlug": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"createdAt": "2023-11-07T05:31:56Z",
"description": "<string>",
"hitlMode": "auto_approve",
"lastRunAt": "2023-11-07T05:31:56Z",
"lastRunStatus": "<string>",
"name": "<string>",
"nextRunAt": "2023-11-07T05:31:56Z",
"prompt": "<string>",
"publicId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"schedule": "<string>",
"status": "active",
"timezone": "<string>",
"triggerConfig": {},
"triggerMode": "manual",
"triggerSlug": "<string>",
"triggerToolkitSlug": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}Autorizações
Parâmetros de caminho
Corpo
Body for creating a new automation (workflow) on an agent.
How the automation is triggered (e.g. schedule, manual, external event).
manual, schedule, webhook, webhook_url Short description shown in the automation list.
500"Runs every morning and emails the invoice digest."
Human-in-the-loop approval mode for this automation.
auto_approve, pause_on_approval Display name of the automation.
150"Daily invoice summary"
Prompt executed by the automation when triggered.
10000"Summarize the invoices created in the last 24 hours and send the digest."
Cron expression for scheduled triggerMode. Ignored for non-scheduled modes.
100"@daily"
IANA timezone in which the schedule cron should be interpreted.
50"America/Sao_Paulo"
Trigger-specific configuration object. Shape depends on the triggerSlug.
Show child attributes
Show child attributes
Trigger slug within the toolkit (for event-based triggers).
200"GMAIL_NEW_EMAIL"
Composio toolkit slug used to source the trigger (for event-based triggers).
100"gmail"
Resposta
Created
Scheduled / trigger-based agent automation.
auto_approve, pause_on_approval active, inactive Show child attributes
Show child attributes
manual, schedule, webhook, webhook_url Esta página foi útil?
curl --request POST \
--url https://api.gennia.ai/public/api/v1/agents/{agentPublicId}/automations \
--header 'Content-Type: application/json' \
--header 'X-Api-Key: <api-key>' \
--data '
{
"description": "Runs every morning and emails the invoice digest.",
"name": "Daily invoice summary",
"prompt": "Summarize the invoices created in the last 24 hours and send the digest.",
"schedule": "@daily",
"timezone": "America/Sao_Paulo",
"triggerConfig": {},
"triggerSlug": "GMAIL_NEW_EMAIL",
"triggerToolkitSlug": "gmail"
}
'import requests
url = "https://api.gennia.ai/public/api/v1/agents/{agentPublicId}/automations"
payload = {
"description": "Runs every morning and emails the invoice digest.",
"name": "Daily invoice summary",
"prompt": "Summarize the invoices created in the last 24 hours and send the digest.",
"schedule": "@daily",
"timezone": "America/Sao_Paulo",
"triggerConfig": {},
"triggerSlug": "GMAIL_NEW_EMAIL",
"triggerToolkitSlug": "gmail"
}
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({
description: 'Runs every morning and emails the invoice digest.',
name: 'Daily invoice summary',
prompt: 'Summarize the invoices created in the last 24 hours and send the digest.',
schedule: '@daily',
timezone: 'America/Sao_Paulo',
triggerConfig: {},
triggerSlug: 'GMAIL_NEW_EMAIL',
triggerToolkitSlug: 'gmail'
})
};
fetch('https://api.gennia.ai/public/api/v1/agents/{agentPublicId}/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.gennia.ai/public/api/v1/agents/{agentPublicId}/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([
'description' => 'Runs every morning and emails the invoice digest.',
'name' => 'Daily invoice summary',
'prompt' => 'Summarize the invoices created in the last 24 hours and send the digest.',
'schedule' => '@daily',
'timezone' => 'America/Sao_Paulo',
'triggerConfig' => [
],
'triggerSlug' => 'GMAIL_NEW_EMAIL',
'triggerToolkitSlug' => 'gmail'
]),
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://api.gennia.ai/public/api/v1/agents/{agentPublicId}/automations"
payload := strings.NewReader("{\n \"description\": \"Runs every morning and emails the invoice digest.\",\n \"name\": \"Daily invoice summary\",\n \"prompt\": \"Summarize the invoices created in the last 24 hours and send the digest.\",\n \"schedule\": \"@daily\",\n \"timezone\": \"America/Sao_Paulo\",\n \"triggerConfig\": {},\n \"triggerSlug\": \"GMAIL_NEW_EMAIL\",\n \"triggerToolkitSlug\": \"gmail\"\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://api.gennia.ai/public/api/v1/agents/{agentPublicId}/automations")
.header("X-Api-Key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"Runs every morning and emails the invoice digest.\",\n \"name\": \"Daily invoice summary\",\n \"prompt\": \"Summarize the invoices created in the last 24 hours and send the digest.\",\n \"schedule\": \"@daily\",\n \"timezone\": \"America/Sao_Paulo\",\n \"triggerConfig\": {},\n \"triggerSlug\": \"GMAIL_NEW_EMAIL\",\n \"triggerToolkitSlug\": \"gmail\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gennia.ai/public/api/v1/agents/{agentPublicId}/automations")
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 \"description\": \"Runs every morning and emails the invoice digest.\",\n \"name\": \"Daily invoice summary\",\n \"prompt\": \"Summarize the invoices created in the last 24 hours and send the digest.\",\n \"schedule\": \"@daily\",\n \"timezone\": \"America/Sao_Paulo\",\n \"triggerConfig\": {},\n \"triggerSlug\": \"GMAIL_NEW_EMAIL\",\n \"triggerToolkitSlug\": \"gmail\"\n}"
response = http.request(request)
puts response.read_body{
"createdAt": "2023-11-07T05:31:56Z",
"description": "<string>",
"hitlMode": "auto_approve",
"lastRunAt": "2023-11-07T05:31:56Z",
"lastRunStatus": "<string>",
"name": "<string>",
"nextRunAt": "2023-11-07T05:31:56Z",
"prompt": "<string>",
"publicId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"schedule": "<string>",
"status": "active",
"timezone": "<string>",
"triggerConfig": {},
"triggerMode": "manual",
"triggerSlug": "<string>",
"triggerToolkitSlug": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"createdAt": "2023-11-07T05:31:56Z",
"description": "<string>",
"hitlMode": "auto_approve",
"lastRunAt": "2023-11-07T05:31:56Z",
"lastRunStatus": "<string>",
"name": "<string>",
"nextRunAt": "2023-11-07T05:31:56Z",
"prompt": "<string>",
"publicId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"schedule": "<string>",
"status": "active",
"timezone": "<string>",
"triggerConfig": {},
"triggerMode": "manual",
"triggerSlug": "<string>",
"triggerToolkitSlug": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"createdAt": "2023-11-07T05:31:56Z",
"description": "<string>",
"hitlMode": "auto_approve",
"lastRunAt": "2023-11-07T05:31:56Z",
"lastRunStatus": "<string>",
"name": "<string>",
"nextRunAt": "2023-11-07T05:31:56Z",
"prompt": "<string>",
"publicId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"schedule": "<string>",
"status": "active",
"timezone": "<string>",
"triggerConfig": {},
"triggerMode": "manual",
"triggerSlug": "<string>",
"triggerToolkitSlug": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"createdAt": "2023-11-07T05:31:56Z",
"description": "<string>",
"hitlMode": "auto_approve",
"lastRunAt": "2023-11-07T05:31:56Z",
"lastRunStatus": "<string>",
"name": "<string>",
"nextRunAt": "2023-11-07T05:31:56Z",
"prompt": "<string>",
"publicId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"schedule": "<string>",
"status": "active",
"timezone": "<string>",
"triggerConfig": {},
"triggerMode": "manual",
"triggerSlug": "<string>",
"triggerToolkitSlug": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"createdAt": "2023-11-07T05:31:56Z",
"description": "<string>",
"hitlMode": "auto_approve",
"lastRunAt": "2023-11-07T05:31:56Z",
"lastRunStatus": "<string>",
"name": "<string>",
"nextRunAt": "2023-11-07T05:31:56Z",
"prompt": "<string>",
"publicId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"schedule": "<string>",
"status": "active",
"timezone": "<string>",
"triggerConfig": {},
"triggerMode": "manual",
"triggerSlug": "<string>",
"triggerToolkitSlug": "<string>",
"updatedAt": "2023-11-07T05:31:56Z"
}
