Product release notes

Every Sendry ship, in one place

Follow new features, UX polish, and fixes as they land. The latest release is highlighted first, with the full timeline below.

Releases tracked

24

Newest first from the public changelog

Updates shipped

132

Features, polish, and fixes across versions

Latest version

v2.9.0

May 11, 2026

Added

92

Net-new capabilities shipped

Improved

7

UX, workflows, and platform polish

Fixed

33

Bugs and reliability fixes

Latest releasev2.9.0May 11, 2026

Freshly shipped updates

2 updates in this release, covering 1 addition, 1 improvement.

Added1
Improved1
Fixed0
  • Improved

    **SDKs and agent skills extracted to public repos** — the packages/sdk (TypeScript), packages/sdk-python, packages/sdk-go, and packages/skills directories have moved out of this private monorepo into separate public repos: sendry-js, sendry-python, sendry-go, sendry-skills.

    Each gets its own CI + tag-driven publish workflow (npm with provenance, PyPI via OIDC trusted publisher, Go via tag push). Renamed leftover sendr Python package and Go package to sendry and updated stale sndr_live_ example keys to sn_live_. The OpenAPI drift snapshot moved from packages/sdk/openapi.{json,hash} to openapi/openapi.{json,hash} — sdk:snapshot / sdk:check now write/read there and the SDK Validation CI job is removed.

  • Added

    **Campaign recipients preview before send** — GET /v1/campaigns/:id/recipients now falls back to a preview drawn from the campaign's audience or segment when no campaign_recipients rows exist yet, so draft / scheduled campaigns show who the campaign will be sent to instead of an empty table.

    Preview rows carry preview: true and a pending status; the dashboard recipients tab surfaces them with a "Pending send" badge and an info banner.

v2.8.0May 10, 2026

Release highlights

1 update in this release, covering 1 improvement.

Added0
Improved1
Fixed0
  • Improved

    **API key prefix rebranded re_ → sn_live_ / sn_test_** — newly generated API keys now use a Sendry-branded prefix and embed the key mode (live or test) directly in the key string, matching the Stripe-style convention.

    Existing re_* keys continue to work — authentication uses a SHA-256 hash lookup, not the prefix. The displayed key_prefix in the dashboard now shows sn_live_AbCd / sn_test_AbCd (12 chars) instead of re_AbCde (8 chars).

v2.7.2May 10, 2026

Release highlights

1 update in this release, covering 1 fix.

Added0
Improved0
Fixed1
  • Fixed

    **Domain create error message** — when the production server is missing DKIM_KEK_ARN (the AWS KMS key used to wrap each domain's DKIM private key), POST /v1/domains now returns 503 dkim_kek_not_configured with a clear "DKIM key encryption is not configured" message instead of bubbling up a raw 500 that the dashboard rendered as the generic "An unexpected error occurred."

v2.7.1May 10, 2026

Release highlights

2 updates in this release, covering 1 improvement, 1 fix.

Added0
Improved1
Fixed1
  • Improved

    **Recipients table on email detail** — replaced the per-recipient Tabs/Select selector with a recipients table showing every recipient with their per-recipient status, delivered/opened/clicked/bounced/complained counts, and last activity.

    Click any row to expand the timeline for that recipient inline. The combined "All events" timeline still renders below the table. Tabs did not scale beyond a handful of recipients.

  • Fixed

    **SES delivery webhook only recorded the first recipient** — handleDelivery previously took delivery.recipients[0], dropping every recipient after the first.

    Multi-recipient emails (To/Cc/Bcc) now record a delivered event for each recipient, matching the existing per-recipient behavior of bounce and complaint handlers.

v2.7.0May 10, 2026

Release highlights

5 updates in this release, covering 4 additions, 1 fix.

Added4
Improved0
Fixed1
  • Added

    **Per-recipient events on email detail** — emails sent to multiple recipients now show a recipient selector above the Events timeline (Tabs for ≤4 recipients, Select dropdown for more).

    Filter the timeline by recipient and see per-recipient delivered/opened/clicked/bounced/complained counts. Recipients with zero events still appear so you can see who is yet to act.

  • Added

    **Template picker on Compose** — the single-send Compose page now has a "Template (optional)" selector that lists saved templates with their engine (html / react / visual).

    Selecting a template loads the subject and HTML, exposes inputs for any declared variables, and sends with template_id + variables so the server does the canonical render.

  • Added

    **Template field on Broadcast Campaign edit** — the Edit Draft form now has a "Template (optional)" selector; selected templates are persisted via template_id and rendered by the campaign-sender worker at send time.

    Inline HTML/text fields are dimmed when a template is selected. The overview tab now resolves and shows the template's name instead of just the raw ID.

  • Added

    **Template picker in Automation builder** — the send_email step config in the automation builder replaced the raw "Template ID" text input with a real Template selector showing template name + engine badge.

    Falls back to the text input if templates fail to load so adding a step is never blocked.

  • Fixed

    **Side drawer padding** — SheetContent (used by the automation step drawer, superadmin user drawer, and others) now has sane internal padding by default.

    Form fields no longer sit flush against the drawer edges. Drawers that need full-bleed layout (mobile sidebar nav, inbound email drawer, test-inbox drawer) are unaffected — they explicitly opt out with p-0.

v2.6.0May 10, 2026

Release highlights

8 updates in this release, covering 6 additions, 2 fixes.

Added6
Improved0
Fixed2
  • Added

    **Automations** — event-triggered multi-step email workflows.

    Build flows from send_email, wait, branch (on contact property), and ab_split steps; trigger them from custom events or when a contact is added to a segment. Re-entry policies (once_per_contact, cooldown, always) control how repeat triggers are handled. Build and manage flows visually from the dashboard at /automations, with per-automation stats covering total, active, completed, and failed runs. Available on Pro and above.

  • Added

    **POST /v1/events** — fire arbitrary events from your app to trigger automations; events are matched against active automation triggers and enrolled contacts begin their flow.

  • Added

    **GET /v1/automations/:id/runs** — per-contact execution history with status, current step, and completed-at timestamps; supports cursor-based pagination.

  • Added

    **Automations marketing page** — dedicated /features/automations deep-dive plus entries in the features grid, pricing comparison, and Product nav dropdown.

  • Added

    **Visual Editor and Broadcast Campaigns** added to the Product nav dropdown so all dedicated feature pages are reachable from the top-level navigation.

  • Added

    **Docs site** — new /automations and /visual-editor guides covering concepts, step types, and API references.

  • Fixed

    **Automation stats counters stuck at 0** — total_runs, active_runs, completed_runs, and failed_runs on the automations table now increment correctly on run create and finish; previously they stayed at zero even after successful runs.

  • Fixed

    **"View Runs" button missing on archived/draft automations** — the View Runs link is now visible on every automation regardless of status.

v2.5.0May 7, 2026

Release highlights

18 updates in this release, covering 7 additions, 11 fixes.

Added7
Improved0
Fixed11
  • Added

    **Inbound email address per org** — every account now has a dedicated {slug}@recv.sendry.online routing address.

    Custom domains continue to work as before. Inbound email receiving requires a Pro plan or higher.

  • Added

    **Inbound dashboard redesign** — replaced the tab-based layout with a streamlined list view.

    Click any row to open a side drawer showing full email details: HTML preview (sandboxed), plain text, email headers, and attachment metadata. Webhook configuration is now in a dedicated "Configure" dialog.

  • Added

    **Status filter on emails list** — filter sent emails by delivery status (delivered, bounced, complaint, failed, pending) directly in the dashboard.

  • Added

    **Email search on unsubscribes** — filter the unsubscribes list by email address with debounced live search.

  • Added

    **Template name search** — filter the templates list by name in the dashboard.

  • Added

    **GET /v1/campaigns/:id/recipients** — list all recipients for a campaign with their individual delivery status; supports cursor-based pagination and a status filter.

  • Added

    **GET /v1/emails/:id/events** — list delivery events (opens, clicks, bounces, complaints) for any email; supports cursor-based pagination and an optional type filter.

  • Fixed

    **Template variables not applied** — emails sent with template_id now correctly substitute {{variable}} tokens in both HTML and plain-text bodies; previously variables were silently dropped.

  • Fixed

    **subject incorrectly required with a template** — subject is now optional when template_id is provided, since the template already defines its own subject line.

  • Fixed

    **open_rate exceeding 100%** — analytics rates (open_rate, click_rate, bounce_rate, etc.) are now clamped to [0, 1]; previously they could exceed 1.0 when event counts outpaced delivered emails.

  • Fixed

    **scheduled_at lost on draft campaign creation** — the scheduled send time is now stored when creating a campaign with send: false; previously it was silently discarded.

  • Fixed

    **Inbound email headers corrupted** — headers were being serialized as [object Object] due to mailparser returning structured objects instead of raw strings.

    Fixed at both the storage layer (using headerLines) and the display layer (legacy records filtered in the UI).

  • Fixed

    **Inbound SNS integration** — resolved multiple issues: subscription confirmation now works regardless of Content-Type, webhook registration no longer conflicts with the global auth middleware, and SNS notification bodies are correctly parsed as JSON.

  • Fixed

    **Email list ordering** — emails now sort strictly by creation time; previously the nanoid-based ID ordering could produce incorrect sequences.

  • Fixed

    **Bulk contact import** — audience ID is now validated before import begins; validation error messages across the API are cleaner and more actionable.

  • Fixed

    **Campaign plan-limit handling** — plan-blocked campaigns now surface a clear error; SES tag limits are correctly enforced when sending campaign emails.

  • Fixed

    **Billing upgrade prompt** — the "Upgrade to Pro" button is now hidden for Business and Enterprise plan users; the Pro plan label is displayed correctly in the nav.

  • Fixed

    **SMTP relay display** — the relay dashboard now shows the correct server hostname and confirms port 2525 for authenticated SMTP connections.

v2.4.0May 7, 2026

Release highlights

13 updates in this release, covering 3 additions, 2 improvements, 8 fixes.

Added3
Improved2
Fixed8
  • Added

    **Compose email from dashboard** — write and send emails directly from the Sendry dashboard with an HTML editor, plain-text fallback, live preview pane, and full To / CC / BCC / Reply-To support

  • Added

    **Password reset** — users can request a reset link by email and set a new password from a secure token-gated page

  • Added

    **Social login** — sign in with Google or GitHub in addition to email and password

  • Fixed

    **Open tracking blocked** — the tracking pixel endpoint was incorrectly caught by the API authentication middleware; opens and clicks now record correctly for all emails

  • Fixed

    **Analytics showing zero opens** — direct consequence of the tracking fix; the analytics overview now reflects real open events

  • Fixed

    **DKIM verification failing** — corrected DNS lookup logic that failed when registrars (e.g.

    Namecheap) split DKIM public keys across multiple TXT records

  • Fixed

    **Delivery events not recording** — the SES webhook handler now supports both SES v1 (notificationType) and SES v2 (eventType) formats, and strips the @region.amazonses.com suffix from message IDs so delivery, bounce, and complaint events match correctly

  • Fixed

    **Notification links pointing to API** — welcome emails, domain-verified alerts, and billing emails now link to the dashboard instead of the raw API server

  • Fixed

    **Breadcrumbs showing "Dashboard" everywhere** — all sidebar pages now display their correct title in the breadcrumb navigation

  • Fixed

    **Unknown URLs showing a bare 404** — navigating to an invalid path now renders a friendly "Page not found" screen inside the dashboard layout

  • Fixed

    **SMTP relay hostname blank** — the SMTP configuration panel now shows the correct server hostname

  • Improved

    **Smarter open tracking** — known email prefetch agents (Gmail Image Proxy, Apple Privacy Proxy, Outlook, Microsoft 365, Barracuda, Proofpoint, Mimecast, and generic crawlers) are filtered out so only genuine user opens are counted

  • Improved

    **Open event deduplication** — each email records at most one open event regardless of how many times the pixel is fetched

v1.6.1May 6, 2026

Release highlights

1 update in this release, covering 1 fix.

Added0
Improved0
Fixed1
  • Fixed

    **Analytics date range** — same-day events were silently excluded from all analytics queries because date-only strings were parsed as midnight UTC; queries now use full ISO timestamps

v2.3.0April 5, 2026

Release highlights

10 updates in this release, covering 10 additions.

Added10
Improved0
Fixed0
  • Added

    **Natural-language scheduling** — scheduled_at now accepts plain English like "in 2 hours", "Friday at 3pm ET", or "tomorrow morning" in addition to ISO 8601 across all send paths (single, batch, patch, and campaigns)

  • Added

    **30-day scheduling cap** — maximum advance scheduling is capped at 30 days consistently across all send endpoints

  • Added

    **Multiple workspaces** — create additional organizations from the org switcher; manage all workspaces from Settings → Workspaces

  • Added

    **Deliverability insights** — GET /v1/emails/:id/insights returns a quality score (0–100) across 7 checks; the email detail page now has an Insights tab with a score ring and actionable per-check results

  • Added

    **Per-recipient webhook fan-out** — email.sent webhooks now fire once per recipient with a single-address to field for accurate attribution on multi-recipient sends

  • Added

    **Plain-language bounce reasons** — bounces include a human-readable reason, description, action, and retryable flag instead of raw DSN codes

  • Added

    **TLS policy per domain** — set tls_policy to "opportunistic" or "enforced" per domain via PATCH /v1/domains/:id or the domain settings panel

  • Added

    **Email sharing** — generate a 48-hour shareable preview link for any email from the list or detail page

  • Added

    **Bulk actions** — select multiple contacts or API keys for bulk delete via a floating action bar

  • Added

    **Contact activity timeline** — the contact detail page shows a paginated history of all email events for that contact

v2.2.0April 5, 2026

Release highlights

6 updates in this release, covering 6 additions.

Added6
Improved0
Fixed0
  • Added

    **Custom contact properties** — define typed fields (string, number, boolean, date) per organization and set values per contact; manage definitions from Settings → Contact Properties

  • Added

    **Property variables in campaigns** — use {{property_name}} tokens in campaign HTML or text; values are substituted per recipient at send time

  • Added

    **Segments** — create contact segments, manage membership, and target campaigns at a segment instead of an audience

  • Added

    **Topics & unsubscribes** — create email topics in opt-in or opt-out mode; filter sends to recipients subscribed to a topic; manage topics from the dashboard

  • Added

    **Template versioning** — every template save creates a version record; restore any previous version from the version history panel in the template editor

  • Added

    **Template duplication** — clone any template with one click from the templates list

v2.1.0April 5, 2026

Release highlights

9 updates in this release, covering 9 additions.

Added9
Improved0
Fixed0
  • Added

    **Idempotency keys** — send an Idempotency-Key header on POST /v1/emails or batch sends; duplicate requests within 24 hours return the cached response without re-sending

  • Added

    **Inline image attachments** — attachments support a content_id field for CID-based inline embedding; reference in HTML as <img src="cid:YOUR_ID">

  • Added

    **Auto plain-text generation** — when html is provided without text, a plain-text version is generated automatically

  • Added

    **Batch permissive mode** — POST /v1/emails/batch accepts batch_validation: "permissive" to process valid emails and return per-item errors instead of failing the entire batch

  • Added

    **Schedule updates** — PATCH /v1/emails/:id lets you update the subject, body, or scheduled time of a pending email before it sends

  • Added

    **Webhook delivery log** — GET /v1/webhooks/deliveries lists all delivery attempts; replay any failed delivery with POST /v1/webhooks/deliveries/:id/replay

  • Added

    **Contact & domain webhook events** — webhooks now fire contact.created, contact.updated, contact.deleted, domain.created, domain.updated, and domain.deleted

  • Added

    **Campaign create-and-send shortcut** — POST /v1/campaigns accepts send: true to create and dispatch or schedule a campaign in one request

  • Added

    **API request logs** — every authenticated API call is logged; browse from the dashboard at /api-logs with method, path, status, and duration

v2.0.0April 4, 2026

Release highlights

3 updates in this release, covering 3 additions.

Added3
Improved0
Fixed0
  • Added

    **SMTP relay dashboard** — view connection details and credentials for drop-in SMTP integration at /smtp

  • Added

    **Inbound email dashboard** — configure inbound routing and browse received emails at /inbound

  • Added

    **Scheduled analytics reports** — Business and Enterprise plans can schedule email digest reports of analytics data on daily, weekly, or monthly cadences

v1.9.0April 4, 2026

Release highlights

1 update in this release, covering 1 addition.

Added1
Improved0
Fixed0
  • Added

    Internal deployment and infrastructure improvements (no user-facing changes)

v1.8.0March 12, 2026

Release highlights

9 updates in this release, covering 5 additions, 4 fixes.

Added5
Improved0
Fixed4
  • Added

    **TypeScript SDK** — 27 fully typed resource classes with JSDoc examples covering all API surfaces

  • Added

    **Python SDK** — synchronous and async clients with full type hints and webhook signature verification

  • Added

    **Go SDK** — idiomatic Go client with struct options, automatic retry (3×), and webhook verification

  • Added

    **Documentation site** — comprehensive docs at [docs.sendry.online](https://docs.sendry.online) covering quickstart, API reference, SDK guides, and how-tos

  • Added

    **Dead-letter queue** — permanently failed email and webhook jobs are preserved for inspection rather than silently dropped

  • Fixed

    API key scope hierarchy was inverted; full_access now correctly supersedes sending_access which supersedes read_only

  • Fixed

    Free-plan orgs could bypass the email limit by sending overages without a payment method on file

  • Fixed

    Unauthenticated endpoints had no rate limiting; a per-IP limit now applies to all public routes

  • Fixed

    Payment failures now suspend billing correctly; sending is restored automatically when payment succeeds

v1.7.0March 5, 2026

Release highlights

4 updates in this release, covering 2 additions, 2 fixes.

Added2
Improved0
Fixed2
  • Added

    **Log retention** — email logs and analytics rollups are automatically pruned based on your plan's retention window

  • Added

    **Campaign plan limits** — Free plans are capped at 3 campaigns and 3 audiences; Pro at 25 each; Business and Enterprise are unlimited

  • Fixed

    Dashboard billing, account, and notifications pages failed when running in production Docker because they used a hardcoded localhost API URL

  • Fixed

    Webhook delivery had 0 retries by default, meaning a single network error permanently lost an event; now retries 3× with exponential backoff

v1.6.0March 1, 2026

Release highlights

4 updates in this release, covering 4 additions.

Added4
Improved0
Fixed0
  • Added

    **Test-mode API keys** — create keys with mode: "test" to send emails without domain verification; captured emails appear in the Test Inbox at /test-inbox

  • Added

    **Test Inbox** — browse and preview all test-mode emails from the dashboard

  • Added

    **Multi-organization switching** — switch between organizations from the sidebar without logging out

  • Added

    **Email verification** — new accounts receive a verification email on sign-up; an in-dashboard banner reminds unverified users

v1.5.0February 27, 2026

Release highlights

6 updates in this release, covering 6 additions.

Added6
Improved0
Fixed0
  • Added

    **Overage billing** — Pro and Business plans auto-bill usage above the monthly limit in 1,000-email blocks instead of hard-stopping

  • Added

    **Annual billing** — switch to annual on the pricing or billing page and save roughly two months per year

  • Added

    **Usage endpoint** — GET /v1/billing/usage returns sent volume, limits, overages, and current billing period details

  • Added

    **Approaching-limit alerts** — receive an email notification when usage crosses 80% of the monthly quota

  • Added

    **SLA monitoring** — the status page now shows per-component SLA targets, current SLA compliance, and hourly latency history

  • Added

    **Status alerts** — email notifications fire when a component goes down, recovers, breaches its SLA, or degrades in latency

v1.4.0February 25, 2026

Release highlights

7 updates in this release, covering 7 additions.

Added7
Improved0
Fixed0
  • Added

    **Broadcast campaigns** — create, schedule, and send email campaigns to contact audiences with per-campaign analytics

  • Added

    **Visual email editor** — drag-and-drop block-based template builder with live preview and HTML export

  • Added

    **Dedicated IPs** — provision and manage dedicated IP addresses with SES pool management and warm-up tracking (Business+)

  • Added

    **Deliverability suite** — blocklist monitoring across 50+ DNSBLs, IP reputation snapshots, and BIMI record management (Pro+)

  • Added

    **Multi-region sending** — configure sending across multiple AWS SES regions with per-domain region assignment (Business: 3 regions, Enterprise: unlimited)

  • Added

    **Public status page** — real-time component health, uptime history, and incident management at /status

  • Added

    **Advanced analytics** — cohort analysis, peer benchmarks, analytics export (CSV/JSON), and scheduled reports (Business+)

v1.3.0February 25, 2026

Release highlights

5 updates in this release, covering 5 additions.

Added5
Improved0
Fixed0
  • Added

    **Contacts management** — create, update, delete, and bulk import contacts with custom metadata; plan-based limits apply

  • Added

    **Audiences** — organize contacts into lists for targeted sending

  • Added

    **TypeScript SDK** — @sendry/sdk with full API coverage, retry logic, and typed responses

  • Added

    **Notification emails** — welcome, domain verified, bounce/complaint alerts, and payment receipt emails

  • Added

    **Dark mode** — toggle between light and dark themes on all pages

v1.2.1February 25, 2026

Release highlights

4 updates in this release, covering 2 additions, 2 fixes.

Added2
Improved0
Fixed2
  • Added

    **Role-based team management** — only owners and admins can invite members, remove teammates, or change roles

  • Added

    **Invite confirmation** — pending invites auto-activate when an invited user signs up

  • Fixed

    Organization owner now appears in the team members list

  • Fixed

    Branding settings no longer fail when optional fields are left blank

v1.2.0February 25, 2026

Release highlights

3 updates in this release, covering 3 additions.

Added3
Improved0
Fixed0
  • Added

    **Team collaboration** — invite teammates, manage roles (owner, admin, member), and track seat usage (Pro: 5 seats, Business: 20, Enterprise: unlimited)

  • Added

    **Custom unsubscribe pages** — personalize the unsubscribe experience with your brand logo, colors, message, and redirect URL from the Branding settings page

  • Added

    **Unsubscribes dashboard** — browse and manage all marketing opt-outs from /unsubscribes

v1.1.0February 25, 2026

Release highlights

5 updates in this release, covering 3 additions, 2 improvements.

Added3
Improved2
Fixed0
  • Added

    **Multi-provider routing** — automatic failover between email providers; transactional email routes through SES, marketing through Mailgun

  • Added

    **Marketing email endpoint** — POST /v1/emails/marketing with required unsubscribe URL for CAN-SPAM and GDPR compliance

  • Added

    **One-click unsubscribe** — RFC 8058 compliant unsubscribe pages

  • Improved

    Updated pricing: Pro $18/month, Business $79/month

  • Improved

    Overage rates: Pro $0.50/1K, Business $0.35/1K

v1.0.50February 24, 2026

Release highlights

5 updates in this release, covering 5 additions.

Added5
Improved0
Fixed0
  • Added

    **Stripe payments** — upgrade, downgrade, and manage billing from the dashboard with Stripe checkout and a billing portal

  • Added

    **File attachments** — attach files to any email send

  • Added

    **SMTP relay** — send through Sendry using any SMTP-compatible client or library

  • Added

    **Inbound email** — receive and parse inbound emails with configurable routing

  • Added

    **Email templates** — create reusable HTML templates from the dashboard

At a glance

Version 2.9.0 shipped with a strong focus on product momentum

The newest release includes 1 additions, 1 improvements, and 0 fixes. That makes it a good snapshot of where the platform is heading right now.