Customers
Tenant boundary for all deployments, inboxes, keys, suppressions, and activity.
Get Started
NoInfra Mail gives AI agents long-lived inboxes that can send, receive, classify, claim, and act on email through an API-first control plane.
Use the console when you want a guided flow, or call the API directly from your product.
support.Tenant boundary for all deployments, inboxes, keys, suppressions, and activity.
Groups of agents for one product, customer environment, or isolated workspace.
Workers that own a default long-lived inbox and can process conversations.
Durable email addresses such as [email protected].
Inbound and outbound email records, including text, HTML, clean reply extracts, attachments, provider state, and workflow state.
Conversation grouping for replies and follow-ups.
Saved outbound messages for human review, labeling, immediate send, or scheduled send workflows.
String tags on messages, drafts, and threads for routing, review queues, campaigns, and workflow state.
Durable event history plus live WebSocket and server-sent event streams for realtime agent workers.
Allow/block entries for send, receive, and reply controls, plus suppressions for bounces, complaints, unsubscribes, and compliance blocks.
Root, customer-scoped, and inbox-scoped credentials with explicit permissions.
The console is the fastest way to operate the service as a human.
| Page | Use it for |
|---|---|
| Overview | Health, setup, activity, launch gates, and quick actions. |
| Inboxes | Create named agent inboxes, inspect messages, and send outbound mail. |
| Drafts | Create reviewable agent drafts, add labels, send approved drafts, schedule drafts, and delete unsent drafts. |
| Domains | Check shared-domain DNS and create customer domains. |
| Webhooks | Create endpoints and monitor delivery attempts. |
| API Keys | Create runtime, read-only, and console operator keys. |
| Allow/Block Lists | Create scoped send, receive, and reply allow/block entries, and inspect suppressions. |
| Metrics | Review queue, rate-limit, and monitor-run status. |
All authenticated calls accept Authorization: Bearer <api-key>.
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"
}'
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"]
}'
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 '{}'
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"]}'
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"
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);
}
};
curl -N https://mail-api.noinfra.ai/v1/events/stream?customerId=cus_... \
-H "Authorization: Bearer $NOINFRA_MAIL_KEY"
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.
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.
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.
| Setting | Value |
|---|---|
| Host | mail.noinfra.ai |
| Port | 993 with SSL/TLS on connect |
| Username | The full inbox address, such as [email protected] |
| Password | A scoped NoInfra Mail API key |
| Folders | INBOX, 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.
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.
| Setting | Value |
|---|---|
| Host | mail.noinfra.ai |
| Ports | 587 with STARTTLS, or 465 with SSL/TLS |
| Username | The full inbox address, such as [email protected] |
| Password | A scoped NoInfra Mail API key |
| From | Must match the authenticated inbox address |
| Recipients | Up 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.
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.
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.
| Capability | Status | Notes |
|---|---|---|
| Long-lived inboxes | Ready | Custom handles, lifecycle, customer/deployment scoping. |
| Send and receive messages | Ready | Direct-MX outbound queue and SMTP edge inbound path. |
| AgentMail message utilities | Ready | /v0 and /v1 search, batch get, batch label update, message/thread/draft attachment, raw, and delete endpoints are API-backed. |
| Threads | Ready | Thread pages and replies are API-backed. |
| Reply and forward helpers | Ready | Message-level reply and forward endpoints preserve thread context. |
| Reply extraction | Ready | Inbound replies expose extractedText and extractedHtml so agents can read the new content without quoted history. |
| Attachments | Ready | Inbound, outbound, and draft attachment payloads are normalized, stored, and retrievable from messages, threads, and drafts. |
| Webhooks | Ready | Signed delivery, attempts, and retry support. |
| Realtime event stream | Ready | Native WebSocket plus server-sent event streams for live agent notifications. |
| API keys and permissions | Ready | Root, customer, inbox, and scoped permissions. |
| Domains | Ready | DNS verification and setup records. |
| Lists | Ready | Scoped send, receive, and reply allow/block lists are API-backed and console-managed; suppressions remain for bounces and complaints. |
| Labels | Ready | Messages, drafts, and threads support string labels with API filters and console thread controls. |
| Drafts | Ready | Draft CRUD, immediate send, labels, idempotent client IDs, and automatic scheduled-send worker. |
| WebSockets | Ready | Native wss://mail-api.noinfra.ai/v1/events/ws endpoint with filters, subscribe, ping, and list commands. |
| MCP | Ready | Hosted https://mail-api.noinfra.ai/mcp endpoint exposes inbox, message, thread, draft, and attachment tools over JSON-RPC. |
| IMAP mailbox access | Ready | Live on mail.noinfra.ai:993 with SSL/TLS. Supports login, folder listing, select/search/fetch, UID fetch, RFC822 rendering, and IDLE. |
| SMTP client submission | Ready | Live 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. |