Docs / Feature inventory

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

FeatureStatusWhere
Transactional single sendstablePOST /api/emails · docs
Bulk batch send (100 max)stablePOST /api/emails/batch
Scheduled deliverystablePOST /api/emails/schedule
Cancel scheduled sendstableDELETE /api/emails/schedule/:id
Smart-send (optimal time from open patterns)stableMCP tool smart_send_at
Follow-up rules (resend if no open in N days)stablePOST /api/followups
SMTP relay over HTTPstablePOST /smtp/send · docs
True SMTP (TCP 25/587) via sidecarstableguide
Idempotent sends (24h TTL)stableconcept
Multi-language SDK shapestableREST-compatible with Node, Python, Go, Rust clients

Content & templates

FeatureStatusNotes
HTML bodystableUp to 500 KB inline.
Plain text bodystableSent as multipart/alternative when both html + text provided.
Handlebars templatesstable{{var}}, {{#if}}, {{#each}}, {{#unless}}, helpers.
Stored templates (named, versioned)stablePOST /api/templates · referenced via templateId.
AI-generated templates (Workers AI)stableLlama 3.1 8B default; Anthropic fallback when key present.
Voice & Tone matchstablePaste 1-3 example emails for style-matched generation.
AI personalization per recipientstablePOST /api/ai/personalize
Knowledge base for AI contextstablePOST /api/knowledge · auto-injected on generation
Safe template interpreterstableNo new Function, no eval. Hand-written.
RFC 8058 List-UnsubscribestableBoth mailto: and one-click headers stamped.
Custom MIME headersstablePass any X-* on send.
Tags / labels per sendstableFilterable in analytics.

Attachments

FeatureStatusNotes
Inline base64 attachmentsstableAuto-switches to SES Raw MIME path.
File Cache (upload-once)stableR2-backed · POST /api/files · guide
Reference by fileIdstableTiny request payloads even with 25 MB attachments.
Auto-expiry on uploadsstableexpiresAt field; cron-purged.
Mixed inline + cached in one sendstableBoth supported in same attachments[] array.
Auto content-type from extensionstable20+ extensions mapped; falls back to application/octet-stream.
Per-attachment filename overridestableShow recipient a different filename than upload.

Email streams

FeatureStatusNotes
Stream typesstabletransactional · marketing · notifications
Per-stream default-fromstableOverride per send if needed.
Per-stream SES configuration setstableIndependent reputation tracking.
Per-stream IP poolstableRoutes via SES dedicated IP pool.
Per-stream analyticsstableFilter analytics by streamId.
Stream-level enabled togglestableDisable marketing while keeping transactional live.
Stream auto-stamp headerstableX-InboxOS-Stream added to every outbound.

Deliverability

FeatureStatusNotes
SES Easy DKIM 2048-bitstableAuto-provisioned via POST /api/domains/verify.
SPF auto-detectionstableValidated via DNS-over-HTTPS (1.1.1.1).
DMARC auto-detectionstableVerifies policy alignment.
Custom MAIL FROM domainstableSES provisioned; return-path on subdomain.
Dedicated IPs with warmup trackingstablewarmup schedule · 4 status values.
TLS REQUIRE on SES deliverystableConfiguration set hardened.
SES reputation metrics enabledstableAuto-paused on >10% bounce / >0.5% complaint.
Deliverability score (0-100)stableMCP tool analyze_deliverability

Tracking

FeatureStatusNotes
Open tracking (1×1 pixel)stableToken-based, no DB lookup on read.
Click tracking (link rewrite)stable302 redirect after recording event.
Per-send tracking togglestabletrackOpens, trackClicks in payload.
Recent opens querystableFor "who's still engaged" segmentation.
Cache-Control: no-store on pixelsstableDefeats client image cache deduping.

Webhooks & events

FeatureStatusNotes
SES SNS webhook endpointstablePOST /api/webhooks/ses · auto-confirms subscriptions.
9 event typesstablequeued · sent · delivered · bounced · complained · opened · clicked · failed · rejected
Async queue + DLQstableCloudflare Queues, 5 retries, DLQ on exhaust.
SNS signature verificationstableValidates against AWS signing cert.
Cursor-paginated event logstableGET /api/events
Event filteringstableBy type, email, messageId, since.
Optional shared secret headerstableWEBHOOK_SHARED_SECRET for belt+suspenders.

Suppression & unsubscribe

FeatureStatusNotes
4 suppression reasonsstablebounce · complaint · manual · unsubscribe
Auto-suppress on bounce/complaintstableVia SES SNS feedback loop.
Manual suppressionstablePOST /api/suppressions
RFC 8058 List-UnsubscribestableHeaders + one-click endpoint.
HMAC-signed unsubscribe tokensstableNo DB lookup on click.
Per-tenant suppression scopestableIsolated; never cross-leaks.

Analytics

FeatureStatusNotes
Daily rollup (cron-built)stableCron 30 4 * * *.
30-day summarystableDelivery / open / click / bounce / complaint rates.
Daily breakdownstableTime-series for charts.
Per-stream filterstableCompare streams side-by-side.
Per-tag filterstableCampaign-level rollups.
Audit log of admin actionsstableGET /api/audit-logs

AI capabilities

FeatureStatusNotes
Workers AI (Llama 3.1 8B)stableDefault; included on every plan.
Anthropic Claude Haiku fallbackstableOptional, when ANTHROPIC_API_KEY set.
Summarize email bodystablePOST /api/ai/summarize — returns summary + tl;dr.
Ask AI (NL over events + KB)stablePOST /api/ai/ask
AI template generationstablePOST /api/templates/generate
Voice & Tone matchstable1-3 example emails → style-matched output.
Recipient-level personalizationstableUses contact metadata + tone.
Auto-label classificationstableRule-first, AI-fallback.
Knowledge base for AI contextstableAuto-injected on generation + ask.

Agent / MCP

FeatureStatusNotes
MCP server (2024-11-05)stablePOST /api/mcp · JSON-RPC 2.0
18 typed toolsstableZod-validated; shared with REST schemas.
Bearer-auth same as RESTstableSingle source of identity.
Claude Code / Cursor / Continue / Zed compatiblestableAny MCP-over-HTTP host works.
Parallel agent dispatchstableAGENT_CONCURRENCY=8 default.

Contacts & lists

FeatureStatusNotes
Contact CRUDstablePOST /api/contacts
Custom metadata (JSON)stableFree-form per contact.
Contact statusesstablesubscribed · unsubscribed · bounced · complained
Named listsstableMany-to-many membership.
Bulk import (10k max)stableCSV-style POST.
List segmentationstableFilter by status, metadata, engagement.

Team & access

FeatureStatusNotes
4 user rolesstableowner · admin · developer · viewer
User CRUDstablePOST /api/users
Invite tokens (7-day TTL)stablePublic accept endpoint.
Role change with owner protectionstableLast owner can't be downgraded.
Suspend without deletestableFor temp lockouts.
15 granular API key scopesstablePlus admin implicit-all.

Security

FeatureStatusNotes
HMAC-SHA256 API key hashingstableConstant-time compare.
Indexed key prefix in KVstableSub-ms auth check at edge.
TLS 1.3 everywherestableCloudflare edge + SES.
Per-tenant rate limiting (DO)stableStrongly consistent token bucket.
Audit logsstableStructured trail of every admin action.
HSTS preload-eligible headersstableOn every Worker response.
IAM policy restriction on From-addressstableCross-tenant spoofing blocked at AWS level.
SNS signature verification on webhooksstableAuthentic events only.
HMAC-signed tracking + unsubscribe tokensstableTamper-evident.

Infrastructure

FeatureStatusNotes
Cloudflare Workers computestable~17 ms startup · 300+ POPs.
D1 SQLite storestable23 tables · 4 migrations.
R2 object storagestableEML archive + File Cache binaries.
KV cachestableAPI-key prefix → tenant.
Cloudflare Queues + DLQstableAsync webhook fan-out.
Durable Objects rate limiterstablePer-tenant instance.
Workers AI bindingstableLlama 3.1 8B on edge.
Two cron triggersstableIdempotency purge + analytics rollup.
OpenAPI 3 specstableGET /openapi.json
Hand-written SigV4 signerstableNo AWS SDK; -2 MB bundle.
SES Raw MIME path for attachmentsstableMultipart/mixed with alternative body.
Health + ready endpointsstableLoadbalancer-friendly.

Deployment & operations

FeatureStatusNotes
One-command Worker deploystablewrangler deploy · custom domain + cert auto-provisioned.
D1 migrations (4 versioned)stablewrangler d1 migrations apply
Tenant bootstrap scriptstablescripts/bootstrap-tenant.mjs
Terraform for AWS infrastableinfra/aws/ — SES, SNS, IAM, optional dedicated IP pool.
Bootstrap.sh (one-shot AWS)stablePipes IAM keys → wrangler secret put
Wrangler tail for live logsstableStructured JSON + requestId.
D1 backup & restorestablePoint-in-time recovery built in.
Wrangler rollbackstableAtomic rollback to prior version.
Marketing site as Cloudflare Pagesstablesite/ · single-command deploy.
Wiki-style docs (29 pages)stableSidebar nav, search, TOC, prev/next.

Future / roadmap

FeatureStatusNotes
Native SMTP listener (Postfix-grade)plannedSidecar-based today.
BYOK encryptionplannedFor event metadata + R2 archive.
SOC 2 Type II auditplannedQ3 target.
React Email template engineplannedAlongside Handlebars.
Inbound email parsingplannedPOST /api/inbound/parse
Native dashboard UIplannedAPI + MCP only today.
Multi-region active-activeresearchus-east-1 + eu-west-1 + ap-south-1.
HTTP signatures for webhooksresearchReplace SNS verification with signed HTTP requests.