Bobtail

Transactional email API

The email API where agents are first-class senders.

One POST to send. Durable message records with a full event trail. And the part the incumbents treat as an afterthought: every capability is callable as an MCP tool, so software agents send, inspect, and verify — no scripted browser, no second-class surface.

For you

POST /v1/messages201 · sent
curl https://bobtailmail.com/v1/messages \
  -H "authorization: Bearer bm_live_…" \
  -d '{ "from": "hello@notify.yourdomain.com",
        "to": "customer@example.com",
        "subject": "Your receipt",
        "text": "Thanks!" }'

For your agents

mcp.jsontools: 3
{ "mcpServers": {
    "bobtailmail": {
      "url": "https://bobtailmail.com/mcp",
      "headers": {
        "authorization": "Bearer bm_live_…"
} } } }

same keys, same contracts, two surfaces →

Proof, not promises

Every send leaves a record. That is the product.

Message recorddelivered
  1. message.accepted
  2. message.sent
  3. message.delivered

Append-only events, enforced at the database grant — an edited trail is not a thing that can exist here.

Domain onboardingset these, verify ↓

CNAME token1._domainkey → …dkim…

CNAME token2._domainkey → …dkim…

CNAME token3._domainkey → …dkim…

TXT _dmarc → v=DMARC1; p=none;

The API serves the exact records to set and polls until they hold. An unverified sender is refused with the records still missing — in the error.

Webhook deliverydelivered
  1. #1 · 502receiver down
  2. #2 · 502still down
  3. #3 · 200{"ok":true}

HMAC-signed, retried with backoff, every attempt on an append-only ledger. Kill your receiver mid-run; nothing is lost and nothing arrives twice unread.

Records, not logs

A message is recorded before the carrier is ever called, so a failure is a recorded failure — never a lost message. Status only moves forward; a late delivery never erases a bounce.

Agents are first-class

The MCP surface calls the exact same code as REST, advertises real input schemas, and returns the API's typed errors — an agent sees what your backend sees, not a chat wrapper.

Honest infrastructure

Deliverability is rented from an established carrier behind an adapter seam, on purpose — the product is the surface on top, and the repo argues that trade in the open.

Quickstart

Zero to sent, three calls.

01 · Register a sending domain.

POST /v1/domains201
curl https://bobtailmail.com/v1/domains \
  -H "authorization: Bearer bm_live_…" \
  -d '{ "name": "notify.yourdomain.com" }'
# → the exact DKIM / MAIL FROM / DMARC records to set

02 · Set the records at your DNS host, then poll.

POST /v1/domains/:id/verifyverified: true
curl -X POST https://bobtailmail.com/v1/domains/dom_…/verify \
  -H "authorization: Bearer bm_live_…"

03 · Send — and read the record back, forever.

POST /v1/messages · GET /v1/messages/:iddelivered
curl https://bobtailmail.com/v1/messages \
  -H "authorization: Bearer bm_live_…" \
  -d '{ "from": "hello@notify.yourdomain.com", … }'

Pricing

One plan. No tiers to guess wrong.

No public pricing signal exists for an API this new, so we didn't invent a tier ladder to fit one. One number, one cap, reconsidered honestly once real usage says otherwise.

Standard

$15/ month

  • 10,000 emails / month
  • REST API and MCP, same contracts
  • Unlimited sending domains
  • Full event trail on every message
  • Signed webhook delivery, with replay
  • Cancel anytime from the billing portal