curl --request PUT \
--url https://api.example.com/api/v1/automations/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'If-Match: <if-match>' \
--data '
{
"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/{id}"
payload = {
"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 = {
"If-Match": "<if-match>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {
'If-Match': '<if-match>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
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/{id}', 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/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'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",
"If-Match: <if-match>"
],
]);
$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/{id}"
payload := strings.NewReader("{\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("PUT", url, payload)
req.Header.Add("If-Match", "<if-match>")
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.put("https://api.example.com/api/v1/automations/{id}")
.header("If-Match", "<if-match>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\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/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["If-Match"] = '<if-match>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\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>"
]
}{
"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>"
]
}Replace automation
Replaces an automation definition when If-Match matches the current automation revision.
curl --request PUT \
--url https://api.example.com/api/v1/automations/{id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'If-Match: <if-match>' \
--data '
{
"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/{id}"
payload = {
"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 = {
"If-Match": "<if-match>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {
'If-Match': '<if-match>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
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/{id}', 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/{id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'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",
"If-Match: <if-match>"
],
]);
$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/{id}"
payload := strings.NewReader("{\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("PUT", url, payload)
req.Header.Add("If-Match", "<if-match>")
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.put("https://api.example.com/api/v1/automations/{id}")
.header("If-Match", "<if-match>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\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/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["If-Match"] = '<if-match>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\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>"
]
}{
"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.
Headers
Current resource revision used for optimistic concurrency, as returned in the ETag response header.
Path Parameters
Unique automation identifier.
^[a-z0-9][a-z0-9-]{0,62}$Body
Request body for replacing an automation.
"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 replaced
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