Email

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.

~25 to 40 min setup
  • MCP
  • REST
  • Cursor
  • Cowork

Brandiseer + EmailOctopus (+ Cursor or Claude Cowork)

Cover: an on-brand newsletter hero ready to place in an EmailOctopus campaign

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 imageUrl or 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:

Example strip: newsletter hero, promo square, section still, and footer banner

Stack

LayerToolRole
Brand visualsBrandiseer MCP and/or REST v2Generate on-brand stills. MCP uses Authorization: Bearer. REST uses X-API-Key: bds_...
Agent host (pick one)CursorRead the newsletter brief, call Brandiseer, return imageUrl and optional copy/HTML
Agent host (pick one)Claude CoworkSame contract; optional recurring scheduled package
Email homeEmailOctopusCampaign editor and send. A person places the still and HTML.

Stack diagram: Cursor or Cowork, Brandiseer, and EmailOctopus

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.

  1. 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 hosted imageUrl), set subject and preview text, pick the list, preview, then send. Brandiseer stops at the URL and optional draft copy.
  2. HTML paste. When the agent returns a simple HTML body with the Brandiseer imageUrl already 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

  1. You store the brand once in Brandiseer (logo and reference visuals teach the look).
  2. The agent host (Cursor or Cowork) has Brandiseer MCP or REST, the Brand ID (bds_c_...), and the standing instructions in this guide.
  3. 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.
  4. 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 embeds imageUrl.
  5. 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.

Workflow: brief, Brandiseer still, optional copy and HTML, person places in EmailOctopus, send

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

  1. Go to brandiseer.com. In the homepage input, enter your company website URL and click Try My Brand.
  2. Wait about one minute while Brandiseer analyses the site and picks a logo and visuals.
  3. Review those visuals carefully. They teach Brandiseer your look. Every later newsletter still is influenced by what you leave here.
  4. Remove anything off-brand (partner logos, stock, irrelevant screenshots). Add campaign creatives or product photography that match the look you want.
  5. 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

  1. Open brandiseer.com/developers or Settings → API.
  2. 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.
  3. Copy the Brand ID (bds_c_...).
  4. Confirm the key with GET https://brandiseer.com/api/v1/credits and GET https://brandiseer.com/api/v1/brands, header X-API-Key. The credits JSON includes credits. The brands list includes each brand id.
  5. Optional reachability check, no key required: GET https://brandiseer.com/api/v1/health returns { "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.

  1. Connect Brandiseer MCP at https://brandiseer.com/api/mcp with Authorization: Bearer <api-key>, or keep the REST key in the host secret store and call v2 generate endpoints.
  2. Paste the System prompt from this guide into the standing instructions for newsletter work.
  3. Fill in Brand ID defaults and any multi-brand map before the first generate.

Stage 4: Smoke-test one still

  1. 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).
  2. Confirm you get a public imageUrl, aspect ratio, mode, and a placement note.
  3. 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:

  1. 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).
  2. 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.
  3. 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:

  1. Reads a short brief (product, offer, theme).
  2. Generates the Brandiseer still.
  3. Drafts subject, preview text, body, and HTML.
  4. 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 in mode, pixel size in resolution, and logo on/off in useLogo. 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:9 with a shorter display height set in the editor.
  • Prefer design for finished newsletter stills. Fall back to fast if design fails once.
  • Prefer 1K or 2K. Email clients punish huge files. Keep on-image text sparse; put long headlines in EmailOctopus text blocks when you can.
  • Set useLogo true 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.

Copy-ready
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:

  1. Brand uploaded on Brandiseer
  2. API key and Brand ID in Cursor or Cowork
  3. Agent returns imageUrl (and optional subject and HTML)
  4. Person pastes into an EmailOctopus campaign
  5. 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

Links

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_brands
  • brandiseer_check_credits
  • brandiseer_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.

CallWhat you get
POST https://brandiseer.com/api/v2/generateSync still. 200 body { "imageUrl", "creditsUsed" }.
POST https://brandiseer.com/api/v2/generate/async202 body { "data": { "jobId" } }.
GET https://brandiseer.com/api/v2/jobs/:jobIdPoll every 3 to 5 seconds until done or failed.
GET https://brandiseer.com/api/v1/creditsCurrent balance.
GET https://brandiseer.com/api/v1/brandsBrands 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 fieldAPIRule
Slot (hero, header, promo, section, footer)aspectRatioHero, header, section, footer: 16:9. Promo square: 1:1. In-email card: 4:3.
headlineinside prompt onlyOn-image text. Prefer EmailOctopus text blocks for long headlines.
brandIdbrandIdbds_c_.... Required.
modemodePrefer design for newsletter stills.
useLogouseLogotrue or false.
subject or briefpromptAfter stripping style words.

Example JSON

Copy-ready
{
  "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:

CallWhat you get
GET https://api.emailoctopus.com/campaignsCampaigns 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/summarySummary report after a human has sent.
GET https://api.emailoctopus.com/campaigns/{campaign_id}/reportsContact-level report rows.
GET https://api.emailoctopus.com/campaigns/{campaign_id}/reports/linksLink report.
POST https://api.emailoctopus.com/automations/{automation_id}/queueStart 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

SlotaspectRatioPrompt
Newsletter hero or header16:9Wide 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 square1:1Square promo. Single product in the centre. On-image text: "20% off" along the bottom edge. Open space above the product.
Section still16:9Section still. Product cluster along the bottom edge. Upper two thirds empty for a heading and button. No on-image text.
Footer banner16:9Short 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.