Surgically edit steps — update content/delays, append, remove (any status)
curl --request PATCH \
--url http://localhost:8080/sequences/{sequenceId}/steps \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"edits": [
{
"op": "update",
"step_index": 4503599627370495,
"content": {
"type": "whatsapp_template",
"template_name": "<string>",
"template_language": "<string>",
"variables": {},
"buttons": {}
},
"delay_minutes": 64800
}
]
}
'import requests
url = "http://localhost:8080/sequences/{sequenceId}/steps"
payload = { "edits": [
{
"op": "update",
"step_index": 4503599627370495,
"content": {
"type": "whatsapp_template",
"template_name": "<string>",
"template_language": "<string>",
"variables": {},
"buttons": {}
},
"delay_minutes": 64800
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
edits: [
{
op: 'update',
step_index: 4503599627370495,
content: {
type: 'whatsapp_template',
template_name: '<string>',
template_language: '<string>',
variables: {},
buttons: {}
},
delay_minutes: 64800
}
]
})
};
fetch('http://localhost:8080/sequences/{sequenceId}/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_PORT => "8080",
CURLOPT_URL => "http://localhost:8080/sequences/{sequenceId}/steps",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'edits' => [
[
'op' => 'update',
'step_index' => 4503599627370495,
'content' => [
'type' => 'whatsapp_template',
'template_name' => '<string>',
'template_language' => '<string>',
'variables' => [
],
'buttons' => [
]
],
'delay_minutes' => 64800
]
]
]),
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 := "http://localhost:8080/sequences/{sequenceId}/steps"
payload := strings.NewReader("{\n \"edits\": [\n {\n \"op\": \"update\",\n \"step_index\": 4503599627370495,\n \"content\": {\n \"type\": \"whatsapp_template\",\n \"template_name\": \"<string>\",\n \"template_language\": \"<string>\",\n \"variables\": {},\n \"buttons\": {}\n },\n \"delay_minutes\": 64800\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", 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.patch("http://localhost:8080/sequences/{sequenceId}/steps")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"edits\": [\n {\n \"op\": \"update\",\n \"step_index\": 4503599627370495,\n \"content\": {\n \"type\": \"whatsapp_template\",\n \"template_name\": \"<string>\",\n \"template_language\": \"<string>\",\n \"variables\": {},\n \"buttons\": {}\n },\n \"delay_minutes\": 64800\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8080/sequences/{sequenceId}/steps")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"edits\": [\n {\n \"op\": \"update\",\n \"step_index\": 4503599627370495,\n \"content\": {\n \"type\": \"whatsapp_template\",\n \"template_name\": \"<string>\",\n \"template_language\": \"<string>\",\n \"variables\": {},\n \"buttons\": {}\n },\n \"delay_minutes\": 64800\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"org_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"status": "draft",
"steps": [
{
"channel": "whatsapp",
"content": {
"type": "whatsapp_template",
"template_name": "<string>",
"template_language": "<string>",
"variables": {},
"buttons": {}
},
"delay_minutes": 64800
}
],
"settings": {
"block_active_elsewhere": true,
"block_contacted_before": true,
"respect_office_hours": true,
"office_hours_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"brief": "<string>",
"reply_instructions": "<string>",
"criteria": {
"must": [
{
"label": "<string>",
"text": "<string>"
}
],
"nice": [
{
"label": "<string>",
"text": "<string>",
"grade": "high"
}
]
},
"columns": [
{
"key": "<string>",
"label": "<string>",
"path": "<string>",
"type": "string"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"deleted_at": "2023-11-07T05:31:56Z",
"variable_coverage": {
"sampled": true,
"sample_size": 0,
"total": 0,
"sources": {}
}
}{
"statusCode": 123,
"message": "<string>",
"error": "<string>"
}Steps
Surgically edit steps — update content/delays, append, remove (any status)
Update, append or remove steps in one transactional batch, in any status. Use to change copy or delays on a live sequence without disturbing people mid-journey.
PATCH
/
sequences
/
{sequenceId}
/
steps
Surgically edit steps — update content/delays, append, remove (any status)
curl --request PATCH \
--url http://localhost:8080/sequences/{sequenceId}/steps \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"edits": [
{
"op": "update",
"step_index": 4503599627370495,
"content": {
"type": "whatsapp_template",
"template_name": "<string>",
"template_language": "<string>",
"variables": {},
"buttons": {}
},
"delay_minutes": 64800
}
]
}
'import requests
url = "http://localhost:8080/sequences/{sequenceId}/steps"
payload = { "edits": [
{
"op": "update",
"step_index": 4503599627370495,
"content": {
"type": "whatsapp_template",
"template_name": "<string>",
"template_language": "<string>",
"variables": {},
"buttons": {}
},
"delay_minutes": 64800
}
] }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
edits: [
{
op: 'update',
step_index: 4503599627370495,
content: {
type: 'whatsapp_template',
template_name: '<string>',
template_language: '<string>',
variables: {},
buttons: {}
},
delay_minutes: 64800
}
]
})
};
fetch('http://localhost:8080/sequences/{sequenceId}/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_PORT => "8080",
CURLOPT_URL => "http://localhost:8080/sequences/{sequenceId}/steps",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'edits' => [
[
'op' => 'update',
'step_index' => 4503599627370495,
'content' => [
'type' => 'whatsapp_template',
'template_name' => '<string>',
'template_language' => '<string>',
'variables' => [
],
'buttons' => [
]
],
'delay_minutes' => 64800
]
]
]),
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 := "http://localhost:8080/sequences/{sequenceId}/steps"
payload := strings.NewReader("{\n \"edits\": [\n {\n \"op\": \"update\",\n \"step_index\": 4503599627370495,\n \"content\": {\n \"type\": \"whatsapp_template\",\n \"template_name\": \"<string>\",\n \"template_language\": \"<string>\",\n \"variables\": {},\n \"buttons\": {}\n },\n \"delay_minutes\": 64800\n }\n ]\n}")
req, _ := http.NewRequest("PATCH", 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.patch("http://localhost:8080/sequences/{sequenceId}/steps")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"edits\": [\n {\n \"op\": \"update\",\n \"step_index\": 4503599627370495,\n \"content\": {\n \"type\": \"whatsapp_template\",\n \"template_name\": \"<string>\",\n \"template_language\": \"<string>\",\n \"variables\": {},\n \"buttons\": {}\n },\n \"delay_minutes\": 64800\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8080/sequences/{sequenceId}/steps")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"edits\": [\n {\n \"op\": \"update\",\n \"step_index\": 4503599627370495,\n \"content\": {\n \"type\": \"whatsapp_template\",\n \"template_name\": \"<string>\",\n \"template_language\": \"<string>\",\n \"variables\": {},\n \"buttons\": {}\n },\n \"delay_minutes\": 64800\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"org_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"status": "draft",
"steps": [
{
"channel": "whatsapp",
"content": {
"type": "whatsapp_template",
"template_name": "<string>",
"template_language": "<string>",
"variables": {},
"buttons": {}
},
"delay_minutes": 64800
}
],
"settings": {
"block_active_elsewhere": true,
"block_contacted_before": true,
"respect_office_hours": true,
"office_hours_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
},
"brief": "<string>",
"reply_instructions": "<string>",
"criteria": {
"must": [
{
"label": "<string>",
"text": "<string>"
}
],
"nice": [
{
"label": "<string>",
"text": "<string>",
"grade": "high"
}
]
},
"columns": [
{
"key": "<string>",
"label": "<string>",
"path": "<string>",
"type": "string"
}
],
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"deleted_at": "2023-11-07T05:31:56Z",
"variable_coverage": {
"sampled": true,
"sample_size": 0,
"total": 0,
"sources": {}
}
}{
"statusCode": 123,
"message": "<string>",
"error": "<string>"
}A recorded per-contact skip pins its step position. Removing that step or an earlier step is refused because it would change which step the contact skipped. Content and delay edits, and appending steps, remain available.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
The unique identifier of the sequence
Pattern:
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Body
application/json
Required array length:
1 - 50 elements- Option 1
- Option 2
- Option 3
Show child attributes
Show child attributes
Response
Default Response
Pattern:
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Pattern:
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$Available options:
draft, active, paused - Option 1
- Option 2
- Option 3
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Maximum array length:
12Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?