Newsletter Tools
Newsletter tools let you create email campaigns with AI-generated or manual content, build automation workflows with triggers and conditions, and check email performance statistics. Everything stays in draft until you review and send from the dashboard.
Overview
The Newsletter tool category covers email campaigns, automation workflows, and email performance analytics. You can create fully-designed campaigns with AI-generated content, build complex automation workflows with multiple steps, and monitor how your emails perform.
Copilot.Newslettermanage_campaign
Creates or updates a newsletter email campaign. Campaigns are always created in DRAFT status — you review and send them from the dashboard.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | No | Campaign ID. Omit to create, provide to update. |
name | string | Conditional | Campaign name. Required when creating. |
subject | string | No | Email subject line. |
preheader | string | No | Preview text shown in email inbox. |
senderName | string | No | Display name for the sender. Auto-detected if omitted. |
senderEmailId | string | No | Sender email ID. Auto-detected if omitted. |
content | string | No | Direct HTML email content (table-based layout with inline styles). |
generateContent | string | No | AI prompt to generate email HTML from scratch, or editing instructions when combined with a source. |
fromTemplateId | string | No | Use a saved template's content as the starting point. |
fromCampaignId | string | No | Copy content from a previous campaign. |
useVariables | boolean | No | Allow {{variable}} placeholders in AI-generated content (e.g., {{name}}, {{email}}, {{unsubscribeURL}}). |
recipients | object | No | Target audience. See recipient options below. |
Content Sources
You have four ways to provide email content (pick one):
| Source | How It Works |
|---|---|
content | Paste your own HTML directly. Must use table-based layout with inline styles for email compatibility. |
generateContent | Describe the email and AI generates professional HTML. Uses table-based layout automatically. |
fromTemplateId | Copy content from a saved email template. Find template IDs with list_records (table: email_templates). |
fromCampaignId | Copy content from a previous campaign. Find campaign IDs with list_records (table: campaigns). |
Combining sources: You can combine fromTemplateId or fromCampaignId with generateContent to have AI edit existing content. For example, take last month's campaign and ask AI to update the headline.
Recipient Options
| Option | Description |
|---|---|
allActive | Target all verified subscribers. |
segmentIds | Array of contact segment IDs. Find IDs with list_records (table: contact_segments). |
groupIds | Array of contact group IDs. Find IDs with list_records (table: contact_groups). |
These are mutually exclusive — use only one recipient method per campaign.
How It Works
Creating a campaign:
- Only
nameis required, but you'll typically also providesubjectand content. - A verified sender email is automatically detected from your organization's email domains. You can override it with
senderEmailId. - Returns a
dashboardUrlwhere you can review and send the campaign.
Updating a campaign:
- Only DRAFT campaigns can be updated.
- If you provide
generateContentwithout a source and the campaign already has content, AI edits the existing content.
Important: This tool cannot send campaigns. It always creates them in DRAFT status. Use the returned dashboardUrl to review and send from the dashboard.
Example Prompts
- "Create a newsletter campaign called 'March Update' with the subject 'What's New in March'."
- "Generate a promotional email about our spring sale with 50% off all items."
- "Create a campaign using my Welcome template as the base." (lists templates first, then creates the campaign)
- "Take my last campaign and create a new one with the headline changed to 'Summer Sale'." (lists campaigns, finds the last one, creates new with AI edits)
- "Set the recipients for my March campaign to all active subscribers."
- "Target the 'Premium Users' group for this campaign."
- "Update the subject line of my draft campaign."
- "Create a welcome email campaign with AI content, personalization variables, and target the 'New Signups' group."
get_email_stats
Retrieves email performance statistics for a campaign or workflow.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
source | string | Yes | "campaign" or "workflow". |
sourceId | string | Yes | The campaign or workflow ID. |
How It Works
- Returns email performance metrics including: sends, opens, clicks, bounces, unsubscribes, and more.
- The campaign or workflow must belong to your organization.
Example Prompts
- "What are the stats for my March campaign?" (lists campaigns first to find the ID)
- "Show me the open rate and click rate for my last campaign."
- "How is my welcome series workflow performing?"
- "Compare the stats of my last two campaigns." (lists campaigns, gets stats for each)
manage_email_workflow
Creates, updates, or edits email content within newsletter automation workflows. This is the most powerful newsletter tool — it uses AI to generate entire workflow structures from plain English descriptions.
Actions
This tool has three modes of operation, controlled by the action parameter:
action: "create"
Generates a new workflow from an AI description.
| Parameter | Type | Required | Description |
|---|---|---|---|
action | "create" | Yes | |
name | string | Yes | Workflow name. |
description | string | Yes | Plain English description of the workflow. AI generates the full structure. |
triggerType | string | No | Hint for the trigger type: "MANUAL", "DATE", "SUBSCRIBE", "UNSUBSCRIBE", or "API". AI auto-detects if omitted. |
How it works:
- AI generates the entire workflow structure: trigger configuration, all nodes (emails, delays, conditions, actions), and the connections between them.
- The AI has access to your organization's context: contact groups, custom fields, other workflows, and verified sender emails.
- Email nodes are created with subject/preheader only — use
action: "edit_email"to add HTML content to each email. - All node positions are automatically calculated by the layout engine.
action: "update"
Modifies an existing workflow.
| Parameter | Type | Required | Description |
|---|---|---|---|
action | "update" | Yes | |
id | string | Yes | Workflow ID. |
name | string | No | Rename the workflow. |
description | string | No | AI sees the current workflow and applies your changes (add/remove/restructure nodes). |
triggerSettings | object | No | Direct trigger config object. |
active | boolean | No | Activate or deactivate the workflow. |
How it works:
- When you provide
description, AI sees the entire current workflow and generates an updated version. - Existing nodes are preserved where possible and new ones are added.
- You can combine
descriptionwithname,triggerSettings, andactivein a single call.
action: "edit_email"
Sets the HTML content of a specific email node within the workflow.
| Parameter | Type | Required | Description |
|---|---|---|---|
action | "edit_email" | Yes | |
id | string | Yes | Workflow ID. |
emailNodeId | string | Yes | The node ID within the workflow (e.g., "2" or "5"). |
subject | string | No | Email subject line for this node. |
preheader | string | No | Email preview text. |
content | string | No | Direct HTML email content. |
generateContent | string | No | AI generates or edits the email HTML. |
fromTemplateId | string | No | Use a template's content. |
fromCampaignId | string | No | Copy content from a campaign. |
useVariables | boolean | No | Allow {{variable}} placeholders. |
senderEmailId | string | No | Sender email ID for this node. |
senderName | string | No | Sender display name. |
How it works:
- Sets the email content for the specified node.
- Content source options work the same as in
manage_campaign. - The workflow structure shows which nodes are email nodes — use those node IDs here.
Recommended Iterative Workflow
Building email workflows works best as an iterative process:
Create the workflow structure
Use action: "create" with a description of the full automation flow. This generates all nodes and connections.
Review the structure
The response shows all nodes and their types. Identify the email node IDs.
Design each email
Use action: "edit_email" for each email node, generating content with AI or providing your own HTML.
Refine and activate
Use action: "update" to make structural changes, then set active: true when ready.
Node Types
| Type | Description |
|---|---|
trigger | The starting point — when the workflow activates (subscribe, unsubscribe, date, manual, API). |
email | Sends an email to the contact. |
delay | Waits a specified duration before continuing. |
condition | Branches based on a condition (creates yes/no paths). |
action | Performs an action: update a field, copy/move/remove from groups, unsubscribe. |
webhook | Sends a webhook to an external URL. |
fetch | Fetches data from an external URL. |
workflow | Triggers another workflow. |
Example Prompts
- "Create a welcome email workflow: when someone subscribes, send a welcome email immediately, wait 3 days, send a tips email."
- "Create an onboarding series: subscribe trigger, wait 1 day, send welcome, wait 3 days, check if they opened the welcome email, if yes send a thank-you, if no send a reminder."
- "Add a condition to my workflow to check if the contact's country is US, and only send the promotional email to US contacts."
- "Rename my workflow to 'New Customer Onboarding'."
- "Activate my onboarding workflow."
- "Write the welcome email content for the first email node — make it warm, professional, and include our logo."
- "Generate the reminder email for node 5 — it should encourage the reader to check out our getting started guide."
- "Use my Welcome template for the first email, but change the headline to 'Welcome to the team!'"
- "Show me the stats for my welcome workflow." (uses
get_email_stats)
Common Workflow Patterns
Quick Campaign
- Create with AI content →
manage_campaignwithgenerateContent - Set recipients →
manage_campaign(update) withrecipients - Review and send → Use the returned
dashboardUrl
Example prompt: "Create a campaign called Holiday Sale with AI-generated promotional content about 30% off everything, target all active subscribers."
Complete Workflow Build
- Create workflow structure →
manage_email_workflow(create) - Design each email →
manage_email_workflow(edit_email) for each email node - Activate →
manage_email_workflow(update) withactive: true
Example prompt: "Build me a complete re-engagement workflow: when someone hasn't opened emails in 30 days, send a 'we miss you' email, wait a week, if they still haven't opened, send a final reminder with a discount offer, then unsubscribe if no response."