Email for software that acts on its own

Give every agent a real inbox.

Create an address with one request, send and reply in threads, and get a signed webhook the moment mail arrives. A plain HTTP API, no mail server to run.

Free plan: 3 inboxes, 300 sends a month. No card required.

1. CREATE AN INBOX

curl -X POST "$BASE_URL/v0/inboxes" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"username": "support-agent"}'

2. SEND

curl -X POST "$BASE_URL/v0/inboxes/$INBOX_ID/messages/send" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"to": "you@example.com", "subject": "Hello", "text": "Sent by an agent."}'

3. GET TOLD WHEN MAIL ARRIVES

curl -X POST "$BASE_URL/v0/webhooks" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/hooks/mail", "event_types": ["message.received"]}'
# every delivery is signed (svix-id, svix-timestamp, svix-signature)

How it works

01

An inbox is a resource

Each inbox has an address, an optional display name, free-form metadata and a status. Pause one and it stops sending and quietly stops receiving.

02

Mail becomes JSON

Inbound messages are parsed into threads with text, HTML, attachments and an extracted_text field that strips the quoted reply chain.

03

You react

Receive a signed webhook, hold a WebSocket open, or poll the list endpoints. Retries back off for up to eight attempts.

What is in the box

Threads and drafts

Replies join the right thread by headers. Drafts can be scheduled with send_at.

Search

Ranked full-text search across sender, recipients, subject and body, per inbox or across the org.

Labels and lists

Label messages and threads, and keep allow and block lists at org, pod or inbox scope.

Pods

Isolate a customer or a team: keys, inboxes, webhooks and domains can be scoped to a pod.

Scoped API keys

Limit a key to one inbox or pod and to named permissions such as message_send.

Custom domains

Bring your own domain with generated MX, SPF, DKIM and DMARC records and a per-record verification status.

Safe by default

Idempotency keys on sends, bounce and complaint suppression, sandboxed attachment downloads.

Usage metrics

Totals over time for storage, messages, threads, inboxes, domains and pods.

MCP and TypeScript SDK

Give an agent email tools over MCP, or use the zero-dependency TypeScript client.

What it does not do (yet)

  • No IMAP or SMTP submission. Use the HTTP API, webhooks or WebSockets.
  • No open tracking events.
  • No tax (GST or VAT) invoicing yet.
  • SDK and MCP cover the core mail flow, not domains or usage metrics.

Pricing in one line

Free to start, then $19 a month for 25 inboxes and 10,000 sends. See all plans.

Questions

What does the API look like?

A REST API under /v0 with snake_case JSON. It is an independent service with its own plans, limits and operations, and some things are not built yet (see below).

What is not supported?

No IMAP or SMTP client access in v1: everything goes through the HTTP API, webhooks and WebSockets. No SOC 2 report. Tax invoicing (GST or VAT) is not handled yet. The SDK and MCP server do not cover domains, usage metrics or agent sign-up yet.

Can my agent receive mail on its own domain?

Yes on Pro and Scale: add a domain, publish the MX, SPF, DKIM and DMARC records the API returns, and verify. Free uses the shared service domain only.

Is receiving metered?

No. Plans meter sending and resource counts. Receiving is not metered in v1, though abuse controls and message size limits apply.

Why do I have to verify my email before sending?

To keep spam off a shared sending reputation. Receiving works immediately; sending and creating API keys unlock once the owner email is verified. Agents that sign up on their own are send-locked until a human is attached and verifies a 6-digit code.

How does billing work?

Cards through Stripe in USD, or Razorpay in INR when your billing country is India (you can override this). Yearly plans cost ten months. No free trial. Downgrades take effect at period end. After a failed payment you have a 7 day grace period before Free limits apply.

Are the prices final?

The prices on this page are illustrative while the service is pre-launch. The plan table is the single source used by both this page and the billing system.

Where does my data live?

In the operator's database; webhook secrets and API key hashes are stored, raw API keys are shown once at creation and never again. Read the privacy draft for details, noting it is still a draft pending legal review.

Your agent needs an address.

Create a free account