source parameter to the imports API, so you can override detection with values such as custom before starting a subscriber importwww.instagram.com showing a generic favicon instead of the Instagram icon (thanks, Ben!)robots.txt) instead of a generic error, and put that explanation on the external feed API too!important rule with a mobile override (thanks, Kaeti!)Archives now have a Crawling add-on: one toggle each for search engines, AI crawlers, and everything else, replacing the old noindex flags and the blocked user agents list
Read more@import to load a web fontYou can now export the itemized events behind an email's analytics — every open, click, and delivery with its timestamp — straight from the email's detail pane
Read moreGET /v1/subscribers/{id_or_email}/automations now returns a read-only error code on each attempt, so the API can tell you why an automation attempt was skipped or failed — it's null when the attempt succeeded or hasn't run yetsubscriber.tags.changed event, so you can now subscribe to it from the dashboard when your newsletter uses tags& (thanks, Paul!)&# in it (like a page anchor) scrambling any raw HTML later in the same email written in Markdown (thanks, Marcin!)<meta> refresh(copy) suffixemail header line as an archive instead of a subscriber listPATCH on a webhook returning a 422 even though the change saved… menu to the edges of your email list so they stay put when you scroll sidewaysunactivated (via import or the API) leaving a stale unsubscription date on the recordattachments_-prefixed filename — they now keep the original file namechange_email_address automation action to skip cleanly when the target email already belongs to a subscriberunactivated keeps them pending and re-sends confirmation, rather than quietly resubscribing themPOST /v1/subscribers with X-Buttondown-Collision-Behavior: add now honors type: unactivated on an unsubscribed address, sending a confirmation email instead of resubscribing outright.
email.send.started) that fires when, well, your email starts sending rather than when it finishesX-Buttondown-Collision-Behavior: overwrite no longer returns a 201 while quietly leaving an unsubscribed subscriber untouched — it returns a 400 with subscriber_suppressed.
You can now save an audience as a segment — build a set of tag and metadata filters once, name it, and reuse it with a click on every future email
Read moreMonthly RSS-to-email sends can now land on any day of the month — pick the 29th, and short months fall back to their last day.
Read moreYou can now make a section of your email visible to just one type of audience with filtered blocks
Read moresms:, tel:, and template-tag anchor links[object Object]Buttondown archive links posted to Bluesky can now render as enhanced link cards — with your publication's name, avatar, and a themed cover — powered by standard.site.
Read moreButtondown now renders Mermaid diagrams — write a flowchart in Markdown-shaped syntax and it shows up in your archives and emails
Read moreCreating tags implicitly through the subscriber endpoints now requires a plan that includes tags, and a newsletter's sending and hosting domain verification is readable over the API.
Read more/v1/subscribersmedia:content/media:thumbnail) instead of an enclosureremove_metadata automation action that clears out a subscriber's metadata fields as part of an automationDrilling into an email's opens and clicks now happens right in the page — the slow modals are gone
Read moreYou can now reply to comments via email — answer a comment notification from your inbox and it threads right back into the discussion
Read more/ sending you straight to your email list — you'll now hit the home page insteadRedesigned archive visibility settings with a clearer hierarchy — defaults, per-email overrides, and content-level walls
Read more.org.uk and other multi-part .uk domainsPOST /v1/emails/{id}/publish sends an email right away, or schedules it if you pass a publish_date, instead of making you patch the email yourselflang/dir, <title>, and presentational table roles) , thanks to the 2026 Email Accessibility Reportsend_post_request Automation to fire on email, Stripe, Shopify, Patreon, and date triggers (aka, basically everything)type: "gifted" would silently strip their gift access${{ ... }} template syntaxYou can now attach files to the replies you send subscribers from your Inbox — PDFs, images, whatever the conversation calls for
Read moremeta description of premium emails was being rendered as HTML (thanks, various Bluesky folks!)subscriber.source in emailsFormalized three sending-domain paths with consistent reply behavior
Read moreThe events API now reads from the same event store that powers webhooks: IDs change prefix, the event_type filter narrows, and metadata is normalized.
publish_date validation in /v1/emails{% include %} tags into an email could cause a rendering errorThe Modern theme's subscribe page now links straight to your latest issue, so visitors can preview what they're signing up for in one click
Read moreThe Modern theme can now lay its archive index out as a two-column grid on wide screens, instead of one tall single column
Read more/render endpoint) so previews feel snappiernewsletter ID to webhook payloads for accounts with more than one newsletter, so multi-tenant integrations can route each event to the right newsletterguids as a source of identity../ segments ahead of the real URLMany 4xx responses now name the remedy and link to the docs, write validation is stricter on automations, survey responses and notes, and a 401 distinguishes missing from invalid credentials.
#fragment422 error on some valid requests422 when you listed completed delivery attempts500 when an API request asked for page 0 or a negative pageYou can now leave private notes on your team members — what they handle, why you brought them on, anything worth remembering
Read moreids list would wipe the entire newsletter — empty or missing ids are now rejected with a clear 400400hey.comThe subscriber portal now shows gifted subscribers their gift end date, who gifted them, and the gift message
Read more/ were being rejectedAdded a portal link to the archive nav so subscribers can reach their account from any page
Read morevt.tiktok.com short share links in embedsundeliverable subscriberssubscriber.paid automation triggerssubscriber.source in automations and sendingyoutu.be URLs to youtube.com since some clients consider youtu.be URLs to be invalid/spammy (thanks, Rumicat!)The filters on GET /v1/survey_responses are now symmetric: all three accept multiple IDs, and survey is renamed to survey_id.
Added bounce date and bounce reason filters and columns to the subscribers page
Read moreAPI request records now retain response_data only for requests that sent an X-Idempotency-Key; without one, the field is null.
/settings/files (nee /settings/data)send_reminders bulk action to send the actual first opt-in email if the subscriber never received itAdded subscription walls to gate archive content behind a subscription
Read more/analyticscommenting_mode of emailssocials in /v1/newsletters./v1/emailsLink headers to paginated API responses/settings/design foldershould_track_replies option — reply tracking is now always-on[email protected] gets routed to the account ownerbuttondown-editor-modecreate_gift_subscriber automation actionannouncement_bar_visibility schema typesharing_networks and started deriving it from an author's social linksRefreshed and clarified all legal docs — DPA, privacy policy, sub-processor list, and cookie policy
Read morecreate_export action/keys alongside the new adhoc keyssecondary_idAdded passkey support for two-factor authentication
Read moreNewsletter.social that had “handle” instead of “url” somehowChanged email API defaults so POST to /v1/emails creates drafts instead of sending immediately
Read moreundeliverability_dateAdded recovery codes as a backup for two-factor authentication
Read moreNewsletter.socialsattempted events when we send emails ad-hoc (such as bulk actions)email.url template variable
Made newsletter metadata available in email templates via {{ newsletter.metadata }}
Each action inside an automation now carries its own timing, paving the way for multi-step sequences in a single automation.
Read more-statusAdded custom click tracking domains so links route through your own sending domain
Read more
Added a big batch of new newsletter settings fields to the API
Read moreRevamped reply tracking to be automatic and always-on
Read more
Made the full HTML email template editor self-serve for Professional plan users
Read more400 with the code body_contains_frontmatter, which X-Buttondown-Live-Dangerously overridesSimplified cancellation by merging pause and cancel into one action
Read moreX-Buttondown-Live-Dangerously to bypass CORS in /v1/images
Added Swedish localization for subscriber-facing pages
Read moreX-Buttondown-Live-Dangerously to bypass SVG prohibitions in /v1/imagesX-Buttondown-Bypass-Firewall headerPOST /v1/comments now takes an optional subscriber_id, so a comment can be attributed to one of your subscribers rather than to youPOST /v1/images now rejects SVG uploads with a 400, since most email clients don't render them reliably — pass X-Buttondown-Live-Dangerously if the image is only ever bound for your archivedelivered_count, open_count, clicked_count, open_rate and click_rate, and you can sort or filter by the two rates when listing subscribers — the rates are null for anyone with no deliveries yetAdded public descriptions for tags, shown in the subscriber portal
Read moreMade surveys work on web archive pages, not just in email
Read moreAdded subscriber-editable tags so subscribers can manage their own tag preferences in the portal
Read more
Added granular API keys with per-key labels and permissions
Read moreAdded a re-evaluate filters after delay option for automations
Read moreReorganized design settings into separate archive and email design pages
Read moreAdded starred views for pinning pages to the sidebar
Read moreAdded no-code archive customization — fonts, accent colors, link styling, and spacing
Read moreAdded filtering to the notification inbox — All, Unread, and Needs Response views
Read moreAdded Mastodon follower analytics to the dashboard
Read morePOST /v1/subscribers/{id_or_email}/send-magic-link, which emails a subscriber a login link to their subscription management portalAdded two new archive themes: Arbus and Lovelace, a grid layout and a brutalist monospace option
Read moreMade custom buttons work in Markdown mode
Read moreAdded Seline and Tinylytics as privacy-friendly analytics integrations for archives
Read moreAdded the ability to unban subscribers directly from the UI
Read moreAdded announcement bars for archive pages with markdown support and audience targeting
Read moreStarting with API version 2026-01-01, responses return TypeIDs — UUIDs with a readable type prefix like sub_ or em_ — instead of bare UUIDs.
X-Buttondown-Test-Mode header to send-draft: the draft renders as if it were going to the subscribers you name, then gets redirected to you with a [TEST MODE] subject, which is a nice way to see what a gifted or tagged subscriber will actually receivesubject from 1000 to 2000 characters (and matched some related lengths, like RSS feeds and custom transactional emails)churn_date field to subscribers, recording when a paid subscriber churned, plus churn_date__start and churn_date__end filters when listing themThe SubscriberType enum drops spammy, malformed and disabled; use undeliverable plus undeliverability_reason instead.
product field to the StripeSubscription schema: the name of the product a subscriber is subscribed to, which you can override by setting buttondown_template_facing_id metadata on the product in StripeGET /v1/emails now returns emails of every status instead of quietly defaulting to sent and in-flight ones.
The new /v1/attachments endpoint brings attachments — previously web-only — to the API.
The date, last_open_date and last_click_date filters on subscribers become explicit __start/__end pairs, like the rest of the API.
format field when creating one, and CSV keeps working exactly as beforecss, web_css, icon, description and image to the Newsletter API, so you can restyle and rebrand a newsletter programmatically rather than only in the web appEmailStatus enum with throttled, resending and transactional: the first two just surface sending behavior that already existed, and the third covers emails sent by a core workflow or an automationip_address when creating a subscriber, which we use to work out their location and vouch for their legitimacy — handy for forms without CAPTCHA protectionundeliverability_date field to the Subscriber schema — think churn_date, but for permanent delivery failures — which you can filter and order by when listing subscriberssubject query parameter when listing emails; it's substring-based and case-insensitive, so Hello matches Hello worldIn what may be the most niche breaking change ever, the tag key in a bulk action's metadata is now tag_id.
upgrade_date field to subscribers recording when someone upgraded to a paid subscription, and you can filter or sort by it when listing themWe've unshipped is_comments_disabled from emails in favor of a more flexible commenting_mode field.
GET /v1/images, rather than only creating and deleting them by idX-Buttondown-Collision-Behavior: overwrite or add when you want something more like an upsertparameters and columns, so you can pull just the email addresses and statuses of the subscribers who joined last week instead of every data point about every subscriber, everreferrer_url when listing them, which a lot of you asked for after we added the same thing for IP addressesDELETE /v1/subscribers/{id_or_email} now deletes subscribers outright instead of unsubscribing them; PATCH with type: unsubscribed is the old behavior.
On subscribers, subscriber_type is now type and email is now email_address.
Sending a draft through /v1/subscribers/{id}/emails now errors; use /v1/emails/{id}/send-draft instead.
/v1/survey_responses and /v1/events to top-level routes; they used to be sequestered under /surveys and /emails, so batching data across sources meant filtering on one survey or email at a timesubscriber_import filter to GET /v1/subscribers so you can pull just the subscribers from one import; import IDs come from the imports endpoints/v1/comments, which lets you create, list and delete comments on emailscreation_date and publish_date when listing emailsutm_campaign, utm_medium and utm_source to subscribers; leave them out and we'll infer them from a provided referer_url/v1/emails/{id}/analytics, which returns aggregated opens, clicks and other events for an email you've sent/v1/drafts, /v1/scheduled-emails and /v1/unsubscribers are gone; /v1/emails and /v1/subscribers cover all three.
included_tags and excluded_tags when listing emails/v1/subscribers/{id}/send-reminder for nudging subscribers to confirm their email address/v1/exports endpointmetadata on emails