Pods

Что такое pod?

Pod — изолированная сущность между вашей организацией и inbox, которая помогает сегментировать и организовать почтовую инфраструктуру в многотенантных приложениях. Если вы делаете сервис с почтой для своих клиентов, pod — ключ к изоляции их ресурсов.

Иерархия

Organization (ваш бизнес)
└── Pod (клиент A)
├── Inbox 1
├── Inbox 2
└── Domain 1
└── Pod (клиент B)
├── Inbox 3
├── Inbox 4
└── Domain 2

Organization: аккаунт Agent Inbox вашей компании

  • У вас одна организация, представляющая бизнес

Pod: каждый из ваших клиентов

  • Создавайте один pod на клиента/тенанта в своей системе
  • Pod дают полную изоляцию данных между клиентами
  • Все ресурсы (inbox, домены, треды, черновики) можно привязать к pod

Inbox: отдельные почтовые ящики внутри pod

  • У клиента может быть несколько inbox в одном pod
  • Вы сами обеспечиваете ресурсы для каждого клиента

Зачем нужны pod?

Мультитенантность

Pod позволяют предлагать инфраструктуру Agent Inbox своим клиентам при строгой изоляции данных. Типичные сценарии:

Платформы SaaS/агентства: отдельный pod на каждого клиента — у каждого свой изолированный почтовый контур.

White-label почта: сервис под вашим брендом; у каждого конечного пользователя свой pod и изоляция данных.

Платформы ИИ-агентов: отдельный pod под агента с его задачами — со своими inbox и доменами.

Как устроены pod

Жизненный цикл

На стороне API при создании ресурсов происходит следующее.

  • При регистрации у вас автоматически создаётся Default Pod; все ресурсы — Inboxes или Domains — привязываются к этому Default Pod.
  • Удалить Pod, у которого ещё есть дочерние ресурсы, нельзя. Сначала удалите связанные Inboxes и Domains, затем Pod.

Что можно делать с pod

Создание ресурсов

Внутри pod можно создавать:

  • Inboxes (Ящики)
  • Domains (Домены)

Сейчас домен может быть привязан либо к одному pod, либо ко всем pod сразу. Нельзя привязать домен к нескольким, но не ко всем pod.

Указывайте client_id при создании Pod, чтобы однозначно сопоставлять pod с вашими сущностями. Тогда не нужна отдельная таблица соответствия ваших organization_id и наших pod_id — задайте client_id как ваш внутренний идентификатор и обращайтесь к ресурсу по нему.

Эти ресурсы автоматически связываются с pod и наследуют гарантии изоляции.

Список ресурсов

Следующие ресурсы можно получать в разрезе pod:

  • Inboxes (GET /pods/{pod_id}/inboxes) — все inbox в pod
  • Threads (GET /pods/{pod_id}/threads) — все переписки по всем inbox pod
  • Drafts (GET /pods/{pod_id}/drafts) — все черновики по всем inbox pod
  • Domains (GET /pods/{pod_id}/domains) — все пользовательские домены pod

Так вы получаете единую картину активности в «рабочем пространстве» клиента — удобно для сценариев вроде:

  • «Покажи все непрочитанные письма клиента X» (используйте и метки!)
  • «Список всех тредов по всем командным inbox клиента Y»
  • «Все ожидающие черновики клиента Z»

Скопировать в Cursor / Claude

Скопируйте один из блоков ниже в Cursor или Claude для полного контекста по API pod.

1"""
2Agent Inbox Pods — copy into Cursor/Claude. Multi-tenant isolation.
3
4API reference:
5- pods.create(client_id?) — client_id for idempotent mapping to your tenant IDs
6- pods.get(pod_id), pods.list(limit?, page_token?), pods.delete(pod_id)
7- pods.inboxes.list(pod_id, ...), pods.inboxes.create(pod_id, ...), pods.inboxes.delete(pod_id, inbox_id)
8- pods.domains.list(pod_id, ...), pods.domains.create(pod_id, ...), pods.domains.delete(pod_id, domain_id)
9- pods.threads.list(pod_id, ...), pods.drafts.list(pod_id, ...)
10
11Delete order: inboxes + domains first, then pod. Deleting inbox/domain cascades to messages/threads.
12"""
13from agentinbox import Agentinbox
14
15client = Agentinbox(api_key="YOUR_API_KEY")
16
17pod = client.pods.create(client_id="tenant-acme-1")
18inboxes = client.pods.inboxes.list(pod.pod_id)
19inbox = client.pods.inboxes.create(pod.pod_id, username="support", display_name="Support")
20threads = client.pods.threads.list(pod.pod_id, limit=20)

Важные моменты

Ограничения при удалении pod

Критично: нельзя удалить pod, пока к нему привязаны ресурсы. Сначала удалите все inbox и домены внутри pod, затем сам pod.

Это защита от случайной потери данных. Правильный порядок:

1// Не сработает, если в pod ещё есть ресурсы
2await client.pods.delete(podId);
3
4// Правильно: сначала очистка
5async function offboardCustomer(podId: string) {
6 // 1. Удалить все inbox
7 const inboxRes = await client.inboxes.list(podId);
8 for (const inbox of inboxRes.inboxes) {
9 await client.inboxes.delete(inbox.inbox_id);
10 }
11
12 // 2. Удалить все домены
13 const domainRes = await client.domains.list({ podId });
14 for (const domain of domainRes.domains) {
15 await client.domains.delete(domain.domain_id);
16 }
17
18 // 3. Теперь можно удалить pod
19 await client.pods.delete(podId);
20}

При удалении inbox или домена связанные данные (сообщения, треды, черновики) очищаются автоматически. Удалять треды и сообщения по одному не нужно.

Что НЕ изолировано уровнем pod:

Типовые сценарии

Сценарий 1: мультитенантный SaaS

У каждой компании на платформе свой pod:

1// Рабочее пространство клиента A
2Pod: "Acme Corp"
3├── Inbox: support@acme.com
4├── Inbox: sales@acme.com
5└── Domain: acme.com
6
7// Рабочее пространство клиента B
8Pod: "TechStart Inc"
9├── Inbox: hello@techstart.io
10├── Inbox: team@techstart.io
11└── Domain: techstart.io

Сценарий 2: агентство и клиенты

У каждого клиента изолированный pod:

1// Клиент 1
2Pod: "Client - Retail Co"
3├── Inbox: info@retailco.com
4└── Domain: retailco.com
5
6// Клиент 2
7Pod: "Client - FinTech"
8├── Inbox: support@fintech.ai
9└── Domain: fintech.ai

Сценарий 3: платформа ИИ-агентов

У каждого агента свой pod и выделенная почта:

1// Агент 1: поддержка
2Pod: "Support-Agent"
3├── Inbox: support@mycompany.com
4├── Inbox: help@mycompany.com
5└── Inbox: tickets@mycompany.com
6
7// Агент 2: продажи
8Pod: "Sales-Agent"
9├── Inbox: sales@mycompany.com
10├── Inbox: outreach@mycompany.com
11└── Inbox: leads@mycompany.com
12
13// Агент 3: маркетинг
14Pod: "Marketing-Agent"
15├── Inbox: newsletter@mycompany.com
16├── Inbox: campaigns@mycompany.com
17└── Inbox: events@mycompany.com

FAQ

Да. Inbox в разных pod обмениваются почтой как обычные адреса. Pod дают организационную изоляцию, а не сетевую.

Нет, перенос между pod не поддерживается. Создайте новый inbox в нужном pod.

Жёсткого лимита нет — создавайте столько, сколько нужно под клиентов.

Необязательно, но для многотенантных приложений настоятельно рекомендуется. Если вы управляете почтой только своей организации, можно работать напрямую с inbox без отдельных pod.

Да. Можно создать API-ключ с областью одного pod или ключ с областью одного inbox внутри pod. Подробнее — в руководстве по мультитенантности.

Дальше

  • Узнайте про Inboxes и создание ящиков внутри pod
  • Изучите Domains для своих доменов под pod