curl -X PATCH "https://api.foxreach.io/api/v1/campaigns/cmp_abc123/sequences/seq_002" \
-H "X-API-Key: otr_your_key" \
-H "Content-Type: application/json" \
-d '{
"delayDays": 5,
"subject": "Following up, {{firstName}}"
}'
from foxreach import FoxReach
from foxreach.types import SequenceUpdate
client = FoxReach(api_key="otr_your_key")
sequence = client.campaigns.sequences.update(
"cmp_xyz789",
"seq_step1",
SequenceUpdate(
delay_days=5,
body="Updated body",
),
)
import { FoxReach } from "foxreach";
const client = new FoxReach({ apiKey: "otr_your_key" });
const sequence = await client.campaigns.sequences.update("cmp_xyz789", "seq_step1", {
delayDays: 5,
body: "Updated body",
});
{
"data": {
"id": "seq_002",
"campaignId": "cmp_abc123",
"stepNumber": 2,
"name": "Follow-up",
"subject": "Following up, {{firstName}}",
"body": "Hi {{firstName}},\n\nJust wanted to follow up...",
"delayDays": 5,
"delayHours": 0,
"sendOnlyIfNoReply": true,
"createdAt": "2025-01-10T08:05:00",
"updatedAt": "2025-01-12T14:30:00"
}
}
Sequences
Update Sequence Step
Update a sequence step. Campaign must be in draft or paused status.
PATCH
/
api
/
v1
/
campaigns
/
{campaign_id}
/
sequences
/
{sequence_id}
curl -X PATCH "https://api.foxreach.io/api/v1/campaigns/cmp_abc123/sequences/seq_002" \
-H "X-API-Key: otr_your_key" \
-H "Content-Type: application/json" \
-d '{
"delayDays": 5,
"subject": "Following up, {{firstName}}"
}'
from foxreach import FoxReach
from foxreach.types import SequenceUpdate
client = FoxReach(api_key="otr_your_key")
sequence = client.campaigns.sequences.update(
"cmp_xyz789",
"seq_step1",
SequenceUpdate(
delay_days=5,
body="Updated body",
),
)
import { FoxReach } from "foxreach";
const client = new FoxReach({ apiKey: "otr_your_key" });
const sequence = await client.campaigns.sequences.update("cmp_xyz789", "seq_step1", {
delayDays: 5,
body: "Updated body",
});
{
"data": {
"id": "seq_002",
"campaignId": "cmp_abc123",
"stepNumber": 2,
"name": "Follow-up",
"subject": "Following up, {{firstName}}",
"body": "Hi {{firstName}},\n\nJust wanted to follow up...",
"delayDays": 5,
"delayHours": 0,
"sendOnlyIfNoReply": true,
"createdAt": "2025-01-10T08:05:00",
"updatedAt": "2025-01-12T14:30:00"
}
}
Path Parameters
string
required
The unique identifier of the campaign.
string
required
The unique identifier of the sequence step.
Body Parameters
All fields are optional. Only include fields you want to update.string
Email subject line. Supports template variables and spin syntax.
string
Email body content. Supports template variables and spin syntax.
string
Step name.
integer
Days to wait after the previous step.
integer
Additional hours to wait.
boolean
Skip this step if lead has already replied.
Response
Returns the updated sequence step object.curl -X PATCH "https://api.foxreach.io/api/v1/campaigns/cmp_abc123/sequences/seq_002" \
-H "X-API-Key: otr_your_key" \
-H "Content-Type: application/json" \
-d '{
"delayDays": 5,
"subject": "Following up, {{firstName}}"
}'
from foxreach import FoxReach
from foxreach.types import SequenceUpdate
client = FoxReach(api_key="otr_your_key")
sequence = client.campaigns.sequences.update(
"cmp_xyz789",
"seq_step1",
SequenceUpdate(
delay_days=5,
body="Updated body",
),
)
import { FoxReach } from "foxreach";
const client = new FoxReach({ apiKey: "otr_your_key" });
const sequence = await client.campaigns.sequences.update("cmp_xyz789", "seq_step1", {
delayDays: 5,
body: "Updated body",
});
{
"data": {
"id": "seq_002",
"campaignId": "cmp_abc123",
"stepNumber": 2,
"name": "Follow-up",
"subject": "Following up, {{firstName}}",
"body": "Hi {{firstName}},\n\nJust wanted to follow up...",
"delayDays": 5,
"delayHours": 0,
"sendOnlyIfNoReply": true,
"createdAt": "2025-01-10T08:05:00",
"updatedAt": "2025-01-12T14:30:00"
}
}
Errors
| Status | Description |
|---|---|
400 | Campaign is active — pause it first |
400 | Invalid spin syntax in subject or body |
404 | Sequence step not found |
404 | Campaign not found |
Rate Limit
- 100 requests per minute, per API key. Fixed 60-second window.
- Every response includes
X-RateLimit-Limit,X-RateLimit-Remaining, andX-RateLimit-Reset(unix epoch seconds). - A
429response includes aRetry-Afterheader (seconds until the bucket resets).
Retry-After, exponential backoff, monitoring X-RateLimit-Remaining), see Rate Limiting.