Feature inventory
Every shipped capability of Mailgrid v3.3, organized by category. If you're auditing fit or comparing to other vendors, start here.
Machine translation available — choose your language in the top bar.
Email sending
| Feature | Status | Where |
| Transactional single send | stable | POST /api/emails · docs |
| Bulk batch send (100 max) | stable | POST /api/emails/batch |
| Scheduled delivery | stable | POST /api/emails/schedule |
| Cancel scheduled send | stable | DELETE /api/emails/schedule/:id |
| Smart-send (optimal time from open patterns) | stable | MCP tool smart_send_at |
| Follow-up rules (resend if no open in N days) | stable | POST /api/followups |
| SMTP relay over HTTP | stable | POST /smtp/send · docs |
| True SMTP (TCP 25/587) via sidecar | stable | guide |
| Idempotent sends (24h TTL) | stable | concept |
| Multi-language SDK shape | stable | REST-compatible with Node, Python, Go, Rust clients |
Content & templates
| Feature | Status | Notes |
| HTML body | stable | Up to 500 KB inline. |
| Plain text body | stable | Sent as multipart/alternative when both html + text provided. |
| Handlebars templates | stable | {{var}}, {{#if}}, {{#each}}, {{#unless}}, helpers. |
| Stored templates (named, versioned) | stable | POST /api/templates · referenced via templateId. |
| AI-generated templates (Workers AI) | stable | Llama 3.1 8B default; Anthropic fallback when key present. |
| Voice & Tone match | stable | Paste 1-3 example emails for style-matched generation. |
| AI personalization per recipient | stable | POST /api/ai/personalize |
| Knowledge base for AI context | stable | POST /api/knowledge · auto-injected on generation |
| Safe template interpreter | stable | No new Function, no eval. Hand-written. |
| RFC 8058 List-Unsubscribe | stable | Both mailto: and one-click headers stamped. |
| Custom MIME headers | stable | Pass any X-* on send. |
| Tags / labels per send | stable | Filterable in analytics. |
Attachments
| Feature | Status | Notes |
| Inline base64 attachments | stable | Auto-switches to SES Raw MIME path. |
| File Cache (upload-once) | stable | R2-backed · POST /api/files · guide |
Reference by fileId | stable | Tiny request payloads even with 25 MB attachments. |
| Auto-expiry on uploads | stable | expiresAt field; cron-purged. |
| Mixed inline + cached in one send | stable | Both supported in same attachments[] array. |
| Auto content-type from extension | stable | 20+ extensions mapped; falls back to application/octet-stream. |
| Per-attachment filename override | stable | Show recipient a different filename than upload. |
Email streams
| Feature | Status | Notes |
| Stream types | stable | transactional · marketing · notifications |
| Per-stream default-from | stable | Override per send if needed. |
| Per-stream SES configuration set | stable | Independent reputation tracking. |
| Per-stream IP pool | stable | Routes via SES dedicated IP pool. |
| Per-stream analytics | stable | Filter analytics by streamId. |
| Stream-level enabled toggle | stable | Disable marketing while keeping transactional live. |
| Stream auto-stamp header | stable | X-InboxOS-Stream added to every outbound. |
Deliverability
| Feature | Status | Notes |
| SES Easy DKIM 2048-bit | stable | Auto-provisioned via POST /api/domains/verify. |
| SPF auto-detection | stable | Validated via DNS-over-HTTPS (1.1.1.1). |
| DMARC auto-detection | stable | Verifies policy alignment. |
| Custom MAIL FROM domain | stable | SES provisioned; return-path on subdomain. |
| Dedicated IPs with warmup tracking | stable | warmup schedule · 4 status values. |
| TLS REQUIRE on SES delivery | stable | Configuration set hardened. |
| SES reputation metrics enabled | stable | Auto-paused on >10% bounce / >0.5% complaint. |
| Deliverability score (0-100) | stable | MCP tool analyze_deliverability |
Tracking
| Feature | Status | Notes |
| Open tracking (1×1 pixel) | stable | Token-based, no DB lookup on read. |
| Click tracking (link rewrite) | stable | 302 redirect after recording event. |
| Per-send tracking toggle | stable | trackOpens, trackClicks in payload. |
| Recent opens query | stable | For "who's still engaged" segmentation. |
| Cache-Control: no-store on pixels | stable | Defeats client image cache deduping. |
Webhooks & events
| Feature | Status | Notes |
| SES SNS webhook endpoint | stable | POST /api/webhooks/ses · auto-confirms subscriptions. |
| 9 event types | stable | queued · sent · delivered · bounced · complained · opened · clicked · failed · rejected |
| Async queue + DLQ | stable | Cloudflare Queues, 5 retries, DLQ on exhaust. |
| SNS signature verification | stable | Validates against AWS signing cert. |
| Cursor-paginated event log | stable | GET /api/events |
| Event filtering | stable | By type, email, messageId, since. |
| Optional shared secret header | stable | WEBHOOK_SHARED_SECRET for belt+suspenders. |
Suppression & unsubscribe
| Feature | Status | Notes |
| 4 suppression reasons | stable | bounce · complaint · manual · unsubscribe |
| Auto-suppress on bounce/complaint | stable | Via SES SNS feedback loop. |
| Manual suppression | stable | POST /api/suppressions |
| RFC 8058 List-Unsubscribe | stable | Headers + one-click endpoint. |
| HMAC-signed unsubscribe tokens | stable | No DB lookup on click. |
| Per-tenant suppression scope | stable | Isolated; never cross-leaks. |
Analytics
| Feature | Status | Notes |
| Daily rollup (cron-built) | stable | Cron 30 4 * * *. |
| 30-day summary | stable | Delivery / open / click / bounce / complaint rates. |
| Daily breakdown | stable | Time-series for charts. |
| Per-stream filter | stable | Compare streams side-by-side. |
| Per-tag filter | stable | Campaign-level rollups. |
| Audit log of admin actions | stable | GET /api/audit-logs |
AI capabilities
| Feature | Status | Notes |
| Workers AI (Llama 3.1 8B) | stable | Default; included on every plan. |
| Anthropic Claude Haiku fallback | stable | Optional, when ANTHROPIC_API_KEY set. |
| Summarize email body | stable | POST /api/ai/summarize — returns summary + tl;dr. |
| Ask AI (NL over events + KB) | stable | POST /api/ai/ask |
| AI template generation | stable | POST /api/templates/generate |
| Voice & Tone match | stable | 1-3 example emails → style-matched output. |
| Recipient-level personalization | stable | Uses contact metadata + tone. |
| Auto-label classification | stable | Rule-first, AI-fallback. |
| Knowledge base for AI context | stable | Auto-injected on generation + ask. |
Agent / MCP
| Feature | Status | Notes |
| MCP server (2024-11-05) | stable | POST /api/mcp · JSON-RPC 2.0 |
| 18 typed tools | stable | Zod-validated; shared with REST schemas. |
| Bearer-auth same as REST | stable | Single source of identity. |
| Claude Code / Cursor / Continue / Zed compatible | stable | Any MCP-over-HTTP host works. |
| Parallel agent dispatch | stable | AGENT_CONCURRENCY=8 default. |
| Feature | Status | Notes |
| Contact CRUD | stable | POST /api/contacts |
| Custom metadata (JSON) | stable | Free-form per contact. |
| Contact statuses | stable | subscribed · unsubscribed · bounced · complained |
| Named lists | stable | Many-to-many membership. |
| Bulk import (10k max) | stable | CSV-style POST. |
| List segmentation | stable | Filter by status, metadata, engagement. |
Team & access
| Feature | Status | Notes |
| 4 user roles | stable | owner · admin · developer · viewer |
| User CRUD | stable | POST /api/users |
| Invite tokens (7-day TTL) | stable | Public accept endpoint. |
| Role change with owner protection | stable | Last owner can't be downgraded. |
| Suspend without delete | stable | For temp lockouts. |
| 15 granular API key scopes | stable | Plus admin implicit-all. |
Security
| Feature | Status | Notes |
| HMAC-SHA256 API key hashing | stable | Constant-time compare. |
| Indexed key prefix in KV | stable | Sub-ms auth check at edge. |
| TLS 1.3 everywhere | stable | Cloudflare edge + SES. |
| Per-tenant rate limiting (DO) | stable | Strongly consistent token bucket. |
| Audit logs | stable | Structured trail of every admin action. |
| HSTS preload-eligible headers | stable | On every Worker response. |
| IAM policy restriction on From-address | stable | Cross-tenant spoofing blocked at AWS level. |
| SNS signature verification on webhooks | stable | Authentic events only. |
| HMAC-signed tracking + unsubscribe tokens | stable | Tamper-evident. |
Infrastructure
| Feature | Status | Notes |
| Cloudflare Workers compute | stable | ~17 ms startup · 300+ POPs. |
| D1 SQLite store | stable | 23 tables · 4 migrations. |
| R2 object storage | stable | EML archive + File Cache binaries. |
| KV cache | stable | API-key prefix → tenant. |
| Cloudflare Queues + DLQ | stable | Async webhook fan-out. |
| Durable Objects rate limiter | stable | Per-tenant instance. |
| Workers AI binding | stable | Llama 3.1 8B on edge. |
| Two cron triggers | stable | Idempotency purge + analytics rollup. |
| OpenAPI 3 spec | stable | GET /openapi.json |
| Hand-written SigV4 signer | stable | No AWS SDK; -2 MB bundle. |
| SES Raw MIME path for attachments | stable | Multipart/mixed with alternative body. |
| Health + ready endpoints | stable | Loadbalancer-friendly. |
Deployment & operations
| Feature | Status | Notes |
| One-command Worker deploy | stable | wrangler deploy · custom domain + cert auto-provisioned. |
| D1 migrations (4 versioned) | stable | wrangler d1 migrations apply |
| Tenant bootstrap script | stable | scripts/bootstrap-tenant.mjs |
| Terraform for AWS infra | stable | infra/aws/ — SES, SNS, IAM, optional dedicated IP pool. |
| Bootstrap.sh (one-shot AWS) | stable | Pipes IAM keys → wrangler secret put |
| Wrangler tail for live logs | stable | Structured JSON + requestId. |
| D1 backup & restore | stable | Point-in-time recovery built in. |
| Wrangler rollback | stable | Atomic rollback to prior version. |
| Marketing site as Cloudflare Pages | stable | site/ · single-command deploy. |
| Wiki-style docs (29 pages) | stable | Sidebar nav, search, TOC, prev/next. |
Future / roadmap
| Feature | Status | Notes |
| Native SMTP listener (Postfix-grade) | planned | Sidecar-based today. |
| BYOK encryption | planned | For event metadata + R2 archive. |
| SOC 2 Type II audit | planned | Q3 target. |
| React Email template engine | planned | Alongside Handlebars. |
| Inbound email parsing | planned | POST /api/inbound/parse |
| Native dashboard UI | planned | API + MCP only today. |
| Multi-region active-active | research | us-east-1 + eu-west-1 + ap-south-1. |
| HTTP signatures for webhooks | research | Replace SNS verification with signed HTTP requests. |