transactional & marketing email for AI agents

Your agents write it.
We get it delivered.

One REST API that gives your agents what raw SMTP never will: lists, tags, versioned templates, scheduling, and a sender reputation that holds. The back office stays readable for the humans.

3,000 emails/month free
No credit card
TypeScript, Python and Go SDKs
POST /v2/campaigns201
1await client.campaigns.create({
2 name: 'Weekly digest — week 32',
3 template: 'weekly-digest@v4',
4 audience: {
5 list: 'lst_9f2c',
6 tags: { any: ['active', 'pro'] },
7 exclude:{ tags: ['digest-optout'] }
8 },
9 variables: { week: 32, topStory },
10 sendAt: '2026-08-10T09:00:00+02:00',
11 idempotencyKey: 'digest-2026-w32'
12})
13
14// → { id: 'cmp_4a71', status: 'scheduled',
15// recipients: 8340, sendAt: '…' }
99.2%delivered over the last 30 days
84 msmedian API latency
0.02%average complaint rate
built for agent runtimes
LangGraphCrewAIVercel AI SDKn8nTemporalMCP
the platform

Everything an agent needs to be able to call

Every product primitive is a REST resource. Nothing is reserved for the UI: whatever you do in a click, an agent does in one call.

API coverage
100 %of every back-office action
audience01
Lists & segmentsExplicit lists, not a CRM in disguise. A segment is a query over tags, status and activity, resolved at send time — never a frozen snapshot.
POST/v2/lists
GET/v2/lists/:id/contacts?cursor=
tags02
Tags & behaviourSet a tag from a webhook, a click or an agent decision. Tags trigger sequences and drive exclusions, with no intermediate table to maintain.
POST/v2/contacts/:id/tags
DEL/v2/contacts/:id/tags/:tag
templates03
Versioned templatesMarkdown plus a shared layout, typed variables, and every publish creates an immutable version. An agent pins a version: the render never shifts under its feet.
POST/v2/templates/:id/versions
POST/v2/templates/:id/render
scheduling04
Scheduling & sequencesSend at the recipient's local hour, with linear sequences triggered by a tag or a list entry. Cancellable up to five minutes before departure.
POST/v2/campaigns/:id/schedule
POST/v2/sequences/:id/enroll
domain05
Custom sending domainDKIM, SPF and DMARC verified through the API, a dedicated subdomain per environment, optional dedicated IP. Your mail leaves from your domain, not ours.
POST/v2/domains/:id/verify
GET/v2/domains/:id/dns
insights06
Clicks & reputationUnique clicks per link, qualified bounces, complaints. No open pixel sold as truth: opens are labelled indicative, clicks are the data.
GET/v2/campaigns/:id/stats
GET/v2/suppressions
deliverability

Your domain, your reputation

Guided DKIM, SPF and DMARC verification, a dedicated IP from the Studio plan up, and an automatic suppression list for hard bounces and complaints. An agent sending too fast gets throttled, not burned.

DKIMmail._domainkey.yourdomain.comverified
SPFv=spf1 include:spf.agentmail.com ~allverified
DMARCp=quarantine; rua=mailto:dmarc@…verified
!IP51.15.204.88 — warm-up day 6 / 14in progress
last 30 days
Delivered99.2%
Hard bounces0.4%
Spam complaints0.02%
Landed in primary inbox96.7%
automatic guardrailPast a 0.1% complaint rate, sending drops to a slow queue and an alert fires on your webhook — before your domain takes the hit.
rest api

Idempotent, typed, no surprises

An idempotency key on every write, stable pagination cursors, signed webhooks. An agent that retries never sends twice.

POST/v2/contacts/upsertidempotent
curl -X POST https://api.agentmail.com/v2/\ contacts/upsert \ -H 'Authorization: Bearer sk_live_…' \ -H 'Idempotency-Key: sync-1f8a3c' \ -d '{ "list": "lst_9f2c", "email": "ada@example.com", "tags": ["active", "pro"], "attributes": { "plan": "studio" } }'
signed webhookshmac-sha256
email.deliveredaccepted by the receiving server
email.clickedlink followed, with the target URL
email.bouncedhard or soft, with the SMTP code
email.complainedspam complaint — instant suppression
contact.unsubscribedone-click unsubscribe
domain.reputationcomplaint threshold crossed
600 req/minper key, bursting to 2,000
OpenAPI 3.1generated SDKs, types always current
24 hof webhook retries, exponential backoff
Zero dupesevery write accepts an idempotency key
in practice

One agent, four calls, a campaign out the door

1POST
Build the audience/v2/contacts/upsertBatch upsert, up to 1,000 contacts per call. Duplicates are merged on the email address.
2POST
Publish the content/v2/templates/:id/versionsThe agent's markdown becomes an immutable version you can preview before it ships.
3POST
Schedule the send/v2/campaignsThe audience resolves at send time, so today's unsubscribes drop out on their own.
4GET
Read the result/v2/campaigns/:id/statsOr wait for the webhook. Per-link clicks stream in continuously.
pricing

Priced on volume sent, not contacts stored

No charge for API calls. No tiers on contact count.
Free
$0/ month
3,000 emails per month
1 verified domain
Unlimited lists, tags and templates
Full API, 600 req/min
Signed webhooks
Create a key
Studiorecommended
$39/ month, 50k emails
50,000 emails included, then $0.60 / 1,000
Unlimited domains and subdomains
Dedicated IP with guided warm-up
Sequences and local-time scheduling
Weekly deliverability report
Start building
Fleet
Custom
Multi-org for agent fleets
Per-agent keys and quotas
99.95% SLA with a shared channel
Choice of data residency
Monthly reputation review
Talk to us

Give your agent a sending address that actually lands

3,000 emails a month on the free tier, no card. API key in thirty seconds, verified domain in ten minutes.

$npm i @agentmail/sdkcopy
AgentMail
Email infrastructure for AI agents. EU-hosted, GDPR by default, one-click unsubscribe on every send.
eu-west-3SOC 2 type II
© 2026 AgentMail, inc.
all systems operational · 99.98% over 90 days