curl --request POST \
--url https://client-api.salesfinity.co/v2/sequencer/sequences/{sequence_id}/steps \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"user_id": "<string>",
"interval_seconds": 123,
"date": "2023-11-07T05:31:56Z",
"display_name": "<string>",
"new_thread": true,
"task_note": "<string>",
"task_priority": "medium",
"task_autoskip_delay": 123,
"templates": [
{
"template": "<string>",
"weight": 1
}
]
}
'import requests
url = "https://client-api.salesfinity.co/v2/sequencer/sequences/{sequence_id}/steps"
payload = {
"user_id": "<string>",
"interval_seconds": 123,
"date": "2023-11-07T05:31:56Z",
"display_name": "<string>",
"new_thread": True,
"task_note": "<string>",
"task_priority": "medium",
"task_autoskip_delay": 123,
"templates": [
{
"template": "<string>",
"weight": 1
}
]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
user_id: '<string>',
interval_seconds: 123,
date: '2023-11-07T05:31:56Z',
display_name: '<string>',
new_thread: true,
task_note: '<string>',
task_priority: 'medium',
task_autoskip_delay: 123,
templates: [{template: '<string>', weight: 1}]
})
};
fetch('https://client-api.salesfinity.co/v2/sequencer/sequences/{sequence_id}/steps', 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://client-api.salesfinity.co/v2/sequencer/sequences/{sequence_id}/steps",
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([
'user_id' => '<string>',
'interval_seconds' => 123,
'date' => '2023-11-07T05:31:56Z',
'display_name' => '<string>',
'new_thread' => true,
'task_note' => '<string>',
'task_priority' => 'medium',
'task_autoskip_delay' => 123,
'templates' => [
[
'template' => '<string>',
'weight' => 1
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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://client-api.salesfinity.co/v2/sequencer/sequences/{sequence_id}/steps"
payload := strings.NewReader("{\n \"user_id\": \"<string>\",\n \"interval_seconds\": 123,\n \"date\": \"2023-11-07T05:31:56Z\",\n \"display_name\": \"<string>\",\n \"new_thread\": true,\n \"task_note\": \"<string>\",\n \"task_priority\": \"medium\",\n \"task_autoskip_delay\": 123,\n \"templates\": [\n {\n \"template\": \"<string>\",\n \"weight\": 1\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://client-api.salesfinity.co/v2/sequencer/sequences/{sequence_id}/steps")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"user_id\": \"<string>\",\n \"interval_seconds\": 123,\n \"date\": \"2023-11-07T05:31:56Z\",\n \"display_name\": \"<string>\",\n \"new_thread\": true,\n \"task_note\": \"<string>\",\n \"task_priority\": \"medium\",\n \"task_autoskip_delay\": 123,\n \"templates\": [\n {\n \"template\": \"<string>\",\n \"weight\": 1\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://client-api.salesfinity.co/v2/sequencer/sequences/{sequence_id}/steps")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"user_id\": \"<string>\",\n \"interval_seconds\": 123,\n \"date\": \"2023-11-07T05:31:56Z\",\n \"display_name\": \"<string>\",\n \"new_thread\": true,\n \"task_note\": \"<string>\",\n \"task_priority\": \"medium\",\n \"task_autoskip_delay\": 123,\n \"templates\": [\n {\n \"template\": \"<string>\",\n \"weight\": 1\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"_id": "507f1f77bcf86cd799439011",
"sequence": "507f1f77bcf86cd799439011",
"order": 123,
"step_type": "auto_email",
"interval_seconds": 123,
"date": "2023-11-07T05:31:56Z",
"display_name": "<string>",
"new_thread": true,
"task_note": "<string>",
"task_priority": "high",
"task_autoskip_delay": 123,
"templates": [
{
"template": "507f1f77bcf86cd799439011",
"weight": 123
}
]
}{
"message": [
"limit must not be greater than 100"
],
"error": "Bad Request",
"statusCode": 400
}{
"message": "Forbidden resource",
"error": "Forbidden",
"statusCode": 403
}{
"message": "Not found",
"error": "Not Found",
"statusCode": 404
}{
"message": "Too many requests",
"error": "Too Many Requests",
"statusCode": 429
}{
"message": "Internal server error",
"error": "Internal Server Error",
"statusCode": 500
}Add a step
Appends a step to the cadence. auto_email steps send themselves and need templates; the other types create a task for the rep who owns the enrollment.
A cadence can hold at most 50 steps. Note that LinkedIn, meeting and SMS exist as one-off task types but cannot be cadence steps.
curl --request POST \
--url https://client-api.salesfinity.co/v2/sequencer/sequences/{sequence_id}/steps \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"user_id": "<string>",
"interval_seconds": 123,
"date": "2023-11-07T05:31:56Z",
"display_name": "<string>",
"new_thread": true,
"task_note": "<string>",
"task_priority": "medium",
"task_autoskip_delay": 123,
"templates": [
{
"template": "<string>",
"weight": 1
}
]
}
'import requests
url = "https://client-api.salesfinity.co/v2/sequencer/sequences/{sequence_id}/steps"
payload = {
"user_id": "<string>",
"interval_seconds": 123,
"date": "2023-11-07T05:31:56Z",
"display_name": "<string>",
"new_thread": True,
"task_note": "<string>",
"task_priority": "medium",
"task_autoskip_delay": 123,
"templates": [
{
"template": "<string>",
"weight": 1
}
]
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
user_id: '<string>',
interval_seconds: 123,
date: '2023-11-07T05:31:56Z',
display_name: '<string>',
new_thread: true,
task_note: '<string>',
task_priority: 'medium',
task_autoskip_delay: 123,
templates: [{template: '<string>', weight: 1}]
})
};
fetch('https://client-api.salesfinity.co/v2/sequencer/sequences/{sequence_id}/steps', 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://client-api.salesfinity.co/v2/sequencer/sequences/{sequence_id}/steps",
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([
'user_id' => '<string>',
'interval_seconds' => 123,
'date' => '2023-11-07T05:31:56Z',
'display_name' => '<string>',
'new_thread' => true,
'task_note' => '<string>',
'task_priority' => 'medium',
'task_autoskip_delay' => 123,
'templates' => [
[
'template' => '<string>',
'weight' => 1
]
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$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://client-api.salesfinity.co/v2/sequencer/sequences/{sequence_id}/steps"
payload := strings.NewReader("{\n \"user_id\": \"<string>\",\n \"interval_seconds\": 123,\n \"date\": \"2023-11-07T05:31:56Z\",\n \"display_name\": \"<string>\",\n \"new_thread\": true,\n \"task_note\": \"<string>\",\n \"task_priority\": \"medium\",\n \"task_autoskip_delay\": 123,\n \"templates\": [\n {\n \"template\": \"<string>\",\n \"weight\": 1\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
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://client-api.salesfinity.co/v2/sequencer/sequences/{sequence_id}/steps")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"user_id\": \"<string>\",\n \"interval_seconds\": 123,\n \"date\": \"2023-11-07T05:31:56Z\",\n \"display_name\": \"<string>\",\n \"new_thread\": true,\n \"task_note\": \"<string>\",\n \"task_priority\": \"medium\",\n \"task_autoskip_delay\": 123,\n \"templates\": [\n {\n \"template\": \"<string>\",\n \"weight\": 1\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://client-api.salesfinity.co/v2/sequencer/sequences/{sequence_id}/steps")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"user_id\": \"<string>\",\n \"interval_seconds\": 123,\n \"date\": \"2023-11-07T05:31:56Z\",\n \"display_name\": \"<string>\",\n \"new_thread\": true,\n \"task_note\": \"<string>\",\n \"task_priority\": \"medium\",\n \"task_autoskip_delay\": 123,\n \"templates\": [\n {\n \"template\": \"<string>\",\n \"weight\": 1\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"_id": "507f1f77bcf86cd799439011",
"sequence": "507f1f77bcf86cd799439011",
"order": 123,
"step_type": "auto_email",
"interval_seconds": 123,
"date": "2023-11-07T05:31:56Z",
"display_name": "<string>",
"new_thread": true,
"task_note": "<string>",
"task_priority": "high",
"task_autoskip_delay": 123,
"templates": [
{
"template": "507f1f77bcf86cd799439011",
"weight": 123
}
]
}{
"message": [
"limit must not be greater than 100"
],
"error": "Bad Request",
"statusCode": 400
}{
"message": "Forbidden resource",
"error": "Forbidden",
"statusCode": 403
}{
"message": "Not found",
"error": "Not Found",
"statusCode": 404
}{
"message": "Too many requests",
"error": "Too Many Requests",
"statusCode": 429
}{
"message": "Internal server error",
"error": "Internal Server Error",
"statusCode": 500
}auto_email steps send themselves and need templates; the other types create a task for the rep who owns the enrollment.
A cadence can hold at most 50 steps. Note that LinkedIn, meeting and SMS exist as one-off task types but cannot be cadence steps.Authorizations
Team-scoped API key generated in the Salesfinity dashboard under Settings -> Connections & API. A missing or invalid key returns HTTP 403.
Path Parameters
24-character sequence id.
Body
auto_email sends itself; the other three create a task for the owning rep.
auto_email, manual_email, call, task The team member making the change.
Delay from the previous step, in seconds. For the first step it is measured from enrolment. Used when the sequence is interval.
ISO 8601. Used when the sequence is date.
Email steps: start a new thread rather than replying on the existing one.
Shown to the rep on the resulting task.
high, medium, low Seconds after the due date at which an untouched task is auto-skipped and the cadence moves on.
Show child attributes
Show child attributes
Email steps only. Several templates are picked between by weight.
Show child attributes
Show child attributes
Response
Success.
One step of a cadence.
24-character hexadecimal id.
"507f1f77bcf86cd799439011"
24-character hexadecimal id.
"507f1f77bcf86cd799439011"
1-based position in the cadence.
auto_email, manual_email, call, task Delay from the previous step.
high, medium, low Show child attributes
Show child attributes