Changelog
Every feature, improvement and infrastructure move we have shipped — newest first.
RSS feed →79 entries, page 1 of 4
Edit and cancel broadcasts from Claude
ImprovedThe MCP server can now set a reply-to address, open and click tracking, and a saved template when it drafts a broadcast — the reply-to falls back to EUSEND_REPLY_TO, as send_email already did. Two new tools: update_broadcast edits a draft, so a wrong field no longer means starting over in the dashboard, and cancel_broadcast stops a scheduled or sending broadcast, always after asking you first.
A test API key alongside your live one on Free
ImprovedThe Free plan now counts live and test API keys separately, so you can keep an eu_test_ key for development and CI next to your production eu_live_ key instead of deleting one to make the other. Test keys never deliver mail. When you reach a key limit in the dashboard, the error now links straight to billing.
Transactional email no longer waits behind broadcasts
ImprovedEmails sent through the API now jump ahead of any broadcast that is still going out, so a password reset or sign-in link sent while a large campaign is sending leaves right away instead of queueing behind it. Broadcasts still send at the same pace; they simply yield to transactional mail.
eusend in Claude’s connectors directory
Neweusend is now listed in Claude’s connectors directory, so you can connect it from Customize → Connectors in Claude on the web, desktop and mobile — search for eusend and sign in, no URL to paste. Claude can then send email, check delivery, set up domains and draft broadcasts in your account. You choose the workspace, full or sending-only access, and live or test mode when you sign in. Read-only tools now run without a confirmation prompt, and sending a broadcast always asks first.
Open and click tracking off by default
ImprovedNew organizations now start with open and click tracking off. Click tracking rewrites every link to point at our tracking host instead of your domain, and mailbox providers count that mismatch against you — worst of all on sign-in links and password resets. Turn tracking on under Settings → General → Email tracking, or per send with track_opens / track_clicks. Existing organizations keep the setting they had; if yours is on, consider switching it off for transactional mail.
email.failed and email.suppressed webhooks
NewTwo new webhook events tell you when an email will never be delivered: email.failed (with a reason — the account could not send, or delivery was abandoned) and email.suppressed (with the recipients your suppression list dropped). Until now these ended silently, so an integration waiting for delivered or bounced waited forever. Subscribe to them by name; endpoints subscribed to * receive them automatically.
Broadcast cancel stops queued mail, and audience lookups
ImprovedCancelling a broadcast mid-send now also stops the messages it had already queued, and refunds them; a contact who unsubscribes after a send starts no longer receives it. GET /audiences/:id and PATCH /audiences/:id are new, for reading and renaming one audience. Deleting a topic that a scheduled or sending broadcast still uses now returns 409 instead of widening that broadcast to the whole audience, and scheduling a broadcast with PATCH runs the same checks as POST /broadcasts/:id/send. Contact, suppression and email list pagination no longer skips rows that were created in the same bulk import or batch.
Sign in to the MCP server
NewThe hosted MCP server now supports OAuth, so you can connect it by adding the URL and signing in — no API key to create or paste. That makes it usable from clients that have nowhere to put a header, such as Claude on the web. You choose the workspace, full or sending-only access, and live or test mode when you approve, and can disconnect an app under Settings → Connected apps. API keys keep working as before.
Extra sending domains
NewPaid plans can add sending domains beyond the ones they include, at €3 per domain per month, instead of moving up a volume. Set the number under Settings → Billing — up to as many again as your plan includes. Extras your plan covers after an upgrade are dropped automatically.
Upgrades open after your first sends
ImprovedA new account can upgrade once it has delivered 10 emails, or 24 hours after signup, whichever comes first. The upgrade button shows what is left. Accounts that already send, and additional workspaces on an established account, are not affected.
Dashboard times in your time zone
ImprovedTimes across the dashboard — sent emails, delivery events, webhook deliveries, request logs and scheduled broadcasts — were shown in UTC. They now show in your own time zone, taken from your browser, so a broadcast you schedule for 14:00 is listed as 14:00.
Plain-text part generated for HTML-only emails
ImprovedEmails sent with only html now carry a plain-text alternative generated from it, as broadcasts already did. HTML-only mail is a spam signal for Gmail and Outlook, so this helps your mail reach the inbox without any change on your side. Pass text yourself to write your own.
Better Auth plugin
Newnpm install @eusend_dev/better-auth and add eusend() to your Better Auth plugins: verification, password-reset and password-changed emails go out through eusend with clean default templates you can brand with your logo and colour, or replace. One-line senders cover email OTP, magic links and organization invitations. Sends never hold up the response, so they can’t reveal which addresses have accounts, and pass straight to after() or waitUntil on serverless. Optionally, users are added to an audience once they verify their email — never before, and never over an existing opt-out. See https://eusend.dev/docs/integrations/better-auth.
API request logs
NewA new Logs page in the dashboard lists every request your API keys make — method, path, status, duration and which key made it — so you can see why an integration is failing without adding logging of your own. Filter by status, key, path or period, and click a failed request to see the body you sent and the error you got back. Attachment content is never stored, and logs are kept for 30 days. See https://eusend.dev/docs/dashboard/logs.
Multiple workspaces
NewYou can now open more than one workspace from the same account — one per client, or production kept apart from staging. Create one from the workspace switcher in the sidebar. Each workspace is completely separate: its own domains, API keys, contacts, suppression list, usage and invoice, with nothing shared between them but you, and the switcher moves between them without signing out. Your first workspace stays free; additional ones pick a plan when you create them and are billed on their own, so they can be sized independently and cancelled independently. If an additional workspace’s subscription ends, sending stops but nothing is deleted — your data stays and the workspace starts sending again as soon as you choose a plan for it. Nothing changes if you only have one workspace.
Topics
NewYour contacts can now choose which of your emails they get. A topic is a kind of email — “Monthly newsletter”, “Product updates” — that someone can join or leave on its own, and a broadcast scoped to one reaches only the people who want that kind of mail. Each topic is opt-in (everyone gets it until they leave) or opt-out (nobody gets it until they ask), fixed when you create it because changing it later would mail people who never agreed. Manage them under Audiences → Topics, at /topics on the API, and in all three SDKs. The big change is on the unsubscribe page: recipients now get a checkbox per topic alongside the usual unsubscribe button, and a broadcast sent under a topic carries a topic-scoped one-click link — so “unsubscribe” in Gmail drops that one topic instead of losing you the contact. Nothing changes until you create your first topic: existing broadcasts still go to the whole audience, transactional mail is untouched, and recipients see exactly the page they saw before. See https://eusend.dev/docs/audiences/topics.
Contact properties
NewThe custom fields on your contacts are now something you can manage. Audiences → Properties lists every property with the number of contacts using it, and lets you add, edit and delete one; the same thing is on the API at /contact-properties and in all three SDKs. A property can carry a fallback value, rendered for contacts that have no value of their own, so {{plan}} reads “free” everywhere instead of each broadcast repeating the default. Nothing changes for existing integrations: a property you send without declaring it still works and now appears in the list on its own. Deleting a property removes it from every contact, so the dashboard tells you how many that is first. See https://eusend.dev/docs/audiences/properties.
The website and dashboard moved into the EU
InfrastructureThey were served from Vercel (US company, EU compute); they now run on our own server in Frankfurt, next to the database. Vercel is off our sub-processor list — see https://eusend.dev/legal/subprocessors. Nothing changes in how you use eusend: same URLs, same API, and your mail already left from our own machines.
Official WordPress plugin
NewInstall “eusend” from the WordPress plugin directory and every wp_mail() call — password resets, WooCommerce receipts, form notifications — goes through the eusend API. It uses HTTP rather than SMTP, so it works on hosts that block outbound port 465. Turn on delivery events and eusend posts back as each message moves, so the plugin’s email log shows what actually happened — delivered, bounced with the receiving server’s own reason, complained, opened, clicked — and which plugin sent it. Configure it from the settings screen, from wp-config.php constants, or over WP-CLI. See https://eusend.dev/docs/integrations/wordpress.
Payload CMS email adapter
Newnpm install @eusend_dev/payload-email, point Payload’s email config at it, and every message Payload sends — email verification, password resets, and your own payload.sendEmail() calls — goes through eusend. It talks to the API rather than SMTP, so it works on serverless, and it takes nodemailer’s attachment shape: raw bytes, a URL we fetch at send time, a file on disk, or an inline cid image. See https://eusend.dev/docs/integrations/payload.