Groundmail

Changelog

What's new in Groundmail

New features, API, SDK, CLI and MCP changes, dashboard improvements and fixes, newest first. Each entry links to where you can read more.

October 2026

  1. Slack alerts

    Get deliverability alerts in a Slack channel you choose: when a sending domain fails DNS verification, when your account's sending is paused or suspended, and when an automation run fails. Each message links to the page that needs a look. Connect it under Settings → Integrations → Slack, then pick the channel and choose which alerts to get.

    IntegrationsSlack alerts docs

    • Dashboard
  2. Domain page redesign: overview, DNS records, DMARC and settings

    Each domain's page now has four tabs you can link to. Overview shows the last 7 days of sent, delivered, bounced and complaints for that domain and a health checklist (sending authentication, DMARC monitoring and policy, inbound, tracking, BIMI); an unverified domain leads with the DNS steps and a Verify DNS button. DNS records puts every record in one table, grouped into sending, receiving, DMARC and tracking, with copy buttons and one place to add them for you through Cloudflare, Vercel or GoDaddy. DMARC holds the report summary and the digest switch. Settings has open and click tracking, TLS and inbound, saved as soon as you change them.

    DeliverabilityDomains docs

    • Dashboard
  3. Filter the Emails page by domain

    Pick a sending domain on the Emails page and the stats, the list and the CSV export all follow it. The stats now follow the list's date range too. This replaces the By sending domain table.

    Emails docs

    • Dashboard
  4. Folders for automations and templates

    Group automations and templates into folders on their dashboard pages: create, rename and delete folders, and move items from the row menu or by dragging them onto a folder. The automations list also shows emails sent in the last 7 days for each automation and folder. In the API, automations and templates take a folder by name (created if it doesn't exist; null takes an item out), and the SDK, groundmail automations / templates --folder in the CLI and the MCP tools do the same.

    AutomationsTemplatesAutomations docs

    • Dashboard
    • API
    • SDK
    • MCP
  5. Help menu in the dashboard

    Help in the sidebar, under API docs, opens an email to support with the page you're on, your account and plan already filled in, so we can answer without a back-and-forth. It also has the support address with a copy button and a link to the docs.

    Support

    • Dashboard
  6. Tenants on every plan

    The Tenants page now shows on every plan. If your plan doesn't include tenants, it explains what they do and what's included, and owners can upgrade to Scale from there.

    Tenants

    • Dashboard
  7. Fixed: authentication refusals no longer suppress good addresses

    When a receiving server refused a message because of a check on the sending side (such as SPF, DMARC or reverse DNS) rather than the address, we counted it as a hard bounce and suppressed the recipient. These refusals are now block bounces: the address is not suppressed and the refusal doesn't count toward your bounce rate. If an address was suppressed this way, remove it on the Suppressions page.

    Suppressions docs

    • Infra
    • API
  8. Fixed: open tabs recover after we ship an update

    A dashboard tab left open while we shipped an update could show "This page couldn't load". Tabs now reload themselves onto the new version instead.

    • Dashboard
  9. Fixed: attachments on text-only and HTML-only emails

    Attachments on an email with only a text body or only an HTML body could arrive as text in the message instead of as files. Every message is now built so that attachments arrive as real files (non-English filenames included), text and HTML are sent as alternatives, and inline images with content_id show in the HTML. The SMTP relay keeps cid: images as well.

    For developersEmails docs

    • API
    • Infra
  10. Spam scanning on outgoing and incoming email

    Outgoing email is scored for spam content before it leaves. Mail from accounts new to sending that scores too high is held for a quick review: it has status held on the Emails page, POST /emails returns status held, and a new email.held webhook carries the reason and score. Clear spam is rejected for every account, without suppressing the recipient. Received email now has spam_score and spam_status (clean, suspicious or spam) on the email and the email.received webhook, and each inbound domain can flag or drop spam over a threshold you set (inbound_spam_threshold and inbound_spam_action, also in the SDK and CLI).

    DeliverabilityContent scanning docs

    • API
    • SDK
    • Dashboard
    • Infra
  11. Spam test with a real spam filter score

    The free email spam test now runs your message through a real spam filter and shows its score, the spam and reject thresholds, and every rule that added or removed points, with what it means and how to fix it.

    Email spam test

    • Free tools
  12. Sending limit: retries instead of failures

    At the new-account daily limit, the SMTP relay now answers 451 4.7.1 with the reset time, so your mail server queues the message and retries after the reset. Scheduled emails and automation emails over the limit move to just after the next reset (00:00 UTC) instead of failing.

    Sending limits docs

    • API
    • Infra
  13. Tenants: send email for your own customers

    If your product sends email for your customers, create a tenant for each one (POST /tenants) and send with tenant. Each tenant gets its own domains, suppression list, stats, sending ramp and pause switch, so one customer's bad list never hurts the others, and Groundmail pauses just that tenant instead of your account. API keys can be limited to one tenant, webhook endpoints can receive only some tenants' events, and a tenant can have its own dedicated IP ($50 per IP per month, requested in Settings → Billing). Included on Scale (up to 1,000 tenants) and Dedicated (up to 10,000), with no per-tenant fee. See the Tenants page in the dashboard, client.tenants in the SDK and groundmail tenants in the CLI.

    TenantsTenants docs

    • API
    • SDK
    • Dashboard
    • Docs
  14. Free DMARC monitoring and a weekly digest

    Turn on DMARC monitoring from any domain's page (or POST /domains/{id}/dmarc) and add the report address to your DMARC record, by hand or in one click with a connected DNS provider. Groundmail reads the daily reports from Gmail, Outlook, Yahoo and others and shows who sends as your domain, grouped by provider, with unknown senders flagged as possible spoofing; DMARC, SPF and DKIM pass rates by week; and when it's safe to move from p=none to quarantine. A weekly digest email sums up each domain. Also groundmail.dmarc in the SDK, groundmail dmarc status in the CLI and the get_dmarc_report MCP tool. Free on every plan, and for any domain at groundmail.dev/tools/dmarc-monitoring.

    DMARC monitoringDMARC docs

    • Dashboard
    • API
    • SDK
    • MCP
    • Docs
    • Free tools
  15. Test keys and the mailbox simulator

    Test keys (gm_test_…) work like live keys, with the same checks, templates, idempotency and webhooks, but never deliver and count toward nothing. Simulator addresses at simulator.groundmail.dev (delivered@, bounce@, block@, complaint@, suppressed@, delayed@; bounce+anything@ works) give that outcome and its real webhooks with any key, so you can test bounce and complaint handling safely. Test emails carry test: true and have a Test badge and filter on the Emails page. Create a test key on the API keys page, with groundmail keys create --test, or apiKeys.create({ test: true }).

    For developersTesting docs

    • API
    • SDK
    • MCP
    • Dashboard
    • Docs
  16. Switch from SendGrid, Postmark or Mailgun, step by step

    The Import page now walks the whole switch: import, verify domains, a test send, pointing your app at Groundmail, and a cutover check on the last 24 hours of sending. Each imported domain shows the exact DNS changes against what it publishes today (edit your SPF record, keep your DMARC record, leave the old provider's DKIM in place until the cutover). Bounces that were really blocks on the old provider's servers are no longer imported, partial opt-outs become product email opt-outs, and templates keep their unsubscribe links. Reports are kept and download as CSV or JSON (GET /migrations/{id}/report, groundmail migrate report, the get_import_report MCP tool). Sending a lot? We'll do the switch with you.

    Migration guidesImport docs

    • Dashboard
    • API
    • SDK
    • MCP
  17. New accounts ramp up as they send clean mail

    The new-account daily limit now grows with your sending instead of by calendar days. Paid accounts start at 1,000 product and 3,000 transactional recipients a day, counted separately so a product send never uses up the room your sign-in codes need, and the limit doubles each day after you use at least half of it with bounces under 2% and complaints under 0.1%. Sends over it get a 429 with code daily_ramp_limit and details.resets_at. Your stage and today's usage are in Settings → Billing.

    Sending limits docs

    • API
    • SDK
    • Dashboard
    • Docs
  18. Groundmail validation

    Every send now holds back recipients that cannot receive email before they bounce: addresses that cannot exist, domains with no mail server, and addresses that hard-bounced for a Groundmail sender in the last 90 days. The rest of the email still goes out, and the response, the email object and the Emails page say who was held back and why. New POST /validate checks one address for signup forms: valid, risky or invalid, with reasons, a typo suggestion (gmial.com → gmail.com) and disposable and role flags. Free. Also groundmail.validate() in the SDK, groundmail validate in the CLI and the validate_email MCP tool.

    DeliverabilityValidation docs

    • API
    • SDK
    • MCP
    • Dashboard
  19. Request dedicated IPs on any plan

    Any account owner can now request dedicated IPs in Settings → Billing, not just Scale accounts. Dedicated IPs run on Scale, so below Scale we agree the plan change with you first. They cost $50 per IP per month, Scale 500,000 and above includes one, and nothing is charged until an IP goes live.

    DeliverabilityShared vs dedicated IPs

    • Dashboard
    • Infra
  20. Live dashboard updates, and a faster dashboard

    Home, Emails, Inbound, Domains, Suppressions, automation runs and Exports now update on their own as things happen, so a bounce or a newly verified domain shows up without a reload. Pages also load much faster on accounts with a lot of email.

    • Dashboard
  21. Bounce types: hard vs block

    Bounced emails now say why with bounce_type. hard means the address cannot receive mail, so it is added to your suppression list. block means the receiving server refused the message because of the sending IP's or domain's reputation or policy: the address is fine, it is not suppressed, and it does not count toward your bounce rate. On the email object, email.bounced and email.failed webhooks, CSV exports and the Emails page.

    Webhooks docs

    • API
    • SDK
    • Dashboard
  22. Import from SendGrid, Postmark and Mailgun (Beta)

    Paste an API key from your current provider under Import and Groundmail brings over your suppressions (bounces, complaints, unsubscribes), templates with their variables, sending domains with the DNS records to publish, and webhooks with their events mapped. You get a summary of what needs attention, the send-code change for your stack and a prompt for your coding agent. The key is used once and never stored. Also available as groundmail migrate, the import_from_provider MCP tool and POST /migrations.

    Migration guidesImport docs

    • Dashboard
    • API
    • SDK
    • MCP
  23. Dedicated IPs on Scale

    Scale plans (100,000+ emails a month) can now add dedicated sending IPs for $50 per IP per month, and Scale 500,000 and above includes one. Each IP is warmed with you before traffic moves, can carry reverse DNS on your own domain, and is billed only once it goes live. Request them in Settings → Billing. Update: since October 17, any plan can request them.

    Deliverability

    • Dashboard
    • Infra
  24. Official SDKs for Python, PHP, Ruby, Laravel and Symfony Mailer

    pip install groundmail (with a Django email backend), gem install groundmail (with an ActionMailer delivery method for Rails), composer require groundmail/groundmail for PHP, groundmail/laravel for a Laravel mail transport and facade, and groundmail/symfony-mailer for a Symfony Mailer transport. They join the Node and Go SDKs and wrap the same REST API, so from / to / subject / html work the same in every language. Code snippets in the dashboard now include Python, PHP and Ruby.

    For developersPythonPHPRuby

    • SDK
    • Docs
    • Dashboard
  25. Scoped MCP connections, and OAuth sign-in from Cursor

    When an MCP client connects to the hosted server, choose what it may do: Full, Send only, Read only, or specific scopes. Connections use expiring tokens and appear under Settings → CLIs & agents, where you can revoke them. Cursor now signs in with OAuth too: add the server URL with no API key.

    MCP serverMCP docs

    • MCP
    • Dashboard
  26. Scoped API keys

    Create API keys with only the access they need: Full, Send only, Read only, or pick scopes yourself, and optionally limit a key to sending from specific verified domains. A key without the scope a request needs gets 403 insufficient_scope naming the scope.

    API keys docs

    • API
    • Dashboard
  27. OAuth sign-in for the CLI and agents

    groundmail login now signs in with OAuth (device flow): scoped access tokens that expire after an hour, refresh tokens kept in your OS keychain, and groundmail auth token for scripts. See and revoke every signed-in CLI and agent under Settings → CLIs & agents.

    CLI docs

    • API
    • Dashboard
    • SDK

August 2026

  1. Paste HTML templates in the dashboard

    Create a template as Paste HTML (or keep using the visual builder). Raw-HTML templates now include preheader and Test send, and switching to the visual builder asks for confirmation before deleting your HTML.

    Templates

    • Dashboard
  2. Automation dry-run tests

    Test a draft or paused automation from the canvas without activating it. Dry-run skips delays/waits and stubs email/SMS so you can verify the flow before going live.

    Automations

    • Dashboard
  3. Production sending on Free

    After you verify a domain and add a payment method (no charge until you upgrade), Free includes real sends to any recipient — 3,000/mo · 100/day · 1 domain. Upgrade when you need more volume.

    Pricing

    • Dashboard
    • Infra
  4. Public Nodemailer transport source

    groundmail-nodemailer now ships the full transport implementation in its public GitHub repo (not a re-export stub). Prefer import from groundmail-nodemailer; groundmail/nodemailer still works.

    Node docs

    • SDK
  5. Username login and profile settings

    Sign in with your email or a username on the password form. Settings → Profile lets you set a username, update your name, and set or change your password with an email verification code.

    • Dashboard
  6. Clerk and Payload email adapters

    Deliver Clerk email.created webhooks with groundmail-clerk, and wire Payload 3 email with groundmailAdapter from groundmail-payload. Guides for both are in the docs.

    Clerk guidePayload guide

    • SDK
  7. Auth.js / NextAuth email provider

    Drop-in magic-link provider for Auth.js — npm install groundmail-authjs, add Groundmail({ from }) to providers, set AUTH_GROUNDMAIL_KEY. Same pattern as other Auth.js email providers; requires a database adapter.

    Auth.js guide

    • SDK
  8. Guided setup — test, domain, and code in one place

    New accounts land in a full-screen setup flow: five quick questions, then a hub with the three things that actually matter — send a test email, connect your sending domain, and add Groundmail to your code. Do them in any order. The domain and the code both finish in the background, so you can start them and come back; the hub keeps their status and is always reachable from Guided setup in the sidebar. On the code step, connect the Groundmail GitHub App and an agent installs the SDK, adds the environment variable, wires one real send path, and opens a pull request you review like any other — inference is on us, no API key needed. Prefer to wire it up by hand? That tab is still there.

    Quickstart

    • Dashboard

July 2026

  1. Visual template builder v2

    Block editor with slash menu, drag reorder, versioned publish and restore, starter gallery, global CSS, read-only Code tab, and templates push from git. Sends resolve the published version. Draft edits never break live traffic.

    TemplatesTemplates docs

    • Dashboard
    • Docs
  2. Official Go SDK

    The Node client is no longer the only one: go get github.com/Groundmail/groundmail-sdks/go. It wraps the same REST contract, so from / to / subject / html works the same everywhere. Python, PHP and Ruby clients are coming soon; until then, the REST API and SMTP relay work from any language. Update: the Python, PHP and Ruby SDKs shipped on October 16.

    Go docs

    • SDK
    • Docs
  3. Account-scoped SMTP relay

    Create SMTP credentials in the dashboard and send through smtp.groundmail.dev with the same domain verification and billing rules as POST /emails — for Supabase custom SMTP, Clerk, and legacy apps.

    SMTP relaySMTP docs

    • API
    • Dashboard
  4. Supabase Auth integration guide

    Docs guide for wiring Supabase Send Email hooks to Groundmail via an Edge Function — signup, reset, magic link, and invite mail on your domain.

    Supabase guide

    • Docs
  5. Webhook test events in the dashboard

    Send signed test payloads from /webhooks, see per-endpoint HTTP results, and verify Groundmail-Signature handling without leaving the app.

    Webhooks docs

    • Dashboard
    • API
  6. Inbound MX on DNS apply

    Apply DNS now provisions inbound MX for Cloudflare and GoDaddy when inbound is enabled on a domain. GoDaddy credentials can be stored in Settings → Integrations like Cloudflare.

    Inbound emailIntegrations

    • Dashboard
    • API
  7. Smithery listing

    Groundmail MCP is published on Smithery with OAuth connect for agent toolchains.

    MCP server

    • MCP
    • Docs
  8. Hosted MCP OAuth

    Remote MCP clients can authorize via OAuth at app.groundmail.dev and connect to mcp.groundmail.dev without pasting API keys.

    MCP serverMCP docs

    • MCP
    • API
  9. React Email guide

    Docs guide for sending with the react field, peer dependencies, and preview workflow using create-email.

    React Email guide

    • Docs
  10. Hosted MCP + expanded tools

    mcp.groundmail.dev serves streamable HTTP MCP with Bearer gm_ auth. MCP tool surface expanded across domains, webhooks, templates, and deliverability.

    MCP server

    • MCP
    • API
  11. Agent Skills

    Official Agent Skills for Cursor and compatible agents, plus /ai/agent-skills docs and .well-known discovery.

    Agent Skills docs

    • Docs
    • MCP
  12. Inbound email dashboard

    Received messages list and detail view for domains with inbound enabled, with email.received webhooks.

    Inbound emailInbound docs

    • Dashboard
    • API

Put your transactional email on solid ground.

Start free on our transactional pool. Move to dedicated IPs or a dedicated server when you need the isolation. Same API either way.