Send your first agent email

The fast way: paste one prompt to your agent and it sets itself up. The manual way: five REST calls with curl. Both are below.


Try it with your agent

You don't have to write any of these calls. Pick what you want it to do, copy the prompt, and paste it to your AI agent — it reads the docs, connects, creates a free inbox, and sets up a verified sender. Nothing to fill in.

1. Get MultiMail ready: read https://multimail.dev/llms.txt and follow it to create a free inbox (MultiMail emails me an activation code to approve the new account - ask me for it) and set up a verified sender for our product. 2. Use our app's signup, receipt, and password-reset events as the triggers. 3. Draft and send transactional emails (welcome, receipts, password resets), personalized per user and event. 4. Use gated_send mode at first so I approve each outbound email until you've earned trust. 5. Ask me only for the sender name, domain, and brand details needed to go live.

Or call the REST API yourself

Five calls, signup to reading your inbox. All you need is curl and a terminal.

Base URL for all requests: https://api.multimail.dev. Authenticate with Authorization: Bearer mm_live_... on every request after signup.

1 Sign up
POST
/v1/account
request
curl -X POST https://api.multimail.dev/v1/account \ -H "Content-Type: application/json" \ -d '{ "operator_name": "Greenline Studios", "slug": "greenline", "accepted_tos": true, "accepted_operator_agreement": true, "accepted_anti_spam_policy": true, "email_use_type": "transactional", "oversight_email": "[email protected]", "pow_solution": { "algorithm": "SHA-256", "challenge": "...", "number": 12345, "salt": "...", "signature": "..." } }'
response — 200 OK
{ "status": "confirmation_sent" }

POST /v1/account requires a solved proof-of-work (the pow_solution object) from POST /v1/account/challenge — see llms.txt for the challenge-and-solve loop. It does not return an API key: it emails a one-time activation code to your oversight_email. Have your operator send you that code, then redeem it at POST /v1/confirm with {"code": "..."} to receive your api_key and default mailbox (the key is shown once).

2 Create a mailbox
POST
/v1/mailboxes

Your account already includes a default mailbox. Create additional ones for different agents or use cases.

request
curl -X POST https://api.multimail.dev/v1/mailboxes \ -H "Authorization: Bearer $MULTIMAIL_API_KEY..." \ -H "Content-Type: application/json" \ -d '{ "address_local_part": "outreach", "display_name": "Outreach Agent", "oversight_mode": "gated_send" }'
response — 201 Created
{ "id": "01JMXK9F2A3B4C5D6E7F8G9H0J", "address": "[email protected]", "display_name": "Outreach Agent", "oversight_mode": "gated_send" }
3 Send an email
POST
/v1/mailboxes/{mailbox_id}/send

Send markdown. It arrives as formatted HTML. In gated_send mode you'll get a 202 (held for approval) instead of 200.

request
curl -X POST https://api.multimail.dev/v1/mailboxes/01JMXK9F2A.../send \ -H "Authorization: Bearer $MULTIMAIL_API_KEY..." \ -H "Content-Type: application/json" \ -d '{ "to": ["[email protected]"], "subject": "Weekly summary", "markdown": "## Completed\n\n- Deployed v2.1\n- Fixed login bug\n- Updated docs\n\nAll items resolved." }'
response — 202 Accepted (gated) or 200 OK (autonomous)
{ "id": "em_7kPq2xR9vBn3mJfL4wYs", "status": "pending_send_approval", "thread_id": "th_9aWx3kR7vBm2nJeL5wZt" }
4 Check your inbox
GET
/v1/mailboxes/{mailbox_id}/emails

List emails with optional filters. This returns summaries only -- call read_email for full content.

request
curl "https://api.multimail.dev/v1/mailboxes/01JMXK9F2A.../emails?status=unread" \ -H "Authorization: Bearer $MULTIMAIL_API_KEY..."
response — 200 OK
{ "emails": [ { "id": "em_4bNx8kT2wRm6pJcQ9vYs", "from": "[email protected]", "to": ["[email protected]"], "subject": "Re: Weekly summary", "status": "unread", "received_at": "2026-03-09T14:22:00.000Z", "has_attachments": false } ], "cursor": null }
5 Read an email
GET
/v1/mailboxes/{mailbox_id}/emails/{email_id}

Returns the full email with markdown body. Automatically marks unread emails as read.

request
curl "https://api.multimail.dev/v1/mailboxes/01JMXK9F2A.../emails/em_4bNx8kT2wRm6pJcQ9vYs" \ -H "Authorization: Bearer $MULTIMAIL_API_KEY..."
response — 200 OK
{ "id": "em_4bNx8kT2wRm6pJcQ9vYs", "from": "[email protected]", "to": ["[email protected]"], "subject": "Re: Weekly summary", "markdown": "Thanks for the update. Can you share the deploy logs for v2.1?\n\nBest,\nBob", "status": "read", "thread_id": "th_9aWx3kR7vBm2nJeL5wZt", "received_at": "2026-03-09T14:22:00.000Z", "attachments": [], "tags": {} }

You're sending email. Now what?

Reply in-thread with POST /v1/mailboxes/:id/reply/:eid. Set up webhooks for real-time notifications. Or explore the full API reference.

Full API docs · MCP server quickstart · Common patterns · Oversight modes