Routing, inboxes, and mail
Emails
Emails receives mail for the zone, stores it in workspace inboxes, and routes copies to a mailbox, a webhook, or an Edge Function. Outbound mail is DKIM-signed. Catch-all, aliases, and per-address inboxes live here. This is a Cloudflare Cloudflare Email Routing alternative included on every Zipper plan.
Cloudflare analogue: Cloudflare Email Routing
What it is
Emails receives mail for the zone, stores it in workspace inboxes, and routes copies to a mailbox, a webhook, or an Edge Function. Outbound mail is DKIM-signed. Catch-all, aliases, and per-address inboxes live here.
Cloudflare analogue: Cloudflare Email Routing. SLA 99.95% · p99 90ms. Admins publish routes and inboxes. Operators may disable a destination.
- ▸Inboxes and stored mail
- ▸Catch-all aliases
- ▸DKIM signing
- ▸Function destinations
How it works
Publish MX at The Herald. Inbound mail is stored in workspace inboxes and optionally forwarded.
Destinations: mailbox://local-part, function://name, an email address, or drop.
Outbound is DKIM-signed. Catch-all is optional and off by default.
Use cases
Concrete ways teams use this service on day one.
Support@ on a new domain
You do not want a full mail suite yet.
- Create inbox support. Route support → mailbox://support.
- Store inbound on. Read messages in the Emails console or via the API.
Parse inbound invoices
PDF invoices should hit a function.
- Route invoices → function://mail-ingest. The function writes to Job Queues.
Set it up in the dashboard
Dashboard → Services → Emails. Create inbox, publish route, optionally store a test message.
API
Control-plane: POST /api/v1/email/inbound. Send Authorization: Bearer tz_live_YOUR_TOKEN.
Creates count against the plan quota. A 402 plan_limit means you are at the cap — upgrade or delete an unused resource.
Create an inbox
curl -sS -X POST https://tinyzipper.com/api/v1/email/mailboxes \
-H "Authorization: Bearer tz_live_YOUR_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"local_part":"support","quota_mb":1024}'Publish a route
curl -sS -X POST https://tinyzipper.com/api/v1/email/routes \
-H "Authorization: Bearer tz_live_YOUR_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"name":"support","destination":"mailbox://support"}'List the same resource in JavaScript
const res = await fetch("https://tinyzipper.com/api/v1/email/inbound", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.ZIPPER_TOKEN}`,
"Content-Type": "application/json"
}
});
const json = await res.json();
if (!res.ok) throw new Error(json.error ?? res.statusText);
console.log(json);Tips
Do not proxy MX. Catch-all is a last resort; prefer explicit local-parts.
- ▸SOC 2
- ▸DKIM
Runbook
Publish MX at The Herald first. Enable DKIM. Store inbound mail. Route unknown local-parts to drop unless catch-all is on.
Next: Visitor Queue · All docs · Create a free account