save_newsletter
Creates a newsletter as a draft with its own template. Nothing is sent: submit the template with create_template_submissions, then call send_newsletter. Returns the newsletter.
| Tool name | save_newsletter |
| Permission | newsletters:write |
readOnlyHint | false |
destructiveHint | false |
idempotentHint | true |
openWorldHint | false |
| REST call | POST /v1/newsletters, PATCH /v1/newsletters/{newsletter_id} |
#What it does
- Changes data in your account. It does not send messages to contacts.
- Safe to repeat with the same idempotency_key.
#Input
The tool takes one flat object. Path, query and body fields of the REST call are merged into it.
Create newsletter (POST /v1/newsletters)
| Name | Type | Required | Description |
|---|---|---|---|
title | string | yes | Internal title. It also names the template. length 1 to 200 |
text | string | yes | Message text, at most 1024 characters. The only placeholder allowed is {{first_name}}. length 1 to 1024 |
language | string or null | no | Language of the message, for example en or de. Null uses the account language. up to 10 characters |
button | any | no | One button, or null to remove it. |
audience | object or null | no | Audience filter by tags and/or source. Null removes the filter (all contacts with a confirmed opt-in). |
audience.tags | array of string | no | Tags, upper or lower case does not matter. The tags must exist on at least one contact. up to 20 items |
audience.mode | string | no | all = contact has every tag. any = contact has at least one tag. none = contact has none of the tags. one of: all, any, none; default "any" |
audience.sources | array of string | no | Where the contact came from. up to 8 items |
Update newsletter (PATCH /v1/newsletters/{newsletter_id})
| Name | Type | Required | Description |
|---|---|---|---|
newsletter_id | string | yes | ID of the newsletter, from list_newsletters. |
title | string | no | New internal title. length 1 to 200 |
text | string | no | Message text, at most 1024 characters. The only placeholder allowed is {{first_name}}. length 1 to 1024 |
language | string or null | no | Language of the message, for example en or de. Null uses the account language. up to 10 characters |
button | any | no | One button, or null to remove it. |
audience | object or null | no | Audience filter by tags and/or source. Null removes the filter (all contacts with a confirmed opt-in). |
audience.tags | array of string | no | Tags, upper or lower case does not matter. The tags must exist on at least one contact. up to 20 items |
audience.mode | string | no | all = contact has every tag. any = contact has at least one tag. none = contact has none of the tags. one of: all, any, none; default "any" |
audience.sources | array of string | no | Where the contact came from. up to 8 items |
Arguments added by the MCP server (see Special arguments)
| Name | Type | Required | Description |
|---|---|---|---|
idempotency_key | string | no | Optional. Unique key, for example a UUID. Same key and arguments within 24 hours: first result. Without a key only an identical call within 1 minute counts as a repeat. up to 255 characters |
#Result
The result has the same content as the REST answer. Lists have at most 50 items per page (default 20); use cursor for the next page.
Errors come back as a tool result with isError: true. The error codes are the ones in Errors.