Skip to main content
A pod is an isolated workspace inside your account. Each pod holds its own inboxes, so you can give every one of your end users (or tenants, agents, or projects) a clean, separate slice of OpenMail while keeping a single account and one bill. A pod-scoped API key locks an integration to a single pod. Pods are designed for multi-tenant apps. If you run one agent for yourself, you don’t need to think about them — your inboxes simply live in your account’s default pod.

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.
If you just need many inboxes under one umbrella and don’t require isolation, you can skip pods and create inboxes directly — they land in the default pod.

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:
Agency / white-label — one pod per client you manage on their behalf:
AI agent platform — one pod per agent, each with its own set of inboxes:
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 own clientId — a stable identifier from your own system, such as your user or tenant ID.
The 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:
Pass your own user or tenant ID as clientId at signup. Then you can create and look up that tenant’s inboxes using your ID, with no extra mapping table on your side.
Both 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’s podId:
  • Create — Pass podId (a pod ID or clientId) to POST /v1/inboxes to place the inbox in that pod. Omit it to use the default pod.
  • List — Pass podId to GET /v1/inboxes to return only that pod’s inboxes.
  • Read — Every inbox response includes its podId.
An inbox always belongs to exactly one pod. Inboxes cannot be moved between pods after creation — pick the pod when you create the inbox.

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.
Minting requires an account-wide key. The full 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.
Each pod allows up to 20 active keys; revoke an unused one to free a slot. You can also mint and revoke keys from a pod’s page in the console (account owners only). A pod-scoped key is the right scope for a tenant that owns several inboxes. For a single agent that owns exactly one, an inbox-scoped key confines it to that inbox alone. See Key scopes for the full comparison. See the Multi-tenancy guide for the full tenant onboarding flow: pod, inboxes, and scoped key end to end.

Lifecycle

You can delete a pod with DELETE /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).
Deleting a pod does not delete inboxes or domains; it only removes an empty container. To offboard a customer, clean up their pod-scoped resources first (you can address the pod by your own 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

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.
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.
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.
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.
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.
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.
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: