The hierarchy
- Account — Your business. One account, one set of API keys, one bill.
- Pod — A tenant in your product (a customer, end user, agent, or environment). Provides organizational isolation between sets of inboxes.
- Domain — A verified custom domain. Either account-wide (lives at account level, any pod can use it) or scoped to one pod (lives under that pod). A domain cannot be scoped to more than one pod, but not all pods.
- Inbox — An email address. Always belongs to exactly one pod.
When to use pods
- Multi-tenant SaaS / agencies — Create one pod per customer account so their inboxes never mix with another customer’s.
- White-label email — Give each end user their own pod and keep their data cleanly separated under your brand.
- AI agent platforms — Give each agent (support, sales, marketing) its own pod with dedicated inboxes.
- Environments or teams — Separate staging from production, or teams from each other, under one account.
Common patterns
The same building block — one pod per tenant — maps onto a few common shapes. Multi-tenant SaaS — one pod per customer company, addressed by your own tenant ID:Each tenant pod typically owns its own scoped domain. When several pods share one domain (like the agent platform above), keep it account-wide so every pod can use it.
The default pod
Every account has exactly one default pod, created automatically when you sign up.- Any inbox you create without specifying a pod lands in the default pod.
- The default pod is always listed first and is marked with
"isDefault": true. - It cannot be deleted.
clientId
When you create a pod you can pass your ownclientId — a stable identifier from your own system, such as your user or tenant ID.
clientId must be unique within your account. Once set, you can address a pod by it anywhere the API takes a pod identifier — without ever storing OpenMail’s pod ID:
clientId and name are optional. Omit clientId and OpenMail still generates a pod with its own ID.
Scoping inboxes to a pod
Pods and inboxes connect through the inbox’spodId:
- Create — Pass
podId(a pod ID orclientId) toPOST /v1/inboxesto place the inbox in that pod. Omit it to use the default pod. - List — Pass
podIdtoGET /v1/inboxesto return only that pod’s inboxes. - Read — Every inbox response includes its
podId.
Custom domains and pods
Custom domains sit in one of two places in the hierarchy:| Scope | Where it lives | Who can use it |
|---|---|---|
| Account-wide | Under the account (not inside a pod) | Any pod |
| Pod-scoped | Under that pod | Only inboxes in that pod |
domain and podId must agree: pod-scoped domains require the inbox in that same pod; account-wide domains work in any pod. You cannot scope a domain to several pods but not all — it is either one pod or every pod.
Manage scope from the dashboard (Settings → Domains, or a pod’s Domains tab). See Pod scoping for DNS, verification, and reassignment rules.
What pods do and don’t isolate
Pods give you organizational isolation — a clean way to group and scope inboxes per tenant. They are not a network or permission boundary:- Email is not walled off. Inboxes in different pods are still ordinary email addresses; they can send to and receive from each other and the outside world.
- API keys are account-wide. An account API key can read and write resources in every pod. There are no pod-scoped API keys today, so don’t hand a raw account key to an end user as a way to limit them to their pod.
Lifecycle
You can delete a pod withDELETE /v1/pods/:id, with these guardrails:
- The pod must be empty — delete its inboxes first, or you’ll get
pod_not_empty(409). - The pod must not own pod-scoped custom domains — reassign them to account-wide or another pod first, or you’ll get
pod_has_domains(409). - The default pod cannot be deleted (
default_pod, 409).
clientId):
Managing pods in the console
You can also manage pods without code. In the console, open Pods to see every pod, create new ones, and open a pod to view its inboxes and pod-scoped domains. The default pod is labeled with a Default badge.Give your agent the pods API
Paste this into Cursor, Claude, or any coding agent to give it the full pods API in one shot:Frequently asked questions
Do I need to use pods?
Do I need to use pods?
No. Pods are optional. Every account has a default pod, so if you only manage email for yourself you can create inboxes directly and ignore pods entirely. Reach for pods when you need to isolate inboxes per customer or tenant.
Can inboxes in different pods email each other?
Can inboxes in different pods email each other?
Yes. Pods provide organizational isolation, not network isolation. Inboxes in different pods are ordinary email addresses and can send to and receive from one another like any other mailbox.
Can I move an inbox from one pod to another?
Can I move an inbox from one pod to another?
No. An inbox’s pod is fixed at creation. To “move” an inbox, create a new one in the target pod and delete the old one.
How many pods can I create?
How many pods can I create?
There’s no enforced limit on the number of pods. Note that inboxes are still subject to your plan’s inbox limit across the whole account.
Can I restrict an API key to a single pod?
Can I restrict an API key to a single pod?
Not today. Account API keys can access every pod. If you need per-tenant access boundaries, enforce them in your own application layer for now.
Can each pod have its own custom domain?
Can each pod have its own custom domain?
Yes. Scope a domain to one pod and create inboxes on it only inside that pod — for example
support@meridian.io in the Meridian Analytics pod and hello@cedarworks.com in the Cedar Works pod. You can also add account-wide domains that every pod shares.API reference
See the API reference for full request and response details. Pod endpoints:| Operation | Endpoint |
|---|---|
| List pods | GET /v1/pods |
| Create pod | POST /v1/pods |
| Get pod | GET /v1/pods/{id} |
| Update pod | PATCH /v1/pods/{id} |
| Delete pod | DELETE /v1/pods/{id} |