One API · sending and receiving

Email for developers — both directions.

One request to send. Four DNS records to verify — DKIM is a single record under your domain, and each row diagnoses itself while you wait. And the part every email API skipped: a real inbox for every domain you connect — support@ that your team and your agents can actually read, answer, and search.

Free for 3,000 emails a month. Plans from $20 with volume included — unlimited brands on every plan.

POST /v1/emails
$ curl -X POST https://api.mycompany.email/v1/emails \
    -H "Authorization: Bearer $MYCO_API_KEY" \
    -d '{"from":"billing@acme.com", ...}'

{
  "status": "accepted",
  "brand_id": "brand_d9b63ab8",
  "routed_from": "organization"
}

# 1.2s later:
 DELIVERY  outgoing_ip=54.240.8.43
4DNS records to verify a domain — DKIM is ONE record, under your name, not a CNAME farm.
brands per plan. Each is an isolated sending identity; none is ever metered.
2directions. The same domain that sends receives — inbox included, not bolted on.
340+tests in CI, covering routing, guardrails, billing and the credential spine.

One bad brand shouldn't stop the others

On a shared sending platform, a single client's list hygiene can put the whole account under review. Every brand you run is exposed to every other brand's worst week.

Reputation you rent is reputation you can lose

Shared IP pools mean your deliverability depends on strangers. An account suspension is someone else's decision about your business, delivered without notice.

The right answer has brutal onboarding

Truly isolated sending is the correct architecture — and it normally comes with brutal setup friction: consoles, templates, review essays. That friction is why senders settle for shared pools. We removed the friction instead of the isolation.

Integrate

One request from any language. The From address decides the rest.

Plain REST — no SDK required, nothing to install. No account id, no region, no tenant name in the call: we resolve where your message sends from by its From domain.

curl https://api.mycompany.email/v1/emails \
  -H "Authorization: Bearer $MYCO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from": "billing@acme-client.com",
    "to": "customer@example.com",
    "subject": "Your invoice",
    "html": "<p>Thanks for your order.</p>"
  }'
const res = await fetch("https://api.mycompany.email/v1/emails", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.MYCO_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    from: "billing@acme-client.com",
    to: "customer@example.com",
    subject: "Your invoice",
    html: "<p>Thanks for your order.</p>",
  }),
});
import os, requests

requests.post(
    "https://api.mycompany.email/v1/emails",
    headers={"Authorization": "Bearer " + os.environ["MYCO_API_KEY"]},
    json={
        "from": "billing@acme-client.com",
        "to": "customer@example.com",
        "subject": "Your invoice",
        "html": "<p>Thanks for your order.</p>",
    },
)
{
  "id": "msg_456e62e7421e4316",
  "provider_message_id": "0100019fa04e0539-7a285e21",
  "status": "accepted",
  "brand_id": "brand_d9b63ab8c30b4a65",
  "environment_id": "env_800556b3b4a8",
  "routed_from": "organization"
}

routed_from tells you which level of the hierarchy chose the route — domain, brand, or organization default. Most specific wins, and custody is never ambiguous: the response names exactly what carried the send.

The platform

Everything around the send, so you never build it twice.

Most-specific-wins routing

Domain → brand → organization default. You send from an address; we work out which account, which tenant, which configuration set — and tell you which level decided.

DNS on autopilot

Four records per domain — a single DKIM TXT under your own name, MX and SPF for an aligned return path, and DMARC — published for you when we manage the zone, then re-checked until each one verifies.

Guardrails ahead of trouble

We pause a brand at 2% bounce / 0.05% complaint — half of the thresholds that trigger upstream reviews — and tell you exactly which numbers moved. One brand pauses; the rest keep sending.

A request log you can read

Every API call with its status, duration and error code, queryable by API. No reproducing a bug just to find out what you sent.

Full event history per message

Send, delivery, bounce, complaint — with the sending IP, the SMTP diagnostic, and the exact time it happened.

Errors that say what to do

Every failure carries a machine-readable requirement — verify_domain, remove_suppression — not just a sentence to parse.

Reputation isolation

One brand's hard bounce shouldn't be another brand's problem.

Each brand maps to its own isolated sending identity, with its own event stream, suppression list and reputation policy. That is the smallest thing that can be paused without stopping anything else.

We watch bounce and complaint rates per brand and pause at 2% and 0.05%. Upstream reviews trigger at 5% and 0.1% and nobody will tell you how close you are. We act first, on one brand, and tell you which numbers moved.

A soft bounce is not a hard bounce. Mailbox-full and greylisting arrive looking like a permanent failure — treating them alike is how senders quietly destroy their own lists. We suppress on permanent bounces and complaints only.
BrandBounceComplaintStatus
Northwind2.41%0.012%Paused by us
Acme Retail1.08%0.031%Warning
Contoso0.21%0.004%Sending
Fabrikam0.17%0.002%Sending

How it works

Five steps, and none of them require learning anything but an API key.

01

Sign up, get a key

No console trip, no CloudFormation, no sandbox essay. You start sending immediately from the labeled warm-up pool — 3,000 a month free, ramped daily caps in the open.

02

We vend your dedicated account

On any paid plan your sending runs in an environment that carries you alone — your reputation, your quota, your suppression list, structurally separate from every other customer's. No standing credentials to it exist anywhere in the system.

03

We clear the production review

All fresh sending infrastructure starts sandboxed, and getting out is a human review. That review is our job — typically one to three days, and we show you its status instead of hiding the wait. Your domains flip over the moment it clears.

04

Brands and domains, provisioned

Each brand gets its own sending identity, event stream and reputation boundary. Each domain gets four records — DKIM is a single record under your own name — published for you when we manage the zone, re-checked until they confirm.

05

Send

One REST call. We resolve the route from the From domain, check suppression, respect the real send rate, and hand the message off with the right identity attached.

The inbox

Sending APIs stop at "delivered". Yours shouldn't.

Any verified domain can receive. Claim support@ — or a catch-all — and replies land in a real inbox: parsed, sanitized, searchable, isolated per tenant.

An inbox per domain

Mailboxes are one API call. Mail to unclaimed addresses on your domains lands in quarantine, never the void, and the raw message is always kept. Full-text search across everything you have ever received.

Replies meet their sends

When a reply answers something you sent through us, it arrives correlated — opened next to the original send's delivery history, event by event. No bolt-on inbound webhook can assemble that view.

For your team and your agents

Read, archive and search over REST today — replies go out through the same send API — so an AI agent can work a support inbox end to end. The webmail app for humans is in active development, and it is being built like a product, not an afterthought.

Need harder isolation? Paid plans run your sending in a dedicated environment — your own reputation record, quota and suppression list, with each brand further isolated inside it. If you ever outgrow us, it can leave with you: same domains, same earned reputation, a documented hand-over. No shared-pool sender can offer that, because there is nothing of yours to hand over.

Start sending today. Take the keys whenever you want.

3,000 emails a month free, no card. 50,000 a month from $20, inbox included — and the exit is a feature, not a breakup.