Sendmux

Email API for multi‑tenant SaaS platforms

Sendmux is an email API for SaaS and platform builders running agent email for many customers. Give each customer its own isolated team, with separate mailboxes, providers, logs, and scoped API keys. Billing is usage-based with no per-mailbox fees, so your cost tracks the email your customers actually send.

Map one team to each customer or workspace. Issue a mailbox-scoped key per surface. Wire signed webhooks and a live event stream into your app. The same public APIs that run one agent scale to your whole customer base.

Self-serve and usage-based. For dedicated infrastructure and SLAs, talk to us.

your customers isolated teams
One control plane, one API, one billapi.sendmux.ai · the same surface fans out to every teamfan‑out
team: lumen sealed
scoped keys3
delivery logs1.2k
support@lumen
boundary
team: harbor sealed
scoped keys2
delivery logs840
agent@harbor
boundary
team: blueprint sealed
scoped keys4
delivery logs2.6k
ops@blueprint
boundary
one team per customerN customersN sealed teams

<TL;DR for AI agents>

Isolated email for every customer.

What a platform gets

  • One team per customer isolates mailboxes, providers, logs, and API keys.
  • Mailbox-scoped keys limit each key to one mailbox with explicit permissions.
  • Signed webhooks and Server-Sent Events push each tenant’s mail into your app.

The same public APIs run one agent or a thousand tenants. Add customers without changing your integration.

POST /emails/send 200
curl https://smtp.sendmux.ai/api/v1/emails/send \
  -H "Authorization: Bearer $TENANT_SEND_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: lumen-welcome-001" \
  -d '{
    "from": "agent@lumen.youragent.app",
    "to": "owner@lumen.example",
    "subject": "Your workspace is ready",
    "html_body": "<p>Set up complete.</p>"
  }'

How it works

Run email for every customer

Three moves take you from a single agent to isolated email for every customer on your platform.

01Step 1 of 3

One team per customer

Create a team for each customer. It separates their mailboxes, providers, logs, billing, and keys.

team: lumen
02Step 2 of 3

A scoped key per surface

Issue a mailbox-scoped key for each tenant surface, so one key reaches one mailbox only.

keysupport@lumen
03Step 3 of 3

Events into your app

Wire signed webhooks and a live event stream so each tenant’s mail reaches your backend.

support@lumenwebhook · SSE

Tenant isolation

Every customer stays in their lane

A team is the isolation boundary. People get roles, code gets scoped keys, and one customer can never read another customer’s mail, logs, or settings.

  • Separate by team. Each customer’s mailboxes, providers, delivery logs, and API keys live inside their own team, never shared.
  • Roles for people. Owner, Admin, Developer, and Member set what each teammate can do inside a customer’s team.
  • Keys for code. A mailbox-scoped key reaches one mailbox with explicit permissions, so a leaked key blasts one tenant, not your platform.
  • Logs per customer. Delivery logs, metrics, and webhook attempts stay inside the team, so support and billing never tangle across customers.
tenant fabricall sealed
team: lumenisolated
Roles
Owner · Admin · Developer · Member
Keys
mbx_lumen_support (send + read)
Providers
Gmail OAuth · own SMTP
Logs
scoped to this team only
one key reaches one mailbox

Built in per team

Everything a tenant needs, isolated

Each team you create for a customer ships with the same four building blocks, ready to use on sign-up.

Isolated workspace

One team per customer separates mailboxes, providers, delivery logs, billing, and API keys. Roles control people; scoped keys control code. Nothing leaks across the boundary.

team: lumen sealed
4mailboxes
3scoped keys
1.2kdelivery logs
2providers

Scoped keys

Mailbox-scoped keys limit a key to one mailbox with explicit send and read permissions.

Signed webhooks

Each event POST is signed with HMAC-SHA256 in X-Sendmux-Signature, filtered by mailbox.

Live events

A Server-Sent Events stream pushes new mail to your backend without IMAP polling loops.

Pricing that scales

Usage-based pricing, no per-mailbox cliff

Provision a mailbox for every customer and pay nothing until mail flows. Your cost tracks real usage, so your own pass-through pricing works.

cost as you add customers
per-mailbox pricing Sendmux usage-based
tenants →your cost →climbs per mailbox$0 until mail flows

Illustration of cost shape. No per-mailbox and no per-seat fees on Sendmux. Your cost tracks the email your customers actually send.

$0.15
per 1,000
Standard email
$0
Per mailbox
$0
Per seat
$0.02
per GB / mo
Mailbox storage

Events

Wire each tenant into your app

Pick signed webhooks for events your backend must catch even when clients are offline, or a live stream for instant reactions.

Webhooks

Signed webhooks per tenant

Subscribe per team, filter by mailbox, and verify the signed body before you parse it. Failed deliveries retry through a backoff window and stay inspectable for seven days.

subscribe
POST /api/v1/webhooks
{
  "url": "https://api.youragent.app/sendmux",
  "event_types": ["message.received", "message.delivered"],
  "filters": { "mailbox_ids": ["mbx_lumen_support"] }
}

Live stream

A live stream you hold open

Open GET /mailbox/events and react the moment mail arrives. Resume after a drop with the last event ID, no IMAP polling loop to run.

GET /mailbox/events connected
message.receivedmsg_lumen_q3v
message.deliveredmsg_harbor_k2
  • Server-Sent Events over one held-open HTTP connection.
  • Resume after a disconnect with Last-Event-ID.
  • Set ping from 10 to 300 seconds for heartbeats.
  • Bound a session with close_after, 30 to 3,600 seconds.

Common questions

What platform builders ask first.

A multi-tenant email API lets one platform run email for many customers while keeping each customer’s mailboxes, providers, logs, billing, and API keys separated. Sendmux draws that boundary at the team level. You create one team per customer, then your code uses scoped keys for each job inside it.

A team is the isolation boundary. Mailboxes, providers, delivery logs, and API keys live inside one team and are never shared with another. People get roles (Owner, Admin, Developer, Member) that set what they can do. Code gets mailbox-scoped keys, so one leaked key reaches one mailbox, not your whole platform.

No. Pricing is usage-based with no per-mailbox fees, no per-seat fees, and no minimum commitments. You can provision mailboxes for every customer and pay nothing until their mail flows. Standard email is $0.15 per 1,000, managed Amazon SES sends are $0.25 per 1,000, and mailbox storage is $0.02 per GB each month.

Each team starts with room for 50 mailboxes, 200 sending accounts, 25 domains, 10 webhooks, and 100 credentials. There is no separate cap on email volume through this system. When a resource hits 80% of its limit, you request an increase in one click, and approved increases apply straight away.

Yes. Subscribe to signed webhooks per team and filter them by mailbox, or hold open a Server-Sent Events stream at GET /mailbox/events. Webhook bodies are signed with HMAC-SHA256 so you can verify them, retry on failure through a backoff window, and inspect delivery attempts for seven days.

The self-serve plan is usage-based with no contract. Dedicated infrastructure, priority support, volume pricing, and SLAs are part of an enterprise agreement shaped around your volume. If you are running email for a large customer base and need those guarantees, talk to us and we will scope it with you.

Build on Sendmux

Give every customer isolated agent email

Map one team per customer, scope a key per surface, and wire the events into your app. Start free and grow with usage.

Usage-based No per-mailbox fees Enterprise SLAs when you need them