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:
When you create an inbox,
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 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.
- The account-wide key reaches everything. The key you get at signup can read and write resources in every pod, so never hand it to an end user. Mint a pod-scoped key instead — it can only reach its own pod. If the recipient owns just one inbox, an inbox-scoped key narrows it further still.
Pod-scoped API keys
Your account-wide key reaches every pod. To limit an integration — a tenant, an agent, an environment — to a single pod, mint a pod-scoped key:- It can read and send only from that pod’s inboxes, and create inboxes in it. Everything in another pod is out of reach.
- It cannot delete an inbox, change an inbox’s webhook config, or rotate a webhook secret — those need an account-wide key, so a leaked pod key cannot destroy mail or redirect it elsewhere.
- It cannot manage pods and cannot mint or revoke keys.
- Revoking it takes effect immediately, on the key’s very next request.
token is returned once, at creation, and cannot be retrieved again — store it securely. Listing returns only a masked tokenPrefix and last4 so you can identify a key without exposing it.
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 limits across the whole account — see Inboxes.
Can I restrict an API key to a single pod?
Can I restrict an API key to a single pod?
Yes. Mint a pod-scoped key with
POST /v1/pods/{id}/api-keys or from the pod’s page in the console. It can only read and send from that pod’s inboxes; everything else is out of reach. The token is shown once at creation, and you can revoke the key at any time. See Pod-scoped API keys.Can I restrict an API key to a single inbox?
Can I restrict an API key to a single inbox?
Yes. Mint an inbox-scoped key with
POST /v1/inboxes/{id}/api-keys — the narrowest scope available. It can read and send from that one inbox and nothing else, and unlike a pod-scoped key it cannot create or delete inboxes at all. Useful when one agent owns exactly one inbox. See Inbox-scoped API keys.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.