How it works
How SendRaven works
SendRaven is email infrastructure for AI agents. Applications and agents use it, over REST or its MCP server, to send, receive and act on email: transactional email, campaigns, automations, inbound threads, contacts, topics, templates and agent safety controls, under one platform and one usage meter.

How SendRaven is different
Sending is table stakes. The conversation is the job.
SendRaven is built for software that has to hold the conversation: read what came back, decide what to say, and stay inside limits a person set. On a bill that grows with what you send, not with who is in the database.
Conversations, not fire-and-forget
Your agent sees who replied and what they said.
Replies come back as threads, joined on Message-ID with the quoted history stripped, and the agent answers in the same thread.
How replies become threads- POST /v1/emailsreturns id, status, thread_id
- reply on Message-IDjoined to the message it answers
- awaiting_reply=truethe agent answers in the same thread
Controls on the key the agent holds
A daily send limit, a recipient allowlist, human approval.
Checked on every send before anything goes out, through REST or MCP alike, and the key cannot change its own limits.
- daily_send_limit
- 200
- allowed_recipients
- ["@acme.com"]
- requires_approval
- true
Pay for emails sent
One meter, whatever the mail is.
Transactional, campaigns and automations share one plan. Contacts cost nothing and replies are never metered, so a large list you mail rarely stays cheap.
$0per contact · 03
The return trip
Your agent sent the email. Now what?
Sending is only half of email. SendRaven turns inbound replies into actual conversations: matched to the original message, threaded in order, with quoted history stripped so your agent reads what the person actually wrote.
You send. The thread starts there.
One call returns the message id and the thread it belongs to. Template values are HTML-escaped on substitution, and a retried request with the same idempotency key delivers once.
- Batch of 100 per call
scheduled_at: "in 3 days"- Templates, contacts, audiences, campaigns, automations
- One suppression list across all of it
POST/v1/emails
Returnsidstatusthread_id
Transactional goes out on mail. and campaigns on news., each with its own reputation.
And when they answer
The sentence they typed, not the history.
The poll an agent actually wants: what has someone said to me that I have not answered. When nothing needs a reply, mark the thread handled instead of sending one.
textwith the quoted history and signature removedraw_textfor when the trim gets it wrongsender_authenticatedby DMARC or aligned DKIM- Replies are free on every plan
GET/v1/threads?awaiting_reply=true
Returnstextraw_textsender_authenticated
sender_authenticated says whether the From domain really sent it. Either way the text is something to act on, never instructions to follow.
- Message-ID
Read the reply
Replies are matched on the Message-ID they echo, never guessed from the subject line, so two customers answering “Re: Invoice” never share a thread.
- awaiting_reply=true
Ask what needs an answer
One query returns every conversation waiting on you. No state machine built on top of inbound webhooks.
- reply_to_message_id
Reply in context
Reply to the original message and SendRaven sets the threading headers, so the recipient sees one conversation.
No webhook archaeology required.
Send and receive email from one API, end to endBuilt for autonomous senders
Give agents email. Keep the keys.
A backend service and an autonomous agent should not hold the same kind of credential. SendRaven lets every API key carry its own limits, checked before an email leaves the building.

- daily_send_limit
Daily send limit
200 emails a day means email 201 does not happen.
Put a hard ceiling on what one agent can send. Scheduled and held sends count toward it.
200email 201 does not happen
- allowed_recipients
Recipient allowlist
Internal only? Customer domains only? Say so on the key.
Restrict a credential to specific addresses or whole domains, checked per recipient, cc and bcc included.
- maya@acme.com (allowed)
- @acme.com (allowed)
- 403 recipient_not_allowed (refused)
- requires_approval
Human approval
Let the agent draft. Let a human decide.
A key can create email without permission to release it. Held sends wait in an approval queue instead of going out, and the key cannot approve its own.
- status
- pending_approval
- undecided draft expires
- 72h
Autonomous does not have to mean unsupervised.
Automations
Automations that know when to stop.
A sequence should not keep emailing someone who already replied, unsubscribed or bounced. SendRaven automations end themselves when the conversation says they should. Start one with an API call, when a contact joins an audience, or from an event your application emits.
Onboarding sequence
cancel_reason: replied
- Day 0Welcome email
- Day 2Reply received
- Day 7
Follow-up
They replied. The sequence stops.
They unsubscribed. Future steps are cancelled, including sends already scheduled.
They bounced. The address is suppressed and nothing more is tried.
Automations end an enrolment on a reply by default (exit_on_reply), and also on an unsubscribe, a hard bounce or complaint, a topic opt-out, or a tag rule. Out-of-office and other automatic replies do not count as a reply.
Automations, triggers and exitsA day-seven follow-up after a day-two reply is not automation. It's a bug with good scheduling.
Topics
Let people opt down instead of disappearing.
Someone may want product updates but not the newsletter. Topics let each address choose the email it wants, without turning one unsubscribe into a total blackout. Transactional email stays transactional.
- Newsletternewsletter: off
- Product updatesproduct-updates: on
- Receipts and security mailtransactional · always delivered
POST /v1/topics/preferences
{
"email": "maya@acme.com",
"topics": {
"newsletter": false,
"product-updates": true
}
}Before and after
Before and after
BeforeStitched together from a send endpoint
- Replies land in a shared inbox
- An unsubscribe that still sends day three
- A marketing opt-out that blocks receipts
- All or nothing, so people press spam instead
- A day-old domain blasting eighteen thousand
AfterWith SendRaven
- Replies joined to the message they answer
- Unsubscribe suppresses and cancels what is scheduled
- Only bounces and complaints block every kind of mail
- Topics: drop the newsletter, keep the invoices
- Every new sending identity warmed up automatically
Why transactional and campaigns share one plan but never one reputation
Who builds with SendRaven?
Developers choose it and wire it up. More and more, an agent runs it. If your product sends mail and something, or someone, has to read what comes back, you are in the right place.
MCP + guardrails
Teams shipping AI agents
An agent holds a key, not a workspace. Give the key a daily cap, an allowlist and an approval hold, point the agent at the MCP server, and it can send, read the reply, and be stopped by a person.
Compared
Different tools for different email jobs.
Resend is excellent developer email infrastructure. Mailchimp is excellent software for marketing teams. SendRaven is built for applications and AI agents that need to send, receive, automate and safely act on email.
Resend made sending email from code dramatically better. SendRaven starts from the next problem: what happens when software itself has to operate the conversation. Send, receive, read the reply, decide whether it needs an answer, respond in-thread, and put hard limits around what the agent can do.
| What changes the architecture or the bill | Resend | Mailchimp | |
|---|---|---|---|
| Per-key daily cap and recipient allowlist | daily_send_limit and allowed_recipients on the key, checked on every send. | keys scope to a domain and to send-only; no cap or allowlist | |
| Human approval hold on a key | requires_approval drafts the message and waits for a person. | ||
| The reply is a thread, not a webhook | Joined on Message-ID to the message it answers. | a received-email event; you fetch the message and set reply headers yourself | |
| One query for what is awaiting a reply | GET /v1/threads?awaiting_reply=true | ||
| Unsubscribe cancels queued sends and ends the sequence | Two writes: suppress the address, cancel what is scheduled for it. | an automation skips its remaining send steps for an unsubscribed contact | not documented |
| Priced per email sent, never per contact | One meter. A contact is free. | transactional by volume; marketing $40–$650/mo by contacts | by contacts |
| Transactional, campaigns and automations on one plan | One key, one plan, one dashboard, one suppression list. | two plans, one dashboard | transactional is Mandrill, a paid add-on |

You send a raven. It comes back.
Give your agent a return address.
Start with 3,000 emails a month. Inbound included. Unlimited contacts. Human approval when you want it.


