Newsletter Tools
Newsletter tools let you create email campaigns with AI-generated or manual content, build email automations with triggers and conditions, manage subscribers, groups and segments, and check email performance statistics. Campaigns stay in draft until you review and send from the dashboard.
Overview
The Newsletter tool category covers email campaigns, email automations, subscriber management, and email performance analytics. You can create fully-designed campaigns with AI-generated content, build complex email automations with multiple steps, add and organize subscribers into groups and segments, and monitor how your emails perform.
Newsletter.Campaigns for campaigns, Newsletter.Automations for email automations, Newsletter for email stats and subscriber/audience management, and Settings.Email for domain setup — each tool needs the same permission as its matching dashboard feature.manage_email_workflow drives is called Email automations in the dashboard, at Marketing → Newsletter → Email automations — even though the tool is still named manage_email_workflow and the web address still says /workflows. It is one feature, not two. Second, "workflow" now means something else in Yaplet: under Brand → Workflows it means a scripted chat, Facebook or phone conversation, which has nothing to do with email. The tool's own name, parameters and node types below still say workflow — on this page that always means an email automation, never a Brand → Workflows chat script.manage_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)
get_domain_setup_state
Returns the live setup state of a sending domain so you can troubleshoot email-domain configuration grounded in real DNS data — never guessed values. Use it to walk a user through adding DNS records, verifying their domain, or enabling branded link tracking.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
domainId | string | No | The domain's ID. Omit to use the most recently added domain. |
What It Returns
- DNS records — the exact name/value pairs the user must add, each with its live status (
found,missing, orpending) checked against real DNS. Records in theauthgroup are required to send;sslandtrackingare optional and only needed for branded link tracking. - Setup phase — where the domain stands across sending authentication → SSL → link tracking.
- DNS provider — the detected provider and its nameservers, so you can tell the user exactly where to add the records.
- CAA status — whether an existing CAA record is blocking certificate issuance for branded tracking.
How It Works
- Reads record values from live DNS state, so the assistant explains where to add the still-missing records instead of inventing them.
- Requires a domain that's already been added under Settings > Email Domains.
Example Prompts
- "Help me finish setting up my sending domain — which DNS records am I still missing?"
- "Is my email domain verified yet?"
- "My link tracking isn't working — what's wrong with my DNS?"
- "Where do I add these records, and who's my DNS provider?"
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. |
How it works:
- When you provide
description, AI sees the entire current automation and generates an updated version. - Existing nodes are preserved where possible and new ones are added.
- You can combine
descriptionwithnameandtriggerSettingsin a single call. - Switching an automation on or off is not possible from here. There is no
activeparameter; activation is a dashboard-only action, deliberately, because turning one on starts sending real email. Build and edit it here, then switch it live yourself.
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, then activate in the dashboard
Use action: "update" to make structural changes. When you are happy with it, open the automation in the dashboard and switch it on there — no tool can activate it for you.
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 automation to 'New Customer Onboarding'."
- "Show me the structure of my onboarding automation and which nodes still have no content."
- "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)
manage_subscribers
Adds, edits and organizes newsletter subscribers.
Actions
| Action | What It Does |
|---|---|
add | Add up to 500 contacts in one call (a single contact is just an array of one). |
update | Edit one subscriber: name, email, custom fields, engagement score, state. |
set_state | Apply one state to up to 500 contacts at once. |
add_to_group | Put up to 500 contacts into a contact group. |
remove_from_group | Take up to 500 contacts out of a group (they stay subscribed). |
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
action | string | Yes | One of the actions above. |
contacts | array | For add | [{ email, name?, fields? }] — up to 500 per call. |
groupIds | array | No | For add — groups the new contacts are placed into. |
subscriberId / email | string | For update | Which subscriber to edit — exactly one of the two. |
name, newEmail, fields, engagement | — | No | For update — what to change. Custom fields are merged into the existing ones. |
state | string | For set_state | VERIFIED, UNVERIFIED, UNSUBSCRIBED or REMOVED. Also usable with update. |
subscriberIds / emails | array | For bulk actions | Which contacts to affect — exactly one of the two, up to 500. |
groupId | string | For membership | The group for add_to_group / remove_from_group. |
How It Works
- List hygiene on every add: invalid addresses, no-reply/system inboxes and disposable domains are skipped and counted per reason in the response. Emails that already exist are left untouched and counted as
duplicates— useadd_to_groupto organize existing contacts. - New contacts start as NEW and a background job verifies and promotes them to VERIFIED (mailable) automatically — you don't set a state when adding.
- Double-opt-in protection: VERIFIED can only be set on a contact whose current state is REMOVED. BOUNCED, COMPLAINT and NEW are system-managed and can't be set at all.
- Custom fields must already exist (Newsletter > Subscribers > Fields). Unknown tags are reported back in
ignoredFieldTags, never silently dropped. - Your plan's subscriber limit is enforced — the response explains when an add would exceed it.
- To add more than 500 contacts, split them across several calls.
Example Prompts
- "Add [email protected] to the newsletter."
- "Add these 20 emails to the newsletter and put them in the Beta Testers group."
- "Update Jane's plan field to 'pro'."
- "Unsubscribe [email protected]."
- "Unsubscribe everyone on this list of emails." (uses
set_state) - "Move these subscribers into the VIP group." (uses
add_to_group)
manage_audience_list
Creates and edits the audiences campaigns target: contact groups (static buckets you place contacts into) and segments (saved filters — their members are whoever matches the conditions at send time). No deletes — groups and segments can only be created and edited here.
Actions
| Action | What It Does |
|---|---|
create_group | Create a contact group (name). |
rename_group | Rename a group (groupId + name). |
create_segment | Create a segment (name + filters). |
update_segment | Change a segment's name and/or filters (segmentId). |
preview_segment | Evaluate filters without saving (filters or segmentId). |
Segment Filters
Filters are structured conditions, not free text:
{
"match": "all",
"conditions": [
{ "field": "email", "operator": "ends_with", "value": "@gmail.com" },
{ "field": "engagement", "operator": "greater_than", "value": 5 }
]
}
match:"all"= every condition must hold (AND),"any"= at least one (OR).- A condition can itself be a nested group
{ "match": "any", "conditions": [...] }— one level deep. field:email,name,state,engagement,created_at, or any custom field tag.- Operators by field type: text takes
equals,not_equals,contains,starts_with,ends_with(plusnot_variants),is_set,is_not_set; numbers takeequals,not_equals,greater_than,less_than; dates takegreater_than(after),less_than(before) andmore_than_ago/less_than_agowith values like"30_days". statevalues:NEW,UNVERIFIED,VERIFIED,UNSUBSCRIBED,REMOVED,BOUNCED,COMPLAINT.- Values must not contain commas, parentheses, quotes or backslashes.
How It Works
- Every segment save and preview returns the exact match count plus a 10-contact sample — always check they look like what you intended before moving on.
- Dashboard-visible counts refresh automatically: segment counts on save/preview, group counts when membership changes.
- Campaigns snapshot a segment when it's selected as a recipient — editing the segment later doesn't change campaigns that already selected it; re-select the segment there to pick up new filters.
Example Prompts
- "Create a group called VIP Customers."
- "Create a segment of engaged Gmail subscribers — engagement above 5."
- "How many contacts joined in the last 30 days? Preview it as a segment first."
- "Update my Inactive segment to also require engagement equals 0."
- "Rename the 'Beta' group to 'Beta Testers'."
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 Email Automation Build
- Create the structure →
manage_email_workflow(create) - Design each email →
manage_email_workflow(edit_email) for each email node - Switch it on → open it in the dashboard at Marketing → Newsletter → Email automations
Example prompt: "Build me a complete re-engagement automation: 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."