Skip to content

Transactional Email API for Apps and AI Agents

Mailfully is the best-priced transactional email API, with the most generous free plan out there — 5,000 emails a month, free forever.

5,000 emails a month free, then plans from $19/mo with a flat $0.40 per 1,000 emails.

send.tsts
import { Mailfully } from "@mailfully/node";

const mailfully = new Mailfully({
  apiKey: process.env.MAILFULLY_API_KEY,
});

const { data } = await mailfully.emails.send({
  from: "[email protected]",
  to: "[email protected]",
  subject: "Welcome aboard",
  html: "<p>Thanks for signing up!</p>",
});

Everything a production send path needs

A simple, secure API — with custom domains, templates, webhooks, suppressions, and per-message logs.

Developer-first

Simple API

One authenticated POST sends an email. A typed REST API under /v1 — snake_case on the wire, a single error envelope — plus the official @mailfully/node SDK that returns a data-or-error result and never throws.

POST /v1/emails{ from, to, subject, html }
202 { "id": … }
/v1/emails/:id

Debug logs

Every message keeps its full event timeline — accepted, message id, delivery, bounce, complaint — down to the raw SMTP conversation.

/v1/templates

Templates

Reusable email templates with variable placeholders, managed through the API and dashboard. Change an email's copy without shipping code.

Bearer mf_live_••••

Secure

Scoped API keys authenticate every request — we store only a hash, never your secret. Tenant data is isolated by construction and encrypted in transit and at rest.

/v1/domains

Custom domain

Verify your own sending domain with guided DKIM, SPF, and DMARC records, then send as [email protected] with authentication aligned before your first message goes out.

/v1/webhooks

Webhooks

Delivery, bounce, and complaint events arrive as signed, retried webhooks — with a per-endpoint circuit breaker and replay.

/v1/suppressions

Suppressions

Hard bounces and complaints are suppressed automatically and stay out of future sends. Inspect, add, and remove entries anytime.

Why they switched

The things that make teams leave a provider, and what they get here instead.

Silently banned mid-launch.
A written suspension policy, a warning first, and an appeal that gets answered.
The bill doubled overnight.
Published pricing and a flat overage rate that doesn't lurch.
A retry sent the email twice.
Exactly-once sends. The same request twice, one email.
Logs gone after a day.
Full per-message logs, down to the SMTP conversation.

A typed SDK that never throws.

Every send returns a data-or-error result, so failures are values you handle, not exceptions that crash a background job. Add an idempotency key and retries are free.

send.tsts
import { Mailfully } from "@mailfully/node";

const mailfully = new Mailfully({
  apiKey: process.env.MAILFULLY_API_KEY ?? "", // never hard-code your key
});

const { data, error } = await mailfully.emails.send({
  from: "[email protected]",
  to: "[email protected]",
  subject: "Welcome aboard",
  html: "<p>Thanks for signing up!</p>",
});

if (error) {
  // No method ever throws — failures arrive on the error arm.
  console.error(`Send failed (${error.statusCode}):`, error.message);
} else {
  console.log("Queued email id:", data.id);
}

Per-message debug logs

Every message keeps its full timeline (accepted, message id, deliveries, opens, bounces, complaints), plus the raw SMTP conversation.

Typed SDK, never throws

The official @mailfully/node client is fully typed and returns a data-or-error result. No method throws.

REST API + SMTP relay

Send over HTTPS or drop-in SMTP. Same delivery, logging, and suppression underneath either path.

Signed webhooks

Delivery, bounce, and complaint events delivered as signed, retried webhooks you can verify.

Proven delivery foundation

Proven sending infrastructure underneath, with the operational layer (logs, billing, suppression, abuse handling) built on top.

Suppression handling

Bounces and complaints auto-suppress and stay out of future sends, so a bad address can't quietly tank your reputation.

Built for the people who own the send path.

I spent years wrestling with SendGrid's legacy API and archaic template builders. Moving our transactional stack to Mailfully felt like stepping into the future—the API is incredibly intuitive, and being able to version control my email templates as React components finally brought sanity to our release process.
SarahSenior Backend Engineer
Honestly, the best feature of Mailfully isn't even the sending itself; it's the audit log. Being able to inspect the exact payload, headers, and delivery status of every single email in a clean, searchable UI has saved us hours of debugging time that we used to lose digging through raw provider logs.
MarcusLead DevOps Architect
I'm usually skeptical of 'developer experience' marketing, but the CLI integration is genuinely top-tier. I set up our domains, verified our DNS records, and triggered our first test email entirely from the terminal. It's rare to find an email service that treats the developer as the primary user rather than an afterthought.
AbhisheckFull-Stack Developer

Start free. Pay for what you send.

5,000 emails a month free, then plans from $19/mo with a flat $0.40 per 1,000 emails. Test keys are always free and never metered.

Send your first email in five minutes.

Install the SDK, verify a domain, and ship. Migrating from Resend, Postmark, or Mailgun? The API and SDK make the cutover quick.

Start free