Endpoints
Every MachineMail HTTP endpoint, grouped by resource.
Base URL: https://api.machinemail.dev. Resource endpoints live under /v0. Generated from openapi/machinemail.yaml (OpenAPI 3.1.0, API version 0.1.0).
Inboxes
Inboxes. inbox_id is the email address.
| Method | Path | Summary |
|---|---|---|
GET | /v0/inboxes | List Inboxes |
POST | /v0/inboxes | Create Inbox |
GET | /v0/inboxes/availability | Check Inbox Availability |
GET | /v0/inboxes/search | Search Inboxes |
GET | /v0/inboxes/{inbox_id} | Get Inbox |
PATCH | /v0/inboxes/{inbox_id} | Update Inbox |
DELETE | /v0/inboxes/{inbox_id} | Delete Inbox |
GET | /v0/pods/{pod_id}/inboxes | List Inboxes in Pod |
POST | /v0/pods/{pod_id}/inboxes | Create Inbox in Pod |
GET | /v0/pods/{pod_id}/inboxes/availability | Check Inbox Availability in Pod |
GET | /v0/pods/{pod_id}/inboxes/search | Search Inboxes in Pod |
GET | /v0/pods/{pod_id}/inboxes/{inbox_id} | Get Inbox in Pod |
PATCH | /v0/pods/{pod_id}/inboxes/{inbox_id} | Update Inbox in Pod |
DELETE | /v0/pods/{pod_id}/inboxes/{inbox_id} | Delete Inbox in Pod |
Messages
Send, receive, search and manage messages.
| Method | Path | Summary |
|---|---|---|
GET | /v0/inboxes/{inbox_id}/messages | List Messages |
POST | /v0/inboxes/{inbox_id}/messages/batch-get | Batch Get Messages |
POST | /v0/inboxes/{inbox_id}/messages/batch-update | Batch Update Messages |
GET | /v0/inboxes/{inbox_id}/messages/search | Search Messages |
POST | /v0/inboxes/{inbox_id}/messages/send | Send Message |
GET | /v0/inboxes/{inbox_id}/messages/{message_id} | Get Message |
PATCH | /v0/inboxes/{inbox_id}/messages/{message_id} | Update Message |
DELETE | /v0/inboxes/{inbox_id}/messages/{message_id} | Delete Message |
GET | /v0/inboxes/{inbox_id}/messages/{message_id}/attachments/{attachment_id} | Get Attachment |
GET | /v0/inboxes/{inbox_id}/messages/{message_id}/attachments/{attachment_id}/download | Download Attachment |
POST | /v0/inboxes/{inbox_id}/messages/{message_id}/forward | Forward Message |
GET | /v0/inboxes/{inbox_id}/messages/{message_id}/raw | Get Raw Message |
POST | /v0/inboxes/{inbox_id}/messages/{message_id}/reply | Reply To Message |
POST | /v0/inboxes/{inbox_id}/messages/{message_id}/reply-all | Reply All Message |
GET | /v0/pods/{pod_id}/inboxes/{inbox_id}/messages | List Messages in Pod |
POST | /v0/pods/{pod_id}/inboxes/{inbox_id}/messages/batch-get | Batch Get Messages in Pod |
POST | /v0/pods/{pod_id}/inboxes/{inbox_id}/messages/batch-update | Batch Update Messages in Pod |
GET | /v0/pods/{pod_id}/inboxes/{inbox_id}/messages/search | Search Messages in Pod |
POST | /v0/pods/{pod_id}/inboxes/{inbox_id}/messages/send | Send Message in Pod |
GET | /v0/pods/{pod_id}/inboxes/{inbox_id}/messages/{message_id} | Get Message in Pod |
PATCH | /v0/pods/{pod_id}/inboxes/{inbox_id}/messages/{message_id} | Update Message in Pod |
DELETE | /v0/pods/{pod_id}/inboxes/{inbox_id}/messages/{message_id} | Delete Message in Pod |
GET | /v0/pods/{pod_id}/inboxes/{inbox_id}/messages/{message_id}/attachments/{attachment_id} | Get Attachment in Pod |
GET | /v0/pods/{pod_id}/inboxes/{inbox_id}/messages/{message_id}/attachments/{attachment_id}/download | Download Attachment in Pod |
POST | /v0/pods/{pod_id}/inboxes/{inbox_id}/messages/{message_id}/forward | Forward Message in Pod |
GET | /v0/pods/{pod_id}/inboxes/{inbox_id}/messages/{message_id}/raw | Get Raw Message in Pod |
POST | /v0/pods/{pod_id}/inboxes/{inbox_id}/messages/{message_id}/reply | Reply To Message in Pod |
POST | /v0/pods/{pod_id}/inboxes/{inbox_id}/messages/{message_id}/reply-all | Reply All Message in Pod |
Threads
Conversation threads.
| Method | Path | Summary |
|---|---|---|
GET | /v0/inboxes/{inbox_id}/threads | List Threads |
GET | /v0/inboxes/{inbox_id}/threads/search | Search Threads |
GET | /v0/inboxes/{inbox_id}/threads/{thread_id} | Get Thread |
PATCH | /v0/inboxes/{inbox_id}/threads/{thread_id} | Update Thread |
DELETE | /v0/inboxes/{inbox_id}/threads/{thread_id} | Delete Thread |
GET | /v0/pods/{pod_id}/inboxes/{inbox_id}/threads | List Threads in Pod |
GET | /v0/pods/{pod_id}/inboxes/{inbox_id}/threads/search | Search Threads in Pod |
GET | /v0/pods/{pod_id}/inboxes/{inbox_id}/threads/{thread_id} | Get Thread in Pod |
PATCH | /v0/pods/{pod_id}/inboxes/{inbox_id}/threads/{thread_id} | Update Thread in Pod |
DELETE | /v0/pods/{pod_id}/inboxes/{inbox_id}/threads/{thread_id} | Delete Thread in Pod |
GET | /v0/pods/{pod_id}/threads | List Threads in Pod |
GET | /v0/pods/{pod_id}/threads/search | Search Threads in Pod |
GET | /v0/pods/{pod_id}/threads/{thread_id} | Get Thread in Pod |
PATCH | /v0/pods/{pod_id}/threads/{thread_id} | Update Thread in Pod |
DELETE | /v0/pods/{pod_id}/threads/{thread_id} | Delete Thread in Pod |
GET | /v0/threads | List Threads |
GET | /v0/threads/search | Search Threads |
GET | /v0/threads/{thread_id} | Get Thread |
PATCH | /v0/threads/{thread_id} | Update Thread |
DELETE | /v0/threads/{thread_id} | Delete Thread |
Drafts
Drafts (unsent messages a person can send or delete) and scheduled sends (send_at).
| Method | Path | Summary |
|---|---|---|
GET | /v0/drafts | List Drafts |
GET | /v0/drafts/{draft_id} | Get Draft |
GET | /v0/inboxes/{inbox_id}/drafts | List Drafts |
POST | /v0/inboxes/{inbox_id}/drafts | Create Draft |
GET | /v0/inboxes/{inbox_id}/drafts/{draft_id} | Get Draft |
PATCH | /v0/inboxes/{inbox_id}/drafts/{draft_id} | Update Draft |
DELETE | /v0/inboxes/{inbox_id}/drafts/{draft_id} | Delete Draft |
POST | /v0/inboxes/{inbox_id}/drafts/{draft_id}/send | Send Draft |
GET | /v0/pods/{pod_id}/drafts | List Drafts in Pod |
GET | /v0/pods/{pod_id}/drafts/{draft_id} | Get Draft in Pod |
GET | /v0/pods/{pod_id}/inboxes/{inbox_id}/drafts | List Drafts in Pod |
POST | /v0/pods/{pod_id}/inboxes/{inbox_id}/drafts | Create Draft in Pod |
GET | /v0/pods/{pod_id}/inboxes/{inbox_id}/drafts/{draft_id} | Get Draft in Pod |
PATCH | /v0/pods/{pod_id}/inboxes/{inbox_id}/drafts/{draft_id} | Update Draft in Pod |
DELETE | /v0/pods/{pod_id}/inboxes/{inbox_id}/drafts/{draft_id} | Delete Draft in Pod |
POST | /v0/pods/{pod_id}/inboxes/{inbox_id}/drafts/{draft_id}/send | Send Draft in Pod |
Trust
Trust reports for inbound messages.
| Method | Path | Summary |
|---|---|---|
GET | /v0/inboxes/{inbox_id}/messages/{message_id}/trust | Get Message Trust Report |
GET | /v0/pods/{pod_id}/inboxes/{inbox_id}/messages/{message_id}/trust | Get Message Trust Report in Pod |
Domains
Custom domains, DNS records, catch-all.
| Method | Path | Summary |
|---|---|---|
GET | /v0/domains | List Domains |
POST | /v0/domains | Create Domain |
GET | /v0/domains/{domain_id} | Get Domain |
PATCH | /v0/domains/{domain_id} | Update Domain |
DELETE | /v0/domains/{domain_id} | Delete Domain |
GET | /v0/domains/{domain_id}/domain-connect | Get Domain Connect Setup |
POST | /v0/domains/{domain_id}/verify | Verify Domain |
GET | /v0/domains/{domain_id}/zone-file | Get Zone File |
GET | /v0/pods/{pod_id}/domains | List Domains in Pod |
POST | /v0/pods/{pod_id}/domains | Create Domain in Pod |
GET | /v0/pods/{pod_id}/domains/{domain_id} | Get Domain in Pod |
PATCH | /v0/pods/{pod_id}/domains/{domain_id} | Update Domain in Pod |
DELETE | /v0/pods/{pod_id}/domains/{domain_id} | Delete Domain in Pod |
GET | /v0/pods/{pod_id}/domains/{domain_id}/domain-connect | Get Domain Connect Setup in Pod |
POST | /v0/pods/{pod_id}/domains/{domain_id}/verify | Verify Domain in Pod |
GET | /v0/pods/{pod_id}/domains/{domain_id}/zone-file | Get Zone File in Pod |
Webhooks
Webhook endpoints, deliveries and replay.
| Method | Path | Summary |
|---|---|---|
GET | /v0/inboxes/{inbox_id}/webhooks | List Webhooks in Inbox |
POST | /v0/inboxes/{inbox_id}/webhooks | Create Webhook in Inbox |
GET | /v0/inboxes/{inbox_id}/webhooks/{webhook_id} | Get Webhook in Inbox |
PATCH | /v0/inboxes/{inbox_id}/webhooks/{webhook_id} | Update Webhook in Inbox |
DELETE | /v0/inboxes/{inbox_id}/webhooks/{webhook_id} | Delete Webhook in Inbox |
GET | /v0/inboxes/{inbox_id}/webhooks/{webhook_id}/deliveries | List Deliveries in Inbox |
POST | /v0/inboxes/{inbox_id}/webhooks/{webhook_id}/deliveries/{delivery_id}/replay | Replay Delivery in Inbox |
POST | /v0/inboxes/{inbox_id}/webhooks/{webhook_id}/test | Send Test Event in Inbox |
GET | /v0/pods/{pod_id}/webhooks | List Webhooks in Pod |
POST | /v0/pods/{pod_id}/webhooks | Create Webhook in Pod |
GET | /v0/pods/{pod_id}/webhooks/{webhook_id} | Get Webhook in Pod |
PATCH | /v0/pods/{pod_id}/webhooks/{webhook_id} | Update Webhook in Pod |
DELETE | /v0/pods/{pod_id}/webhooks/{webhook_id} | Delete Webhook in Pod |
GET | /v0/pods/{pod_id}/webhooks/{webhook_id}/deliveries | List Deliveries in Pod |
POST | /v0/pods/{pod_id}/webhooks/{webhook_id}/deliveries/{delivery_id}/replay | Replay Delivery in Pod |
POST | /v0/pods/{pod_id}/webhooks/{webhook_id}/test | Send Test Event in Pod |
GET | /v0/webhooks | List Webhooks |
POST | /v0/webhooks | Create Webhook |
GET | /v0/webhooks/{webhook_id} | Get Webhook |
PATCH | /v0/webhooks/{webhook_id} | Update Webhook |
DELETE | /v0/webhooks/{webhook_id} | Delete Webhook |
GET | /v0/webhooks/{webhook_id}/deliveries | List Deliveries |
POST | /v0/webhooks/{webhook_id}/deliveries/{delivery_id}/replay | Replay Delivery |
POST | /v0/webhooks/{webhook_id}/test | Send Test Event |
Lists
Allow and block lists for the organization, a pod or an inbox. A non-empty allow list is allow-only: one receive/allow entry blocks mail from every sender not on it.
| Method | Path | Summary |
|---|---|---|
GET | /v0/inboxes/{inbox_id}/lists/{direction}/{type} | List Entries in Inbox |
POST | /v0/inboxes/{inbox_id}/lists/{direction}/{type} | Create List Entry in Inbox |
GET | /v0/inboxes/{inbox_id}/lists/{direction}/{type}/{entry} | Get List Entry in Inbox |
DELETE | /v0/inboxes/{inbox_id}/lists/{direction}/{type}/{entry} | Delete List Entry in Inbox |
GET | /v0/lists/{direction}/{type} | List Entries |
POST | /v0/lists/{direction}/{type} | Create List Entry |
GET | /v0/lists/{direction}/{type}/{entry} | Get List Entry |
DELETE | /v0/lists/{direction}/{type}/{entry} | Delete List Entry |
GET | /v0/pods/{pod_id}/lists/{direction}/{type} | List Entries in Pod |
POST | /v0/pods/{pod_id}/lists/{direction}/{type} | Create List Entry in Pod |
GET | /v0/pods/{pod_id}/lists/{direction}/{type}/{entry} | Get List Entry in Pod |
DELETE | /v0/pods/{pod_id}/lists/{direction}/{type}/{entry} | Delete List Entry in Pod |
Suppressions
Addresses we will not send to.
| Method | Path | Summary |
|---|---|---|
GET | /v0/suppressions | List Suppressions |
POST | /v0/suppressions | Add Suppression |
GET | /v0/suppressions/{email} | Get Suppression |
DELETE | /v0/suppressions/{email} | Remove Suppression |
Events
Replayable event log and live streams.
| Method | Path | Summary |
|---|---|---|
GET | /v0/events | List Events |
GET | /v0/events/stream | Stream Events (SSE) |
GET | /v0/events/{event_id} | Get Event |
GET | /v0/inboxes/{inbox_id}/events | List Events in Inbox |
GET | /v0/inboxes/{inbox_id}/events/{event_id} | Get Event in Inbox |
GET | /v0/pods/{pod_id}/events | List Events in Pod |
GET | /v0/pods/{pod_id}/events/{event_id} | Get Event in Pod |
GET | /v0/ws | WebSocket Event Stream |
Metrics
Counts and rates.
| Method | Path | Summary |
|---|---|---|
GET | /v0/inboxes/{inbox_id}/metrics | Query Events (alias) in Inbox |
GET | /v0/inboxes/{inbox_id}/metrics/events | Query Events in Inbox |
GET | /v0/inboxes/{inbox_id}/metrics/rates | Query Rates in Inbox |
GET | /v0/inboxes/{inbox_id}/metrics/usage | Query Usage in Inbox |
GET | /v0/metrics | Query Events (alias) |
GET | /v0/metrics/events | Query Events |
GET | /v0/metrics/rates | Query Rates |
GET | /v0/metrics/usage | Query Usage |
GET | /v0/pods/{pod_id}/metrics | Query Events (alias) in Pod |
GET | /v0/pods/{pod_id}/metrics/events | Query Events in Pod |
GET | /v0/pods/{pod_id}/metrics/rates | Query Rates in Pod |
GET | /v0/pods/{pod_id}/metrics/usage | Query Usage in Pod |
Export
Inbox export.
| Method | Path | Summary |
|---|---|---|
GET | /v0/inboxes/{inbox_id}/export | Export Inbox |
GET | /v0/pods/{pod_id}/inboxes/{inbox_id}/export | Export Inbox in Pod |
Organization
The authenticated organization.
| Method | Path | Summary |
|---|---|---|
GET | /v0/organization | Get Organization (alias) |
GET | /v0/organizations | Get Organization |
PATCH | /v0/organizations | Update Organization |
GET | /v0/organizations/invitations | List Invitations |
POST | /v0/organizations/invitations | Invite Member |
DELETE | /v0/organizations/invitations/{invitation_id} | Revoke Invitation |
POST | /v0/organizations/invitations/{invitation_id}/resend | Resend Invitation |
GET | /v0/organizations/members | List Members |
PATCH | /v0/organizations/members/{user_id} | Update Member |
DELETE | /v0/organizations/members/{user_id} | Remove Member |
Auth
The credential making the request: its organization, pod, inbox and permissions.
| Method | Path | Summary |
|---|---|---|
GET | /v0/auth/me | Who Am I |
Pods
Pods group inboxes, domains and webhooks.
| Method | Path | Summary |
|---|---|---|
GET | /v0/pods | List Pods |
POST | /v0/pods | Create Pod |
GET | /v0/pods/{pod_id} | Get Pod |
PATCH | /v0/pods/{pod_id} | Update Pod |
DELETE | /v0/pods/{pod_id} | Delete Pod |
API Keys
Organization, pod and inbox scoped keys.
| Method | Path | Summary |
|---|---|---|
GET | /v0/api-keys | List API Keys |
POST | /v0/api-keys | Create API Key |
GET | /v0/api-keys/{api_key_id} | Get API Key |
PATCH | /v0/api-keys/{api_key_id} | Update API Key |
DELETE | /v0/api-keys/{api_key_id} | Delete API Key |
GET | /v0/inboxes/{inbox_id}/api-keys | List API Keys in Inbox |
POST | /v0/inboxes/{inbox_id}/api-keys | Create API Key in Inbox |
GET | /v0/inboxes/{inbox_id}/api-keys/{api_key_id} | Get API Key in Inbox |
PATCH | /v0/inboxes/{inbox_id}/api-keys/{api_key_id} | Update API Key in Inbox |
DELETE | /v0/inboxes/{inbox_id}/api-keys/{api_key_id} | Delete API Key in Inbox |
GET | /v0/pods/{pod_id}/api-keys | List API Keys in Pod |
POST | /v0/pods/{pod_id}/api-keys | Create API Key in Pod |
GET | /v0/pods/{pod_id}/api-keys/{api_key_id} | Get API Key in Pod |
PATCH | /v0/pods/{pod_id}/api-keys/{api_key_id} | Update API Key in Pod |
DELETE | /v0/pods/{pod_id}/api-keys/{api_key_id} | Delete API Key in Pod |
Inbound
Raw message injection and the inbound webhooks of the mail providers.
| Method | Path | Summary |
|---|---|---|
POST | /inbound/raw | Inject Raw Message |
POST | /inbound/resend | Resend Webhook |
POST | /inbound/ses | SES Notification (SNS) |
Health
Liveness and readiness.
OpenAPI
This document.
| Method | Path | Summary |
|---|---|---|
GET | /v0/openapi.json | Get OpenAPI Document |
Agent Auth
The MachineMail authorization server: OAuth sign-in for apps and MCP clients (authorization code with PKCE, client registration) and the auth.md protocol for agent onboarding.
| Method | Path | Summary |
|---|---|---|
GET | /.well-known/jwks.json | JSON Web Key Set |
GET | /.well-known/oauth-authorization-server | OAuth Authorization Server Metadata |
GET | /.well-known/oauth-protected-resource | OAuth Protected Resource Metadata |
GET | /.well-known/oauth-protected-resource/{path} | OAuth Protected Resource Metadata (Path-Suffixed) |
POST | /agent/event/notify | Receive Security Event Token |
POST | /agent/identity | Register Agent Identity |
POST | /agent/identity/claim | Start Claim Ceremony |
GET | /auth.md | Agent Onboarding Document |
GET | /oauth2/authorize | Authorization Endpoint |
POST | /oauth2/register | Register OAuth Client |
POST | /oauth2/revoke | Revoke Token |
POST | /oauth2/token | Token Endpoint |
Agent Registrations
Agent registrations bound to the organization.
| Method | Path | Summary |
|---|---|---|
GET | /v0/agent-registrations | List Agent Registrations |
GET | /v0/agent-registrations/{agent_id} | Get Agent Registration |
DELETE | /v0/agent-registrations/{agent_id} | Revoke Agent Registration |
Connected Apps
Apps and MCP clients connected with OAuth.
| Method | Path | Summary |
|---|---|---|
GET | /v0/oauth-grants | List Connected Apps |
DELETE | /v0/oauth-grants/{grant_id} | Disconnect App |
MCP
Remote MCP server (Streamable HTTP) and its description document.
| Method | Path | Summary |
|---|---|---|
GET | /.well-known/mcp.json | MCP Server Description |
GET | /mcp | MCP Description or Stream |
POST | /mcp | MCP JSON-RPC (Streamable HTTP) |
DELETE | /mcp | MCP Session Termination (Unsupported) |
CLI Auth
Signing the CLI in with the browser (RFC 8628 device authorization grant).
| Method | Path | Summary |
|---|---|---|
GET | /auth/cli/device | Preview CLI Sign-In |
POST | /auth/cli/device/approve | Approve CLI Sign-In |
POST | /auth/cli/device/code | Start CLI Sign-In |
POST | /auth/cli/device/deny | Deny CLI Sign-In |
POST | /auth/cli/device/token | Poll CLI Sign-In |
Dashboard Auth
Cookie sessions for the dashboard.
| Method | Path | Summary |
|---|---|---|
GET | /auth/authkit | Legacy Sign-In Redirect (Deprecated) |
GET | /auth/callback | Sign-in Callback |
GET | /auth/claim | Preview Claim |
POST | /auth/claim | Complete Claim |
GET | /auth/config | Sign-in Options |
POST | /auth/email/start | Send Sign-in Code |
POST | /auth/email/verify | Verify Sign-in Code |
GET | /auth/first-key | Get First API Key |
GET | /auth/invitations/{token} | Preview Invitation |
POST | /auth/login | Log In (Deprecated) |
POST | /auth/logout | Log Out |
GET | /auth/magic | Redeem Magic Link |
POST | /auth/magic-link | Request Magic Link |
GET | /auth/me | Current User |
GET | /auth/oauth/authorize | Preview App Authorization |
POST | /auth/oauth/authorize/approve | Approve App Authorization |
POST | /auth/oauth/authorize/deny | Deny App Authorization |
GET | /auth/organizations | List My Organizations |
POST | /auth/organizations | Create Organization |
POST | /auth/organizations/switch | Switch Organization |
GET | /auth/pending | Get Sign-in in Progress |
POST | /auth/pending/organization | Choose Organization |
POST | /auth/pending/verify | Verify Email |
POST | /auth/signup | Sign Up (Deprecated) |
GET | /auth/social/{provider} | Sign In with a Social Provider |