Get Started

Welcome to NoInfra Mail

NoInfra Mail gives AI agents long-lived inboxes that can send, receive, classify, claim, and act on email through an API-first control plane.

Quickstart

Use the console when you want a guided flow, or call the API directly from your product.

  1. Open the console and paste a root or scoped API key.
  2. Set a customer and deployment context, or create a test workspace.
  3. Go to Inboxes, click Create agent inbox, and choose a handle such as support.
  4. Send mail to the generated address, or compose outbound mail from the inbox page.
  5. Use Webhooks to stream message events back into your product.

Core concepts

Customers

Tenant boundary for all deployments, inboxes, keys, suppressions, and activity.

Deployments / Pods

Groups of agents for one product, customer environment, or isolated workspace.

Agents

Workers that own a default long-lived inbox and can process conversations.

Messages

Inbound and outbound email records, including text, HTML, clean reply extracts, attachments, provider state, and workflow state.

Threads

Conversation grouping for replies and follow-ups.

Drafts

Saved outbound messages for human review, labeling, immediate send, or scheduled send workflows.

Labels

String tags on messages, drafts, and threads for routing, review queues, campaigns, and workflow state.

Events

Durable event history plus live WebSocket and server-sent event streams for realtime agent workers.

Lists

Allow/block entries for send, receive, and reply controls, plus suppressions for bounces, complaints, unsubscribes, and compliance blocks.

API keys

Root, customer-scoped, and inbox-scoped credentials with explicit permissions.

Console guide

The console is the fastest way to operate the service as a human.

PageUse it for
OverviewHealth, setup, activity, launch gates, and quick actions.
InboxesCreate named agent inboxes, inspect messages, and send outbound mail.
DraftsCreate reviewable agent drafts, add labels, send approved drafts, schedule drafts, and delete unsent drafts.
DomainsCheck shared-domain DNS and create customer domains.
WebhooksCreate endpoints and monitor delivery attempts.
API KeysCreate runtime, read-only, and console operator keys.
Allow/Block ListsCreate scoped send, receive, and reply allow/block entries, and inspect suppressions.
MetricsReview queue, rate-limit, and monitor-run status.

API examples

All authenticated calls accept Authorization: Bearer <api-key>.

Create an agent with a custom inbox name

curl -X POST https://mail-api.noinfra.ai/v1/agents \
  -H "Authorization: Bearer $NOINFRA_MAIL_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": "cus_...",
    "deploymentId": "dep_...",
    "name": "Support Agent",
    "externalId": "support-agent",
    "defaultInboxUsername": "support"
  }'

Send email from an inbox

curl -X POST https://mail-api.noinfra.ai/v1/inboxes/inb_.../messages \
  -H "Authorization: Bearer $NOINFRA_MAIL_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": ["[email protected]"],
    "subject": "Hello from an agent",
    "text": "A useful, human-readable message.",
    "labels": ["outreach"]
  }'

Create and send a reviewed draft

draft=$(curl -s -X POST https://mail-api.noinfra.ai/v1/inboxes/inb_.../drafts \
  -H "Authorization: Bearer $NOINFRA_MAIL_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "to": ["[email protected]"],
    "subject": "Proposed reply",
    "text": "Draft text for review.",
    "labels": ["needs-review"]
  }')

curl -X POST https://mail-api.noinfra.ai/v1/inboxes/inb_.../drafts/$(echo "$draft" | jq -r .id)/send \
  -H "Authorization: Bearer $NOINFRA_MAIL_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'

Reply, forward, and label messages

curl -X POST https://mail-api.noinfra.ai/v1/inboxes/inb_.../messages/msg_.../reply \
  -H "Authorization: Bearer $NOINFRA_MAIL_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Thanks, I am on it."}'

curl -X POST https://mail-api.noinfra.ai/v1/inboxes/inb_.../messages/msg_.../forward \
  -H "Authorization: Bearer $NOINFRA_MAIL_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to":["[email protected]"]}'

curl -X PATCH https://mail-api.noinfra.ai/v1/inboxes/inb_.../messages/msg_... \
  -H "Authorization: Bearer $NOINFRA_MAIL_KEY" \
  -H "Content-Type: application/json" \
  -d '{"addLabels":["needs-reply"],"removeLabels":["triaged"]}'

Control send, receive, and reply lists

curl -X POST https://mail-api.noinfra.ai/v1/lists \
  -H "Authorization: Bearer $NOINFRA_MAIL_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "customerId": "cus_...",
    "inboxId": "inb_...",
    "direction": "send",
    "action": "allow",
    "matcher": "domain",
    "value": "example.com"
  }'

curl "https://mail-api.noinfra.ai/v1/lists?customerId=cus_...&direction=send" \
  -H "Authorization: Bearer $NOINFRA_MAIL_KEY"

Stream live events with WebSocket

const ws = new WebSocket(
  "wss://mail-api.noinfra.ai/v1/events/ws?customerId=cus_...&api_key=" + NOINFRA_MAIL_KEY
);

ws.onmessage = (event) => {
  const payload = JSON.parse(event.data);
  if (payload.type === "event") {
    console.log(payload.event.type, payload.event.data);
  }
};

Stream live events with SSE

curl -N https://mail-api.noinfra.ai/v1/events/stream?customerId=cus_... \
  -H "Authorization: Bearer $NOINFRA_MAIL_KEY"

Webhooks

Create webhook endpoints to receive signed callbacks for mail events such as inbound messages, outbound sends, and workflow updates. Delivery attempts are durable and retryable from the console or API.

MCP

NoInfra Mail exposes a hosted MCP endpoint for AI clients that can call JSON-RPC tools over HTTP. Use the same API key you use for the REST API.

{
  "mcpServers": {
    "NoInfra Mail": {
      "url": "https://mail-api.noinfra.ai/mcp",
      "headers": {
        "Authorization": "Bearer ${NOINFRA_MAIL_KEY}"
      }
    }
  }
}

The endpoint supports initialize, tools/list, and tools/call. Tools cover inboxes, messages, replies, threads, drafts, and attachments.

IMAP client access

Email clients and libraries can read agent inboxes through the live NoInfra IMAP listener. The username is the agent inbox email address, and the password is an API key with messages:read access to that inbox.

SettingValue
Hostmail.noinfra.ai
Port993 with SSL/TLS on connect
UsernameThe full inbox address, such as [email protected]
PasswordA scoped NoInfra Mail API key
FoldersINBOX, Sent, Trash, Spam, and empty Drafts

The IMAP worker supports CAPABILITY, LOGIN, LIST, SELECT, EXAMINE, SEARCH, FETCH, UID SEARCH, UID FETCH, and IDLE. Fetched messages are rendered as RFC822 from the API-backed message store.

SMTP client access

Apps and agent runtimes that already speak SMTP can submit outbound mail through the live NoInfra SMTP submission listener. The username is the agent inbox email address, and the password is an API key with messages:send access to that inbox.

SettingValue
Hostmail.noinfra.ai
Ports587 with STARTTLS, or 465 with SSL/TLS
UsernameThe full inbox address, such as [email protected]
PasswordA scoped NoInfra Mail API key
FromMust match the authenticated inbox address
RecipientsUp to 50 per submitted message

The submission worker supports AUTH PLAIN, AUTH LOGIN, MIME text, HTML, and attachments. It authenticates through the REST API, then submits through the same outbound send pipeline used by the console and API.

Domains & DNS

The shared production domain is agents.noinfra.ai. Custom customer domains require MX, SPF, DKIM, DMARC, A/AAAA, and reverse-DNS alignment before inbox creation is allowed.

Deliverability

NoInfra Mail operates raw email infrastructure: SMTP edge for inbound MX traffic and a direct-MX outbound worker for delivery. SPF, DKIM, DMARC, PTR, queue health, and external auth checks are monitored. Inbox placement still requires warmup and sender reputation over time.

Feature readiness compared with AgentMail-style surfaces

CapabilityStatusNotes
Long-lived inboxesReadyCustom handles, lifecycle, customer/deployment scoping.
Send and receive messagesReadyDirect-MX outbound queue and SMTP edge inbound path.
AgentMail message utilitiesReady/v0 and /v1 search, batch get, batch label update, message/thread/draft attachment, raw, and delete endpoints are API-backed.
ThreadsReadyThread pages and replies are API-backed.
Reply and forward helpersReadyMessage-level reply and forward endpoints preserve thread context.
Reply extractionReadyInbound replies expose extractedText and extractedHtml so agents can read the new content without quoted history.
AttachmentsReadyInbound, outbound, and draft attachment payloads are normalized, stored, and retrievable from messages, threads, and drafts.
WebhooksReadySigned delivery, attempts, and retry support.
Realtime event streamReadyNative WebSocket plus server-sent event streams for live agent notifications.
API keys and permissionsReadyRoot, customer, inbox, and scoped permissions.
DomainsReadyDNS verification and setup records.
ListsReadyScoped send, receive, and reply allow/block lists are API-backed and console-managed; suppressions remain for bounces and complaints.
LabelsReadyMessages, drafts, and threads support string labels with API filters and console thread controls.
DraftsReadyDraft CRUD, immediate send, labels, idempotent client IDs, and automatic scheduled-send worker.
WebSocketsReadyNative wss://mail-api.noinfra.ai/v1/events/ws endpoint with filters, subscribe, ping, and list commands.
MCPReadyHosted https://mail-api.noinfra.ai/mcp endpoint exposes inbox, message, thread, draft, and attachment tools over JSON-RPC.
IMAP mailbox accessReadyLive on mail.noinfra.ai:993 with SSL/TLS. Supports login, folder listing, select/search/fetch, UID fetch, RFC822 rendering, and IDLE.
SMTP client submissionReadyLive on mail.noinfra.ai:587 with STARTTLS and mail.noinfra.ai:465 with SSL/TLS. SMTP AUTH PLAIN/LOGIN validates inbox email plus API key and sends through the API-backed outbound pipeline.