curl --request POST \
--url https://api.sidenet.ai/v1/workflow-schedules \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"timezone": "Europe/Paris",
"workflow_id": "4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641",
"prompt_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"user_id": "user_4821",
"group": {
"id": "grp_84f20c19",
"name": "<string>"
},
"recurrence": {
"frequency": "weekdays",
"time": "08:00"
},
"cron": "0 8 * * 1-5",
"starts_at": "2023-11-07T05:31:56Z",
"ends_at": "2023-11-07T05:31:56Z",
"input": {
"channel": "#growth"
},
"notify": "thread",
"thread_title": "Daily signups digest",
"name": "<string>"
}
'import requests
url = "https://api.sidenet.ai/v1/workflow-schedules"
payload = {
"timezone": "Europe/Paris",
"workflow_id": "4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641",
"prompt_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"user_id": "user_4821",
"group": {
"id": "grp_84f20c19",
"name": "<string>"
},
"recurrence": {
"frequency": "weekdays",
"time": "08:00"
},
"cron": "0 8 * * 1-5",
"starts_at": "2023-11-07T05:31:56Z",
"ends_at": "2023-11-07T05:31:56Z",
"input": { "channel": "#growth" },
"notify": "thread",
"thread_title": "Daily signups digest",
"name": "<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({
timezone: 'Europe/Paris',
workflow_id: '4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641',
prompt_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
user_id: 'user_4821',
group: {id: 'grp_84f20c19', name: '<string>'},
recurrence: {frequency: 'weekdays', time: '08:00'},
cron: '0 8 * * 1-5',
starts_at: '2023-11-07T05:31:56Z',
ends_at: '2023-11-07T05:31:56Z',
input: {channel: '#growth'},
notify: 'thread',
thread_title: 'Daily signups digest',
name: '<string>'
})
};
fetch('https://api.sidenet.ai/v1/workflow-schedules', 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.sidenet.ai/v1/workflow-schedules",
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([
'timezone' => 'Europe/Paris',
'workflow_id' => '4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641',
'prompt_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'user_id' => 'user_4821',
'group' => [
'id' => 'grp_84f20c19',
'name' => '<string>'
],
'recurrence' => [
'frequency' => 'weekdays',
'time' => '08:00'
],
'cron' => '0 8 * * 1-5',
'starts_at' => '2023-11-07T05:31:56Z',
'ends_at' => '2023-11-07T05:31:56Z',
'input' => [
'channel' => '#growth'
],
'notify' => 'thread',
'thread_title' => 'Daily signups digest',
'name' => '<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.sidenet.ai/v1/workflow-schedules"
payload := strings.NewReader("{\n \"timezone\": \"Europe/Paris\",\n \"workflow_id\": \"4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641\",\n \"prompt_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"user_id\": \"user_4821\",\n \"group\": {\n \"id\": \"grp_84f20c19\",\n \"name\": \"<string>\"\n },\n \"recurrence\": {\n \"frequency\": \"weekdays\",\n \"time\": \"08:00\"\n },\n \"cron\": \"0 8 * * 1-5\",\n \"starts_at\": \"2023-11-07T05:31:56Z\",\n \"ends_at\": \"2023-11-07T05:31:56Z\",\n \"input\": {\n \"channel\": \"#growth\"\n },\n \"notify\": \"thread\",\n \"thread_title\": \"Daily signups digest\",\n \"name\": \"<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.sidenet.ai/v1/workflow-schedules")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"timezone\": \"Europe/Paris\",\n \"workflow_id\": \"4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641\",\n \"prompt_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"user_id\": \"user_4821\",\n \"group\": {\n \"id\": \"grp_84f20c19\",\n \"name\": \"<string>\"\n },\n \"recurrence\": {\n \"frequency\": \"weekdays\",\n \"time\": \"08:00\"\n },\n \"cron\": \"0 8 * * 1-5\",\n \"starts_at\": \"2023-11-07T05:31:56Z\",\n \"ends_at\": \"2023-11-07T05:31:56Z\",\n \"input\": {\n \"channel\": \"#growth\"\n },\n \"notify\": \"thread\",\n \"thread_title\": \"Daily signups digest\",\n \"name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sidenet.ai/v1/workflow-schedules")
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 \"timezone\": \"Europe/Paris\",\n \"workflow_id\": \"4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641\",\n \"prompt_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"user_id\": \"user_4821\",\n \"group\": {\n \"id\": \"grp_84f20c19\",\n \"name\": \"<string>\"\n },\n \"recurrence\": {\n \"frequency\": \"weekdays\",\n \"time\": \"08:00\"\n },\n \"cron\": \"0 8 * * 1-5\",\n \"starts_at\": \"2023-11-07T05:31:56Z\",\n \"ends_at\": \"2023-11-07T05:31:56Z\",\n \"input\": {\n \"channel\": \"#growth\"\n },\n \"notify\": \"thread\",\n \"thread_title\": \"Daily signups digest\",\n \"name\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"schedule": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workflow_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"prompt_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"owner_kind": "org",
"user_id": "<string>",
"status": "active",
"recurrence": {},
"cron": "<string>",
"run_at": "2023-11-07T05:31:56Z",
"description": "<string>",
"timezone": "<string>",
"next_fire_at": "2023-11-07T05:31:56Z",
"last_fire_at": "2023-11-07T05:31:56Z",
"last_run_status": "<string>",
"notify": "thread",
"thread_title": "<string>"
},
"next_fires": [
"2023-11-07T05:31:56Z"
],
"published_version": 123
}Create workflow schedule
Schedules a workflow (its active version) to run unattended as user_id. Timing is a structured recurrence (once | hourly | daily | weekdays | weekly + date/time/minute/weekday) or a raw cron, in timezone. notify: "thread" (default) files each run’s result as a new conversation for that user (thread_title required); notify: "none" only logs the run. With an API key user_id is required. With a session token the schedule is created as that session’s user (user_id may be omitted or must match; group comes from the session) and the workflow must be the org’s or one of the user’s own. For one of the user’s own workflows the draft is published first when it is newer than the live version, and the call answers 400 with missing_connections when a toolkit the workflow uses is not connected for that user.
curl --request POST \
--url https://api.sidenet.ai/v1/workflow-schedules \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"timezone": "Europe/Paris",
"workflow_id": "4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641",
"prompt_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"user_id": "user_4821",
"group": {
"id": "grp_84f20c19",
"name": "<string>"
},
"recurrence": {
"frequency": "weekdays",
"time": "08:00"
},
"cron": "0 8 * * 1-5",
"starts_at": "2023-11-07T05:31:56Z",
"ends_at": "2023-11-07T05:31:56Z",
"input": {
"channel": "#growth"
},
"notify": "thread",
"thread_title": "Daily signups digest",
"name": "<string>"
}
'import requests
url = "https://api.sidenet.ai/v1/workflow-schedules"
payload = {
"timezone": "Europe/Paris",
"workflow_id": "4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641",
"prompt_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"user_id": "user_4821",
"group": {
"id": "grp_84f20c19",
"name": "<string>"
},
"recurrence": {
"frequency": "weekdays",
"time": "08:00"
},
"cron": "0 8 * * 1-5",
"starts_at": "2023-11-07T05:31:56Z",
"ends_at": "2023-11-07T05:31:56Z",
"input": { "channel": "#growth" },
"notify": "thread",
"thread_title": "Daily signups digest",
"name": "<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({
timezone: 'Europe/Paris',
workflow_id: '4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641',
prompt_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
user_id: 'user_4821',
group: {id: 'grp_84f20c19', name: '<string>'},
recurrence: {frequency: 'weekdays', time: '08:00'},
cron: '0 8 * * 1-5',
starts_at: '2023-11-07T05:31:56Z',
ends_at: '2023-11-07T05:31:56Z',
input: {channel: '#growth'},
notify: 'thread',
thread_title: 'Daily signups digest',
name: '<string>'
})
};
fetch('https://api.sidenet.ai/v1/workflow-schedules', 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.sidenet.ai/v1/workflow-schedules",
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([
'timezone' => 'Europe/Paris',
'workflow_id' => '4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641',
'prompt_id' => '3c90c3cc-0d44-4b50-8888-8dd25736052a',
'user_id' => 'user_4821',
'group' => [
'id' => 'grp_84f20c19',
'name' => '<string>'
],
'recurrence' => [
'frequency' => 'weekdays',
'time' => '08:00'
],
'cron' => '0 8 * * 1-5',
'starts_at' => '2023-11-07T05:31:56Z',
'ends_at' => '2023-11-07T05:31:56Z',
'input' => [
'channel' => '#growth'
],
'notify' => 'thread',
'thread_title' => 'Daily signups digest',
'name' => '<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.sidenet.ai/v1/workflow-schedules"
payload := strings.NewReader("{\n \"timezone\": \"Europe/Paris\",\n \"workflow_id\": \"4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641\",\n \"prompt_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"user_id\": \"user_4821\",\n \"group\": {\n \"id\": \"grp_84f20c19\",\n \"name\": \"<string>\"\n },\n \"recurrence\": {\n \"frequency\": \"weekdays\",\n \"time\": \"08:00\"\n },\n \"cron\": \"0 8 * * 1-5\",\n \"starts_at\": \"2023-11-07T05:31:56Z\",\n \"ends_at\": \"2023-11-07T05:31:56Z\",\n \"input\": {\n \"channel\": \"#growth\"\n },\n \"notify\": \"thread\",\n \"thread_title\": \"Daily signups digest\",\n \"name\": \"<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.sidenet.ai/v1/workflow-schedules")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"timezone\": \"Europe/Paris\",\n \"workflow_id\": \"4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641\",\n \"prompt_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"user_id\": \"user_4821\",\n \"group\": {\n \"id\": \"grp_84f20c19\",\n \"name\": \"<string>\"\n },\n \"recurrence\": {\n \"frequency\": \"weekdays\",\n \"time\": \"08:00\"\n },\n \"cron\": \"0 8 * * 1-5\",\n \"starts_at\": \"2023-11-07T05:31:56Z\",\n \"ends_at\": \"2023-11-07T05:31:56Z\",\n \"input\": {\n \"channel\": \"#growth\"\n },\n \"notify\": \"thread\",\n \"thread_title\": \"Daily signups digest\",\n \"name\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.sidenet.ai/v1/workflow-schedules")
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 \"timezone\": \"Europe/Paris\",\n \"workflow_id\": \"4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641\",\n \"prompt_id\": \"3c90c3cc-0d44-4b50-8888-8dd25736052a\",\n \"user_id\": \"user_4821\",\n \"group\": {\n \"id\": \"grp_84f20c19\",\n \"name\": \"<string>\"\n },\n \"recurrence\": {\n \"frequency\": \"weekdays\",\n \"time\": \"08:00\"\n },\n \"cron\": \"0 8 * * 1-5\",\n \"starts_at\": \"2023-11-07T05:31:56Z\",\n \"ends_at\": \"2023-11-07T05:31:56Z\",\n \"input\": {\n \"channel\": \"#growth\"\n },\n \"notify\": \"thread\",\n \"thread_title\": \"Daily signups digest\",\n \"name\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"schedule": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"workflow_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"prompt_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"owner_kind": "org",
"user_id": "<string>",
"status": "active",
"recurrence": {},
"cron": "<string>",
"run_at": "2023-11-07T05:31:56Z",
"description": "<string>",
"timezone": "<string>",
"next_fire_at": "2023-11-07T05:31:56Z",
"last_fire_at": "2023-11-07T05:31:56Z",
"last_run_status": "<string>",
"notify": "thread",
"thread_title": "<string>"
},
"next_fires": [
"2023-11-07T05:31:56Z"
],
"published_version": 123
}Authorizations
Organization API key, generated in studio.sidenet.ai. Backend only — never in a browser.
Body
"Europe/Paris"
The workflow to schedule — exactly one of workflow_id / prompt_id.
"4c2f9e18-7a63-4d05-b1e8-93a7c0f2d641"
One of the user's saved automations (GET /v1/prompts) to schedule instead of a workflow.
The user the runs execute as (billing group, integrations, result thread owner). Required with an API key; implied by a session token.
"user_4821"
Show child attributes
Show child attributes
{ "frequency": "weekdays", "time": "08:00" }
Alternative to recurrence. Minimum interval: hourly.
"0 8 * * 1-5"
{ "channel": "#growth" }
thread, none "Daily signups digest"