Agents are
first-class citizens
Transactional email your agent can build against, not just send through. One API key unlocks the eml CLI, the JSON API and SMTP. Hosted in Germany, under EU law.
# Install, then set up an app in five commands. Every command takes --json and has stable exit codes. $ curl -fsSL https://eml.dev/install.sh | sh $ eml login # paste a key, or set EML_API_KEY $ eml domains add acme.com # prints the DNS records to publish $ eml domains check acme.com # looks them up in public DNS $ eml doctor # key, credits, domains, DNS, SMTP: what's left, and the fix $ eml test --to you@acme.com # sends a test email and waits for delivery # Then wire it into the app, and watch it work. $ eml env --reveal >> .env # EML_API_KEY plus SMTP settings $ eml snippet python # or curl, node, ruby, go, rails, nodemailer, django $ eml emails tail # live feed of sends, deferrals, deliveries and bounces
Tell your agent about eml.dev
One line in its instructions, CLAUDE.md or AGENTS.md is enough. The rest is in the file.
Before sending email, read https://eml.dev/AGENTS.md and follow it.
Build
Agents can build here, not just send
Every step after sign-up is scriptable: keys, domains, DNS records, verification, sending and delivery status. That makes eml.dev easier to build on than any other European email provider, whether the builder is a person or a model.
The eml CLI
Setup, sending, keys and domains from a shell, plus doctor, test and emails tail for debugging and env and snippet for wiring it into an app. Every command takes --json, exit codes are stable, and eml guide prints a guide written for coding agents. One static binary that drops into any sandbox.
Install on Linux or macOS: curl -fsSL https://eml.dev/install.sh | sh
- eml doctor
- eml test --to
- eml send --wait
- eml emails tail
- eml snippet
- eml guide
A JSON API for all of it
Domains come back with the DNS records to publish and a verify action. Keys can be created and revoked. Sending answers with a Message-ID you can look up for per-recipient status, and names any recipient that hard-bounced before. Bearer-key auth, plain offset pagination, nothing clever to learn.
- POST /emails
- GET /emails/:id
- /domains
- /api_keys
- /suppressions
- /me
Docs written for models
AGENTS.md explains how eml.dev works in a few hundred words: the endpoints, the error codes and the rules an agent should follow. llms.txt indexes the rest. No marketing, no screenshots, nothing a model has to guess at.
Errors you can branch on
Every failure has one shape and a real status code, so an agent can act instead of parsing prose. 401: get a new key. 402: ask a human for credits. 422: fix the request, the details name the field or the suppressed address. 503: retry later. The CLI maps them to stable exit codes.
# 402 Payment Required { "error": { "code": "insufficient_credits", "message": "Insufficient credits" } }
Zero to first email, without a dashboard
Sign up
eml signup creates the account from the terminal: a code goes to the person's inbox, they read it back, and the key is stored. The only manual step.
Add a domain
eml domains add returns the DNS records to publish.
Check and verify
eml domains check reads public DNS, eml doctor lists what's left and the fix.
Send
eml test --to proves delivery, then eml send or POST /emails.
Guardrails
Safe to hand to software that acts on its own
Sandbox keys
Let your agent run against the real service while you iterate on prompts. Sandbox mail is processed and logged, never delivered, and a sandbox key can't mint live keys or delete domains.
- DEV Evals and CI runs
- LOG Inspect every message
A key per agent
Give each agent its own key, with an expiry if you like. If one misbehaves, revoke that key from the CLI, the API or the dashboard and the rest keep running.
- ✓ Unlimited keys
- ✓ One-call revoke
Prepaid, capped spend
Credits are topped up in advance. A runaway loop can only spend what is in the account, never a surprise invoice.
- € €0.001 per email
- 0 No subscription
Model payments
SoonThe model pays its own way. Your agent tops up credits through the API, inside a spend limit you set, so a long-running agent never stalls on an empty balance and never runs up a bill.
Verified senders only
Mail can only go out from domains you have verified, signed with DKIM. An agent can't spoof an address you don't own, and HTML bodies are checked for scripts and forms before they leave.
EU data stays in the EU
Agents often write mail that contains customer data. It is sent and stored in Germany, outside US jurisdiction, on infrastructure that isn't Google's, Amazon's or Microsoft's.
Use cases
What agents send
Support follow-ups
Confirm a refund, a replacement or a resolved ticket once the agent has acted.
Reports and digests
Send the summary a research or monitoring agent produced, with the file attached.
Human-in-the-loop requests
Email a person when the agent needs an approval or a decision before it continues.
Workflow notifications
Tell customers when a long-running job finishes, fails or needs their input.
Point your agent at eml.dev
100 free emails once a domain is verified. No credit card required. Everything after sign-up is scriptable.