Newsletter

Draft issues with AI from your own content, grow a double-opt-in list, and send from your own verified domain — with delivery, open, and click tracking built in. Sending requires Pro and a verified sending domain.

Your newsletter is the one distribution channel you own outright — no algorithm between you and the reader. BlackOps treats it that way: issues are drafted from your own content, subscribers are double-opt-in, and every send goes out from your domain with your sending reputation, not a shared platform address.

Newsletter sending is a Pro feature. Drafting is available on every tier, but sends and signups unlock only after your sending domain is verified.

Before your first send

Three one-time steps, in order:

  1. Verify a sending domain — Settings → Email Sending Domain. Add a dedicated subdomain (like news.yourdomain.com), create the SPF/DKIM records it shows you, click Verify. See Custom Email Sending Domain.
  2. Set your From Email — Newsletters → Settings. It must be an address on the verified domain (e.g. you@news.yourdomain.com). Set your From Name and optional Reply-To while you're there.
  3. Turn on signups — nothing to click: the subscribe form on your site starts accepting readers automatically once steps 1–2 are done.

Until these are complete, sends and test sends return a message explaining exactly what's missing, and the signup endpoint politely declines — no subscriber ever gets stuck waiting on a verification email that can't be sent.

Drafting an issue

Create a newsletter from the Newsletters tab under Promote. Pick the content sources you want to draw from — recent posts, saved content, notes — and the AI reshapes them into a draft in your brand voice. Everything is editable before anything sends; the AI is a first-drafter, not the author of record.

Your configured header, footer, sign-off, signature, and P.S. from Newsletter Settings wrap every issue, so each send looks consistent without per-issue formatting work.

Subscribers

  • Double opt-in: new signups get a verification email and only join the list after confirming — the list stays clean and consentful.
  • Migration: import an existing list via CSV; imported readers get a re-opt-in confirmation rather than being silently added.
  • Unsubscribe: every issue carries working unsubscribe links plus the one-click List-Unsubscribe header mail clients surface.

Sending

  • Test send — every draft has a send-test that delivers a [TEST]-prefixed copy to your admin email so you can check rendering and the from line before going out.
  • Send to all — sends in rate-limited batches with real-time progress, duplicate prevention (a subscriber is never sent the same issue twice), and automatic resume if a send is interrupted partway.

Growing the list from outside BlackOps

Your list doesn't have to grow only through the form on your hosted site.

A form on any other site — the subscribe endpoint accepts cross-origin requests, so a plain fetch form on your app, landing page, or anywhere else works directly. Point it at your BlackOps site's domain:

<form onsubmit="event.preventDefault();
  fetch('https://blog.yourdomain.com/api/newsletter/subscribe', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ email: this.email.value })
  }).then(r => r.json()).then(d => this.outerHTML = '<p>' + (d.message || d.error) + '</p>')">
  <input type="email" name="email" placeholder="you@example.com" required />
  <button type="submit">Subscribe</button>
</form>

Programmatically from your app — add subscribers server-to-server with your API key, for example when a user signs up for your product:

await fetch('https://blackopscenter.com/api/v2/subscribers', {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer YOUR_API_KEY',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ domain: 'blog.yourdomain.com', email: user.email, name: user.name })
})

Both paths run the same double opt-in: the reader gets a confirmation email and only joins the list after clicking it. Signing up for your app isn't consenting to your newsletter — the confirmation step is what keeps the list clean and compliant, so there's intentionally no way to skip it.

Tracking

Delivery events feed back automatically: each issue in the list shows its open rate and click rate, and per-subscriber delivery status (delivered, bounced, complained) is recorded via webhooks. Use it to learn which subjects and topics actually land.

Related

Want this page as machine-readable markdown? GET /docs/features/newsletter.md