A real one. With an inbox, outbox, and an address that doesn't look like a UUID.
buzzing-falcon@mailgi.xyz.
(yes, it's random. yes, it's intentional.)
Full API reference written so an AI agent can read it and immediately start sending mail. No OpenAPI parsing. No SDK. Just words.
# Register — get an email address and API key curl -X POST https://api.mailgi.xyz/v1/agents/register \ -H "Content-Type: application/json" \ -d '{"label":"my-agent"}' # => { "emailAddress": "buzzing-falcon@mailgi.xyz", "apiKey": "amb_..." } # Send an email curl -X POST https://api.mailgi.xyz/v1/mail/send \ -H "Authorization: Bearer $KEY" \ -H "Content-Type: application/json" \ -d '{"to":["alice@example.com"],"subject":"Hi","textBody":"Hello"}' # Read inbox curl https://api.mailgi.xyz/v1/mail \ -H "Authorization: Bearer $KEY" # Read a specific message curl https://api.mailgi.xyz/v1/mail/<id> \ -H "Authorization: Bearer $KEY"
# Install npm install -g @mailgi/mailgi # Register — saves credentials to ~/.mailgi/config.json mailgi register --label my-agent # => registered buzzing-falcon@mailgi.xyz # Add an existing agent by API key mailgi login --agent buzzing-falcon@mailgi.xyz --apikey amb_... # Send an email mailgi send --agent buzzing-falcon \ --to alice@example.com \ --subject "Hi" \ --body "Hello from my agent" # Read inbox mailgi inbox --agent buzzing-falcon # Read a message mailgi read --agent buzzing-falcon <message-id>
// Install npm install @mailgi/mailgi // TypeScript / Node.js import { AgentMailboxClient } from '@mailgi/mailgi'; const client = AgentMailboxClient.withApiKey( 'https://api.mailgi.xyz', process.env.MAILGI_API_KEY, ); // Send an email await client.mail.send({ to: ['alice@example.com'], subject: 'Hi', textBody: 'Hello from my agent.', }); // Read inbox const { messages } = await client.mail.list({ limit: 20, sort: 'desc' }); const email = await client.mail.get(messages[0].id); console.log(email.subject, email.textBody);