curl --request PATCH \
--url https://api.monaco.com/v1/sequences/{sequence_id}/steps/{step_id} \
--header 'Content-Type: application/json' \
--data '
{
"message": "<string>",
"subject": "<string>"
}
'import requests
url = "https://api.monaco.com/v1/sequences/{sequence_id}/steps/{step_id}"
payload = {
"message": "<string>",
"subject": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({message: '<string>', subject: '<string>'})
};
fetch('https://api.monaco.com/v1/sequences/{sequence_id}/steps/{step_id}', 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.monaco.com/v1/sequences/{sequence_id}/steps/{step_id}",
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([
'message' => '<string>',
'subject' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"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.monaco.com/v1/sequences/{sequence_id}/steps/{step_id}"
payload := strings.NewReader("{\n \"message\": \"<string>\",\n \"subject\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
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("https://api.monaco.com/v1/sequences/{sequence_id}/steps/{step_id}")
.header("Content-Type", "application/json")
.body("{\n \"message\": \"<string>\",\n \"subject\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.monaco.com/v1/sequences/{sequence_id}/steps/{step_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"message\": \"<string>\",\n \"subject\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "tsk_abc123",
"sequence_id": "seq_def456",
"order": 1,
"type": "auto_linkedin_connection",
"status": "pending",
"scheduled_at": "2026-05-15T09:00:00Z",
"name": "Send intro email",
"completed_at": "2026-05-15T10:00:00Z",
"task_body": "<string>",
"subject": "<string>",
"outcome": "positive_reply"
},
"meta": {
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "not_found",
"message": "Resource not found"
}
}{
"error": {
"code": "not_found",
"message": "Resource not found"
}
}{
"error": {
"code": "not_found",
"message": "Resource not found"
}
}Update a Sequence Step
Updates the copy on a single step of a sequence. step_id is the id of the entry in the sequence’s tasks list (from get_sequence). Supports message on email, InMail, LinkedIn message, LinkedIn connection-note, and gifting-email steps, and subject on email, InMail, and gifting-email steps. Only steps of an active (non-suggested) sequence that have not yet been completed can be edited. Only the fields you provide are updated, and omitted fields are left unchanged. Returns the refreshed step. Template variables must be namespaced. Supported tokens are {{recipient.first_name}}, {{recipient.last_name}}, {{recipient.company}}, {{recipient.email}}, {{sender.first_name}}, {{sender.last_name}}, {{sender.company}}, {{sender.title}}, and {{sender.email}}.
curl --request PATCH \
--url https://api.monaco.com/v1/sequences/{sequence_id}/steps/{step_id} \
--header 'Content-Type: application/json' \
--data '
{
"message": "<string>",
"subject": "<string>"
}
'import requests
url = "https://api.monaco.com/v1/sequences/{sequence_id}/steps/{step_id}"
payload = {
"message": "<string>",
"subject": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({message: '<string>', subject: '<string>'})
};
fetch('https://api.monaco.com/v1/sequences/{sequence_id}/steps/{step_id}', 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.monaco.com/v1/sequences/{sequence_id}/steps/{step_id}",
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([
'message' => '<string>',
'subject' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"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.monaco.com/v1/sequences/{sequence_id}/steps/{step_id}"
payload := strings.NewReader("{\n \"message\": \"<string>\",\n \"subject\": \"<string>\"\n}")
req, _ := http.NewRequest("PATCH", url, payload)
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("https://api.monaco.com/v1/sequences/{sequence_id}/steps/{step_id}")
.header("Content-Type", "application/json")
.body("{\n \"message\": \"<string>\",\n \"subject\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.monaco.com/v1/sequences/{sequence_id}/steps/{step_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"message\": \"<string>\",\n \"subject\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"data": {
"id": "tsk_abc123",
"sequence_id": "seq_def456",
"order": 1,
"type": "auto_linkedin_connection",
"status": "pending",
"scheduled_at": "2026-05-15T09:00:00Z",
"name": "Send intro email",
"completed_at": "2026-05-15T10:00:00Z",
"task_body": "<string>",
"subject": "<string>",
"outcome": "positive_reply"
},
"meta": {
"timestamp": "2023-11-07T05:31:56Z"
}
}{
"error": {
"code": "not_found",
"message": "Resource not found"
}
}{
"error": {
"code": "not_found",
"message": "Resource not found"
}
}{
"error": {
"code": "not_found",
"message": "Resource not found"
}
}Body
Copy edits for a single sequence step (a per-contact campaign task).
New message body for the step. Supported on email, InMail, LinkedIn message, LinkedIn connection-note, and gifting-email steps. Provide final per-contact copy as plain text — unresolved placeholders like {{first_name}} and HTML are rejected.
1New subject line for the step. Only supported on subject-bearing channels (email, InMail, gifting email).
1