# add_campaign_step (/docs/mcp/tools/add-campaign-step)

{/* Generated by scripts/sync-mcp-tools.mjs from happierleads-api. Do not edit: change src/routes/mcp/toolDocs.json there, or add content/mcp-notes/add_campaign_step.mdx. */}

**Add a campaign step** · Changes data

Adds one email at the end of a campaign's sequence, sent delayDays after the previous one (the first step of an empty campaign becomes the opening email). Returns the new step. Follow the same writing rules as create_campaign.

| Connection | Account URL, team member URL or OAuth |
| --- | --- |

## Parameters [#parameters]

| Parameter | Type | Required | Description |
| --- | --- | --- | --- |
| `websiteId` | `string` | Yes | Website ID from list_websites (the campaign's website). |
| `campaignId` | `string` | Yes | campaignId from list_campaigns. |
| `subject` | `string` | Yes | Subject line; merge fields like \{\{ first_name \| there \}\} allowed. |
| `body` | `string` | Yes | Email body as plain text, one paragraph per line, ending with \{\{sender_signature\}\} and \{\{unsubscribe_text\}\}. |
| `delayDays` | `number` | No | Days after the previous step. Default 0. |

## Tool definition [#tool-definition]

What your assistant receives from `tools/list`:

```json
{
  "name": "add_campaign_step",
  "title": "Add a campaign step",
  "annotations": {
    "title": "Add a campaign step",
    "readOnlyHint": false,
    "destructiveHint": false,
    "idempotentHint": false,
    "openWorldHint": false
  },
  "inputSchema": {
    "type": "object",
    "properties": {
      "websiteId": {
        "type": "string",
        "description": "Website ID from list_websites (the campaign's website)."
      },
      "campaignId": {
        "type": "string",
        "description": "campaignId from list_campaigns."
      },
      "subject": {
        "type": "string",
        "description": "Subject line; merge fields like {{ first_name | there }} allowed."
      },
      "body": {
        "type": "string",
        "description": "Email body as plain text, one paragraph per line, ending with {{sender_signature}} and {{unsubscribe_text}}."
      },
      "delayDays": {
        "type": "number",
        "minimum": 0,
        "description": "Days after the previous step. Default 0."
      }
    },
    "required": [
      "websiteId",
      "campaignId",
      "subject",
      "body"
    ]
  }
}
```
