Starter
For your first email program.
$192 billed yearly.
20,000 emails / month
Choose Starter- 5 brands · 3 seats
- 5 custom sending domains
- 500 email verifications/month
- $1.50 / 1,000 extra emails
Authenticate the domain, keep the stream separate from marketing, send immediately, and write it as a confirmation. An agent adds one rule: every send is single, reviewed and safe to retry.
Transactional email best practice is mostly four things: authenticate your domain, keep the stream separate from marketing, send immediately, and write the email as a confirmation rather than an advert. If the category itself is new to you, start with what transactional email is and come back.
When an agent writes or triggers the email, add a fifth: every send is single, reviewed and safe to retry. That agent can be a coding assistant wiring receipts into an app or an assistant working over MCP, and it runs unattended, retries on failure and edits templates nobody rereads.
None of the design advice matters if the email doesn't arrive.
Authenticate properly. SPF, DKIM, and DMARC on your sending domain. This is the baseline, and since Gmail and Yahoo set their bulk-sender requirements it's effectively mandatory rather than advisory. An unauthenticated domain gets filtered regardless of how good your content is. The rest of the deliverability groundwork follows the same pattern of boring work done once.
Separate your streams. Run transactional mail on a different subdomain from marketing. Marketing generates complaints even when you do it well, and you do not want those complaints deciding whether password resets reach the inbox. If you do one thing on this list, do this one. The full case for the split, including the consent rules that differ, is in transactional versus marketing email.
Watch your complaint rate. Mailbox providers enforce hard thresholds now. Gmail's sender guidelines set a 0.30% spam-complaint ceiling for bulk senders, and once you're over it you're not tuning content anymore, you're locked out. Keep headroom rather than sitting near the line.
Keep a suppression list that actually works. Hard bounces and complaints should stop receiving mail immediately and permanently, without you having to remember.
Suppression has one deliberate exception. Nitrosend lets you mark password reset and account recovery emails as transactional, so they still reach a contact who unsubscribed from marketing, with the reset link intact.
Ask an agent in Claude, ChatGPT or Cursor to add a receipt or a password reset to an app and it does the work in code, unattended. It retries when a call times out, it edits templates without anyone rereading them, and it can reach for the same path for a newsletter as for a reset. The practices above still hold. Each one needs a mechanical rule when the sender is an agent:
nitro_send_message sends one transactional email now. Reuse its idempotency_key only for an exact retry, so a timeout retries the same send without a duplicate.nitro_review_delivery is a read-only review with validation, spam analysis, preflight and previews, on a saved template or inline email content. It never approves or sends.nitro_send_test_message sends one real test of a template to the test recipients. It never sends to an audience.nitro_compose_campaign, which creates or edits a broadcast draft and never delivers it. That keeps the transactional stream separate, so password resets do not compete with newsletters.The timing rule carries over too. A send that failed should come back to a person as an error to fix and resend, not go out on its own a day later. Nitrosend gives the agent these steps as tools over MCP and the same sending through the REST email API.
Transactional email is defined by timing. A password reset is useful for minutes, and a one-time passcode for less than that.
Delay is not a minor quality issue here. It generates support tickets, drives repeat requests that look like abuse to filters, and erodes trust in the product. If your queue can back up behind marketing sends, that's an architecture problem worth fixing before any copy work.
Failure handling matters as much as speed. If a transactional email fails to send, you do not want it auto-sending a day or days later when something automatically unblocks, unless it is a short recovery. What you want is an obvious failed-to-send message with a fix-and-send action. Silent failure here is bad.
On Nitrosend, a receipt, magic link or alert is one POST to /v1/my/messages on the sending API, sub-second, branded and tracked. That is the bar transactional infrastructure should clear, and it is the first thing to test when you shortlist a transactional email service. If you are still submitting over SMTP, the port you pick decides whether the message leaves your network at all.
The standard advice is right about the fundamentals, so this page is brief on them and spends the words where it disagrees.
The basics: state the fact in the subject line, put the key detail at the top, keep one clear action, make it readable on a phone, include a plain-text version, and match your brand. A narrower body, 472px instead of the standard 600px, improves readability in a transactional email.
One of those basics matters more than it looks: if you send only images, Gmail, Yahoo and Outlook cannot read them, so the filter guesses, and the guess is the promotions folder or spam. Alt text tells those inboxes what the email is about.
Don't use no-reply addresses. Sending from no-reply@ tells a customer their reply doesn't matter, and it throws away a genuine signal, because people do reply to receipts when something is wrong. Use a real address that reaches a human.
Don't mix promotions into functional mail. Beyond the trust problem, sliding marketing into a receipt can move that email under marketing consent rules. Keep the receipt a receipt.
The same boundary runs the other way. A bulk outreach or mail merge endpoint should not be built on the transactional messages path, because that is a deliverability and compliance trap. Campaigns go to a list of recipients; a transactional email goes to one recipient, triggered by something that person did.
Put a real unsubscribe link on transactional sends anyway. This is the firmest position on this page, and it's not the standard advice. Legally you usually don't need one on a genuine transactional message. In practice, an email that a person cannot get out of is a spam complaint waiting to happen, and complaints are what actually damage the reputation that delivers your password resets. Giving people an exit is cheaper than earning a complaint.
Once it arrives and does its job, there's an opportunity most companies skip. My short version: transactional emails are wasted real estate. Treat the design of a transactional email as a brand moment rather than a template.
Every receipt and confirmation goes to one person who asked for it, every time you send. Most brands put a default template in that slot.
The good version isn't turning the receipt into an ad, which breaks the rules above. It's making the functional email genuinely good: a receipt with a considered layout, an email verification that works as an onboarding step instead of a dead link. Same purpose, done with attention.
Timing is part of the design. In Nitrosend, someone who signs up for a download gets the PDF as a transactional email, and there is a 10-minute wait before any follow-up emails trigger, so the thing they asked for arrives on its own.
The practical failure mode is drift. Transactional templates get written once, live in code or in a developer's tool, and never get updated when the brand changes. Two years later your receipts look like a different company from your website.
Best practice here is boring and structural: keep transactional templates somewhere the people responsible for the brand can actually open and edit them, so keeping them current isn't a developer ticket. Nitrosend's answer is treating templates as first-class objects you can view, edit, and re-theme, and having transactional and marketing email share one brand and one contact record. But whatever the tooling, the test is the same: when the brand changes, how many people and how many days does it take for your receipts to catch up?
The prompt: "Add a shipping-update email when an order ships, and show me before any customer gets one."
Before. Left unguided, an agent writes the email inline in the order code, sends it through whatever mailer the app already has, and resends on every timeout, so one shipment can produce two emails and nobody reads the copy before customers do.
After. With the Nitrosend MCP tools, the agent works through a fixed sequence:
nitro_get_status checks account readiness and the sender identity.nitro_manage_domains adds the store's sending domain and verifies it.nitro_manage_template creates a reusable shipping-update template with the order number and tracking link at the top.nitro_review_delivery, a read-only check made of validation, spam analysis, preflight and previews. It never sends.nitro_send_test_message then mails the template once, to the test list kept in nitro_configure_account, so a person can see the real thing. It never sends to an audience.nitro_send_message or the REST API behind the transactional email API for each shipment, with one idempotency_key per shipment, so a retry of the same shipment never sends twice.nitro_get_insights then reports email analytics with trends, benchmarks and recommendations.The difference in one line: before, the first person to read the shipping update is a customer. After, it is the person who asked for it.
nitro_review_delivery and one test after every edit.Authenticate your sending domain with SPF, DKIM, and DMARC, keep transactional mail on a separate subdomain from marketing, send immediately, and write the email to confirm the action rather than to promote. When an agent sends, add a fifth: every send is single, reviewed and safe to retry, with one idempotency_key per message.
Legally they usually don't need one. Including one anyway is worth it, because a recipient who can't opt out is more likely to file a spam complaint, and complaints damage the reputation that delivers your critical mail.
No. It signals that replies aren't welcome and discards a useful signal, since customers reply to receipts when something has gone wrong. Use an address that reaches a person.
Immediately. Password resets and one-time passcodes lose their value within minutes, and delays generate support tickets and repeat requests. If a send fails, surface it as an error to fix and resend, rather than letting it go out on its own a day or days later.
Every plan includes full stack emailing: Flows, Newsletter Campaigns and Transactional Email, plus our NitroWheel LLM and all agent integrations (Claude, ChatGPT, Codex, Cursor and others). Pay for what you send, not who you store.
Every paid plan includes 3 agent inboxes and no Nitrosend footer.
For your first email program.
$192 billed yearly.
20,000 emails / month
Choose StarterFor a growing audience.
$480 billed yearly.
60,000 emails / month
Choose ProFor teams and agencies.
$1,440 billed yearly.
200,000 emails / month
Choose GrowthFor high-volume sending.
$2,880 billed yearly.
500,000 emails / month
Choose ScaleSending 500,000+ emails a month? Get a custom plan designed for you, with volume email pricing and capacity that fits your business.
5,000 emails to start, then 500 emails every month. No expiry on your starter emails.
Daily allowances depend on your plan and sender standing. Strong list, domain and delivery evidence can raise standing, including on day one. Trusted receives the full plan allowance; available email credits, safety checks and delivery pacing still apply.
Free forever. No credit card required. See full comparison →