curl --request POST \
--url https://api.parley.so/v1/automations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"instructions": "<string>",
"description": "<string>",
"triggers": [
{
"type": "cron",
"cron": "<string>",
"timezone": "<string>"
}
],
"projectId": "<string>"
}
'import requests
url = "https://api.parley.so/v1/automations"
payload = {
"name": "<string>",
"instructions": "<string>",
"description": "<string>",
"triggers": [
{
"type": "cron",
"cron": "<string>",
"timezone": "<string>"
}
],
"projectId": "<string>"
}
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({
name: '<string>',
instructions: '<string>',
description: '<string>',
triggers: [{type: 'cron', cron: '<string>', timezone: '<string>'}],
projectId: '<string>'
})
};
fetch('https://api.parley.so/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.parley.so/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([
'name' => '<string>',
'instructions' => '<string>',
'description' => '<string>',
'triggers' => [
[
'type' => 'cron',
'cron' => '<string>',
'timezone' => '<string>'
]
],
'projectId' => '<string>'
]),
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.parley.so/v1/automations"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"description\": \"<string>\",\n \"triggers\": [\n {\n \"type\": \"cron\",\n \"cron\": \"<string>\",\n \"timezone\": \"<string>\"\n }\n ],\n \"projectId\": \"<string>\"\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.parley.so/v1/automations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"description\": \"<string>\",\n \"triggers\": [\n {\n \"type\": \"cron\",\n \"cron\": \"<string>\",\n \"timezone\": \"<string>\"\n }\n ],\n \"projectId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parley.so/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 \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"description\": \"<string>\",\n \"triggers\": [\n {\n \"type\": \"cron\",\n \"cron\": \"<string>\",\n \"timezone\": \"<string>\"\n }\n ],\n \"projectId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"description": "<string>",
"status": "active",
"nextRunAt": "2023-11-07T05:31:56Z",
"project": {
"type": "project",
"id": "<string>",
"name": "<string>"
},
"lastRun": {
"id": "<string>",
"status": "pending",
"startedAt": "2023-11-07T05:31:56Z",
"endedAt": "2023-11-07T05:31:56Z"
},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"triggers": [
{
"id": "<string>",
"type": "cron",
"cron": "<string>",
"timezone": "<string>"
}
],
"instructions": "<string>"
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "The request is invalid.",
"details": {
"issues": [
{
"path": "<string>",
"message": "<string>"
}
]
}
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Missing or invalid credentials."
}
}{
"error": {
"code": "FORBIDDEN",
"message": "You don't have permission to do this."
}
}{
"error": {
"code": "TOO_MANY_REQUESTS",
"message": "Too many requests."
}
}Create an automation
Create an automation: instructions Parley’s assistant carries out whenever one of its triggers fires, as you, with nobody present. The automation is active as soon as it’s created. Without a trigger it only runs when someone starts a run with POST /automations//runs.
curl --request POST \
--url https://api.parley.so/v1/automations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"instructions": "<string>",
"description": "<string>",
"triggers": [
{
"type": "cron",
"cron": "<string>",
"timezone": "<string>"
}
],
"projectId": "<string>"
}
'import requests
url = "https://api.parley.so/v1/automations"
payload = {
"name": "<string>",
"instructions": "<string>",
"description": "<string>",
"triggers": [
{
"type": "cron",
"cron": "<string>",
"timezone": "<string>"
}
],
"projectId": "<string>"
}
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({
name: '<string>',
instructions: '<string>',
description: '<string>',
triggers: [{type: 'cron', cron: '<string>', timezone: '<string>'}],
projectId: '<string>'
})
};
fetch('https://api.parley.so/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.parley.so/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([
'name' => '<string>',
'instructions' => '<string>',
'description' => '<string>',
'triggers' => [
[
'type' => 'cron',
'cron' => '<string>',
'timezone' => '<string>'
]
],
'projectId' => '<string>'
]),
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.parley.so/v1/automations"
payload := strings.NewReader("{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"description\": \"<string>\",\n \"triggers\": [\n {\n \"type\": \"cron\",\n \"cron\": \"<string>\",\n \"timezone\": \"<string>\"\n }\n ],\n \"projectId\": \"<string>\"\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.parley.so/v1/automations")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"description\": \"<string>\",\n \"triggers\": [\n {\n \"type\": \"cron\",\n \"cron\": \"<string>\",\n \"timezone\": \"<string>\"\n }\n ],\n \"projectId\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.parley.so/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 \"name\": \"<string>\",\n \"instructions\": \"<string>\",\n \"description\": \"<string>\",\n \"triggers\": [\n {\n \"type\": \"cron\",\n \"cron\": \"<string>\",\n \"timezone\": \"<string>\"\n }\n ],\n \"projectId\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"id": "<string>",
"name": "<string>",
"description": "<string>",
"status": "active",
"nextRunAt": "2023-11-07T05:31:56Z",
"project": {
"type": "project",
"id": "<string>",
"name": "<string>"
},
"lastRun": {
"id": "<string>",
"status": "pending",
"startedAt": "2023-11-07T05:31:56Z",
"endedAt": "2023-11-07T05:31:56Z"
},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"triggers": [
{
"id": "<string>",
"type": "cron",
"cron": "<string>",
"timezone": "<string>"
}
],
"instructions": "<string>"
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "The request is invalid.",
"details": {
"issues": [
{
"path": "<string>",
"message": "<string>"
}
]
}
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Missing or invalid credentials."
}
}{
"error": {
"code": "FORBIDDEN",
"message": "You don't have permission to do this."
}
}{
"error": {
"code": "TOO_MANY_REQUESTS",
"message": "Too many requests."
}
}Authorizations
A Parley API key.
Body
The automation name.
1 - 120The prompt Parley's assistant carries out on every run, up to 20,000 characters. Nobody is there to answer questions during a run, so say what to check, what counts as worth reporting, and what the report should look like.
1 - 20000A short summary of what the automation does.
2000What starts the automation on its own, such as [{ "type": "cron", "cron": "0 9 * * 1-5" }] for 9:00 AM on weekdays. At most 10. Leave it out for an automation that only runs when someone starts a run.
10A trigger to add, such as { "type": "cron", "cron": "0 9 * * 1-5" } for 9:00 AM on weekdays, or { "type": "event", "event": "project.created" } for each new project.
- Option 1
- Option 2
Show child attributes
Show child attributes
A project to run the automation in, which needs edit access to it. Leave it out for an automation that runs across the organization.
1Response
Created.
The automation ID.
1The automation name.
A short summary of what the automation does, or null.
active: the automation runs when its triggers fire. paused: its triggers are on hold, and the automation only runs when someone starts a run.
active, paused When a trigger next starts a run, or null for an automation that is paused or has no scheduled trigger.
The project the automation runs in, with that project's files, notes, and linked records as its context, or null for an automation that runs across the organization.
Show child attributes
Show child attributes
The most recent run, or null for an automation that has never run.
Show child attributes
Show child attributes
When the automation was created.
When the automation or its triggers were last changed.
What starts the automation on its own, oldest first. Empty for an automation that only runs when someone starts a run.
Something that starts a run. cron: a schedule. event: something that happens in Parley. More types will be added, so skip any type you do not recognize.
- Option 1
- Option 2
Show child attributes
Show child attributes
The automation's instructions: the prompt Parley's assistant carries out on every run.
Was this page helpful?
