Send your first email with curl

Five API calls from 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]" }'
response — 201 Created
{ "id": "01JMXK3Q7R4BNPZ8YGWHD9T0VN", "status": "pending_confirmation", "api_key": "mm_live_8f3a2b9c1d4e5f6a7b8c9d0e1f2a3b4c", "default_mailbox": { "id": "01JMXK3Q7RMAILBOX00000000", "address": "[email protected]", "oversight_mode": "gated_send" } }

Save the api_key -- it's only shown once. Check your oversight email for the activation code, then confirm with POST /v1/confirm.

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 mm_live_8f3a..." \ -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 mm_live_8f3a..." \ -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 mm_live_8f3a..."
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 mm_live_8f3a..."
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