Transactional email API.

The reliable way to reach inboxes instead of spam folders. Send transactional and marketing email at scale, with a message log you can read and refusals that name the fix. Built so an agent can send on your behalf without ever exceeding a budget.

or continue with
  • Free plan, no card
  • 1,000 emails a month
  • no card required
  • test sends never count
Emails list with the bounced invoice selected; the peek names the receiving server’s answer — 550 5.1.1 user unknown — and the fix.
Example data

Every send, every status. The bounced invoice carries its reason.

Audience, Broadcasts and Automations are in the console too: contacts, segments and topics, broadcasts, automations.

Open the live demo →

For agent builders

Run it from Claude Code, Cursor, or any MCP client. Budgets are on before the first send.

Agents

For product teams

Node, Python, REST. Every email's story in the console, every filter in the API.

Quickstart

For platforms

One tenant per customer. One bad sender cannot sink the rest.

Docs: tenants

Every email, and why

Twelve statuses, each filterable, each row opening the delivery reason and the raw MIME behind it.

Emails list with the bounced invoice selected; the peek names the receiving server’s answer — 550 5.1.1 user unknown — and the fix.
Example data

A budget per sender

Each key gets a daily ceiling and a rate limit; one button pauses every key at once, with no redeploy.

The Agents fleet: one card per sending key with its budget meter, rate ceiling and kill switch. invoice-bot is paused at 200 of 200 messages for the day.
Example data

Your bot asked to send one email too many.

A bot stuck in a loop can send ten thousand emails before anyone notices. Here is one that tried.

  1. 9:14aminvoice-bot sends its 200th email today

    Receipts, password resets, invoices — all fine, all delivered.

  2. 9:14amIt asks to send one more

    You had capped it at 200 a day. This is number 201.

  3. 9:14amWe stop it. The email never leaves

    No partial send, no queue to clean up. Nothing reached anyone.

  4. 9:14amThe bot is told how to fix it. You get an email

    Your other two bots keep sending. Only invoice-bot is paused.

Your console, right now

9:14am
Emails invoice-bot sent today200 / 200

Limit reached — sending paused.

invoice-botPaused
signup-flowSending
receiptsSending

One click. Every bot stops sending until you say otherwise.

Warned before enforced

A warning names the domain, the measured rate and the threshold it crossed, days before anything is throttled.

Deliverability for acme.dev: a 4.6% bounce rate against the published 4% limit, the 7-day trend, and the bounce classes behind it with the fix for each.
Example data

DNS you can copy

Every record with a copy button and the state of the last check, so a failed verification says which record is wrong.

The Domains screen with acme.dev open: every DNS record to copy, the state of each one after checking, and what to do about the one that failed.
Example data

Failed deliveries, replayable

Each attempt logged with the response your endpoint returned, and a dead letter you can replay once it is healthy.

The Webhooks screen with the dead-lettered event open: all ten delivery attempts, what the endpoint answered each time, and the fix — repair the endpoint, then replay the stored payload.
Example data

When an email doesn’t arrive, we tell you why.

Sending is easy. Landing in the inbox instead of the spam folder is the hard part. We check yours every day and tell you what to fix.

How yourapp.com is doing

Needs a look
Emails that never arrivedthis week2.1%
People who marked you as spamthis week0.02%
On a published blocklist?not checked automatically
Landing in the inbox, not spam91% → 84%
we step in at 80%two weeks agotoday

One that didn’t arrive

Gone for good
m---iriam@old-corp.example

This mailbox doesn’t exist any more — the person has probably left the company.

their mail server said: 550 5.1.1 user unknown

What we already did. Stopped sending to this address, so you never hit it again. 36 other addresses at old-corp.example look the same — worth cleaning that list before your next send. One click does it.

“Sent” and “read” are not the same thing. We show you the gap.

Some things should wait for a human.

Bulk sends, domain changes, clearing a do-not-send list. You choose which actions a bot may never take alone. Those wait in a queue until someone answers.

Waiting on you

1 pending
Send to 412 people at once
invoice-bot · renewal notices · asked at 9:02am
Waiting for you
Change a domain setting
you approved this at 9:14am
Approved
Clear the do-not-send list
signup-flow · asked at 8:40am
You said no

If something goes wrong

We never cut you off without warning. It goes in this order, every time:

  1. 1A webhook event fires at 80% of a key budget and at 80% of the plan inclusion.
  2. 2If delivery starts going wrong, we slow the bot down.
  3. 3If it keeps going, we pause it — and tell you exactly why.
  4. 4Nothing starts again on its own. You decide.

Every pause names its reason and how to appeal it. That policy is published, and we hold ourselves to it.

Why not just Resend?

The same email API, with brakes.

Everything you expect from an email API. Plus the limits, the approval queue, and the stop button that no one else ships.

What mattersAgentiSendResend
A spending limit per botEvery key carries a cap and a speed limit, enforced as the email goes outKeys grant access, not limits — nothing caps what one can spend
Stop everything at onceOne click pauses every key on the accountDelete keys one at a time
A retry never sends twiceWorks on every action that changes something, remembered for 7 daysOnly on the send call
One bad address never kills the batch499 go out, 1 comes back with the reason it did notThe whole batch is rejected
Search what you have sentBy status, sender, recipient, domain, which bot, and dateA list of recent sends, without those filters
Errors that say how to fix themEvery refusal names the exact call that repairs itA code and a message

Rows summarize documented behavior as of Aug 2026; full compare page with sources:/vs/resend

Developer experience

First email in under a minute

import { AgentiSend } from "agentisend";

const as = new AgentiSend(process.env.AGENTISEND_API_KEY);

const r = await as.emails.send({
  from: "hello@yourapp.com",
  to: "user@example.com",
  subject: "Welcome",
  html: "<p>You're in.</p>",
}, { idempotencyKey: "welcome-v1" });

console.log(r.id); // -> GET /emails/:id for the event log

The Node sample runs in CI against the real API with the fake transport. The Python and curl samples are the same request, and CI posts those bodies too.

For agents: one line

claude mcp add agentisend \
  --env AGENTISEND_API_KEY=as_… \
  -- npx @agentisend/mcp-server

MCP + Skills surfaces built in; the agent gets the same error contract you do, including the fix field.

Machine-readable docs

llms.txt and an OpenAPI spec generated from the same schemas that validate requests, so they cannot drift.

Per-page .md twins ship. Asking the HTML URL for Markdown waits on the edge config.

Pricing

Every tier, every limit, on the page.

Every price and every limit is on this page — there is no “contact us to find out what it costs”. Sending pauses at the inclusion. Pro and Scale sell larger volumes on the same plan, each cheaper per 1,000 than the one below. Roughly 35–40% below Resend at each level, and the same table is published at /pricing.json.

Billing term

Free

$0$0per month
$0 billed yearly · 20% off
1,000 emails/mo
  • Up to 100 a day
  • Up to 1 sending domains
  • 1 seats, owner/admin/viewer, never billed per seat
  • History kept 7 days
  • Sending pauses at 1,000. No extra charge.
  • Unlimited keys with budgets
  • Webhooks + replay/DLQ
  • Approval queues
  • No card, no expiry
Start free

Starter

$9$7.20per month
$86.40 billed yearly · 20% off
30,000 emails/mo
  • No daily limit — send them when you need to
  • Up to 3 sending domains
  • 3 seats, owner/admin/viewer, never billed per seat
  • History kept 30 days
  • Sending pauses at 30,000. No extra charge.
  • Everything in Free
  • No daily cap
  • 3 sending domains, 3 seats
Get started
Most picked

Pro

$22$17.60per month
$211.20 billed yearly · 20% off
100,000 emails/mo
  • No daily limit — send them when you need to
  • Up to 10 sending domains
  • 10 seats, owner/admin/viewer, never billed per seat
  • History kept 90 days
  • Sending pauses at 100,000. No extra charge.
  • 250,000 a month for $45250,000 a month for $36 a month, billed yearly
  • 500,000 a month for $79500,000 a month for $63.20 a month, billed yearly
  • 1,000,000 a month for $1391,000,000 a month for $111.20 a month, billed yearly
  • Everything in Starter
  • Deliverability panel: bounce and complaint rates per domain
Get started

Scale

$59$47.20per month
$566.40 billed yearly · 20% off
100,000 emails/mo
  • No daily limit — send them when you need to
  • Up to 1,000 sending domains
  • 100 seats, owner/admin/viewer, never billed per seat
  • History kept 180 days
  • Sending pauses at 100,000. No extra charge.
  • 250,000 a month for $95250,000 a month for $76 a month, billed yearly
  • 500,000 a month for $149500,000 a month for $119.20 a month, billed yearly
  • 1,000,000 a month for $2491,000,000 a month for $199.20 a month, billed yearly
  • 2,500,000 a month for $5752,500,000 a month for $460 a month, billed yearly
  • Everything in Pro
  • Dedicated IP eligible (~$30/mo, warmup bundled)
  • Slack support
Get started
About Free. Every new account is on Free, with no card and no expiry: 1,000 emails a month, up to 100 a day, on one verified domain. Test sends never count toward it. At either cap sending pauses until the day or the period resets; nothing is deleted, and every paid plan has no daily cap. We keep a history of what you sent for 7 days on Free, 30 days on Starter, 90 days on Pro, 180 days on Scale. We do not currently sell a longer add-on. Sending pauses when a plan's inclusion is used; nothing is billed past that number.

FAQ

Questions people ask before they switch

AgentiSend is a transactional email API for AI agents and the products they run inside: verify a domain, create a key with a budget, send over REST or MCP, and read a log that says what happened to every message. Every key carries a send budget, a send that matches a policy waits for a person, and one request pauses every sender. The docs are at https://agentisend.com/docs and the API contract at https://agentisend.com/openapi.json.

Let them send. Keep the brakes.

Connect a domain, give each sender a limit, and see on one screen where every email landed. If it turns out not to fit, you have sent nothing you cannot account for.

  • Free plan: 1,000 emails a month, no card, no expiry
  • No card required
  • Test sends never count