Solutions / QuxMail

A transactional email API, composed

QuxMail is the layer every transactional email API rebuilds — API keys, teams, domain verification, idempotent sends, delivery events, suppression, signed webhooks, metering and caps — done as one thin process over four kits. Point your existing SDK at it. The kits underneath are open source; the hosted control plane is ours.

api.quxmail.com
$ curl https://api.quxmail.com/emails \
    -H "Authorization: Bearer qm_live_…" \
    -H "Idempotency-Key: signup-42" \
    -d '{
      "from": "[email protected]",
      "to": "[email protected]",
      "subject": "Welcome",
      "html": "<p>You are in.</p>"
    }'

{ "id": "e_9f8a2c…", "status": "queued" }
0
drop-in API endpoints
0
kits, one thin process
0
usage event per accepted email
0
daily send cap to start, movable
Composed from the family

Four kits do the hard parts.

Nothing in QuxMail knows how to build MIME, sign DKIM, talk SigV4 to SES, or hash a password — that is the kits’ job. QuxMail knows what a transactional email request looks like, who may make it, and what to charge for it.

identity-kit
Accounts, sessions and API keys — the key authenticates as a team; a dashboard session authenticates a person.
tenant-kit
Teams and membership. The x-team header (or the key’s team) resolves to a tenant, and isolation follows.
mail-kit
Domains, idempotent sends, delivery events, suppression and signed webhooks — the actual mail, with DKIM you hold.
billing-kit
One usage event per accepted email, idempotent on the message id — metered exactly, never on the critical line.
What you get

The whole control plane, not just a send.

A drop-in API

Same paths, request and response bodies, and error names for /emails, /emails/batch, /domains, /api-keys and /webhooks. Switch the base URL and keep the rest of your code; Idempotency-Key is honoured, compared by content.

Two ways in

An API key authenticates as a team — full_access or sending_access, optionally pinned to one domain. A dashboard session authenticates a person who names a team with x-team. Same handlers.

Trust & safety, built in

Every team gets a daily send cap (100 to start), suspension with a reason, and an operator surface to move both — so a new account can’t torch your sending reputation.

Honest suppression

Bounces and complaints suppress automatically through mail-kit, and suppression is a first-class resource — not a list hidden inside “contacts”. A suppressed address is dropped before the wire.

Metered exactly

One billing-kit usage event per accepted email, idempotent on the message id and never on the send path’s critical line. You bill what you accepted, to the event.

SES ingest that verifies

SNS signatures are checked against a certificate fetched from an sns.<region>.amazonaws.com URL, and subscriptions are confirmed only after. Verified, then believed.

Prefer to run it yourself? QuxMail is the hosted product, but its engine is mail-kit — Apache-2.0. Embed the same domains, sends, events and webhooks in your own app, over a transport you choose. QuxMail is what you reach for when you would rather not.

Point your existing SDK at it.

Start sending in minutes with an API your code already speaks — or self-host on mail-kit.