LettermintLettermint
  • Knowledge base
  • Community
  • Changelog
  • Support
  • Documentation
  • Sending API
  • Team API
  • MCP server
Get started
Send email
Receive email
Manage
    Handle API tokens securely
    Projects and routes
      IntroductionProject API tokensRoutesBounce and complaint forwardingProject access
    Domains
    Webhooks
    Teams
Resources
Projects and routes

Routes

Create routes to separate transactional, broadcast, and inbound email behavior within a project.

What are routes?

Routes control how Lettermint processes email in a project. Choose a route type for each email workflow.

Route types

Transactional routes

Use transactional routes for one-to-one email that a user action triggers.

Use cases:

  • Password reset emails
  • Order confirmations
  • Account verification emails
  • Shipping notifications
  • Two-factor authentication codes

Features:

  • Priority delivery
  • Dedicated infrastructure not shared with marketing campaigns

Best practices:

  • Use a dedicated transactional route for critical emails
  • Never include marketing content in transactional emails
  • Monitor delivery rates closely

Broadcast routes

Use broadcast routes for email campaigns sent to multiple recipients.

Use cases:

  • Marketing newsletters
  • Product announcements
  • Weekly digests
  • Promotional campaigns
  • Community updates

Features:

  • Built-in unsubscribe handling
  • Hosted unsubscribe pages (can be disabled on higher plans)
  • Bulk sending controls

The hosted unsubscribe feature automatically adds an unsubscribe link to broadcast emails and manages the unsubscribe page. Disabling this requires you to handle unsubscribes yourself. To change this setting, contact support. This option is only granted to trusted senders.

Inbound routes

Use inbound routes to receive email and process it through webhooks.

Use cases:

  • Support ticket systems
  • Email-to-task conversions
  • Reply tracking
  • Email parsing and automation
  • Customer feedback collection

Features:

  • Unique email address per route
  • Custom domain support with MX records
  • Configurable spam filtering
  • Full email parsing (headers, body, attachments)
  • Webhook delivery with complete email data
  • Subaddress support (e.g., user+tag@example.com)

Inbound routes are available on Starter plans and above. See the Inbound Mail guide for detailed setup instructions.

Default routes

Each project has a default route that is used when you send emails without specifying a route in your API request. This simplifies your integration by allowing you to omit the route parameter for common use cases.

How default routes work

When you create a new project through the Team API, initial_routes defaults to both. Lettermint creates an outgoing transactional route and a broadcast route, with outgoing set as the default. You can also request only transactional or only broadcast during project creation. You can change the default outbound route at any time via the Team API.

When you send an email:

  • With route parameter: Uses the specified route
  • Without route parameter: Uses the project's default route

Changing the default route

Use the Team API to set the project's default_route_id:

Setting a route as default automatically removes the default flag from the previous default route.

Requirements:

  • The route must belong to the project
  • Only transactional and broadcast routes can be set as default
  • Inbound routes cannot be set as default (they receive emails, not send them)

Viewing the default route

When listing routes, check the is_default field on each route:

Code
{ "data": [ { "id": "550e8400-e29b-41d4-a716-446655440000", "name": "Outgoing", "slug": "outgoing", "route_type": "transactional", "is_default": true }, { "id": "661f9511-f30c-52e5-b827-557766551111", "name": "Marketing", "slug": "marketing", "route_type": "broadcast", "is_default": false } ] }

The default route ID is also included in project API responses as default_route_id.

Route constraints

Routes have certain constraints to maintain project integrity:

  • Route type is immutable: Once created, a route's type (transactional, broadcast, inbound) cannot be changed. Create a new route if you need a different type.
  • Cannot delete the default route: You must set another route as default before deleting the current default route.
  • Cannot delete the last route: Every project must have at least one route. You cannot delete a project's only remaining route.
  • Protected slug: The outgoing slug is reserved for the default transactional route created with new projects and cannot be used for other routes.

Managing routes

Creating a route

  1. Navigate to your project in the dashboard
  2. Go to the Routes section
  3. Click Create Route
  4. Choose your route type
  5. Configure route settings
  6. Save your route

Route creation dialog

Route settings

Different route types have different available settings:

Route settings panel

All Routes:

  • Name and description
  • Webhook configuration
  • Suppression list management

Transactional & Broadcast Routes:

  • Open tracking - Track when recipients open emails
  • Click tracking - Track when recipients click links
  • TLS - Choose opportunistic or enforced encryption for outbound delivery
  • Plaintext fallback generation - Generate a plaintext version for HTML-only outbound emails
  • Disposable recipient suppression - Skip recipients that use a disposable email domain

Email tracking is available on paid plans. See the Tracking documentation for setup details and bot detection information.

See the TLS documentation for the delivery tradeoff, per-email overrides, and enforced-failure behavior.

Broadcast Routes:

  • Hosted unsubscribe settings

Inbound Routes:

  • Spam threshold configuration
  • Attachment delivery mode (inline or URL)
  • Custom domain setup

See Spam filtering and Attachments and raw email for inbound-specific settings.

Plaintext fallback generation

Transactional and broadcast routes generate a plaintext fallback when you send an HTML-only email. This improves compatibility with inboxes and clients that prefer or require a text part.

If your application already provides a plaintext variant, Lettermint keeps it exactly as supplied and does not replace it with a generated version.

Use the route update method shown in TLS with this payload to enable generated plaintext fallbacks:

Code
{ "settings": { "generate_plaintext_fallback": true } }

Set generate_plaintext_fallback to false to stop generating the fallback.

Disposable recipient suppression

You can enable disposable recipient suppression for transactional and broadcast routes. Lettermint checks the domains of all To, Cc, and Bcc recipients before delivery.

When a domain matches the disposable email domain list:

  • Lettermint skips that recipient for the current message.
  • Other recipients in the message still receive the email.
  • Lettermint does not add the recipient to a team, project, or route suppression list.
  • Lettermint does not start a delivery attempt when all recipients match.

The setting is disabled by default. Use the route update method shown in TLS with this payload to enable it:

Code
{ "settings": { "suppress_disposable_recipients": true } }

Lettermint uses exact domain matches. It does not use DNS or MX records to find related domains. Disable the setting to stop the check for new messages.

The disposable email domain list comes from the disposable-email-domains project and is licensed under the MIT License.

Copyright (c) 2017 Andrei Simionescu

Copyright (c) 2017 Stefan Meinecke, greenSec GmbH

Webhooks for routes

A route can use a route webhook, a project webhook, or a team webhook. One webhook can target multiple projects or routes. It uses one URL and one signing secret for all selected targets.

  • Transactional/Broadcast: Receive message.sent, message.delivered, message.auto_replied, message.hard_bounced, message.soft_bounced, etc.
  • Inbound: Receive message.inbound events with full email content

See the Webhooks documentation for configuration details.

Suppression lists

Lettermint checks team, project, and route suppressions before it sends a message. If one recipient is suppressed, Lettermint skips that recipient and sends to the other recipients.

ScopeApplies toUse case
RouteOne routeComplaints, unsubscribes, and route-specific manual blocks
ProjectAll routes in one projectManual blocks for one application or environment
TeamAll projects and routesAutomatic hard bounce blocks and team-wide manual blocks

A suppression can block all mail or broadcast mail only. Complaints and unsubscribes stay on the source route. On a broadcast route, they block broadcast mail. On a transactional route, they block all mail on that route. Qualifying hard bounces block all mail across the team.

See Suppressions for the automatic bounce classifications, scope rules, mail categories, API examples, and removal rules.

Choosing the right route type

Transactional

  • User triggered
  • Time-sensitive
  • Mission-critical
  • Account-related

Broadcast

  • Marketing content
  • Multiple recipients
  • Campaigns
  • Newsletters

Inbound

  • Receiving emails
  • Support systems
  • Reply processing
  • Email automation

Don't mix email types! Using a transactional route for marketing or vice versa can harm deliverability and violate anti-spam regulations.

Next steps

  • Set up Inbound Mail - Configure inbound email routing
  • Configure Webhooks - Receive delivery events
  • Manage Domains - Set up verified sending domains
  • Enable Email Tracking - Track opens and clicks on your routes
  • Configure TLS - Choose how outbound deliveries use transport encryption
Project API tokensBounce and complaint forwarding
On this page
  • What are routes?
  • Route types
    • Transactional routes
    • Broadcast routes
    • Inbound routes
  • Default routes
    • How default routes work
    • Changing the default route
    • Viewing the default route
  • Route constraints
  • Managing routes
    • Creating a route
    • Route settings
    • Plaintext fallback generation
    • Disposable recipient suppression
    • Webhooks for routes
    • Suppression lists
  • Choosing the right route type
  • Next steps
import { Lettermint } from "lettermint"; const api = Lettermint.api(process.env.LETTERMINT_TEAM_TOKEN!); await api.projects.update("project-id", { default_route_id: "route-id", });
JSON
JSON
JSON
Go
Java