update_campaign_step
Rewrite one email (step) of an existing campaign: its subject, body and/or delay.
Edit campaign email · Changes data
Rewrite one email (step) of an existing campaign: its subject, body and/or delay. Only the fields you pass change. Get campaignId from list_campaigns and templateId from get_campaign (emailCampaignTemplates[]._id); a templateId that is not a step of that campaign is refused. The edit is rejected (HTTP 400 with the reasons) when a merge field has no fallback or the template cannot render; nothing is saved then. Contacts parked in error-sending because of this step are retried after a successful save. Returns the updated step. Writing rules: Write the body as plain text, one paragraph per line, no blank lines between paragraphs (each line becomes one <p>; never add empty paragraphs or <br><br> for spacing). Merge fields need a fallback, e.g. {{ first_name | there }}, {{ company_name | your company }}. End every body with {{sender_signature}} then {{unsubscribe_text}}, each on its own line, and nothing after them; never type your own sign-off or unsubscribe sentence.
| Connection | Account URL, team member URL or OAuth |
|---|
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
campaignId | string | Yes | Email campaign id from list_campaigns. |
templateId | string | Yes | Id of the step to edit, from get_campaign emailCampaignTemplates[]._id (24 hex characters). |
subject | string | No | Optional new subject line. Merge fields need a fallback, e.g. {{ company_name | your team }}. |
body | string | No | Optional new body: plain text, one paragraph per line, ending with {{sender_signature}} then {{unsubscribe_text}}. |
delayDays | number | No | Optional whole days to wait after the previous step. 0 for the first step. |
Tool definition
What your assistant receives from tools/list:
{
"name": "update_campaign_step",
"title": "Edit campaign email",
"annotations": {
"title": "Edit campaign email",
"readOnlyHint": false,
"destructiveHint": false,
"idempotentHint": true,
"openWorldHint": false
},
"inputSchema": {
"type": "object",
"properties": {
"campaignId": {
"type": "string",
"description": "Email campaign id from list_campaigns."
},
"templateId": {
"type": "string",
"description": "Id of the step to edit, from get_campaign emailCampaignTemplates[]._id (24 hex characters)."
},
"subject": {
"type": "string",
"description": "Optional new subject line. Merge fields need a fallback, e.g. {{ company_name | your team }}."
},
"body": {
"type": "string",
"description": "Optional new body: plain text, one paragraph per line, ending with {{sender_signature}} then {{unsubscribe_text}}."
},
"delayDays": {
"type": "number",
"description": "Optional whole days to wait after the previous step. 0 for the first step."
}
},
"required": [
"campaignId",
"templateId"
]
}
}create_campaign
Create a new email sequence: the campaign plus one email per entry in steps (the first is the initial email, the rest follow-ups).
get_campaign
Get one email campaign with live analytics: settings (isActive, schedule, timezone), its steps in emailCampaignTemplates[] (each with _id = templateId for update_campaign_step, subject, body and per-step stats), stats (prospect total, scheduledCount, uniqueContacted, totalEmailsSent, opens, clicks, replies, warm replies, bounced, unsubscribed and their rates), steps[] (per-step sent/opened/clicked/replied), statusBuckets (prospect counts per status) and statistics (sent vs scheduled over time).