For senders who can't afford a bad day in the inbox

Switch without a rewrite, send alongside vetted senders only, and see every message from send to click.

01Send

Switch in minutes, not sprints

Install an SDK in your language, swap the client, and send your first message. Eight official SDKs, plus SMTP for anything already wired for it.

HTTP or SMTP, same events either way

Batch sends and safe retries over the API, or SMTP for the tools that already speak it. One API key works for both.

Batch sends
Up to 100 messages in one POST /v1/email/batch.
Idempotency keys
Send an Idempotency-Key header and a retry never sends twice.
SMTP over TLS
Ports 587, 2587, or 25, with STARTTLS required before you sign in.
# JSON over the HTTP API.
POST https://api.anypost.com/v1/email
{
"from": "[email protected]",
"to": ["[email protected]"],
"subject": "Welcome aboard",
"text": "Thanks for joining."
}
202 acceptedemail_018f4f3e…
email.delivered → your webhookmedian 0.8s

Keep your templates. Write the next one in Markdown.

Your HTML templates work as they are. For the next one, write a few lines of Markdown, or describe it in a sentence, and get an email tested in the inboxes your recipients use.

Draft and publish
Edits wait in a draft. Sends always use the published version.
Variables
Per-send and per-recipient values in the subject, body, and headers.
Open source
Rendered by emailmd, with more than 1,000 stars on GitHub.
You writewelcome.md
# Welcome aboard
Thanks for joining, **Jamie**.
[Get started](https://app.example.com){button}
- Set up your domain
- Send your first email

Welcome aboard

Welcome aboard

Thanks for joining, Jamie.

Get started
  • Set up your domain
  • Send your first email
GmailOutlookApple MailYahooThunderbirdMobile

Rendered and checked across the clients your recipients actually use.

Or describe it, and let AI write it

The template editor's AI assistant drafts a complete template from a sentence, layout and copy included, and revises it when you ask.

You describe

Write a shipping confirmation for an Acme order: confirm it shipped, show the delivery date, and add a button to track the package.

Generate template
Generatedshipped.md
---
preheader: Your order is on the way
---
# Your order shipped
Hi **Sam**, your Acme order is on its way.
::: callout
Arriving **Thursday, June 18**
:::
[Track your package](https://acme.com/track){button}

Eight languages, one install

Each SDK is idiomatic to its language. Prefer no SDK at all? The API is plain HTTP and JSON, so curl works just as well.

Open source
The source for every SDK is on GitHub, a click from the code beside it.
Docs for your AI tools
Every docs page is published as Markdown, with llms.txt and llms-full.txt indexes.
TypeScript
npminstall anypost
import { Anypost } from "anypost";
const anypost = new Anypost("ap_your_api_key");
await anypost.email.send({
subject: "Hello from Anypost",
text: "Hello, inbox!",
});

02Deliver

Reach the inbox. Stay there.

Where your mail lands starts with the network it leaves from. Ours carries vetted senders only, and we guard the reputation your mail builds.

Your network decides where you land. Ours is vetted.

Mailbox providers check the IP your mail leaves from before they read a word of it. Ours carry mail for vetted senders only, so your first send goes out on a reputation good senders built.

Vetted neighbors
On a shared plan, the senders beside you on each IP are vetted too. A stranger's bad list isn't your problem.
Our own IP ranges
Registered to us, not borrowed from a cloud provider, so they carry no one else's history.
Dedicated when you need it
Your own IPs, or a range you bring, when your volume calls for it. Our deliverability experts warm them up.
One bad sender's complaints count against everyone on the network
Your mailVettedUnvettedBad sender

Protect your reputation. Keep your streams apart.

A bounce or a complaint stops mail to that address before it costs you more. An unsubscribe stops only the mail it was for, so receipts and sign-in codes still get through.

Managed warm-up
Our deliverability experts ramp your sending at the pace mailbox providers trust, so a move looks steady, not sudden.
One suppression list
For every domain on your team. Bounces and complaints block all mail to an address; an unsubscribe blocks only its topic.
Feedback loops
Complaint reports from Microsoft and Yahoo suppress the address and reach you as an email.complained event.
Dedicated pools
Split dedicated addresses into named pools and pick one per message with ip_pool, so marketing never slows or taints transactional mail.
[email protected]suppressions
topic newsletterreason unsubscribedfrom the one-click button

The next three sends to Alex

  • April newsletter
    topic newsletter
    email.suppressed
    dropped, not billed
  • Your receipt
    topic receipts
    email.delivered
    accepted by the mailbox
  • Your sign-in code
    no topic
    email.delivered
    accepted by the mailbox

A bounce or a complaint would have stopped all three.

Three CNAMEs, then never touch DNS again

We generate your DKIM keys and run your SPF, DKIM, and MX records ourselves. Keys rotate without a ticket to whoever runs your DNS.

One click on Cloudflare
Approve once and the records are created in your zone. Every other provider takes the same three CNAMEs by hand.
Tracking on your brand
Open and click links on a subdomain like track.example.com, for one more CNAME. A tracking problem never blocks a send.
One-click unsubscribe
Signed List-Unsubscribe and List-Unsubscribe-Post headers per recipient, as Gmail and Yahoo require for bulk mail.
example.comverified

In your DNS

  • CNAME anypostverification
    → dq7mx2kf.c.anypost.email
  • CNAME s1._domainkey.anypostdkim
    → s1._domainkey.dq7mx2kf.c.anypost.email
  • CNAME s2._domainkey.anypostdkim
    → s2._domainkey.dq7mx2kf.c.anypost.email
  • CNAME tracktracking
    → track.anypost.email

Kept by Anypost, behind your CNAMEs

SPF
names the servers your mail leaves from
DKIM
keys rotated with no DNS change
MX
where bounces come back

03See

Never wonder where a message went

Nine events follow each message, from accepted to delivered to clicked. Watch them in the dashboard, query them from the API, or get them pushed to your endpoint the moment they happen.

Measure campaigns at the click, not the send

Label a send once with tags, a topic, a campaign, or a template. Every event for that message carries the labels, opens and clicks included, so you can filter by any of them.

One event model
The same nine types, from email.sent to email.clicked, in the dashboard, the API, and your webhooks.
Opens you can trust
Prefetchers and link scanners never become events, and opens from mailbox image proxies are labeled.
Bounces that explain
permanent, transient, or expired, with the receiving server's response, so a server that was down never counts against your list.
Events API200 OK
GET /v1/events?campaign=spring-launch&event_type=email.clicked
{
"data": [
{
"type": "email.clicked",
"occurred_at": "2026-04-30T14:02:11Z",
"recipient": "[email protected]",
"campaign": "spring-launch",
"topic": "product",
"tags": ["launch", "us"],
"template_id": "template_019e2d74-df2a…"
}
],
"has_more": true
}

The labels were set once, on the send. The click carries all four.

Durable webhooks, signed every time

A failed delivery is retried for up to 12 hours. If your endpoint keeps failing, we pause and probe instead of piling on, so a bad deploy on your side loses nothing.

Signed
HMAC-SHA256 over the timestamp and the raw body, in Anypost-Signature. Every SDK verifies it in one call.
Retried with backoff
From 30 seconds up to an hour between attempts, with a stable batch_id to de-duplicate on.
A circuit breaker
After a run of failures, deliveries pause while we probe your endpoint slowly. Events wait in the queue until it recovers.
Rotation without gaps
For 24 hours after you rotate, every delivery is signed with both secrets, so you redeploy at your own pace.
POST hooks.example.com/anypostbatch 9c1f2a7b
Anypost-Timestamp: 1777557602
Anypost-Signature: v1=5257a869e7ec…

Your endpoint goes down at 14:00

  1. 14:00:02503retry in 30s
  2. 14:00:33timeoutretry in 1m
  3. 14:00:51circuit_disabledpaused after five failures in a row; events queued; probe in 5m
  4. 14:05:51503next probe in 10m
  5. 14:15:51204delivered, queue resumes

The same batch_id on every attempt, so a retry you already stored is easy to skip.

04Trust

Secure by default. Human when it counts.

Your recipients' data is encrypted everywhere it lives and kept only as long as your policy requires. Your account opens only to the people and keys you choose. And when you write, an email expert writes back.

Nothing kept longer than your policy allows

Every email you send is personal data, so we treat it that way: encrypted in transit and at rest, and kept as long as your policy requires. Not a day longer.

Encrypted in transit
TLS on the API, STARTTLS required for SMTP submission, and TLS to each mailbox provider whenever it offers it, required where it publishes MTA-STS.
Encrypted at rest
Every disk that holds your data, and every backup.
Retention on your terms
Tell us the window your policy sets, and your event history is kept for exactly that.
The paperwork
A DPA with the Standard Contractual Clauses, a published subprocessor list with 14 days' notice of changes, and notice of a security incident within 72 hours.
What we keepand for how long
  • Event historyAs long as your policy requiresExported as it happens through webhooks and the Events API
  • Queued mailUntil deliveredUp to 7 days for mail that keeps failing, then dropped
  • SuppressionsWhile they must be honoredSo an address that bounced or complained stays stopped
  • BackupsAbout 30 daysEncrypted before they leave our servers
  • Suspected abuse30 daysMessages our abuse checks flag, held for review, then deleted

All of it encrypted at rest.

Every key scoped. Every change logged.

Give each person the role their job needs and each server a key that can only do its job. Every sign-in and every change to your setup lands in your audit log.

Invite your team
Invite teammates by email as owners, admins, or members, with 5 to 20 seats by plan and more for larger programs. A member works on templates but can't change domains, keys, or webhooks.
Scoped API keys
send_only or full, limited to the sending domains and source IPs you list. Anything else gets a 403.
Two-factor sign-in
An authenticator app on any account, with recovery codes.
An audit log
Sign-ins, failed sign-ins, two-factor changes, and every change to keys, domains, webhooks, members, and billing, with who, when, and from where.
Staff access
Our staff reach accounts only through an access gateway and an admin role, and everything they do is logged.
Production serverap_AbCdEf12Kx…
permission
send_only
domains
example.com
source IPs
203.0.113.0/24

Audit log, today

  1. 14:02API key created · Production server[email protected]
  2. 13:58Two-factor confirmed[email protected]
  3. 13:41Sign-in failed · 198.51.100.7[email protected]
  4. 11:20Webhook secret rotated[email protected]
  5. 10:05Member role changed · member to admin[email protected]

Email experts, on every plan

The team behind Anypost has spent more than 20 years in email security and deliverability. That team manages your sending and answers your email, whatever plan you're on.

Managed deliverability
Your reputation and your sending managed by our team, and a word from us when something looks off, before it becomes a problem.
Support that knows email
Write to support and the people who answer are the ones who run deliverability, at every tier.
A named manager
Dedicated plans add a deliverability manager assigned to your program.
From the teamAll plansDedicated
  • Your reputation managed by our team
  • A word from us when sending looks off
  • Support from the people who run deliverability
  • A named deliverability manager

The same people answer whichever plan you're on.

Ready. Send. Deliver.

Get started today, or talk to us about your needs.