curl --request POST \
--url https://api.example.com/api/v1/automations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"id": "nightly-deps",
"name": "Nightly dependency update",
"target": {
"repository": "fabro-sh/fabro",
"ref": "main",
"workflow": "dependency-update"
},
"triggers": [
{
"id": "manual",
"type": "api",
"enabled": true
}
],
"description": "Keeps dependencies fresh."
}
'import requests
url = "https://api.example.com/api/v1/automations"
payload = {
"id": "nightly-deps",
"name": "Nightly dependency update",
"target": {
"repository": "fabro-sh/fabro",
"ref": "main",
"workflow": "dependency-update"
},
"triggers": [
{
"id": "manual",
"type": "api",
"enabled": True
}
],
"description": "Keeps dependencies fresh."
}
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({
id: 'nightly-deps',
name: 'Nightly dependency update',
target: {repository: 'fabro-sh/fabro', ref: 'main', workflow: 'dependency-update'},
triggers: [{id: 'manual', type: 'api', enabled: true}],
description: 'Keeps dependencies fresh.'
})
};
fetch('https://api.example.com/api/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.example.com/api/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([
'id' => 'nightly-deps',
'name' => 'Nightly dependency update',
'target' => [
'repository' => 'fabro-sh/fabro',
'ref' => 'main',
'workflow' => 'dependency-update'
],
'triggers' => [
[
'id' => 'manual',
'type' => 'api',
'enabled' => true
]
],
'description' => 'Keeps dependencies fresh.'
]),
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.example.com/api/v1/automations"
payload := strings.NewReader("{\n \"id\": \"nightly-deps\",\n \"name\": \"Nightly dependency update\",\n \"target\": {\n \"repository\": \"fabro-sh/fabro\",\n \"ref\": \"main\",\n \"workflow\": \"dependency-update\"\n },\n \"triggers\": [\n {\n \"id\": \"manual\",\n \"type\": \"api\",\n \"enabled\": true\n }\n ],\n \"description\": \"Keeps dependencies fresh.\"\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.example.com/api/v1/automations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"nightly-deps\",\n \"name\": \"Nightly dependency update\",\n \"target\": {\n \"repository\": \"fabro-sh/fabro\",\n \"ref\": \"main\",\n \"workflow\": \"dependency-update\"\n },\n \"triggers\": [\n {\n \"id\": \"manual\",\n \"type\": \"api\",\n \"enabled\": true\n }\n ],\n \"description\": \"Keeps dependencies fresh.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/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 \"id\": \"nightly-deps\",\n \"name\": \"Nightly dependency update\",\n \"target\": {\n \"repository\": \"fabro-sh/fabro\",\n \"ref\": \"main\",\n \"workflow\": \"dependency-update\"\n },\n \"triggers\": [\n {\n \"id\": \"manual\",\n \"type\": \"api\",\n \"enabled\": true\n }\n ],\n \"description\": \"Keeps dependencies fresh.\"\n}"
response = http.request(request)
puts response.read_body{
"id": "nightly-deps",
"revision": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"name": "Nightly dependency update",
"description": "Keeps dependencies fresh.",
"target": {
"repository": "fabro-sh/fabro",
"ref": "main",
"workflow": "dependency-update"
},
"triggers": [
{
"id": "manual",
"type": "api",
"enabled": true
}
]
}{
"errors": [
{
"status": "404",
"title": "Not Found",
"detail": "Run not found.",
"code": "access_token_expired",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"leftover_env_keys": [
"<string>"
],
"removed_env_keys": [
"<string>"
]
}{
"errors": [
{
"status": "404",
"title": "Not Found",
"detail": "Run not found.",
"code": "access_token_expired",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"leftover_env_keys": [
"<string>"
],
"removed_env_keys": [
"<string>"
]
}{
"errors": [
{
"status": "404",
"title": "Not Found",
"detail": "Run not found.",
"code": "access_token_expired",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"leftover_env_keys": [
"<string>"
],
"removed_env_keys": [
"<string>"
]
}Create automation
Creates a new automation definition.
curl --request POST \
--url https://api.example.com/api/v1/automations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"id": "nightly-deps",
"name": "Nightly dependency update",
"target": {
"repository": "fabro-sh/fabro",
"ref": "main",
"workflow": "dependency-update"
},
"triggers": [
{
"id": "manual",
"type": "api",
"enabled": true
}
],
"description": "Keeps dependencies fresh."
}
'import requests
url = "https://api.example.com/api/v1/automations"
payload = {
"id": "nightly-deps",
"name": "Nightly dependency update",
"target": {
"repository": "fabro-sh/fabro",
"ref": "main",
"workflow": "dependency-update"
},
"triggers": [
{
"id": "manual",
"type": "api",
"enabled": True
}
],
"description": "Keeps dependencies fresh."
}
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({
id: 'nightly-deps',
name: 'Nightly dependency update',
target: {repository: 'fabro-sh/fabro', ref: 'main', workflow: 'dependency-update'},
triggers: [{id: 'manual', type: 'api', enabled: true}],
description: 'Keeps dependencies fresh.'
})
};
fetch('https://api.example.com/api/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.example.com/api/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([
'id' => 'nightly-deps',
'name' => 'Nightly dependency update',
'target' => [
'repository' => 'fabro-sh/fabro',
'ref' => 'main',
'workflow' => 'dependency-update'
],
'triggers' => [
[
'id' => 'manual',
'type' => 'api',
'enabled' => true
]
],
'description' => 'Keeps dependencies fresh.'
]),
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.example.com/api/v1/automations"
payload := strings.NewReader("{\n \"id\": \"nightly-deps\",\n \"name\": \"Nightly dependency update\",\n \"target\": {\n \"repository\": \"fabro-sh/fabro\",\n \"ref\": \"main\",\n \"workflow\": \"dependency-update\"\n },\n \"triggers\": [\n {\n \"id\": \"manual\",\n \"type\": \"api\",\n \"enabled\": true\n }\n ],\n \"description\": \"Keeps dependencies fresh.\"\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.example.com/api/v1/automations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"id\": \"nightly-deps\",\n \"name\": \"Nightly dependency update\",\n \"target\": {\n \"repository\": \"fabro-sh/fabro\",\n \"ref\": \"main\",\n \"workflow\": \"dependency-update\"\n },\n \"triggers\": [\n {\n \"id\": \"manual\",\n \"type\": \"api\",\n \"enabled\": true\n }\n ],\n \"description\": \"Keeps dependencies fresh.\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/api/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 \"id\": \"nightly-deps\",\n \"name\": \"Nightly dependency update\",\n \"target\": {\n \"repository\": \"fabro-sh/fabro\",\n \"ref\": \"main\",\n \"workflow\": \"dependency-update\"\n },\n \"triggers\": [\n {\n \"id\": \"manual\",\n \"type\": \"api\",\n \"enabled\": true\n }\n ],\n \"description\": \"Keeps dependencies fresh.\"\n}"
response = http.request(request)
puts response.read_body{
"id": "nightly-deps",
"revision": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"name": "Nightly dependency update",
"description": "Keeps dependencies fresh.",
"target": {
"repository": "fabro-sh/fabro",
"ref": "main",
"workflow": "dependency-update"
},
"triggers": [
{
"id": "manual",
"type": "api",
"enabled": true
}
]
}{
"errors": [
{
"status": "404",
"title": "Not Found",
"detail": "Run not found.",
"code": "access_token_expired",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"leftover_env_keys": [
"<string>"
],
"removed_env_keys": [
"<string>"
]
}{
"errors": [
{
"status": "404",
"title": "Not Found",
"detail": "Run not found.",
"code": "access_token_expired",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"leftover_env_keys": [
"<string>"
],
"removed_env_keys": [
"<string>"
]
}{
"errors": [
{
"status": "404",
"title": "Not Found",
"detail": "Run not found.",
"code": "access_token_expired",
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
],
"request_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"leftover_env_keys": [
"<string>"
],
"removed_env_keys": [
"<string>"
]
}Authorizations
Raw dev token passed as Authorization: Bearer fabro_dev_... when server.auth.methods includes dev-token.
Body
Request body for creating an automation.
^[a-z0-9][a-z0-9-]{0,62}$"nightly-deps"
"Nightly dependency update"
Repository and workflow selected by an automation.
Show child attributes
Show child attributes
Automation trigger configuration. Unknown type discriminator values
are reported by handlers as domain validation errors with HTTP 422.
- Option 1
- Option 2
Show child attributes
Show child attributes
"Keeps dependencies fresh."
Response
Automation created
Public automation definition.
^[a-z0-9][a-z0-9-]{0,62}$"nightly-deps"
Stable revision used with If-Match for optimistic concurrency.
^[0-9a-f]{64}$"0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"
"Nightly dependency update"
"Keeps dependencies fresh."
Repository and workflow selected by an automation.
Show child attributes
Show child attributes
Automation trigger configuration. Unknown type discriminator values
are reported by handlers as domain validation errors with HTTP 422.
- Option 1
- Option 2
Show child attributes
Show child attributes