EmailOctopus newsletter automation
An agent generates on-brand newsletter heroes and promo stills with Brandiseer, and optionally drafts subject line, body copy, and paste-ready HTML; a person places the assets in EmailOctopus and sends. Brandiseer does not create or send EmailOctopus campaigns.
- BrandiseerBrand memory and on-brand stills via MCP or REST
- EmailOctopusCampaign editor and send. A person places the still and HTML, then sends.
- CursorAgent host for Brandiseer MCP or REST and optional copy draft
- Claude CoworkAgent host for Brandiseer MCP or REST, optional recurring newsletter package
Brandiseer + EmailOctopus (+ Cursor or Claude Cowork)

By the end of this guide you will have a repeatable way to produce on-brand newsletter creatives for EmailOctopus. An agent in Cursor or Claude Cowork calls Brandiseer, returns an imageUrl for a hero, header, or promo still, and can optionally draft subject line, preview text, body copy, and a simple HTML body that embeds that imageUrl. A person pastes or uploads those assets into EmailOctopus and sends the campaign.
Brandiseer owns brand memory and the still. EmailOctopus owns lists, campaigns, and delivery. Brandiseer does not open EmailOctopus, does not create a campaign, and does not send. EmailOctopus's public API is strong on lists, contacts, tags, automations, and campaign reports. The public v2 reference lists campaign operations as GET only. It does not create, schedule, or send campaigns. The handoff is always a person (or a separate ops step you own) placing assets in the EmailOctopus editor.
People who brief stills inside Slack should use Slack creative desk. Recurring social captions and Buffer scheduling should use Social media automation. Klaviyo email placement should use Klaviyo email heroes. HubSpot emails and ads should use HubSpot campaign creatives. Schedules in Zapier, Make, or n8n should use Always-on creative automation. This guide is EmailOctopus newsletter creatives and paste-ready packages only.
Who it's for
- Marketers and founders who already send newsletters in EmailOctopus and need on-brand heroes without opening a separate design tool for every send
- Teams that want Claude (Cursor or Cowork) to draft subject, body, and HTML while Brandiseer keeps the visuals on-brand
- Agencies that keep one Brandiseer Brand ID per client and one EmailOctopus account per client
- Operators who can paste an
imageUrlor upload a file into an EmailOctopus campaign, then hit send themselves
Ideal customer profile: a team whose list and sends already live in EmailOctopus, whose brand already lives in Brandiseer, and whose missing piece is a brand-safe still (and optionally copy) plus a clear handoff into the campaign editor.
Why Brandiseer in this stack
EmailOctopus is where the list lives and the campaign is sent. Cursor or Cowork is the agent that turns a brief into a layout and optional copy. Brandiseer stores the logo and visual identity once, then applies that memory on every still. The image prompt carries subject, layout, composition, and on-image text. It does not restate colours, fonts, mood, or visual style.
A newsletter programme drifts when every hero is a one-off export from a general image tool. Brandiseer keeps the still on the same brand as the rest of the programme. EmailOctopus still decides which list receives the send, and a person decides when that campaign goes out.
This is a different job from the sibling guides:
- Slack creative desk is a request-and-return desk in Slack.
- Social media automation writes captions and schedules posts with Buffer.
- Always-on creative automation is the HTTP step in Zapier, Make, or n8n.
- Klaviyo email heroes hands
imageUrlinto Klaviyo image blocks. - HubSpot campaign creatives hands
imageUrlinto HubSpot. - This guide generates newsletter heroes and optional paste-ready packages for EmailOctopus. Brandiseer does not push into EmailOctopus and does not send campaigns.

Stack
| Layer | Tool | Role |
|---|---|---|
| Brand visuals | Brandiseer MCP and/or REST v2 | Generate on-brand stills. MCP uses Authorization: Bearer. REST uses X-API-Key: bds_... |
| Agent host (pick one) | Cursor | Read the newsletter brief, call Brandiseer, return imageUrl and optional copy/HTML |
| Agent host (pick one) | Claude Cowork | Same contract; optional recurring scheduled package |
| Email home | EmailOctopus | Campaign editor and send. A person places the still and HTML. |

You only need one agent host. The Brandiseer contract is the same on both. EmailOctopus has no Brandiseer app that drops a still into a campaign. The handoff is an image URL, a download, and optionally a draft HTML body. A person places it and sends.
Brandiseer docs: Developers · guide/docs · guide/image · Settings → API
EmailOctopus docs: EmailOctopus · API documentation · API v2
Endpoint tables and HTTP contracts for Brandiseer are in API reference at the end of this guide. EmailOctopus API notes for agents (contacts, reports, and the campaign create gap) are there too.
EmailOctopus (placement, not generation)
Two practical paths. Use the first one for almost every send.
- Campaign editor (default). Download the still or copy
imageUrl. In EmailOctopus, create or open a draft campaign, add an image block (or paste HTML that references the hostedimageUrl), set subject and preview text, pick the list, preview, then send. Brandiseer stops at the URL and optional draft copy. - HTML paste. When the agent returns a simple HTML body with the Brandiseer
imageUrlalready in an<img src="...">, paste that HTML into EmailOctopus's HTML or custom template path in the product. A person still reviews and sends. Do not invent an API create-campaign call.
This guide does not create campaigns, schedule sends, or call a send endpoint. EmailOctopus's public campaign surface is read and report oriented. A person places the still and sends later, outside this workflow.
How it works
- You store the brand once in Brandiseer (logo and reference visuals teach the look).
- The agent host (Cursor or Cowork) has Brandiseer MCP or REST, the Brand ID (
bds_c_...), and the standing instructions in this guide. - You name the slot: newsletter hero or header, promo still, section still, or a short footer banner. Optionally you also ask for subject, preview text, and body copy.
- Brandiseer returns
imageUrl. The agent reports the URL, crop, mode, suggested alt text, and a placement note. If copy was requested, it returns subject, preview text, body, and optional HTML that embedsimageUrl. - A person places the assets in EmailOctopus, previews on mobile and desktop, then sends. Optional API steps are limited to what EmailOctopus documents (lists, contacts, tags, starting an existing automation, reading campaign reports). They never create the campaign in this guide.

Connect the workflow
Give the agent access to Brandiseer
Create an API key for the runnable setup, or connect the hosted MCP endpoint when your agent supports MCP.
What you need
- Company website URL, if the brand is not in Brandiseer yet
- Brandiseer account with at least one finished brand profile
- API key (
bds_...) from Settings → API or Developers - Brand ID (
bds_c_...) for every brand the agent may call - Credits for the stills you actually generate
- Cursor or Claude Cowork, with Brandiseer MCP or a way to call REST
- An EmailOctopus account you can edit, with at least one list and permission to create campaigns in the UI
- Optional, only for contact or report scripts: an EmailOctopus API key from account settings. This key is not the Brandiseer key. It does not unlock campaign create or send in the public API
Setup
Stage 1: Add your brand on Brandiseer
- Go to brandiseer.com. In the homepage input, enter your company website URL and click Try My Brand.
- Wait about one minute while Brandiseer analyses the site and picks a logo and visuals.
- Review those visuals carefully. They teach Brandiseer your look. Every later newsletter still is influenced by what you leave here.
- Remove anything off-brand (partner logos, stock, irrelevant screenshots). Add campaign creatives or product photography that match the look you want.
- Click Add Brand, sign up if prompted, then wait about 30 seconds for the brand profile to finish.
Agencies repeat this once per client. Do not point two EmailOctopus accounts at one Brand ID.
Stage 2: API key and Brand ID
- Open brandiseer.com/developers or Settings → API.
- Create an API key (
bds_...). Put it in the agent host's secret store. Do not paste it into an EmailOctopus campaign, Slack, or a git repo. - Copy the Brand ID (
bds_c_...). - Confirm the key with
GET https://brandiseer.com/api/v1/creditsandGET https://brandiseer.com/api/v1/brands, headerX-API-Key. The credits JSON includescredits. The brands list includes each brandid. - Optional reachability check, no key required:
GET https://brandiseer.com/api/v1/healthreturns{ "status": "ok" }.
Read guide/docs and guide/image once while you write the standing instructions.
Stage 3: Connect Brandiseer to the agent host
Use Cursor or Cowork. One host is enough.
- Connect Brandiseer MCP at
https://brandiseer.com/api/mcpwithAuthorization: Bearer <api-key>, or keep the REST key in the host secret store and call v2 generate endpoints. - Paste the System prompt from this guide into the standing instructions for newsletter work.
- Fill in Brand ID defaults and any multi-brand map before the first generate.
Stage 4: Smoke-test one still
- Ask the agent for a 16:9 newsletter hero for a fictional promo. Require layout-only prompt language (no colours or fonts in the prompt).
- Confirm you get a public
imageUrl, aspect ratio, mode, and a placement note. - Open EmailOctopus, create a draft campaign, add an image, and confirm the still displays. Do not send the smoke test.
Stage 5: Optional copy and HTML package
When you want more than a still:
- Ask the agent for subject (about 50 characters or fewer when possible), preview text, body paragraphs, CTA label, and a minimal HTML body that includes
<img src="{{imageUrl}}" alt="..." width="600">(or the live URL once generation finishes). - Paste subject, preview text, and HTML into EmailOctopus. Preview on mobile. Keep legal footers, unsubscribe, and address blocks as EmailOctopus provides them. Do not strip required compliance elements.
- A person sends. The agent does not call a send API.
Stage 6: Optional recurring Cowork task
After the smoke test works, you can create a Cowork scheduled task that, on newsletter days:
- Reads a short brief (product, offer, theme).
- Generates the Brandiseer still.
- Drafts subject, preview text, body, and HTML.
- Writes the package to a file or returns it in chat for a person to paste into EmailOctopus.
The task must not claim the campaign was created or sent. EmailOctopus campaign create and send are out of scope for the public API used in this guide.
Prompting rules for Brandiseer images
When the agent builds prompt:
- Keep subject, layout, composition, and on-image text (what the words say and where they sit).
- Never send brand colours, fonts, mood, or visual style. Brand memory already applies those.
- Put crop in
aspectRatio, quality inmode, pixel size inresolution, and logo on/off inuseLogo. Those are body fields, not prompt prose. - Map the EmailOctopus slot to a documented ratio. Newsletter hero and header:
16:9. Promo square:1:1. In-email card:4:3. Footer banner:16:9with a shorter display height set in the editor. - Prefer
designfor finished newsletter stills. Fall back tofastif design fails once. - Prefer
1Kor2K. Email clients punish huge files. Keep on-image text sparse; put long headlines in EmailOctopus text blocks when you can. - Set
useLogotrue only when the brief asked for a logo. - Full rules: Prompt compatibility.
System prompt
Paste this into Cursor or Cowork as the standing instructions for EmailOctopus newsletter work. Replace the placeholders before the first generate.
You produce on-brand newsletter heroes and optional paste-ready email
packages for EmailOctopus. Brandiseer returns an image URL. You do not
create EmailOctopus campaigns and you do not send.
Brandiseer:
- MCP: https://brandiseer.com/api/mcp with Authorization: Bearer.
Tools you may call: brandiseer_list_brands, brandiseer_check_credits,
brandiseer_generate_image. Do not invent tool names.
- REST: X-API-Key: bds_... (secret store only).
Prefer POST https://brandiseer.com/api/v2/generate
or POST https://brandiseer.com/api/v2/generate/async
then poll GET https://brandiseer.com/api/v2/jobs/:jobId every 3 to 5 seconds
until data.status is done or failed, or about 10 minutes have passed.
- Live contract: https://brandiseer.com/guide/docs and
https://brandiseer.com/guide/image
Defaults for this account (fill in once):
- Brand ID: bds_c_...
- Newsletter hero / header aspectRatio: 16:9
- Promo square aspectRatio: 1:1
- mode: design
- resolution: 2K (use 1K if the inbox weight must stay light)
- useLogo when the brief is silent: false
- Multi-brand map, if any: brand name to bds_c_...
On every request:
1. Resolve brandId from the brief or the default. If more than one brand
exists and the brief does not name one, ask. Never fall through to
another client's Brand ID.
2. Check credits before a batch. On 402, stop.
3. Rewrite the image brief into subject, layout, composition, and
on-image text. Strip colours, fonts, mood, and visual style. If
stripping leaves no physical subject, ask what is in the frame.
4. Choose aspectRatio from the slot. Put resolution, mode, and useLogo in
API fields, not in the prompt.
5. Generate one still. Return imageUrl, aspectRatio, mode, resolution,
useLogo, a one-line alt text suggestion, and a placement note
(hero, header, promo, section, or footer).
6. If the human asked for a full package, also return:
- subject (short)
- preview text
- body copy (plain text paragraphs)
- CTA label and destination URL if provided
- minimal HTML that embeds the live imageUrl in an img tag (width 600),
with the body copy and CTA. Do not invent unsubscribe or address
blocks; remind the human that EmailOctopus supplies compliance
footers.
7. Do not tell the user an EmailOctopus campaign was created or sent
unless they confirm they pasted and sent it themselves.
EmailOctopus API (optional, only when the human supplied an API key and
asked for contacts or reports):
- Base: https://api.emailoctopus.com
- Auth: Authorization: Bearer and the EmailOctopus key. Never the
Brandiseer key.
- Follow https://emailoctopus.com/api-documentation/v2
- Allowed in this guide: lists, contacts, and tags on that page;
POST https://api.emailoctopus.com/automations/{automation_id}/queue
for an existing automation that already uses the Started via API
trigger; GET https://api.emailoctopus.com/campaigns and the GET
campaign report paths on the same page.
- Forbidden in this guide: inventing a create-campaign, schedule, or
send endpoint. Public v2 campaign operations are GET only.
- A queue call starts an existing automation. It does not create the
newsletter campaign. Do not use it as a substitute for send.
- Never mix the EmailOctopus key with the Brandiseer key.
Out of scope:
- Slack replies, Buffer scheduling, Klaviyo or HubSpot placement.
- Zapier / Make / n8n recipes (see Always-on creative automation).
- Legal approval of claims, prices, or offers printed on the image.
Add-ons
Recurring newsletter day (Cowork)
After the base flow works, create a scheduled Cowork task for your newsletter cadence (for example weekly). Each run reads a brief file, generates the Brandiseer still, drafts the package, and drops the result in chat or a known folder for a person to paste into EmailOctopus. Keep human preview and send.
Product-from-URL stills
When the brief names a product page, the agent may fetch public page context for the copy brief, then generate a still that features that product. Brandiseer still applies brand memory. Do not scrape behind logins.
Multi-variant heroes
Ask for two or three layout variants (product-left, product-centred, lifestyle) with the same offer. A person picks one in EmailOctopus.
Report pull after send
After a human sends, an agent with an EmailOctopus API key may read the campaign report GET endpoints documented in API v2 (summary, links, and contact rows). Use that for a short post-send note. It does not change how creatives are made, and it does not send.
Limits & FAQ
Can the agent create and send the EmailOctopus campaign by API?
Not in this guide. EmailOctopus's public v2 reference documents lists, contacts, tags, automations, and campaign reads and reports. Campaign operations on that page are GET only. Campaign create, schedule, and send are not part of this workflow. A person places assets in the UI and sends.
Does Brandiseer upload into EmailOctopus?
No. Brandiseer returns imageUrl. A person downloads or pastes that URL (or HTML that references it) into EmailOctopus.
How is this different from Klaviyo email heroes?
Same Brandiseer contract and placement philosophy. The ESP is EmailOctopus instead of Klaviyo. This guide also documents an optional subject, body, and HTML package because EmailOctopus teams often want a full paste-ready draft, not only a still.
How is this different from Social media automation?
Buffer can schedule posts through its agent and MCP path. EmailOctopus newsletter send stays with a person in this guide.
Off-brand images
Almost always caused by style, colour, or font language in the image prompt. Strip those and regenerate.
Credits and file weight
Image generation spends Brandiseer credits by mode and resolution. Prefer 2K or 1K for email. Huge 4K files slow the inbox and are rarely worth it for a 600px-wide column.
Demo / motion
Motion brief only. This is not an embed, and there is no walkthrough URL yet.
Working title: EmailOctopus newsletter creatives in under 40 minutes Length: 45 to 75 seconds
Story beats:
- Brand uploaded on Brandiseer
- API key and Brand ID in Cursor or Cowork
- Agent returns
imageUrl(and optional subject and HTML) - Person pastes into an EmailOctopus campaign
- Preview, then send (human)
On screen: Developers page, Cowork or Cursor chat, the EmailOctopus campaign editor, and a sample Brandiseer hero on a 600px email crop. Blur the Brandiseer API key and any EmailOctopus API key. Do not show a campaign created or sent by the agent.
Related use cases
- Klaviyo email heroes: on-brand stills placed in Klaviyo by a person
- HubSpot campaign creatives: on-brand stills placed in HubSpot emails, landing pages, and ads
- Social media automation: on-brand images, captions, and Buffer scheduling
- Always-on creative automation: Zapier, Make, or n8n calls Brandiseer REST and delivers
imageUrldownstream - Slack creative desk: people request stills in Slack and get them back in-thread
Links
| Resource | URL |
|---|---|
| Brandiseer | https://brandiseer.com |
| Developers | https://brandiseer.com/developers |
| API reference (guide/docs) | https://brandiseer.com/guide/docs |
| Image prompt compatibility | https://brandiseer.com/guide/image |
| MCP endpoint (agent hosts) | https://brandiseer.com/api/mcp |
| API keys | https://brandiseer.com/settings/api |
| EmailOctopus | https://emailoctopus.com |
| EmailOctopus API documentation | https://emailoctopus.com/api-documentation |
| EmailOctopus API v2 | https://emailoctopus.com/api-documentation/v2 |
| Visual pack manifest | assets/MANIFEST.md |
| Sibling: Klaviyo email heroes | https://blog.brandiseer.com/use-cases/klaviyo-email-heroes |
| Sibling: HubSpot campaign creatives | https://blog.brandiseer.com/use-cases/hubspot-campaign-creatives |
| Sibling: Social media automation | https://blog.brandiseer.com/use-cases/social-media-automation |
| Sibling: Always-on creative automation | https://blog.brandiseer.com/use-cases/always-on-creative-automation |
| Sibling: Slack creative desk | https://blog.brandiseer.com/use-cases/slack-creative-desk |
Source
Public Use case README for EmailOctopus newsletter automation. Brandiseer MCP and REST v2 image generation from Cursor or Claude Cowork, optional Claude copy and HTML package, then a person places assets in EmailOctopus and sends. Aligned with guide/docs and guide/image (24 September 2026). EmailOctopus API notes follow the public v2 documentation: campaign calls there are GET only, and this workflow does not create or send campaigns. Distinct from Klaviyo email heroes, HubSpot campaign creatives, Buffer social scheduling, and Slack creative desk.
API reference
Wiring reference for agents. The sections above are the human path.
Brandiseer MCP
Connect https://brandiseer.com/api/mcp with Authorization: Bearer and the API key. Tools this guide uses:
brandiseer_list_brandsbrandiseer_check_creditsbrandiseer_generate_image
Do not invent extra Brandiseer tool names. Brandiseer MCP does not edit EmailOctopus.
Brandiseer REST (prefer v2 images)
Send X-API-Key: bds_... on every authenticated Brandiseer call.
| Call | What you get |
|---|---|
POST https://brandiseer.com/api/v2/generate | Sync still. 200 body { "imageUrl", "creditsUsed" }. |
POST https://brandiseer.com/api/v2/generate/async | 202 body { "data": { "jobId" } }. |
GET https://brandiseer.com/api/v2/jobs/:jobId | Poll every 3 to 5 seconds until done or failed. |
GET https://brandiseer.com/api/v1/credits | Current balance. |
GET https://brandiseer.com/api/v1/brands | Brands for the key (bds_c_...). |
GET https://brandiseer.com/api/v1/health | { "status": "ok" }. No API key. |
Image body fields: brandId, prompt, optional aspectRatio (1:1, 16:9, 9:16, 4:3), resolution (1K, 2K, 4K), mode (fast, design, or pro), useLogo.
Field mapping
| Incoming field | API | Rule |
|---|---|---|
| Slot (hero, header, promo, section, footer) | aspectRatio | Hero, header, section, footer: 16:9. Promo square: 1:1. In-email card: 4:3. |
| headline | inside prompt only | On-image text. Prefer EmailOctopus text blocks for long headlines. |
| brandId | brandId | bds_c_.... Required. |
| mode | mode | Prefer design for newsletter stills. |
| useLogo | useLogo | true or false. |
| subject or brief | prompt | After stripping style words. |
Example JSON
{
"brandId": "bds_c_...",
"prompt": "Wide newsletter hero. Product centred on the left third. Empty right half for a headline the email will set in a text block. No on-image text.",
"aspectRatio": "16:9",
"resolution": "2K",
"mode": "design",
"useLogo": false
}
EmailOctopus API (agents)
Base URL: https://api.emailoctopus.com. Authenticate with Authorization: Bearer and the EmailOctopus API key from account settings, as on API v2. That key is not the Brandiseer key.
Campaign operations on that page are GET only:
| Call | What you get |
|---|---|
GET https://api.emailoctopus.com/campaigns | Campaigns already in the account. |
GET https://api.emailoctopus.com/campaigns/{campaign_id} | One campaign, including status and content a person already saved. |
GET https://api.emailoctopus.com/campaigns/{campaign_id}/reports/summary | Summary report after a human has sent. |
GET https://api.emailoctopus.com/campaigns/{campaign_id}/reports | Contact-level report rows. |
GET https://api.emailoctopus.com/campaigns/{campaign_id}/reports/links | Link report. |
POST https://api.emailoctopus.com/automations/{automation_id}/queue | Start an existing automation for one contact. Body is { "contact_id" }. The automation must already use the Started via API trigger. 204 means queued. It does not create a campaign. |
Lists, contacts, and tags are also on that v2 reference. Use those pages when the human asked for list work. They do not place a still and they do not send a newsletter.
The v2 reference does not publish a create, schedule, or send method for campaigns. Do not invent POST /campaigns, a schedule body, or a send call. Reading content.html on a campaign does not mean the API accepts a new HTML body. A person pastes assets in the EmailOctopus editor and sends.
Slot prompts that stay layout-only
| Slot | aspectRatio | Prompt |
|---|---|---|
| Newsletter hero or header | 16:9 | Wide newsletter hero. Product centred on the left third. Empty right half for a headline the email will set in a text block. No on-image text. |
| Promo square | 1:1 | Square promo. Single product in the centre. On-image text: "20% off" along the bottom edge. Open space above the product. |
| Section still | 16:9 | Section still. Product cluster along the bottom edge. Upper two thirds empty for a heading and button. No on-image text. |
| Footer banner | 16:9 | Short landscape banner. Product left of centre. On-image text: "New arrivals" in the right third. |
Run it with your brand
Connect the workflow to brand memory.
Save your visual identity in Brandiseer, then use MCP or the API to generate from the same brand across every supported workflow.
