Check an automation package
curl --request POST \
--url https://platform.jobbit.uk/v1/automations/validate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/gzip' \
--data '"<string>"'import requests
url = "https://platform.jobbit.uk/v1/automations/validate"
payload = "<string>"
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/gzip"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/gzip'},
body: JSON.stringify('<string>')
};
fetch('https://platform.jobbit.uk/v1/automations/validate', 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://platform.jobbit.uk/v1/automations/validate",
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('<string>'),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/gzip"
],
]);
$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://platform.jobbit.uk/v1/automations/validate"
payload := strings.NewReader("\"<string>\"")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/gzip")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://platform.jobbit.uk/v1/automations/validate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/gzip")
.body("\"<string>\"")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform.jobbit.uk/v1/automations/validate")
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/gzip'
request.body = "\"<string>\""
response = http.request(request)
puts response.read_body{
"valid": true,
"unchanged": false,
"errors": [],
"consent_risks": [
"network_egress"
],
"summary": null,
"existing_tables": []
}{
"error": {
"code": "bad_request",
"message": "automation.yaml is not in the archive",
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}{
"error": {
"code": "invalid_key",
"message": "the API key is missing or invalid",
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}{
"error": {
"code": "insufficient_scope",
"message": "this key does not have the deploy:write permission",
"details": {
"required": "deploy:write"
},
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}{
"error": {
"code": "rate_limited",
"message": "too many read requests, retry in 4 s",
"details": {
"group": "read",
"limit": 120,
"window_seconds": 60
},
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}Check an automation package
Checks a package without publishing it. Send the package as a .tar.gz request body with automation.yaml at its root. Pass automation_id to check it against an existing automation.
Requires the automations:write permission.
POST
/
v1
/
automations
/
validate
Check an automation package
curl --request POST \
--url https://platform.jobbit.uk/v1/automations/validate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/gzip' \
--data '"<string>"'import requests
url = "https://platform.jobbit.uk/v1/automations/validate"
payload = "<string>"
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/gzip"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/gzip'},
body: JSON.stringify('<string>')
};
fetch('https://platform.jobbit.uk/v1/automations/validate', 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://platform.jobbit.uk/v1/automations/validate",
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('<string>'),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/gzip"
],
]);
$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://platform.jobbit.uk/v1/automations/validate"
payload := strings.NewReader("\"<string>\"")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/gzip")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://platform.jobbit.uk/v1/automations/validate")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/gzip")
.body("\"<string>\"")
.asString();require 'uri'
require 'net/http'
url = URI("https://platform.jobbit.uk/v1/automations/validate")
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/gzip'
request.body = "\"<string>\""
response = http.request(request)
puts response.read_body{
"valid": true,
"unchanged": false,
"errors": [],
"consent_risks": [
"network_egress"
],
"summary": null,
"existing_tables": []
}{
"error": {
"code": "bad_request",
"message": "automation.yaml is not in the archive",
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}{
"error": {
"code": "invalid_key",
"message": "the API key is missing or invalid",
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}{
"error": {
"code": "insufficient_scope",
"message": "this key does not have the deploy:write permission",
"details": {
"required": "deploy:write"
},
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}{
"error": {
"code": "rate_limited",
"message": "too many read requests, retry in 4 s",
"details": {
"group": "read",
"limit": 120,
"window_seconds": 60
},
"request_id": "5d3f0b7c8a2e4e19b6c47a90d1e2f3a4"
}
}Authorizations
An API key from Settings → API keys, sent as Authorization: Bearer jb_live_…
Query Parameters
Check the package against this automation.
Maximum string length:
64Body
application/gzip
The package as a gzip-compressed tar archive.
The body is of type file.
Response
The result of the check.
Whether the package can be published.
Whether it is identical to the live version.
Problems found.
Show child attributes
Show child attributes
Risks the person must allow before publishing.
What the package does, for the consent screen.
Tables the package declares that already hold rows or serve other automations.
⌘I