Skip to content

Domains · Starter and Pro

An inbox in one curl — or your own domain.

AgentMail's published free tier does not include custom domains. Cooper Free includes 0. Starter includes 15 and Pro includes 200. A zone already on the operator Cloudflare account gets its DNS written automatically. A zone on that account that is not active stays manual. Any other DNS host is external: you publish the records from POST /api/v1/domains, and Cooper checks them with public DNS. Receiving goes live within a few minutes on a Cloudflare zone, and on external DNS after the receiving MX verifies. Delete cleans up the records Cooper created. @cooperemail.com still needs no DNS.

Works now
Use @cooperemail.com

No DNS. POST /api/v1/onboard issues username@cooperemail.com immediately. This is the magical path for agents on day one.

curl -s $HOST/api/v1/onboard -d '{"username":"research-bot"}'

Bring your domain
Bring your domain

Exact values come from POST /api/v1/domains. An active zone on the operator Cloudflare account is written for you and dns.mode is automatic. A zone on that account that is not active stays manual. Any other DNS host is external: you add the records below. Paste a hostname to preview both.

Cloudflare zone on the operator account

dns.mode automatic writes these. A zone on the account that is not active stays manual: publish them, or point the nameservers at the response. Priorities, the DKIM selector, the DKIM TXT, and the verify token are in POST /api/v1/domains. An existing DMARC TXT is left as published.

MXRouting MX

Host

agents.example.com

Type

MX

Value

route1.mx.cloudflare.net

Priority

10

MXRouting MX

Host

agents.example.com

Type

MX

Value

route2.mx.cloudflare.net

Priority

20

MXRouting MX

Host

agents.example.com

Type

MX

Value

route3.mx.cloudflare.net

Priority

30

TXTRouting SPF

Host

agents.example.com

Type

TXT

Value

v=spf1 include:_spf.mx.cloudflare.net ~all

TXTRouting DKIM

Host

<selector>._domainkey.agents.example.com

Type

TXT

Value

Cloudflare DKIM TXT

MXBounce MX

Host

cf-bounce.agents.example.com

Type

MX

Value

route1.mx.cloudflare.net

Priority

10

TXTBounce SPF

Host

cf-bounce.agents.example.com

Type

TXT

Value

v=spf1 include:_spf.mx.cloudflare.net ~all

TXTBounce DKIM

Host

cf-bounce._domainkey.agents.example.com

Type

TXT

Value

Cloudflare DKIM TXT

TXTDMARC

Host

_dmarc.agents.example.com

Type

TXT

Value

Existing DMARC TXT, left as published

TXTVerify

Host

_cooper-verify.agents.example.com

Type

TXT

Value

Token from POST /api/v1/domains

External DNS

dns.mode external when this hostname is not a zone on the operator account. Add one record per row at your DNS host. Copy host, type, value, priority, and TTL from the API response. The receiving MX hostname and the DKIM value are issued there. Publish one SPF TXT on the return-path host, with a single include. Do not add a second SPF or DMARC TXT. An apex v=spf1 -all does not reject the return-path envelope. DMARC p=reject stays, and it blocks mail until the DKIM TXT verifies.

MXReceiving MX

Host

agents.example.com

Type

MX

Value

Receiving MX hostname from POST /api/v1/domains

Priority

10

TTL

3600

MXReturn-path MX

Host

send.agents.example.com

Type

MX

Value

feedback-smtp host from POST /api/v1/domains

Priority

10

TTL

3600

TXTReturn-path SPF, one record

Host

send.agents.example.com

Type

TXT

Value

v=spf1 include:amazonses.com ~all

TTL

3600

TXTDKIM

Host

resend._domainkey.agents.example.com

Type

TXT

Value

DKIM value from POST /api/v1/domains

TTL

3600

TXTDMARC

Host

_dmarc.agents.example.com

Type

TXT

Value

Existing DMARC TXT, left as published

TTL

3600

TXTVerify

Host

_cooper-verify.agents.example.com

Type

TXT

Value

Token from POST /api/v1/domains

TTL

3600

Agents ask

Domain FAQ

Custom domains start on Starter. More answers are on the FAQ.

Are custom domains included?

Not on Free. Starter includes 15 custom domains and Pro includes 200. POST /api/v1/domains {"domain":"agents.example.com"} returns SPF, DKIM, DMARC, and MX records. GET /api/v1/domains/:id shows status. The daily cron sends domain.verified when the records match. Cooper writes DNS for an active zone already on the operator Cloudflare account. A hostname that is not a zone on that account uses external DNS: you publish the returned records at your DNS host, and Cooper checks them with public DNS. Onboard still issues username@cooperemail.com with no DNS.

What is on the free tier?

Free is $0, no card: 5,000 emails/month, 5 inboxes, custom domains not included, no separate daily cap. Starter is $12/month. Pro is $99/month. Checkout is POST /api/v1/billing/checkout. AgentMail Free is 3,000 emails/month, 100/day, 3 inboxes, and no custom domain (https://www.agentmail.to/pricing, 2026-10-10).

What are the rate limits?

Free is 5,000 emails/month and 5 inboxes. Starter is 25,000/month. Pro is 250,000/month. Cooper does not publish a separate daily cap (AgentMail Free is 100/day, 2026-10-10). Over the inbox, domain, or monthly send cap, the API returns HTTP 402 with upgrade_url. On Starter or Pro, POST /api/v1/billing/addons raises that cap. Free cannot buy add-ons. Details: https://cooperemail.com/limits.

More answers on the FAQ