> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://agentinbox.space/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://agentinbox.space/_mcp/server.

# Журнал изменений

# Журнал изменений Agent Inbox

Актуальные обновления API и SDK. [Подписка по RSS](https://agentinbox.space/changelog.rss) · [Поддержка](mailto:info@patternautomation.com)

## March 18, 2026

## Кратко

API-ключи с областью **inbox** позволяют выдавать учётные данные только для одного ящика. Агенты и интеграции получают минимально необходимый доступ; при компрометации ключа зона риска меньше.

### Что нового

**Новые endpoints:**

* `GET /v0/inboxes/:inbox_id/api-keys` — список ключей, привязанных к ящику
* `POST /v0/inboxes/:inbox_id/api-keys` — создать ключ для ящика
* `DELETE /v0/inboxes/:inbox_id/api-keys/:api_key` — удалить такой ключ

**Обновлённые типы:**

* В `ApiKey` и `CreateApiKeyResponse` добавлено необязательное поле `inbox_id`, если ключ ограничен ящиком

### Сценарии

Собирайте системы, где:

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

**`Python`**

```python title="Python"
from agentinbox import Agentinbox

client = Agentinbox(api_key="your-api-key")

# create an api key scoped to a single inbox
key = client.inboxes.api_keys.create(
    inbox_id="user@example.com",
    name="integration-key"
)

print(key.api_key)
```

**`TypeScript`**

```typescript title="TypeScript"
import { Agentinbox } from "agentinbox";

const client = new Agentinbox({ apiKey: "your-api-key" });

// create an api key scoped to a single inbox
const key = await client.inboxes.apiKeys.create("user@example.com", {
  name: "integration-key",
});

console.log(key.apiKey);
```

> **Note**
>
> Подробнее об областях ключей — в [справочнике API Keys](https://agentinbox.space/api-reference/inboxes/api-keys).

## December 22, 2025

## Кратко

**Вебхуки и события** — получайте события почты и доменов по HTTP. Подписка на жизненный цикл сообщений (получено, отправлено, доставлено, отскок, жалоба, отклонение) и на верификацию домена. Проверка подписи через заголовки Svix, фильтрация по ящику или pod. Удобно для агентов, которым нужны надёжные асинхронные уведомления без постоянного WebSocket.

### Что нового

**События вебхуков:**

* `message.received` — новое входящее письмо
* `message.sent` — исходящее отправлено
* `message.delivered` — доставка подтверждена
* `message.bounced` — отскок (тип и получатели)
* `message.complained` — жалоба на спам
* `message.rejected` — отклонение (например валидация)
* `domain.verified` — домен успешно верифицирован

**Доставка и проверка:**

* Заголовки в стиле Svix: `svix-id`, `svix-signature`, `svix-timestamp`
* Фильтр по inbox или pod (до 10 на вебхук)
* В полезной нагрузке: inbox_id, thread_id, message_id, метки времени и данные по типу события

### Сценарии

Собирайте агентов, которые:

* реагируют на новые письма, отскоки и жалобы по HTTP
* синхронизируют состояние с БД или очередью
* запускают сценарии при верификации домена
* проверяют подпись вебхука для безопасности

**`Python`**

```python title="Python"
from agentinbox import Agentinbox

client = Agentinbox(api_key="your-api-key")

# in your webhook handler: verify signature and handle event
# (use Svix or the raw headers for verification)
def handle_webhook(request):
    event_id = request.headers.get("svix-id")
    signature = request.headers.get("svix-signature")
    payload = request.json()
    if payload.get("event_type") == "message.received":
        message = payload.get("message")
        # process new email
    elif payload.get("event_type") == "domain.verified":
        domain = payload.get("domain")
        # domain is verified
```

**`TypeScript`**

```typescript title="TypeScript"
import { Agentinbox } from "agentinbox";

const client = new Agentinbox({ apiKey: "your-api-key" });

// in your webhook handler: verify signature and handle event
// (use Svix or the raw headers for verification)
function handleWebhook(request: Request) {
  const eventId = request.headers.get("svix-id");
  const signature = request.headers.get("svix-signature");
  const payload = request.json();
  if (payload.event_type === "message.received") {
    const message = payload.message;
    // process new email
  } else if (payload.event_type === "domain.verified") {
    const domain = payload.domain;
    // domain is verified
  }
}
```

> **Note**
>
> Настройка и проверка вебхуков — в [документации по вебхукам](https://agentinbox.space/overview).

## October 28, 2025

## Кратко

**Свои домены** — добавляйте и верифицируйте домены для отправки и приёма почты. Проверка через DNS (TXT, CNAME, MX), выгрузка zone-файла, настройка доставки отчётов об отскоках и жалобах. Подходит агентам, которым нужна отправка с брендового домена и контроль доставляемости.

### Что нового

**Новые endpoints:**

* `GET /domains` — список доменов
* `GET /domains/{domain_id}` — детали и записи для DNS
* `POST /domains` — добавить домен
* `DELETE /domains/{domain_id}` — удалить домен
* `GET /domains/{domain_id}/zone-file` — скачать zone-файл
* `POST /domains/{domain_id}/verify` — запустить проверку DNS

**Возможности:**

* Верификация через TXT, CNAME, MX
* Статусы: NOT_STARTED, PENDING, VERIFYING, VERIFIED, FAILED, INVALID
* Статус по каждой записи (MISSING, INVALID, VALID)
* Экспорт zone-файла для провайдера DNS
* Опционально — доставка bounce/complaint по домену

### Сценарии

Собирайте системы, где:

* агенты отправляют с верифицированного домена
* DNS настраивается централизованно, zone-файл импортируется у регистратора
* онбординг или мониторинг завязаны на статус верификации
* отскоки и жалобы настраиваются отдельно по доменам

**`Python`**

```python title="Python"
from agentinbox import Agentinbox

client = Agentinbox(api_key="your-api-key")

# create a domain
domain = client.domains.create(
    domain="mail.example.com",
    feedback_enabled=True
)

# get verification records and status
domain = client.domains.get(domain_id=domain.domain_id)
for record in domain.records:
    print(f"{record.type} {record.name}: {record.status}")

# trigger verification after updating DNS
client.domains.verify(domain_id=domain.domain_id)
```

**`TypeScript`**

```typescript title="TypeScript"
import { Agentinbox } from "agentinbox";

const client = new Agentinbox({ apiKey: "your-api-key" });

// create a domain
const domain = await client.domains.create({
  domain: "mail.example.com",
  feedbackEnabled: true,
});

// get verification records and status
const domainDetails = await client.domains.get(domain.domainId);
for (const record of domainDetails.records) {
  console.log(`${record.type} ${record.name}: ${record.status}`);
}

// trigger verification after updating DNS
await client.domains.verify(domain.domainId);
```

> **Note**
>
> Подробнее — в руководствах [Свои домены](https://agentinbox.space/custom-domains) и [Управление доменами](https://agentinbox.space/managing-domains).

## October 25, 2025

## Кратко

**API черновиков** — составляйте и ведите черновики до отправки: создавать, обновлять, планировать время отправки и отправлять, когда готово. Подходит агентам, которые собирают ответ по шагам, держат тред ответов или откладывают отправку.

### Что нового

**Новые endpoints:**

* `GET /drafts` — список черновиков (с фильтрами)
* `GET /drafts/{draft_id}` — получить черновик
* `POST /inboxes/{inbox_id}/drafts` — создать в ящике
* `PATCH /inboxes/{inbox_id}/drafts/{draft_id}` — обновить
* `POST /inboxes/{inbox_id}/drafts/{draft_id}/send` — отправить
* `DELETE /inboxes/{inbox_id}/drafts/{draft_id}` — удалить

**Возможности черновиков:**

* Поля to, cc, bcc, тема, текст и HTML
* Тред через `in_reply_to` и `references`
* Отложенная отправка через `send_at`
* Вложения и метки
* Список и фильтры по ящику, меткам, времени

### Сценарии

Собирайте агентов, которые:

* готовят многошаговые ответы перед отправкой
* планируют фоллоу-апы
* ставят исходящие в очередь и шлют пакетами
* правят черновик по новому контексту
* сохраняют корректные треды с `in_reply_to`

**`Python`**

```python title="Python"
from agentinbox import Agentinbox

client = Agentinbox(api_key="your-api-key")

# create a draft in an inbox
draft = client.inboxes.drafts.create(
    inbox_id="support@example.com",
    to=["user@example.com"],
    subject="Re: Your request",
    text="We're looking into it.",
    in_reply_to="<message-id@example.com>"
)

# update the draft
client.inboxes.drafts.update(
    inbox_id="support@example.com",
    draft_id=draft.draft_id,
    text="We've resolved your request."
)

# send the draft
client.inboxes.drafts.send(
    inbox_id="support@example.com",
    draft_id=draft.draft_id
)
```

**`TypeScript`**

```typescript title="TypeScript"
import { Agentinbox } from "agentinbox";

const client = new Agentinbox({ apiKey: "your-api-key" });

// create a draft in an inbox
const draft = await client.inboxes.drafts.create("support@example.com", {
  to: ["user@example.com"],
  subject: "Re: Your request",
  text: "We're looking into it.",
  inReplyTo: "<message-id@example.com>",
});

// update the draft
await client.inboxes.drafts.update(
  "support@example.com",
  draft.draftId,
  { text: "We've resolved your request." }
);

// send the draft
await client.inboxes.drafts.send("support@example.com", draft.draftId);
```

> **Note**
>
> Подробнее — в разделе [Черновики](https://agentinbox.space/drafts).

## August 13, 2025

## Кратко

Добавлены **endpoints метрик** — два новых способа смотреть доставляемость и работу агентов: отскоки, доставки, отклонения, жалобы с метками времени. Удобно для агентов, которые подстраивают поведение по фактическим метрикам.

### Что нового

**Новые endpoints:**

* `GET /metrics` — сводные метрики по всем ящикам
* `GET /inboxes/{inbox_id}/metrics` — метрики по одному ящику

**Что считается:**

* Отправка и доставка: sent, delivered, bounced, rejected
* Ошибки: жалобы, спам-репорты
* Временные ряды с детальными отметками времени

### Сценарии

Собирайте агентов, которые:

* следят за долей отскоков в реальном времени
* подбирают время отправки по истории
* меняют поведение при падении доставляемости
* останавливают кампании при порогах
* используют умные повторы для попадания во «Входящие»

> **Note**
>
> См. [справочник Metrics API](https://agentinbox.space/api-reference/metrics).

## July 20, 2025

## Кратко

**Поток по WebSocket** — события почты в реальном времени. Реактивные агенты отвечают сразу на новые сообщения, доставки и отскоки без опроса API. Подходит для интерактивных сценариев на событиях.

### Что нового

**WebSocket:**

* `wss://ws.agentinbox.space/v0` — поток событий

**События:**

* `message.received` — новое входящее
* `message.sent` — исходящее отправлено
* `message.delivered` — доставка подтверждена
* `message.bounced` — отскок
* `message.complained` — жалоба на спам

**Подключение:**

* Аутентификация (JWT)
* Переподключение с backoff
* Фильтр подписок по ящикам
* Низкая задержка (часто менее 100 ms)
* Много одновременных соединений

### Сценарии

Собирайте агентов, которые:

* отвечают через секунды после входящего
* мониторят доставляемость по всем ящикам
* запускают сценарии сразу по событию
* строят диалоговые сценарии по почте
* держат высокий объём операций
* сразу реагируют на отскоки и жалобы

**`Python`**

```python title="Python"
from agentinbox import Agentinbox

client = Agentinbox(api_key="your-api-key")

# subscribe to events for an inbox
async with client.websockets.subscribe(
    inbox_id="support@example.com"
) as ws:
    async for event in ws:
        if event.type == "message.received":
            print(f"New email from: {event.data.from_}")
            response = await generate_response(event.data.text)
            await client.messages.reply(
                message_id=event.data.message_id,
                text=response
            )
```

**`TypeScript`**

```typescript title="TypeScript"
import { Agentinbox } from "agentinbox";

const client = new Agentinbox({ apiKey: "your-api-key" });

// subscribe to events for an inbox
for await (const event of client.websockets.subscribe("support@example.com")) {
  if (event.type === "message.received") {
    console.log("New email from:", event.data.from);
    const response = await generateResponse(event.data.text);
    await client.messages.reply(event.data.messageId, response);
  }
}
```

> **Note**
>
> Старт — в [документации WebSocket](https://agentinbox.space/websockets).

## June 15, 2025

## Кратко

**Pods** — рабочие области для команд в Agent Inbox: общие ящики, домены и ресурсы с гибким контролем. Удобно командам, которые строят мультиагентную почту и хотят порядок в ресурсах.

### Что нового

**Новые endpoints:**

* `POST /pods` — создать pod
* `GET /pods` — список pod в организации
* `GET /pods/{pod_id}` — детали pod
* `DELETE /pods/{pod_id}` — удалить pod
* `POST /pods/{pod_id}/inboxes` — ящик в pod
* `POST /pods/{pod_id}/domains` — домен в pod
* `GET /pods/{pod_id}/threads` — треды pod
* `GET /pods/{pod_id}/metrics` — метрики pod

**Возможности:**

* Общий доступ к ящикам в команде
* Домены на уровне pod
* Метрики и аналитика по pod
* Иерархия ресурсов

### Сценарии

Собирайте системы, где:

* несколько агентов делят инфраструктуру почты
* команды ведут ящики независимо
* ресурсы сгруппированы по отделам или проектам
* аналитика в разрезе рабочей области
* учёт использования и биллинг по командам

**`Python`**

```python title="Python"
from agentinbox import Agentinbox

client = Agentinbox(api_key="your-api-key")

# create a pod for your sales team
pod = client.pods.create(
    name="Sales Team",
    description="Shared resources for sales agents"
)

# create an inbox in the pod
inbox = client.pods.inboxes.create(
    pod_id=pod.pod_id,
    inbox_id="sales@example.com"
)

# list all pods
pods = client.pods.list()
for pod in pods.pods:
    print(f"Pod: {pod.name} ({len(pod.inbox_ids)} inboxes)")
```

**`TypeScript`**

```typescript title="TypeScript"
import { Agentinbox } from "agentinbox";

const client = new Agentinbox({ apiKey: "your-api-key" });

// create a pod for your sales team
const pod = await client.pods.create({
  name: "Sales Team",
  description: "Shared resources for sales agents",
});

// create an inbox in the pod
await client.pods.inboxes.create(pod.podId, "sales@example.com");

// list all pods
const { pods } = await client.pods.list();
for (const p of pods) {
  console.log(`Pod: ${p.name} (${p.inboxIds?.length ?? 0} inboxes)`);
}
```

> **Note**
>
> Подробнее — в разделе [Pods](https://agentinbox.space/pods).