Send the email. Know what happened.
Mailtruss is a transactional email API for developers. It follows every message past the 200 OK and tells you in plain language what happened and what to do next.
3,000 emails a month freeno credit card
- 200 OK returned to your API call after 38 ms. Everything after this is tracked by Mailtruss.
- Accepted, +0 ms: Request validated and stored
- Queued, +9 ms: Waiting for a worker
- Handed off, +432 ms: Delivery network took it
- Bounced, +2.8 s: 550 5.1.1 user unknown
Recorded event
09:41:09.930 bounced
- source
- delivery network
- bounceType
- Permanent
- status
- 5.1.1
- diagnostic
- smtp; 550 5.1.1 user unknown
Recipient address does not exist
contoso.org permanently refused the message (550 5.1.1). The address was added to your suppression list to protect your sender reputation.
Next step Remove or correct the address in your system.
Do not retry
Diagnosis
Every failure, in a sentence you can act on.
Mailtruss reads what the receiving server or the delivery network sent back and turns it into a diagnosis. Pick a failure to see what you would read.
The tag says whether sending the same message again is safe once the cause is fixed. Not every problem can be diagnosed automatically; anything that doesn’t match is shown with its raw event, never hidden.
Permanent bounce
example dataWhat the receiving side said
550 5.1.1 <a.novak@contoso.org>: user unknown
Diagnosis
Recipient address does not exist
The receiving server permanently refused the message.
- What Mailtruss did
- Added the address to your suppression list. Future sends to it are skipped.
- Next step
- Remove or correct the address. Repeated hard bounces damage your reputation.
- Safe to retry?
- No, do not retry
Open any message. Read the whole story.
Mailtruss shows where the message went, how long each hop took, and what the receiving server said. This one was held up once before it was delivered.
A verdict first
What happened and why, in plain language, above everything else. When something went wrong, it adds the next step and whether retrying is safe.
The trace as proof
Each hop with the time it waited. Built only from recorded events; a step with no event is shown as not reached.
Raw evidence, one glance down
Every event with its source (API, worker, delivery network) and the fields that came with it, including the SMTP diagnostic.
← Emails
Your March invoice is ready
To r.iyer@northwind.devMar 14, 09:41 UTC7c41d2a0…
Accepted by the receiving mail server
northwind.dev deferred the first attempt (451 4.7.1) and accepted the retry 94 seconds after your request. Delivered means the receiving server accepted it; it does not confirm inbox placement or that it was read.
- Next step
- None needed
- Took
- 94.3 s, one retry
Delivery trace
1m 34s end to end- Accepted
- Queued6ms
- Handed off335ms
- Delivered1m 34s
Recorded events
Request accepted
API
- requestId
- req_4kq2m8v0xa
Queued
API · +6ms
Handed off
Worker · +335ms
- deliveryId
- 0100018e3c4b9f02-71d0a8c4
Delivery delayed
Delivery network · +899ms
- delayType
- TransientCommunicationFailure
- diagnostic
- smtp; 451 4.7.1 try again later
Receiving server accepted the message
Delivery network · +1m 33s
- smtpResponse
- 250 2.0.0 OK
- remoteMta
- mx1.northwind.dev
Recorded events 5
Request accepted
API
- requestId
- req_4kq2m8v0xa
Queued
API · +6ms
Handed off
Worker · +335ms
- deliveryId
- 0100018e3c4b9f02-71d0a8c4
Delivery delayed
Delivery network · +899ms
- delayType
- TransientCommunicationFailure
- diagnostic
- smtp; 451 4.7.1 try again later
Receiving server accepted the message
Delivery network · +1m 33s
- smtpResponse
- 250 2.0.0 OK
- remoteMta
- mx1.northwind.dev
Delivered is the last thing the mail system reports. It means the receiving server accepted the message. Whether it then lands in the inbox or a spam folder isn’t reported back to any sender.
The API
One request to send. One ID to trace it.
Send from curl, Node, Python or Next.js. Every sample is the real call, and the same request works for an AI assistant through the MCP server.
- Idempotency-Key
- Retry a timed-out request safely. The same key and body return the first response instead of sending twice.
- scheduled_at
- Send later, up to 30 days ahead. Cancel or reschedule until it starts.
- /emails/batch
- Up to 100 messages in one request; the response returns an ID for each.
- x-request-id
- Every response carries one. Paste it into API logs to see the stored request and response.
- errors
- Typed: a name, a message that names the field, and a status code. Validation errors are rejected before any quota is used.
The id opens this message in Emails with its full trace. Quote the x-request-id to find the stored request in API logs. Or ask your AI assistant: the MCP server exposes the same API.
Domain setup, without the detective work.
Add the domain, publish five records, and Mailtruss shows what it can see so far, and tells you when waiting longer won’t help.
Step 1
Add the domain
Use a subdomain so your root records stay untouched.
Step 2
example dataPublish the records
Each value has a copy button and says what it is for.
- CNAMEk3x7….dkim.…DKIM · k3x7…._domainkey.mail.acme.devVerified
- CNAMEq9vb….dkim.…DKIM · q9vb…._domainkey.mail.acme.devVerified
- CNAMEw2mf….dkim.…DKIM · w2mf…._domainkey.mail.acme.devPending
- MX10 …Return path · send.mail.acme.devVerified
- TXTv=spf1 include:… ~allSPF · send.mail.acme.devPending
Step 3
Verify
Re-check when you’re ready. Nothing pretends DNS is instant.
3/5
records verified
- Pending
- Not confirmed yet. DNS changes can take minutes to hours.
- Failed
- We stopped waiting. The record is missing or wrong; fix it and re-check.
Everything else
Everything you need after the first send.
The previews use example data.
Webhooks
Every outcome as a signed event (Standard Webhooks). Six retries with backoff over about 31 hours, replay, and a delivery log per endpoint.
Analytics
Volume and outcomes by day and by domain, with the problems pulled to the top. Each rate links to the emails behind it.
Suppressions
Hard bounces and spam complaints stop future sends automatically, per organization. Bounces can be removed once an address is fixed.
- API →
Templates
Block editor or HTML, variables with fallbacks, versions and an explicit publish.
- API →
Contacts, broadcasts and topics
CSV import, segments, scheduling, and a one-click unsubscribe on every message.
Playground
Run a request through the real pipeline and read the result. Problems are flagged before anything is sent.
API logs
Every request with its body and response, secrets redacted before storage. Search by path, request ID or error.
Alerts
Usage near a limit, delivery quality slipping, a domain failing to verify, a webhook that keeps failing.
Team and roles
Invitations and five roles (owner, admin, developer, viewer, billing), enforced on the server.
- Docs →
Scheduling and batches
Send up to 30 days ahead, or up to 100 messages in one request.
- Docs →
Libraries and MCP
SDKs for Node, Python, Go, PHP, Ruby, Java and .NET, an OpenAPI spec, and an MCP server for AI assistants.
What you can check before you trust us.
How accounts, keys and events are protected, and what Mailtruss can’t tell you.
- Two-factor sign-in and passkeysAvailable on every account, with recovery codes.
- API keys stored hashedShown once when created, never again.
- Signed webhooksStandard Webhooks signatures you can verify.
- Secrets redacted from logsBefore anything is stored.
- Roles enforced on the serverNot just hidden in the interface.
- Public status, sub-processors and DPAPublished, not on request.
Limits, stated plainly
- Inbox or spam placement isn’t reported back to any sender, so Mailtruss doesn’t claim to know it.
- The Free plan is capped at 100 emails a day as well as 3,000 a month.
- Not every failure can be diagnosed automatically. Those are shown with the raw event, never hidden.
Start small. Scale when you need to.
Every plan has every feature. Plans differ only in volume and in how many domains and API keys you can create. Sending stops at your limit instead of billing overage.
- Free3,000 a month · 100 a day$0/moStart free
- Starter25,000 a month$9/mo
- Pro100,000 a month$29/mo
- Business300,000 a month$79/mo
Send your first email. Watch it arrive.
Create an account, verify a domain, and your first message comes with its trace. 3,000 emails a month are free.