---
title: Claude Tag API
url: https://platform.claude.com/docs/ru/manage-claude/claude-tag-api
description: "Управляйте Claude Tag в Slack для вашей организации Claude Enterprise из собственных систем: читайте и изменяйте настройки каналов, рабочих пространств и значений Slack по умолчанию вашей организации, смотрите, какие настройки применяются и почему, и прикрепляйте Access bundles."
---

[Claude Tag](https://claude.com/docs/claude-tag/overview) — это Claude, работающий как член команды в Slack: кто-то упоминает Claude в канале, и Claude отвечает в ветке. Claude Tag API позволяет из ваших собственных систем читать и изменять настройки Claude Tag, которые в противном случае владелец организации задаёт вручную в [claude.ai > Organization settings > Claude Tag](https://claude.ai/admin-settings/claude-tag). Используйте его, чтобы включать Claude канал за каналом из процесса согласования, хранить конфигурацию в системе контроля версий или проверять, что применяется в каждом канале.

Claude Tag — это продукт claude.ai. Этот API управляет им для организации Claude Enterprise и не имеет никакого отношения к рабочим пространствам Claude Platform, использованию API или Claude Console.

<Check>
  **Требуется ключ Admin API с областями действия**

  Для этих конечных точек требуется ключ Admin API с областью действия `read:claude_tag` (для конечных точек `GET`) или областью действия `write:claude_tag` (для конечных точек `POST` и `DELETE`); см. [Области действия](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#scopes). О том, где основной владелец вашей организации создаёт такой ключ, см. [Создание ключа Admin API](https://platform.claude.com/docs/ru/manage-claude/admin-api-keys#create-a-key-for-a-claude-enterprise-organization). Передавайте ключ в заголовке `x-api-key` в каждом запросе вместе с заголовком [`anthropic-version`](https://platform.claude.com/docs/ru/api/versioning) и бета-заголовком, указанным в следующем примечании.
</Check>

<Note>
  Claude Tag API находится в **бета-версии** и доступен только организациям Claude Enterprise. Он недоступен организациям Claude Platform (Claude Console).

  Каждый запрос должен включать [бета-заголовок](https://platform.claude.com/docs/ru/api/beta-headers) `anthropic-beta: claude-tag-2026-09-28` (SDK и CLI `ant` отправляют его за вас). Запрос без него возвращает `404`, точно так же, как если бы конечной точки не существовало.
</Note>

## Конечные точки

API предоставляет 18 конечных точек для пяти ресурсов:

| Ресурс                                                                                                                                                                                                            | Конечные точки                                                                                                                                                                                                                                                                                                                                                          |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Каналы Slack:** настроить канал, перечислить каналы рабочего пространства или найти канал по его идентификаторам Slack, прочитать канал, изменить его настройки, посмотреть, что в нём применяется, удалить его | `POST /v1/organizations/claude_tag/slack_channels`<br />`GET /v1/organizations/claude_tag/slack_channels`<br />`GET /v1/organizations/claude_tag/slack_channels/{id}`<br />`POST /v1/organizations/claude_tag/slack_channels/{id}`<br />`GET /v1/organizations/claude_tag/slack_channels/{id}/effective`<br />`DELETE /v1/organizations/claude_tag/slack_channels/{id}` |
| **Рабочие пространства Slack:** перечислить подключённые рабочие пространства или найти одно по его идентификатору Slack, прочитать его, изменить его настройки, посмотреть, что в нём применяется                | `GET /v1/organizations/claude_tag/slack_workspaces`<br />`GET /v1/organizations/claude_tag/slack_workspaces/{id}`<br />`POST /v1/organizations/claude_tag/slack_workspaces/{id}`<br />`GET /v1/organizations/claude_tag/slack_workspaces/{id}/effective`                                                                                                                |
| **Значения Slack по умолчанию:** прочитать и изменить настройки, которые применяются ко всем рабочим пространствам и каналам                                                                                      | `GET /v1/organizations/claude_tag/slack_defaults`<br />`POST /v1/organizations/claude_tag/slack_defaults`                                                                                                                                                                                                                                                               |
| **Bundles:** перечислить Access bundles вашей организации, прочитать один из них (только чтение)                                                                                                                  | `GET /v1/organizations/claude_tag/bundles`<br />`GET /v1/organizations/claude_tag/bundles/{bundle_id}`                                                                                                                                                                                                                                                                  |
| **Цели Bundle:** перечислить, куда прикреплён Bundle, прикрепить его к каналу или рабочему пространству, прочитать одно прикрепление, открепить его                                                               | `GET /v1/organizations/claude_tag/bundles/{bundle_id}/targets`<br />`POST /v1/organizations/claude_tag/bundles/{bundle_id}/targets`<br />`GET /v1/organizations/claude_tag/bundles/{bundle_id}/targets/{target_id}`<br />`DELETE /v1/organizations/claude_tag/bundles/{bundle_id}/targets/{target_id}`                                                                  |

Этот выпуск охватывает Slack. Подключение и отключение рабочего пространства Slack, создание и редактирование Access bundles, лимиты расходов и все настройки Claude Tag, кроме пяти, перечисленных в разделе [Настройки](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#settings), остаются в claude.ai.

## Предварительные требования

* Ваша организация должна использовать план Claude Enterprise, с [настроенным Claude Tag](https://claude.com/docs/claude-tag/admins/setup-overview) и как минимум одним подключённым рабочим пространством Slack.
* Основной владелец вашей организации создаёт ключ Admin API с областью действия `read:claude_tag`, `write:claude_tag` или обеими в [claude.ai > Organization settings > API](https://claude.ai/admin-settings/api-access). См. [Создание ключа Admin API](https://platform.claude.com/docs/ru/manage-claude/admin-api-keys#create-a-key-for-a-claude-enterprise-organization).
* Каждый запрос содержит три заголовка: `x-api-key`, `anthropic-version: 2023-06-01` и `anthropic-beta: claude-tag-2026-09-28`.

SDK для Python, TypeScript, C#, Go, Java, PHP и Ruby предоставляют эти конечные точки через `client.beta.organization.claude_tag` (typescript: `client.beta.organization.claudeTag`; csharp, go: `client.Beta.Organization.ClaudeTag`; java: `client.beta().organization().claudeTag()`; php: `$client->beta->organization->claudeTag`), а [CLI `ant`](https://platform.claude.com/docs/ru/cli-sdks-libraries/cli/quickstart) — через `ant beta:organization:claude-tag`; они отправляют заголовки `anthropic-version` и `anthropic-beta` за вас. В примерах на этой странице используется клиент каждого SDK по умолчанию, который, как и CLI, считывает ключ Admin API из переменной окружения `ANTHROPIC_API_KEY`; примеры curl считывают ключ из той же переменной и передают его в заголовке `x-api-key`. Когда SDK или CLI запрашивает дополнительные страницы за вас, `limit` задаёт размер страницы, а не общее количество (см. [Пагинация](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#pagination)).

Ключи API принадлежат организации и продолжают работать после ухода создавшего их человека. Не передавайте их другим и не добавляйте в систему контроля версий.

## Быстрый старт

Перечислите рабочие пространства Slack, которые ваша организация подключила к Claude Tag:

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/claude_tag/slack_workspaces" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28"
  ```

  ```bash CLI
  ant beta:organization:claude-tag:slack-workspaces list
  ```

  ```python Python
  client = anthropic.Anthropic()

  workspaces = client.beta.organization.claude_tag.slack_workspaces.list()

  # Автоматически загружает дополнительные страницы по мере необходимости.
  for workspace in workspaces:
      print(f"{workspace.id}: {workspace.slack.team_id}")
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const workspaces = await client.beta.organization.claudeTag.slackWorkspaces.list();

  for await (const workspace of workspaces) {
    console.log(`${workspace.id}: ${workspace.slack.team_id}`);
  }
  ```

  ```csharp C#
  AnthropicClient client = new();

  var page = await client.Beta.Organization.ClaudeTag.SlackWorkspaces.List();

  await foreach (var workspace in page.Paginate())
  {
      Console.WriteLine($"{workspace.ID}: {workspace.Slack.TeamID}");
  }
  ```

  ```go Go
  client := anthropic.NewClient()

  workspaces := client.Beta.Organization.ClaudeTag.SlackWorkspaces.ListAutoPaging(
  	context.Background(),
  	anthropic.BetaOrganizationClaudeTagSlackWorkspaceListParams{},
  )

  for workspaces.Next() {
  	workspace := workspaces.Current()
  	fmt.Printf("%s: %s\n", workspace.ID, workspace.Slack.TeamID)
  }
  if err := workspaces.Err(); err != nil {
  	log.Fatal(err)
  }
  ```

  ```java Java
  AnthropicClient client = AnthropicOkHttpClient.fromEnv();

  var workspaces = client.beta().organization().claudeTag().slackWorkspaces().list();

  for (var workspace : workspaces.autoPager()) {
      IO.println(workspace.id() + ": " + workspace.slack().teamId());
  }
  ```

  ```php PHP
  $client = new Client();

  $workspaces = $client->beta->organization->claudeTag->slackWorkspaces->list();

  // Только эта страница; для следующей снова вызовите list() с page: $workspaces->nextPage.
  foreach ($workspaces->getItems() as $workspace) {
      echo "{$workspace->id}: {$workspace->slack->teamID}\n";
  }
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  page = client.beta.organization.claude_tag.slack_workspaces.list

  page.auto_paging_each do |workspace|
    puts "#{workspace.id}: #{workspace.slack.team_id}"
  end
  ```
</CodeGroup>

```json Response
{
  "data": [
    {
      "type": "slack_workspace",
      "id": "slws_011CZkZnWa7xPc3uJfZe5LgT",
      "slack": {
        "team_id": "T01ABCD2EFG"
      },
      "settings": {
        "enabled": null,
        "instructions": "Answer in English unless asked otherwise.",
        "model": null,
        "environment_id": null,
        "guest_policy": null
      },
      "agent_id": "cagt_011CZkZrFy4aSg8uMkDt9PqW",
      "created_at": "2026-09-02T17:04:11Z",
      "updated_at": "2026-10-06T09:41:53Z"
    }
  ],
  "next_page": null
}
```

Настройка со значением `null` не задана в этом рабочем пространстве, поэтому рабочее пространство её наследует. См. [Сохранённые и действующие настройки](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#stored-and-effective-settings).

## Области действия

| Область действия   | Предоставляет                                                                                                                           |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------- |
| `read:claude_tag`  | Все конечные точки `GET` на этой странице.                                                                                              |
| `write:claude_tag` | Все конечные точки `POST` и `DELETE` на этой странице. Она не даёт права на чтение, хотя ответ на изменение содержит изменённый ресурс. |

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

Ключ должен принадлежать организации в целом. Организацией всегда является та, которой принадлежит ключ, и ни один запрос её не указывает. Запрос, отправляющий заголовок `anthropic-workspace-id`, возвращает `400`, поскольку ничто здесь не принадлежит рабочему пространству Claude Platform.

## Ключевые понятия

### Названия на этой странице и в claude.ai

| Этот API                            | claude.ai и Slack                                                                                                                                                                           |
| ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Рабочее пространство Slack          | Рабочее пространство Slack (которое Slack также называет «team», то есть командой). Оно не связано с рабочим пространством Claude Platform, идентификаторы которого начинаются с `wrkspc_`. |
| Значения Slack по умолчанию         | **Default Slack access**                                                                                                                                                                    |
| «Settings level» (уровень настроек) | [«Scope» (область)](https://claude.com/docs/claude-tag/admins/customize): канал, рабочее пространство или значения Slack по умолчанию                                                       |
| Bundle                              | [Access bundle](https://claude.com/docs/claude-tag/concepts/glossary#access-bundle)                                                                                                         |
| `enabled`                           | Переключатель **Enable Claude Tag in Slack**                                                                                                                                                |
| `instructions`                      | **Custom instructions**                                                                                                                                                                     |
| `model`                             | **Model**                                                                                                                                                                                   |
| `environment_id`                    | **Environment**                                                                                                                                                                             |
| `guest_policy`                      | **How should Claude work in channels with guests**: `restrict` — это **Restrict**, `channel_only` — это **Channel only**, а `allow` — это **Full access**                                   |

### Настроенные каналы и рабочие пространства

Канал или рабочее пространство считается **настроенным** («set up»), когда Claude Tag хранит для него запись настроек. Только настроенный канал или рабочее пространство имеет `id`, и только они перечисляются: полный список каналов рабочего пространства хранит Slack, а не этот API.

* **Рабочее пространство** настраивается, когда владелец организации подключает его в claude.ai. Ни одна конечная точка не настраивает и не удаляет рабочее пространство.
* **Канал** настраивается в claude.ai, при первом использовании Claude в нём или с помощью запроса [Настройка канала](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#set-up-a-channel).
* **Значения Slack по умолчанию** настраиваются при первой настройке Claude Tag: когда владелец подключает рабочее пространство Slack или участник входит в систему либо впервые использует Claude в Slack.

Ваша организация владеет рабочим пространством, пока его подключение активно, и владеет каналами в нём. Канал или рабочее пространство, которым вы не владеете, возвращает тот же `404`, что и несуществующий.

### Идентификаторы

Вы знаете канал по идентификаторам, которые показывает Slack. Один раз найдите его `id`, как описано в разделе [Поиск канала по его идентификаторам Slack](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#find-a-channel-by-its-slack-ids), затем сохраните и используйте этот `id`.

| Идентификатор                           | Префикс     | Где встречается                                                             |
| --------------------------------------- | ----------- | --------------------------------------------------------------------------- |
| Ресурс канала Slack                     | `slch_`     | `id` канала; `slack_channel_id` в телах запросов и ответах                  |
| Ресурс рабочего пространства Slack      | `slws_`     | `id` рабочего пространства; `slack_workspace_id` в телах запросов и ответах |
| Bundle                                  | `capp_`     | `id` Bundle; `{bundle_id}` в путях                                          |
| Цель Bundle                             | `btgt_`     | `id` цели Bundle; `{target_id}` в путях                                     |
| Собственный идентификатор команды Slack | `T`         | `slack.team_id`; параметр запроса `slack_team_id`                           |
| Собственный идентификатор канала Slack  | `C` или `G` | `slack.channel_id`; параметр запроса `slack_channel_id`                     |

<Warning>
  `slack_channel_id` означает две вещи. В **параметре запроса** это собственный идентификатор Slack (`C05HJKL6MNP`). В **теле запроса или ответе** это `id`, выдаваемый этим API (`slch_...`). Собственные идентификаторы Slack в теле или ответе всегда находятся в `slack`.
</Warning>

`id` не меняется, пока канал или рабочее пространство настроены, что бы вы в них ни изменяли, за одним исключением, описанным в разделе [Режим только для чтения](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#read-only-mode). Канал или рабочее пространство, которые были удалены и настроены заново, получают новый `id`, а старый продолжает возвращать `404`. Когда сохранённый `id` возвращает `404` без `error_code`, [получите значения Slack по умолчанию](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#get-the-slack-defaults) с тем же ключом и теми же заголовками. Этот запрос не указывает ни канал, ни рабочее пространство, поэтому любой статус, кроме `404`, означает, что `id` больше не существует: найдите канал или рабочее пространство заново по их идентификаторам Slack. Если и там возвращается `404`, это ничего не говорит об `id`: оставьте сохранённые значения `id` как есть и см. [Ответы с ошибками](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#error-responses).

`agent_id` (с префиксом `cagt_`) — это то, как [Compliance API](https://platform.claude.com/docs/ru/manage-claude/compliance-api) называет тот же канал или рабочее пространство, как в качестве владельца сеансов, которые Claude там выполнял, так и в [событиях Activity Feed](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#activity-feed-events). Он существует столько же, сколько и `id`.

### Настройки

Каждый уровень настроек хранит одни и те же пять настроек, все необязательные:

| Настройка        | Тип     | Описание                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ---------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `enabled`        | boolean | Включён ли Claude.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `instructions`   | string  | Постоянные указания, которые Claude читает в каждом сеансе. Не более 8 192 символов после удаления начальных и конечных пробельных символов. Пустой текст очищает настройку.                                                                                                                                                                                                                                                                                                                              |
| `model`          | string  | Модель, с которой начинаются новые сеансы: [идентификатор модели](https://platform.claude.com/docs/ru/models/overview), который ваша организация может использовать с Claude Tag. Не более 128 символов.                                                                                                                                                                                                                                                                                                  |
| `environment_id` | string  | Облачная среда, в которой выполняются сеансы, с префиксом `env_`. Она должна быть активной и принадлежать вашей организации.                                                                                                                                                                                                                                                                                                                                                                              |
| `guest_policy`   | object  | Что делает Claude в канале, пока в нём находится гость Slack, для всех участников канала: `{"type": "allow"}` (Claude отвечает), `{"type": "restrict"}` (Claude не отвечает) или `{"type": "channel_only"}` (Claude отвечает, используя только Bundles, прикреплённые к самому каналу). О том, что это означает в каналах, общих через Slack Connect или в рамках Enterprise Grid, см. [Ограничение гостевых каналов](https://claude.com/docs/claude-tag/admins/restrict-access#restrict-guest-channels). |

`model` и `environment_id` проверяются при записи и больше не проверяются: если модель или среда позже изменятся, оба представления продолжат возвращать сохранённое значение.

Если владелец организации назначил уровню настроек пул самостоятельно размещённых раннеров в claude.ai, его `environment_id` возвращает идентификатор пула, начинающийся с `ccpool_`. Этот API не может задать пул раннеров и возвращает `400` на запрос, который изменяет или очищает `environment_id` на уровне настроек, хранящем такой пул.

### Сохранённые и действующие настройки

Настройки существуют на трёх уровнях: канал, рабочее пространство, в котором находится канал, и значения Slack по умолчанию вашей организации. Каждый уровень хранит только то, что было задано на нём. API предоставляет два представления:

* **Сохранённое** («stored») представление ([Получение канала](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#get-a-channel), [Получение рабочего пространства](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#get-a-workspace)) содержит то, что хранит сам канал или рабочее пространство. Настройка, которая там не задана, равна `null`. Используйте его для сравнения с конфигурацией, которую вы храните в другом месте.
* **Действующее** («effective») представление ([Получение действующих настроек канала](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#get-a-channels-effective-settings), [Получение действующих настроек рабочего пространства](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#get-a-workspaces-effective-settings)) содержит то, что применяется с учётом всех уровней, а `sources` указывает уровень, из которого берётся каждое значение. Используйте его для аудита или чтобы выяснить, почему Claude ведёт себя определённым образом в конкретном канале.

Каждая настройка вычисляется отдельно:

| Настройка        | Правило                                                                                                                                       | Когда ни один уровень её не задаёт                                        |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- |
| `enabled`        | Решает ближайший уровень, который её задаёт, поэтому `true` на канале включает там Claude, даже если его рабочее пространство хранит `false`. | `true`                                                                    |
| `instructions`   | Аддитивная. Тексты всех уровней, которые её задают, объединяются, начиная с самого широкого, с пустой строкой между ними.                     | `null`                                                                    |
| `model`          | Решает ближайший уровень, который её задаёт.                                                                                                  | `null`: Claude использует модель продукта по умолчанию                    |
| `environment_id` | Решает ближайший уровень, который её задаёт.                                                                                                  | `null`                                                                    |
| `guest_policy`   | Решает ближайший уровень, который её задаёт.                                                                                                  | `restrict` в организации, у которой настроены значения Slack по умолчанию |

Например, организация хранит инструкции в своих значениях Slack по умолчанию, выключает Claude в рабочем пространстве и задаёт модель для одного канала этого рабочего пространства. Действующее представление канала показывает три значения и то, откуда берётся каждое:

```json
{
  "type": "slack_channel_effective",
  "id": "slch_011CZkZmRt4vNq8sHbYw2KdX",
  "settings": {
    "enabled": false,
    "instructions": "Be brief.",
    "model": "claude-opus-5-5",
    "environment_id": null,
    "guest_policy": { "type": "restrict" }
  },
  "sources": {
    "enabled": {
      "type": "slack_workspace",
      "slack_workspace_id": "slws_011CZkZnWa7xPc3uJfZe5LgT"
    },
    "instructions": [{ "type": "slack_defaults" }],
    "model": {
      "type": "slack_channel",
      "slack_channel_id": "slch_011CZkZmRt4vNq8sHbYw2KdX"
    },
    "environment_id": { "type": "default" },
    "guest_policy": { "type": "default" }
  }
}
```

Источник может быть одним из следующих:

| `type`                 | Значение                                                                                                                                                                                                                                                                                                                             |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `slack_channel`        | Канал, указанный в `slack_channel_id`.                                                                                                                                                                                                                                                                                               |
| `slack_workspace`      | Рабочее пространство, указанное в `slack_workspace_id`.                                                                                                                                                                                                                                                                              |
| `slack_parent_channel` | Родительский канал кодового канала, указанный в `slack_channel_id`. Кодовый канал («code channel») — это канал, созданный из другого канала. Пока родительский канал является публичным каналом в том же рабочем пространстве, он находится между каналом и рабочим пространством и вносит только `instructions` и `environment_id`. |
| `slack_defaults`       | Значения Slack по умолчанию вашей организации, у которых нет идентификатора.                                                                                                                                                                                                                                                         |
| `default`              | Ни один уровень не задаёт значение, поэтому применяется встроенное значение по умолчанию.                                                                                                                                                                                                                                            |

`sources.instructions` — это список, начиная с самого широкого, всех уровней, которые вносят текст; он пуст, если таких нет. Идентификатор в источнике может быть `null` в организации, которая получает доступ к каналу через подключение Slack Enterprise Grid, а не через собственное рабочее пространство канала.

### Изменение настроек

Три конечные точки обновления и [Настройка канала](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#set-up-a-channel) принимают объект `settings` по одним и тем же правилам:

* **Настройка, которую вы не указали, не изменяется.** `{"settings": {"enabled": false}}` выключает Claude и оставляет остальные четыре настройки без изменений.
* **Настройка, отправленная как `null`, очищается**, поэтому уровень снова её наследует.
* **Всё или ничего.** Если какое-либо значение в запросе отклонено, ни одна настройка из запроса не сохраняется.
* **Безопасно повторять.** Каждое изменение оставляет ресурс в том же состоянии, в каком его оставил первый идентичный запрос, поэтому ни одна конечная точка не принимает `Idempotency-Key`. Запрос, который ничего не меняет, ничего не записывает и не создаёт событие Activity Feed.
* **Побеждает последняя запись.** Ни один запрос не принимает предусловие. Две вызывающие стороны, каждая из которых прочитала ресурс, а затем изменила одну и ту же настройку, перезаписывают друг друга. `409` возвращается только тогда, когда другое изменение пересекается с вашим запросом во время его выполнения; ничего из вашего запроса не было сохранено, поэтому прочитайте ресурс снова и повторно отправьте изменение, если оно всё ещё нужно.

Изменение `guest_policy` на канале может завершить сеансы, выполняющиеся в этом канале. Они завершаются в фоновом режиме, и ответ этого не ожидает.

### Сконфигурированные уровни

Уровень настроек становится **сконфигурированным** («configured»), как только человек или ключ изменил на нём настройку или прикрепил к нему Bundle. С этого момента он остаётся сконфигурированным, даже после очистки всех настроек и открепления всех Bundles. Канал, настроенный при первом использовании Claude или через этот API без каких-либо настроек, не является сконфигурированным до первого изменения или первого Bundle. Это важно в двух случаях: [удалить](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#remove-a-channel) можно только сконфигурированный канал, и только несконфигурированный канал может получить новый `id` (см. [Режим только для чтения](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#read-only-mode)).

### Режим только для чтения

**API / Terraform read-only mode** — это настройка, которую владелец организации включает и выключает в настройках Claude Tag в claude.ai. Название описывает claude.ai и Slack: пока режим включён, они отклоняют изменения, вносимые человеком в то, чем управляет этот API, поэтому такие изменения вносят только ключи. Он не делает этот API доступным только для чтения. Каждая конечная точка на этой странице отвечает одинаково независимо от того, включён режим или выключен, и ни одна конечная точка не читает и не изменяет его.

Пока режим выключен, люди и ключи изменяют одни и те же настройки, прикрепляют и открепляют одни и те же Bundles, и каждое изменение заменяет сохранённое. Включите его, если ваш конвейер должен быть единственным источником изменений.

Пока режим включён, claude.ai и Slack отклоняют:

* Изменение любой из пяти настроек на канале, в рабочем пространстве или в значениях Slack по умолчанию.
* Настройку канала, удаление канала или отключение рабочего пространства в claude.ai.
* Прикрепление Bundle к каналу или рабочему пространству, его открепление или удаление Bundle, прикреплённого к одному из них.

Некоторые действия остаются возможными в любом случае: владелец по-прежнему может подключить новое рабочее пространство, создавать и редактировать Bundles и изменять настройки Claude Tag, которыми этот API не управляет. Первое использование Claude по-прежнему настраивает канал, удаление канала в Slack по-прежнему удаляет его, а удаление приложения Claude для Slack по-прежнему отключает это рабочее пространство.

Пока режим выключен, настройка в claude.ai канала, который уже настроен и не является [сконфигурированным](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#configured-levels), может заменить запись канала. Тогда канал получает новые `id` и `agent_id`, а старый `id` возвращает `404`. `id` сконфигурированного канала сохраняется до удаления канала.

### Групповые личные сообщения

Групповое личное сообщение Slack имеет идентификатор в формате канала, поэтому использование Claude в нём настраивает его как канал: у него есть `id`, оно перечисляется и может быть прочитано. Настройка такого сообщения через этот API, изменение в нём настройки и прикрепление к нему Bundle возвращают `400`. Открепление Bundle от него разрешено.

## Примеры рабочих процессов

### Включение Claude только в одобренных каналах

Любой участник может пригласить Claude в публичный канал. Чтобы Claude оставался включённым только там, где вы это одобрили:

1. Выключите Claude везде, установив `enabled` в `false` в [значениях Slack по умолчанию](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#update-the-slack-defaults).
2. Когда ваша система согласования одобряет канал, [настройте канал](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#set-up-a-channel) с `"settings": {"enabled": true}`. Запрос принимает собственные идентификаторы Slack и возвращает канал независимо от того, был ли он уже настроен, поэтому его безопасно повторять.
3. В том же запуске [прикрепите](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#attach-a-bundle) Bundles, одобренные для команды, чтобы первый сеанс канала уже имел свои инструменты.

### Хранение конфигурации в системе контроля версий

1. Используйте в качестве ключей конфигурации идентификаторы, которые Slack показывает для каждого канала, и [находите каждый канал](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#find-a-channel-by-its-slack-ids) по ним.
2. Сравнивайте **сохранённое** представление с тем, что объявлено в вашем репозитории. Действующее представление примешало бы унаследованные значения.
3. Отправляйте только отличающиеся настройки и отправляйте `null` для настройки, которую ваш репозиторий больше не объявляет.
4. Попросите владельца организации включить [режим только для чтения](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#read-only-mode), чтобы никто не изменял те же настройки вручную.

### Аудит того, что применяется везде

1. [Перечислите свои рабочие пространства](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#list-workspaces), затем [перечислите каналы каждого рабочего пространства](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#list-channels).
2. Прочитайте [действующие настройки](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#get-a-channels-effective-settings) каждого канала и отметьте то, что запрещает ваша политика, например канал, где `enabled` равно `true` без зарегистрированного одобрения, или где `guest_policy` равно `allow`.
3. [Перечислите свои Bundles](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#list-bundles), затем [цели каждого Bundle](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#list-a-bundles-targets), чтобы увидеть, где прикреплён доступ к конфиденциальным системам.

## Каналы Slack

Объект канала — это сохранённое представление одного канала Slack:

| Поле         | Описание                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `type`       | `slack_channel`.                                                                                                                                                                                                                                                                                                                                                                                                                     |
| `id`         | С префиксом `slch_`. См. [Идентификаторы](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#ids).                                                                                                                                                                                                                                                                                                                     |
| `slack`      | Собственные идентификаторы Slack: `team_id` для рабочего пространства, в котором находится канал, и `channel_id` для канала.                                                                                                                                                                                                                                                                                                         |
| `settings`   | То, что хранит сам канал. Присутствует всегда, со всеми пятью [настройками](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#settings); незаданная настройка равна `null`.                                                                                                                                                                                                                                           |
| `agent_id`   | С префиксом `cagt_`. См. [Идентификаторы](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#ids).                                                                                                                                                                                                                                                                                                                     |
| `created_at` | Когда канал был настроен.                                                                                                                                                                                                                                                                                                                                                                                                            |
| `updated_at` | Когда запись Claude Tag о канале изменялась в последний раз. Значение меняется при каждом изменении настройки — здесь, в claude.ai или в Slack — и может также меняться из-за изменения, которое не отражено ни в одном ответе здесь. Рассматривайте более позднее значение как повод снова прочитать канал, а не как доказательство того, что настройка изменилась. Прикрепление или открепление Bundle само по себе его не меняет. |

`id` без префикса `slch_` возвращает `400`. `id` с префиксом, который не указывает ни на один канал вашей организации, возвращает `404`.

### Настройка канала

`POST /v1/organizations/claude_tag/slack_channels` настраивает канал Slack и возвращает его. `slack.team_id` и `slack.channel_id` обязательны и являются собственными идентификаторами Slack. `settings` необязателен и следует правилам из раздела [Изменение настроек](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#changing-settings). Если канал уже настроен, запрос возвращает существующий канал и применяет `settings`; в обоих случаях ответ — `200`. Требуется область действия `write:claude_tag`.

<CodeGroup>
  ```bash cURL
  curl -X POST "https://api.anthropic.com/v1/organizations/claude_tag/slack_channels" \
    -H "content-type: application/json" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28" \
    -d '{
      "slack": {"team_id": "T01ABCD2EFG", "channel_id": "C05HJKL6MNP"},
      "settings": {"instructions": "Answer in the language of the question."}
    }'
  ```

  ```bash CLI
  ant beta:organization:claude-tag:slack-channels create \
    --slack '{team_id: T01ABCD2EFG, channel_id: C05HJKL6MNP}' \
    --settings '{instructions: "Answer in the language of the question."}'
  ```

  ```python Python
  client = anthropic.Anthropic()

  channel = client.beta.organization.claude_tag.slack_channels.create(
      slack={"team_id": "T01ABCD2EFG", "channel_id": "C05HJKL6MNP"},
      settings={"instructions": "Answer in the language of the question."},
  )

  print(channel.id)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const channel = await client.beta.organization.claudeTag.slackChannels.create({
    slack: { team_id: "T01ABCD2EFG", channel_id: "C05HJKL6MNP" },
    settings: { instructions: "Answer in the language of the question." }
  });

  console.log(channel.id);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var channel = await client.Beta.Organization.ClaudeTag.SlackChannels.Create(
      new()
      {
          Slack = new() { TeamID = "T01ABCD2EFG", ChannelID = "C05HJKL6MNP" },
          Settings = new() { Instructions = "Answer in the language of the question." },
      }
  );

  Console.WriteLine(channel.ID);
  ```

  ```go Go
  client := anthropic.NewClient()

  channel, err := client.Beta.Organization.ClaudeTag.SlackChannels.New(
  	context.Background(),
  	anthropic.BetaOrganizationClaudeTagSlackChannelNewParams{
  		Slack: anthropic.BetaClaudeTagSlackChannelIdentifiersParam{
  			TeamID:    "T01ABCD2EFG",
  			ChannelID: "C05HJKL6MNP",
  		},
  		Settings: anthropic.BetaClaudeTagSettingsCreateParam{
  			Instructions: anthropic.String("Answer in the language of the question."),
  		},
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(channel.ID)
  ```

  ```java Java
  import com.anthropic.models.beta.organization.claudetag.BetaClaudeTagSettingsCreate;
  import com.anthropic.models.beta.organization.claudetag.slackchannels.BetaClaudeTagSlackChannelIdentifiers;
  import com.anthropic.models.beta.organization.claudetag.slackchannels.SlackChannelCreateParams;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      var params = SlackChannelCreateParams.builder()
          .slack(BetaClaudeTagSlackChannelIdentifiers.builder()
              .teamId("T01ABCD2EFG")
              .channelId("C05HJKL6MNP")
              .build())
          .settings(BetaClaudeTagSettingsCreate.builder()
              .instructions("Answer in the language of the question.")
              .build())
          .build();
      var channel = client.beta().organization().claudeTag().slackChannels().create(params);

      IO.println(channel.id());
  }
  ```

  ```php PHP
  $client = new Client();

  $channel = $client->beta->organization->claudeTag->slackChannels->create(
      slack: ['teamID' => 'T01ABCD2EFG', 'channelID' => 'C05HJKL6MNP'],
      settings: ['instructions' => 'Answer in the language of the question.'],
  );

  echo "{$channel->id}\n";
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  channel = client.beta.organization.claude_tag.slack_channels.create(
    slack: {team_id: "T01ABCD2EFG", channel_id: "C05HJKL6MNP"},
    settings: {instructions: "Answer in the language of the question."}
  )

  puts channel.id
  ```
</CodeGroup>

```json Response
{
  "type": "slack_channel",
  "id": "slch_011CZkZmRt4vNq8sHbYw2KdX",
  "slack": {
    "team_id": "T01ABCD2EFG",
    "channel_id": "C05HJKL6MNP"
  },
  "settings": {
    "enabled": null,
    "instructions": "Answer in the language of the question.",
    "model": null,
    "environment_id": null,
    "guest_policy": null
  },
  "agent_id": "cagt_011CZkZsHz6bTh2vNmEu4QrX",
  "created_at": "2026-10-19T16:20:05Z",
  "updated_at": "2026-10-19T16:20:05Z"
}
```

Перед настройкой канала приложение Claude для Slack проверяет у Slack, что канал находится в рабочем пространстве, не заархивирован и виден приложению. Канал, не прошедший эту проверку, возвращает `404`, как и рабочее пространство, в котором не установлено приложение Claude для Slack.

Настройка канала и применение `settings` — это два шага. Если первый выполнен успешно, а второй отклонён, ответом будет отказ, а канал останется настроенным без сохранённых настроек. Этот отказ содержит `error_code`, начинающийся с `slack_channel_set_up_`, и `id` нового канала в `error.details.slack_channel_id` (см. [Ответы с ошибками](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#error-responses)). Исправьте `settings` и отправьте их в [обновлении](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#update-a-channel) для этого `id` или отправьте запрос на настройку снова.

### Список каналов

`GET /v1/organizations/claude_tag/slack_channels` перечисляет настроенные каналы одного рабочего пространства, начиная с самых новых по `created_at`. `slack_team_id` обязателен и является собственным идентификатором Slack для рабочего пространства. Страница может содержать меньше `limit` каналов или не содержать ни одного, при этом `next_page` всё ещё задан, поэтому продолжайте запрашивать страницы, пока `next_page` не станет `null` (см. [Пагинация](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#pagination)). Требуется область действия `read:claude_tag`.

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/claude_tag/slack_channels?slack_team_id=T01ABCD2EFG" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28"
  ```

  ```bash CLI
  ant beta:organization:claude-tag:slack-channels list --slack-team-id T01ABCD2EFG
  ```

  ```python Python
  client = anthropic.Anthropic()

  channels = client.beta.organization.claude_tag.slack_channels.list(
      slack_team_id="T01ABCD2EFG"
  )

  # Автоматически загружает дополнительные страницы по мере необходимости.
  for channel in channels:
      print(f"{channel.id}: {channel.slack.channel_id}")
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const channels = await client.beta.organization.claudeTag.slackChannels.list({
    slack_team_id: "T01ABCD2EFG"
  });

  for await (const channel of channels) {
    console.log(`${channel.id}: ${channel.slack.channel_id}`);
  }
  ```

  ```csharp C#
  AnthropicClient client = new();

  var page = await client.Beta.Organization.ClaudeTag.SlackChannels.List(
      new() { SlackTeamID = "T01ABCD2EFG" }
  );

  await foreach (var channel in page.Paginate())
  {
      Console.WriteLine($"{channel.ID}: {channel.Slack.ChannelID}");
  }
  ```

  ```go Go
  client := anthropic.NewClient()

  channels := client.Beta.Organization.ClaudeTag.SlackChannels.ListAutoPaging(
  	context.Background(),
  	anthropic.BetaOrganizationClaudeTagSlackChannelListParams{
  		SlackTeamID: "T01ABCD2EFG",
  	},
  )

  for channels.Next() {
  	channel := channels.Current()
  	fmt.Printf("%s: %s\n", channel.ID, channel.Slack.ChannelID)
  }
  if err := channels.Err(); err != nil {
  	log.Fatal(err)
  }
  ```

  ```java Java
  import com.anthropic.models.beta.organization.claudetag.slackchannels.SlackChannelListParams;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      var params = SlackChannelListParams.builder()
          .slackTeamId("T01ABCD2EFG")
          .build();
      var channels = client.beta().organization().claudeTag().slackChannels().list(params);

      for (var channel : channels.autoPager()) {
          IO.println(channel.id() + ": " + channel.slack().channelId());
      }
  }
  ```

  ```php PHP
  $client = new Client();

  $channels = $client->beta->organization->claudeTag->slackChannels->list(
      slackTeamID: 'T01ABCD2EFG',
  );

  // Только эта страница; для следующей снова вызовите list() с page: $channels->nextPage.
  foreach ($channels->getItems() as $channel) {
      echo "{$channel->id}: {$channel->slack->channelID}\n";
  }
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  page = client.beta.organization.claude_tag.slack_channels.list(slack_team_id: "T01ABCD2EFG")

  page.auto_paging_each do |channel|
    puts "#{channel.id}: #{channel.slack.channel_id}"
  end
  ```
</CodeGroup>

Ответ имеет вид `{"data": [...], "next_page": ...}`, где каждый элемент — объект канала. `slack_team_id`, указывающий на рабочее пространство, которым ваша организация не владеет, возвращает `404`.

### Поиск канала по его идентификаторам Slack

Добавьте `slack_channel_id` — собственный идентификатор Slack для канала, — чтобы найти один канал. `data` содержит этот канал или пуст, если канал не настроен. Поиск игнорирует `limit` и `page`, а его `next_page` равен `null`. Именно так вы находите `id` канала.

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/claude_tag/slack_channels?slack_team_id=T01ABCD2EFG&slack_channel_id=C05HJKL6MNP" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28"
  ```

  ```bash CLI
  ant beta:organization:claude-tag:slack-channels list \
    --slack-team-id T01ABCD2EFG \
    --slack-channel-id C05HJKL6MNP
  ```

  ```python Python
  client = anthropic.Anthropic()

  page = client.beta.organization.claude_tag.slack_channels.list(
      slack_team_id="T01ABCD2EFG",
      slack_channel_id="C05HJKL6MNP",
  )

  for channel in page.data:
      print(channel.id)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const page = await client.beta.organization.claudeTag.slackChannels.list({
    slack_team_id: "T01ABCD2EFG",
    slack_channel_id: "C05HJKL6MNP"
  });

  for (const channel of page.data) {
    console.log(channel.id);
  }
  ```

  ```csharp C#
  AnthropicClient client = new();

  var page = await client.Beta.Organization.ClaudeTag.SlackChannels.List(
      new() { SlackTeamID = "T01ABCD2EFG", SlackChannelID = "C05HJKL6MNP" }
  );

  foreach (var channel in page.Items)
  {
      Console.WriteLine(channel.ID);
  }
  ```

  ```go Go
  client := anthropic.NewClient()

  page, err := client.Beta.Organization.ClaudeTag.SlackChannels.List(
  	context.Background(),
  	anthropic.BetaOrganizationClaudeTagSlackChannelListParams{
  		SlackTeamID:    "T01ABCD2EFG",
  		SlackChannelID: anthropic.String("C05HJKL6MNP"),
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  for _, channel := range page.Data {
  	fmt.Println(channel.ID)
  }
  ```

  ```java Java
  import com.anthropic.models.beta.organization.claudetag.slackchannels.SlackChannelListParams;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      var params = SlackChannelListParams.builder()
          .slackTeamId("T01ABCD2EFG")
          .slackChannelId("C05HJKL6MNP")
          .build();
      var page = client.beta().organization().claudeTag().slackChannels().list(params);

      for (var channel : page.items()) {
          IO.println(channel.id());
      }
  }
  ```

  ```php PHP
  $client = new Client();

  $channels = $client->beta->organization->claudeTag->slackChannels->list(
      slackTeamID: 'T01ABCD2EFG',
      slackChannelID: 'C05HJKL6MNP',
  );

  foreach ($channels->getItems() as $channel) {
      echo "{$channel->id}\n";
  }
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  page = client.beta.organization.claude_tag.slack_channels.list(
    slack_team_id: "T01ABCD2EFG",
    slack_channel_id: "C05HJKL6MNP"
  )

  page.data&.each do |channel|
    puts channel.id
  end
  ```
</CodeGroup>

Передача идентификатора `slch_` в качестве `slack_channel_id` возвращает `400`.

### Получение канала

`GET /v1/organizations/claude_tag/slack_channels/{id}` возвращает объект канала. Требуется область действия `read:claude_tag`.

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/claude_tag/slack_channels/slch_011CZkZmRt4vNq8sHbYw2KdX" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28"
  ```

  ```bash CLI
  ant beta:organization:claude-tag:slack-channels retrieve \
    --id slch_011CZkZmRt4vNq8sHbYw2KdX
  ```

  ```python Python
  client = anthropic.Anthropic()

  channel = client.beta.organization.claude_tag.slack_channels.retrieve(
      "slch_011CZkZmRt4vNq8sHbYw2KdX"
  )

  print(channel.settings.enabled)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const channel = await client.beta.organization.claudeTag.slackChannels.retrieve(
    "slch_011CZkZmRt4vNq8sHbYw2KdX"
  );

  console.log(channel.settings.enabled);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var channel = await client.Beta.Organization.ClaudeTag.SlackChannels.Retrieve(
      "slch_011CZkZmRt4vNq8sHbYw2KdX"
  );

  Console.WriteLine(channel.Settings.Enabled);
  ```

  ```go Go
  client := anthropic.NewClient()

  channel, err := client.Beta.Organization.ClaudeTag.SlackChannels.Get(
  	context.Background(),
  	"slch_011CZkZmRt4vNq8sHbYw2KdX",
  	anthropic.BetaOrganizationClaudeTagSlackChannelGetParams{},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(channel.Settings.Enabled)
  ```

  ```java Java
  AnthropicClient client = AnthropicOkHttpClient.fromEnv();

  var channel = client.beta().organization().claudeTag().slackChannels()
      .retrieve("slch_011CZkZmRt4vNq8sHbYw2KdX");

  IO.println(channel.settings().enabled().orElse(null));
  ```

  ```php PHP
  $client = new Client();

  $channel = $client->beta->organization->claudeTag->slackChannels->retrieve(
      id: 'slch_011CZkZmRt4vNq8sHbYw2KdX',
  );

  echo json_encode($channel->settings->enabled) . "\n";
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  channel_id = "slch_011CZkZmRt4vNq8sHbYw2KdX"
  channel = client.beta.organization.claude_tag.slack_channels.retrieve(channel_id)

  puts channel.settings.enabled
  ```
</CodeGroup>

### Обновление канала

`POST /v1/organizations/claude_tag/slack_channels/{id}` изменяет настройки канала и возвращает объект канала. `settings` обязателен и следует правилам из раздела [Изменение настроек](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#changing-settings). Требуется область действия `write:claude_tag`.

Выключите Claude в одном канале, оставив остальные его настройки без изменений:

<CodeGroup>
  ```bash cURL
  curl -X POST "https://api.anthropic.com/v1/organizations/claude_tag/slack_channels/slch_011CZkZmRt4vNq8sHbYw2KdX" \
    -H "content-type: application/json" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28" \
    -d '{"settings": {"enabled": false}}'
  ```

  ```bash CLI
  ant beta:organization:claude-tag:slack-channels update \
    --id slch_011CZkZmRt4vNq8sHbYw2KdX \
    --settings '{enabled: false}'
  ```

  ```python Python
  client = anthropic.Anthropic()

  channel = client.beta.organization.claude_tag.slack_channels.update(
      "slch_011CZkZmRt4vNq8sHbYw2KdX",
      settings={"enabled": False},
  )

  print(channel.settings.enabled)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const channel = await client.beta.organization.claudeTag.slackChannels.update(
    "slch_011CZkZmRt4vNq8sHbYw2KdX",
    { settings: { enabled: false } }
  );

  console.log(channel.settings.enabled);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var channel = await client.Beta.Organization.ClaudeTag.SlackChannels.Update(
      "slch_011CZkZmRt4vNq8sHbYw2KdX",
      new() { Settings = new() { Enabled = false } }
  );

  Console.WriteLine(channel.Settings.Enabled);
  ```

  ```go Go
  client := anthropic.NewClient()

  channel, err := client.Beta.Organization.ClaudeTag.SlackChannels.Update(
  	context.Background(),
  	"slch_011CZkZmRt4vNq8sHbYw2KdX",
  	anthropic.BetaOrganizationClaudeTagSlackChannelUpdateParams{
  		Settings: anthropic.BetaClaudeTagSettingsUpdateParam{
  			Enabled: anthropic.Bool(false),
  		},
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(channel.Settings.Enabled)
  ```

  ```java Java
  import com.anthropic.models.beta.organization.claudetag.BetaClaudeTagSettingsUpdate;
  import com.anthropic.models.beta.organization.claudetag.slackchannels.SlackChannelUpdateParams;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      var params = SlackChannelUpdateParams.builder()
          .settings(BetaClaudeTagSettingsUpdate.builder()
              .enabled(false)
              .build())
          .build();
      var channel = client.beta().organization().claudeTag().slackChannels()
          .update("slch_011CZkZmRt4vNq8sHbYw2KdX", params);

      IO.println(channel.settings().enabled().orElse(null));
  }
  ```

  ```php PHP
  $client = new Client();

  $channel = $client->beta->organization->claudeTag->slackChannels->update(
      id: 'slch_011CZkZmRt4vNq8sHbYw2KdX',
      settings: ['enabled' => false],
  );

  echo json_encode($channel->settings->enabled) . "\n";
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  channel_id = "slch_011CZkZmRt4vNq8sHbYw2KdX"
  channel = client.beta.organization.claude_tag.slack_channels.update(
    channel_id,
    settings: {enabled: false}
  )

  puts channel.settings.enabled
  ```
</CodeGroup>

Очистите инструкции канала, чтобы применялись только унаследованные:

<CodeGroup>
  ```bash cURL
  curl -X POST "https://api.anthropic.com/v1/organizations/claude_tag/slack_channels/slch_011CZkZmRt4vNq8sHbYw2KdX" \
    -H "content-type: application/json" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28" \
    -d '{"settings": {"instructions": null}}'
  ```

  ```bash CLI
  ant beta:organization:claude-tag:slack-channels update \
    --id slch_011CZkZmRt4vNq8sHbYw2KdX \
    --settings '{instructions: null}'
  ```

  ```python Python
  client = anthropic.Anthropic()

  channel = client.beta.organization.claude_tag.slack_channels.update(
      "slch_011CZkZmRt4vNq8sHbYw2KdX",
      settings={"instructions": None},
  )

  print(channel.settings.instructions)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const channel = await client.beta.organization.claudeTag.slackChannels.update(
    "slch_011CZkZmRt4vNq8sHbYw2KdX",
    { settings: { instructions: null } }
  );

  console.log(channel.settings.instructions);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var channel = await client.Beta.Organization.ClaudeTag.SlackChannels.Update(
      "slch_011CZkZmRt4vNq8sHbYw2KdX",
      new() { Settings = new() { Instructions = null } }
  );

  Console.WriteLine(channel.Settings.Instructions);
  ```

  ```go Go
  client := anthropic.NewClient()

  channel, err := client.Beta.Organization.ClaudeTag.SlackChannels.Update(
  	context.Background(),
  	"slch_011CZkZmRt4vNq8sHbYw2KdX",
  	anthropic.BetaOrganizationClaudeTagSlackChannelUpdateParams{
  		Settings: anthropic.BetaClaudeTagSettingsUpdateParam{
  			Instructions: param.Null[string](),
  		},
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(channel.Settings.Instructions)
  ```

  ```java Java
  import com.anthropic.models.beta.organization.claudetag.BetaClaudeTagSettingsUpdate;
  import com.anthropic.models.beta.organization.claudetag.slackchannels.SlackChannelUpdateParams;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      var params = SlackChannelUpdateParams.builder()
          .settings(BetaClaudeTagSettingsUpdate.builder()
              .instructions(Optional.empty())
              .build())
          .build();
      var channel = client.beta().organization().claudeTag().slackChannels()
          .update("slch_011CZkZmRt4vNq8sHbYw2KdX", params);

      IO.println(channel.settings().instructions().orElse(null));
  }
  ```

  ```php PHP
  use Anthropic\Beta\Organization\ClaudeTag\ClaudeTagSettingsUpdate;
  // ...

  $client = new Client();

  // update() отбрасывает null внутри массивов, поэтому соберите объект настроек так, чтобы отправить null.
  $channel = $client->beta->organization->claudeTag->slackChannels->update(
      id: 'slch_011CZkZmRt4vNq8sHbYw2KdX',
      settings: (new ClaudeTagSettingsUpdate())->withInstructions(null),
  );

  echo "{$channel->settings->instructions}\n";
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  channel_id = "slch_011CZkZmRt4vNq8sHbYw2KdX"
  channel = client.beta.organization.claude_tag.slack_channels.update(
    channel_id,
    settings: {instructions: nil}
  )

  puts channel.settings.instructions
  ```
</CodeGroup>

### Получение действующих настроек канала

`GET /v1/organizations/claude_tag/slack_channels/{id}/effective` возвращает то, что применяется в канале, и откуда берётся каждое значение. Полный ответ показан в разделе [Сохранённые и действующие настройки](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#stored-and-effective-settings). В этом представлении `enabled` и `guest_policy` никогда не равны `null`. Представление вычисляется при каждом чтении, поэтому у него нет `created_at` и `updated_at`. Если какой-либо уровень не удаётся прочитать, запрос завершается ошибкой `503`, а не вычисляется без него. Требуется область действия `read:claude_tag`.

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/claude_tag/slack_channels/slch_011CZkZmRt4vNq8sHbYw2KdX/effective" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28"
  ```

  ```bash CLI
  ant beta:organization:claude-tag:slack-channels:effective retrieve \
    --id slch_011CZkZmRt4vNq8sHbYw2KdX
  ```

  ```python Python
  client = anthropic.Anthropic()

  effective = client.beta.organization.claude_tag.slack_channels.effective.retrieve(
      "slch_011CZkZmRt4vNq8sHbYw2KdX"
  )

  print(effective.settings.instructions)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const effective = await client.beta.organization.claudeTag.slackChannels.effective.retrieve(
    "slch_011CZkZmRt4vNq8sHbYw2KdX"
  );

  console.log(effective.settings.instructions);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var effective = await client.Beta.Organization.ClaudeTag.SlackChannels.Effective.Retrieve(
      "slch_011CZkZmRt4vNq8sHbYw2KdX"
  );

  Console.WriteLine(effective.Settings.Instructions);
  ```

  ```go Go
  client := anthropic.NewClient()

  effective, err := client.Beta.Organization.ClaudeTag.SlackChannels.Effective.Get(
  	context.Background(),
  	"slch_011CZkZmRt4vNq8sHbYw2KdX",
  	anthropic.BetaOrganizationClaudeTagSlackChannelEffectiveGetParams{},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(effective.Settings.Instructions)
  ```

  ```java Java
  AnthropicClient client = AnthropicOkHttpClient.fromEnv();

  var effective = client.beta().organization().claudeTag().slackChannels().effective()
      .retrieve("slch_011CZkZmRt4vNq8sHbYw2KdX");

  IO.println(effective.settings().instructions().orElse(null));
  ```

  ```php PHP
  $client = new Client();

  $effective = $client->beta->organization->claudeTag->slackChannels->effective->retrieve(
      id: 'slch_011CZkZmRt4vNq8sHbYw2KdX',
  );

  echo "{$effective->settings->instructions}\n";
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  channel_id = "slch_011CZkZmRt4vNq8sHbYw2KdX"
  effective = client.beta.organization.claude_tag.slack_channels.effective.retrieve(channel_id)

  puts effective.settings.instructions
  ```
</CodeGroup>

### Удаление канала

`DELETE /v1/organizations/claude_tag/slack_channels/{id}` удаляет канал из Claude Tag. Это то же удаление, которое владелец организации выполняет в claude.ai, с тем же результатом. Оно не удаляет, не архивирует и не изменяет канал в Slack или какие-либо сообщения в нём. Требуется область действия `write:claude_tag`.

<Warning>
  Удаление нельзя отменить. Оно удаляет всё, что Claude Tag хранит для канала:

  * его сохранённые настройки и его цели Bundle
  * его сеансы и их транскрипты, включая выполняющиеся сеансы
  * его память, то есть то, что Claude сохраняет о канале от одного сеанса к другому
  * его рутины и артефакты, опубликованные из него
</Warning>

<CodeGroup>
  ```bash cURL
  curl -X DELETE "https://api.anthropic.com/v1/organizations/claude_tag/slack_channels/slch_011CZkZmRt4vNq8sHbYw2KdX" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28"
  ```

  ```bash CLI
  ant beta:organization:claude-tag:slack-channels delete \
    --id slch_011CZkZmRt4vNq8sHbYw2KdX
  ```

  ```python Python
  client = anthropic.Anthropic()

  deleted_channel = client.beta.organization.claude_tag.slack_channels.delete(
      "slch_011CZkZmRt4vNq8sHbYw2KdX"
  )

  print(deleted_channel.id)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const deletedChannel = await client.beta.organization.claudeTag.slackChannels.delete(
    "slch_011CZkZmRt4vNq8sHbYw2KdX"
  );

  console.log(deletedChannel.id);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var deletedChannel = await client.Beta.Organization.ClaudeTag.SlackChannels.Delete(
      "slch_011CZkZmRt4vNq8sHbYw2KdX"
  );

  Console.WriteLine(deletedChannel.ID);
  ```

  ```go Go
  client := anthropic.NewClient()

  deletedChannel, err := client.Beta.Organization.ClaudeTag.SlackChannels.Delete(
  	context.Background(),
  	"slch_011CZkZmRt4vNq8sHbYw2KdX",
  	anthropic.BetaOrganizationClaudeTagSlackChannelDeleteParams{},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(deletedChannel.ID)
  ```

  ```java Java
  AnthropicClient client = AnthropicOkHttpClient.fromEnv();

  var deletedChannel = client.beta().organization().claudeTag().slackChannels()
      .delete("slch_011CZkZmRt4vNq8sHbYw2KdX");

  IO.println(deletedChannel.id());
  ```

  ```php PHP
  $client = new Client();

  $deletedChannel = $client->beta->organization->claudeTag->slackChannels->delete(
      id: 'slch_011CZkZmRt4vNq8sHbYw2KdX',
  );

  echo "{$deletedChannel->id}\n";
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  channel_id = "slch_011CZkZmRt4vNq8sHbYw2KdX"
  deleted_channel = client.beta.organization.claude_tag.slack_channels.delete(channel_id)

  puts deleted_channel.id
  ```
</CodeGroup>

```json Response
{
  "type": "slack_channel_deleted",
  "id": "slch_011CZkZmRt4vNq8sHbYw2KdX"
}
```

`id` возвращает `404` сразу после того, как запрос вернёт ответ, а остальное удаляется в фоновом режиме. Повторное удаление возвращает `404`.

**Удаление канала не останавливает Claude в нём.** Claude продолжает отвечать в соответствии с тем, что канал наследует, без памяти о канале, и при следующем использовании канал может быть снова настроен с новым `id`.

* Чтобы Claude перестал отвечать в канале, вместо этого установите для него `enabled` в `false`.
* Чтобы канал ничего не хранил, но сохранил свои сеансы и память, вместо этого очистите каждую настройку и открепите каждый Bundle.

Два вида каналов нельзя удалить здесь, и для них возвращается `400`: канал, который не [сконфигурирован](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#configured-levels) (`error_code: "slack_channel_not_configured"`), и канал, содержащий конфигурацию, которой этот API не управляет, например пул раннеров или настройку, которая есть только в claude.ai. Канал второго вида владелец организации удаляет в claude.ai.

## Рабочие пространства Slack

Объект рабочего пространства — это сохранённое представление одного рабочего пространства Slack. У него те же поля, что и у [объекта канала](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#slack-channels), за исключением того, что `type` равен `slack_workspace`, `id` имеет префикс `slws_`, а `slack` содержит только `team_id`. Полный объект показан в ответе из раздела [Быстрый старт](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#quick-start).

`id` без префикса `slws_` возвращает `400`. `id` с префиксом, который не указывает ни на одно рабочее пространство вашей организации, возвращает `404`.

### Список рабочих пространств

`GET /v1/organizations/claude_tag/slack_workspaces` выводит список настроенных рабочих пространств, которыми владеет ваша организация, начиная с самых новых по `created_at`. Запрос и ответ показаны в разделе [Быстрый старт](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#quick-start). Чтобы найти одно рабочее пространство по собственному идентификатору Slack, добавьте `slack_team_id`: `data` содержит это рабочее пространство или пуст, если оно не настроено, а для рабочего пространства, которым ваша организация не владеет, возвращается `404`. Требуется область действия `read:claude_tag`.

### Получение рабочего пространства

`GET /v1/organizations/claude_tag/slack_workspaces/{id}` возвращает объект рабочего пространства. Требуется область действия `read:claude_tag`.

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/claude_tag/slack_workspaces/slws_011CZkZnWa7xPc3uJfZe5LgT" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28"
  ```

  ```bash CLI
  ant beta:organization:claude-tag:slack-workspaces retrieve \
    --id slws_011CZkZnWa7xPc3uJfZe5LgT
  ```

  ```python Python
  client = anthropic.Anthropic()

  workspace = client.beta.organization.claude_tag.slack_workspaces.retrieve(
      "slws_011CZkZnWa7xPc3uJfZe5LgT"
  )

  print(workspace.settings.instructions)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const workspace = await client.beta.organization.claudeTag.slackWorkspaces.retrieve(
    "slws_011CZkZnWa7xPc3uJfZe5LgT"
  );

  console.log(workspace.settings.instructions);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var workspace = await client.Beta.Organization.ClaudeTag.SlackWorkspaces.Retrieve(
      "slws_011CZkZnWa7xPc3uJfZe5LgT"
  );

  Console.WriteLine(workspace.Settings.Instructions);
  ```

  ```go Go
  client := anthropic.NewClient()

  workspace, err := client.Beta.Organization.ClaudeTag.SlackWorkspaces.Get(
  	context.Background(),
  	"slws_011CZkZnWa7xPc3uJfZe5LgT",
  	anthropic.BetaOrganizationClaudeTagSlackWorkspaceGetParams{},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(workspace.Settings.Instructions)
  ```

  ```java Java
  AnthropicClient client = AnthropicOkHttpClient.fromEnv();

  var workspace = client.beta().organization().claudeTag().slackWorkspaces()
      .retrieve("slws_011CZkZnWa7xPc3uJfZe5LgT");

  IO.println(workspace.settings().instructions().orElse(null));
  ```

  ```php PHP
  $client = new Client();

  $workspace = $client->beta->organization->claudeTag->slackWorkspaces->retrieve(
      id: 'slws_011CZkZnWa7xPc3uJfZe5LgT',
  );

  echo "{$workspace->settings->instructions}\n";
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  workspace_id = "slws_011CZkZnWa7xPc3uJfZe5LgT"
  workspace = client.beta.organization.claude_tag.slack_workspaces.retrieve(workspace_id)

  puts workspace.settings.instructions
  ```
</CodeGroup>

### Обновление рабочего пространства

`POST /v1/organizations/claude_tag/slack_workspaces/{id}` изменяет настройки рабочего пространства и возвращает объект рабочего пространства. `settings` обязателен и следует правилам из раздела [Изменение настроек](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#changing-settings). То, что вы задаёте здесь, применяется в каждом канале рабочего пространства, который не задаёт собственное значение. Требуется область действия `write:claude_tag`.

<CodeGroup>
  ```bash cURL
  curl -X POST "https://api.anthropic.com/v1/organizations/claude_tag/slack_workspaces/slws_011CZkZnWa7xPc3uJfZe5LgT" \
    -H "content-type: application/json" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28" \
    -d '{"settings": {"guest_policy": {"type": "restrict"}}}'
  ```

  ```bash CLI
  ant beta:organization:claude-tag:slack-workspaces update \
    --id slws_011CZkZnWa7xPc3uJfZe5LgT \
    --settings '{guest_policy: {type: restrict}}'
  ```

  ```python Python
  client = anthropic.Anthropic()

  workspace = client.beta.organization.claude_tag.slack_workspaces.update(
      "slws_011CZkZnWa7xPc3uJfZe5LgT",
      settings={"guest_policy": {"type": "restrict"}},
  )

  print(workspace.settings.guest_policy)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const workspace = await client.beta.organization.claudeTag.slackWorkspaces.update(
    "slws_011CZkZnWa7xPc3uJfZe5LgT",
    { settings: { guest_policy: { type: "restrict" } } }
  );

  console.log(workspace.settings.guest_policy?.type);
  ```

  ```csharp C#
  using Anthropic.Models.Beta.Organization.ClaudeTag;

  AnthropicClient client = new();

  var workspace = await client.Beta.Organization.ClaudeTag.SlackWorkspaces.Update(
      "slws_011CZkZnWa7xPc3uJfZe5LgT",
      new() { Settings = new() { GuestPolicy = new BetaClaudeTagGuestPolicyRestrict() } }
  );

  Console.WriteLine(workspace.Settings.GuestPolicy?.Type.GetString());
  ```

  ```go Go
  client := anthropic.NewClient()

  workspace, err := client.Beta.Organization.ClaudeTag.SlackWorkspaces.Update(
  	context.Background(),
  	"slws_011CZkZnWa7xPc3uJfZe5LgT",
  	anthropic.BetaOrganizationClaudeTagSlackWorkspaceUpdateParams{
  		Settings: anthropic.BetaClaudeTagSettingsUpdateParam{
  			GuestPolicy: anthropic.BetaClaudeTagGuestPolicyUnionParam{
  				OfRestrict: &anthropic.BetaClaudeTagGuestPolicyRestrictParam{},
  			},
  		},
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(workspace.Settings.GuestPolicy.Type)
  ```

  ```java Java
  import com.anthropic.models.beta.organization.claudetag.BetaClaudeTagGuestPolicyRestrict;
  import com.anthropic.models.beta.organization.claudetag.BetaClaudeTagSettingsUpdate;
  import com.anthropic.models.beta.organization.claudetag.slackworkspaces.SlackWorkspaceUpdateParams;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      var params = SlackWorkspaceUpdateParams.builder()
          .settings(BetaClaudeTagSettingsUpdate.builder()
              .guestPolicy(BetaClaudeTagGuestPolicyRestrict.builder().build())
              .build())
          .build();
      var workspace = client.beta().organization().claudeTag().slackWorkspaces()
          .update("slws_011CZkZnWa7xPc3uJfZe5LgT", params);

      IO.println(workspace.settings().guestPolicy().map(policy -> policy.type().asString()).orElse(null));
  }
  ```

  ```php PHP
  $client = new Client();

  $workspace = $client->beta->organization->claudeTag->slackWorkspaces->update(
      id: 'slws_011CZkZnWa7xPc3uJfZe5LgT',
      settings: ['guestPolicy' => ['type' => 'restrict']],
  );

  echo "{$workspace->settings->guestPolicy?->type}\n";
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  workspace_id = "slws_011CZkZnWa7xPc3uJfZe5LgT"
  workspace = client.beta.organization.claude_tag.slack_workspaces.update(
    workspace_id,
    settings: {guest_policy: {type: :restrict}}
  )

  puts workspace.settings.guest_policy&.type
  ```
</CodeGroup>

### Получение действующих настроек рабочего пространства

`GET /v1/organizations/claude_tag/slack_workspaces/{id}/effective` возвращает то, что применяется в рабочем пространстве, вычисленное на основе рабочего пространства и значений Slack по умолчанию, в форме, показанной в разделе [Сохранённые и действующие настройки](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#stored-and-effective-settings), с `type`, равным `slack_workspace_effective`. Требуется область действия `read:claude_tag`.

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/claude_tag/slack_workspaces/slws_011CZkZnWa7xPc3uJfZe5LgT/effective" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28"
  ```

  ```bash CLI
  ant beta:organization:claude-tag:slack-workspaces:effective retrieve \
    --id slws_011CZkZnWa7xPc3uJfZe5LgT
  ```

  ```python Python
  client = anthropic.Anthropic()

  effective = client.beta.organization.claude_tag.slack_workspaces.effective.retrieve(
      "slws_011CZkZnWa7xPc3uJfZe5LgT"
  )

  print(effective.settings.enabled)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const effective = await client.beta.organization.claudeTag.slackWorkspaces.effective.retrieve(
    "slws_011CZkZnWa7xPc3uJfZe5LgT"
  );

  console.log(effective.settings.enabled);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var effective = await client.Beta.Organization.ClaudeTag.SlackWorkspaces.Effective.Retrieve(
      "slws_011CZkZnWa7xPc3uJfZe5LgT"
  );

  Console.WriteLine(effective.Settings.Enabled);
  ```

  ```go Go
  client := anthropic.NewClient()

  effective, err := client.Beta.Organization.ClaudeTag.SlackWorkspaces.Effective.Get(
  	context.Background(),
  	"slws_011CZkZnWa7xPc3uJfZe5LgT",
  	anthropic.BetaOrganizationClaudeTagSlackWorkspaceEffectiveGetParams{},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(effective.Settings.Enabled)
  ```

  ```java Java
  AnthropicClient client = AnthropicOkHttpClient.fromEnv();

  var effective = client.beta().organization().claudeTag().slackWorkspaces().effective()
      .retrieve("slws_011CZkZnWa7xPc3uJfZe5LgT");

  IO.println(effective.settings().enabled().orElse(null));
  ```

  ```php PHP
  $client = new Client();

  $effective = $client->beta->organization->claudeTag->slackWorkspaces->effective->retrieve(
      id: 'slws_011CZkZnWa7xPc3uJfZe5LgT',
  );

  echo json_encode($effective->settings->enabled) . "\n";
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  workspace_id = "slws_011CZkZnWa7xPc3uJfZe5LgT"
  effective = client.beta.organization.claude_tag.slack_workspaces.effective.retrieve(workspace_id)

  puts effective.settings.enabled
  ```
</CodeGroup>

## Значения Slack по умолчанию

У вашей организации ровно один объект значений Slack по умолчанию. Он применяется к каждому рабочему пространству и каналу, не имеет `id` и не имеет действующего представления, поскольку более широкого уровня нет.

| Поле       | Описание                                                                                                                                                                       |
| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `type`     | `slack_defaults`.                                                                                                                                                              |
| `settings` | То, что хранят значения по умолчанию, как у [канала](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#slack-channels).                                         |
| `agent_id` | С префиксом `cagt_`. `null`, пока значения Slack по умолчанию не [настроены](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#set-up-channels-and-workspaces). |

### Получение значений Slack по умолчанию

`GET /v1/organizations/claude_tag/slack_defaults` возвращает объект. Организация, у которой значения Slack по умолчанию не настроены, получает `200`, где каждая настройка и `agent_id` равны `null`. Требуется область действия `read:claude_tag`.

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/claude_tag/slack_defaults" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28"
  ```

  ```bash CLI
  ant beta:organization:claude-tag:slack-defaults retrieve
  ```

  ```python Python
  client = anthropic.Anthropic()

  defaults = client.beta.organization.claude_tag.slack_defaults.retrieve()

  print(defaults.settings.guest_policy)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const defaults = await client.beta.organization.claudeTag.slackDefaults.retrieve();

  console.log(defaults.settings.guest_policy?.type);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var defaults = await client.Beta.Organization.ClaudeTag.SlackDefaults.Retrieve();

  Console.WriteLine(defaults.Settings.GuestPolicy?.Type.GetString());
  ```

  ```go Go
  client := anthropic.NewClient()

  defaults, err := client.Beta.Organization.ClaudeTag.SlackDefaults.Get(
  	context.Background(),
  	anthropic.BetaOrganizationClaudeTagSlackDefaultGetParams{},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(defaults.Settings.GuestPolicy.Type)
  ```

  ```java Java
  AnthropicClient client = AnthropicOkHttpClient.fromEnv();

  var defaults = client.beta().organization().claudeTag().slackDefaults().retrieve();

  IO.println(defaults.settings().guestPolicy().map(policy -> policy.type().asString()).orElse(null));
  ```

  ```php PHP
  $client = new Client();

  $defaults = $client->beta->organization->claudeTag->slackDefaults->retrieve();

  echo "{$defaults->settings->guestPolicy?->type}\n";
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  defaults = client.beta.organization.claude_tag.slack_defaults.retrieve

  puts defaults.settings.guest_policy&.type
  ```
</CodeGroup>

### Обновление значений Slack по умолчанию

`POST /v1/organizations/claude_tag/slack_defaults` изменяет значения по умолчанию и возвращает объект. `settings` обязателен и следует правилам из раздела [Изменение настроек](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#changing-settings). Запрос, который задаёт значение, пока значения Slack по умолчанию не настроены, возвращает `400`. Требуется область действия `write:claude_tag`.

<CodeGroup>
  ```bash cURL
  curl -X POST "https://api.anthropic.com/v1/organizations/claude_tag/slack_defaults" \
    -H "content-type: application/json" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28" \
    -d '{
      "settings": {
        "instructions": "Keep replies under 200 words.",
        "environment_id": "env_011CZkZqDx2zRf5tLjCs7NpV"
      }
    }'
  ```

  ```bash CLI
  ant beta:organization:claude-tag:slack-defaults update \
    --settings '{instructions: "Keep replies under 200 words.", environment_id: env_011CZkZqDx2zRf5tLjCs7NpV}'
  ```

  ```python Python
  client = anthropic.Anthropic()

  defaults = client.beta.organization.claude_tag.slack_defaults.update(
      settings={
          "instructions": "Keep replies under 200 words.",
          "environment_id": "env_011CZkZqDx2zRf5tLjCs7NpV",
      },
  )

  print(defaults.settings.environment_id)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const defaults = await client.beta.organization.claudeTag.slackDefaults.update({
    settings: {
      instructions: "Keep replies under 200 words.",
      environment_id: "env_011CZkZqDx2zRf5tLjCs7NpV"
    }
  });

  console.log(defaults.settings.environment_id);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var defaults = await client.Beta.Organization.ClaudeTag.SlackDefaults.Update(
      new()
      {
          Settings = new()
          {
              Instructions = "Keep replies under 200 words.",
              EnvironmentID = "env_011CZkZqDx2zRf5tLjCs7NpV",
          },
      }
  );

  Console.WriteLine(defaults.Settings.EnvironmentID);
  ```

  ```go Go
  client := anthropic.NewClient()

  defaults, err := client.Beta.Organization.ClaudeTag.SlackDefaults.Update(
  	context.Background(),
  	anthropic.BetaOrganizationClaudeTagSlackDefaultUpdateParams{
  		Settings: anthropic.BetaClaudeTagSettingsUpdateParam{
  			Instructions:  anthropic.String("Keep replies under 200 words."),
  			EnvironmentID: anthropic.String("env_011CZkZqDx2zRf5tLjCs7NpV"),
  		},
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(defaults.Settings.EnvironmentID)
  ```

  ```java Java
  import com.anthropic.models.beta.organization.claudetag.BetaClaudeTagSettingsUpdate;
  import com.anthropic.models.beta.organization.claudetag.slackdefaults.SlackDefaultUpdateParams;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      var params = SlackDefaultUpdateParams.builder()
          .settings(BetaClaudeTagSettingsUpdate.builder()
              .instructions("Keep replies under 200 words.")
              .environmentId("env_011CZkZqDx2zRf5tLjCs7NpV")
              .build())
          .build();
      var defaults = client.beta().organization().claudeTag().slackDefaults().update(params);

      IO.println(defaults.settings().environmentId().orElse(null));
  }
  ```

  ```php PHP
  $client = new Client();

  $defaults = $client->beta->organization->claudeTag->slackDefaults->update(
      settings: [
          'instructions' => 'Keep replies under 200 words.',
          'environmentID' => 'env_011CZkZqDx2zRf5tLjCs7NpV',
      ],
  );

  echo "{$defaults->settings->environmentID}\n";
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  defaults = client.beta.organization.claude_tag.slack_defaults.update(
    settings: {
      instructions: "Keep replies under 200 words.",
      environment_id: "env_011CZkZqDx2zRf5tLjCs7NpV"
    }
  )

  puts defaults.settings.environment_id
  ```
</CodeGroup>

```json Response
{
  "type": "slack_defaults",
  "settings": {
    "enabled": null,
    "instructions": "Keep replies under 200 words.",
    "model": null,
    "environment_id": "env_011CZkZqDx2zRf5tLjCs7NpV",
    "guest_policy": null
  },
  "agent_id": "cagt_011CZkZtKa8cUj4wPnFv6RsY"
}
```

## Bundles

Bundle — это то, что в claude.ai называется [Access bundle](https://claude.com/docs/claude-tag/admins/add-connections) (пакет доступа): именованный набор средств доступа, например коннекторов, репозиториев и учётных данных, который Claude может использовать в канале или рабочем пространстве. Владельцы организации создают, редактируют и удаляют Bundles в claude.ai. Этот API выводит их список и прикрепляет их. Он возвращает название и описание Bundle, но никогда не возвращает то, что Bundle предоставляет.

| Поле                       | Описание                                                 |
| -------------------------- | -------------------------------------------------------- |
| `type`                     | `bundle`.                                                |
| `id`                       | С префиксом `capp_`.                                     |
| `display_name`             | Название Bundle.                                         |
| `description`              | Для чего предназначен Bundle. `null`, если описания нет. |
| `created_at`, `updated_at` | Когда Bundle был создан и последний раз изменён.         |

`bundle_id` без префикса `capp_` возвращает `400`. `bundle_id` с префиксом, который не существует или принадлежит другой организации, возвращает `404`, что бы ещё ни содержал запрос. Bundles, которыми Claude Tag управляет для себя, не выводятся в списке и возвращают `404`.

### Список Bundles

`GET /v1/organizations/claude_tag/bundles` выводит список Bundles вашей организации, начиная с самых новых по `created_at`. Требуется область действия `read:claude_tag`.

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/claude_tag/bundles" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28"
  ```

  ```bash CLI
  ant beta:organization:claude-tag:bundles list
  ```

  ```python Python
  client = anthropic.Anthropic()

  bundles = client.beta.organization.claude_tag.bundles.list()

  # Автоматически загружает дополнительные страницы по мере необходимости.
  for bundle in bundles:
      print(f"{bundle.id}: {bundle.display_name}")
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const bundles = await client.beta.organization.claudeTag.bundles.list();

  for await (const bundle of bundles) {
    console.log(`${bundle.id}: ${bundle.display_name}`);
  }
  ```

  ```csharp C#
  AnthropicClient client = new();

  var page = await client.Beta.Organization.ClaudeTag.Bundles.List();

  await foreach (var bundle in page.Paginate())
  {
      Console.WriteLine($"{bundle.ID}: {bundle.DisplayName}");
  }
  ```

  ```go Go
  client := anthropic.NewClient()

  bundles := client.Beta.Organization.ClaudeTag.Bundles.ListAutoPaging(
  	context.Background(),
  	anthropic.BetaOrganizationClaudeTagBundleListParams{},
  )

  for bundles.Next() {
  	bundle := bundles.Current()
  	fmt.Printf("%s: %s\n", bundle.ID, bundle.DisplayName)
  }
  if err := bundles.Err(); err != nil {
  	log.Fatal(err)
  }
  ```

  ```java Java
  AnthropicClient client = AnthropicOkHttpClient.fromEnv();

  var bundles = client.beta().organization().claudeTag().bundles().list();

  for (var bundle : bundles.autoPager()) {
      IO.println(bundle.id() + ": " + bundle.displayName());
  }
  ```

  ```php PHP
  $client = new Client();

  $bundles = $client->beta->organization->claudeTag->bundles->list();

  // Только эта страница; для следующей снова вызовите list() с page: $bundles->nextPage.
  foreach ($bundles->getItems() as $bundle) {
      echo "{$bundle->id}: {$bundle->displayName}\n";
  }
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  page = client.beta.organization.claude_tag.bundles.list

  page.auto_paging_each do |bundle|
    puts "#{bundle.id}: #{bundle.display_name}"
  end
  ```
</CodeGroup>

```json Response
{
  "data": [
    {
      "type": "bundle",
      "id": "capp_011CZkZjLP1cWxj5EtMmdgbq",
      "display_name": "Support tools",
      "description": "Issue tracker and the support runbooks repository.",
      "created_at": "2026-09-12T08:15:30Z",
      "updated_at": "2026-09-30T13:02:47Z"
    }
  ],
  "next_page": null
}
```

### Получение Bundle

`GET /v1/organizations/claude_tag/bundles/{bundle_id}` возвращает объект Bundle. Требуется область действия `read:claude_tag`.

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/claude_tag/bundles/capp_011CZkZjLP1cWxj5EtMmdgbq" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28"
  ```

  ```bash CLI
  ant beta:organization:claude-tag:bundles retrieve \
    --bundle-id capp_011CZkZjLP1cWxj5EtMmdgbq
  ```

  ```python Python
  client = anthropic.Anthropic()

  bundle = client.beta.organization.claude_tag.bundles.retrieve(
      "capp_011CZkZjLP1cWxj5EtMmdgbq"
  )

  print(bundle.display_name)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const bundle = await client.beta.organization.claudeTag.bundles.retrieve(
    "capp_011CZkZjLP1cWxj5EtMmdgbq"
  );

  console.log(bundle.display_name);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var bundle = await client.Beta.Organization.ClaudeTag.Bundles.Retrieve(
      "capp_011CZkZjLP1cWxj5EtMmdgbq"
  );

  Console.WriteLine(bundle.DisplayName);
  ```

  ```go Go
  client := anthropic.NewClient()

  bundle, err := client.Beta.Organization.ClaudeTag.Bundles.Get(
  	context.Background(),
  	"capp_011CZkZjLP1cWxj5EtMmdgbq",
  	anthropic.BetaOrganizationClaudeTagBundleGetParams{},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(bundle.DisplayName)
  ```

  ```java Java
  AnthropicClient client = AnthropicOkHttpClient.fromEnv();

  var bundle = client.beta().organization().claudeTag().bundles()
      .retrieve("capp_011CZkZjLP1cWxj5EtMmdgbq");

  IO.println(bundle.displayName());
  ```

  ```php PHP
  $client = new Client();

  $bundle = $client->beta->organization->claudeTag->bundles->retrieve(
      bundleID: 'capp_011CZkZjLP1cWxj5EtMmdgbq',
  );

  echo "{$bundle->displayName}\n";
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  bundle_id = "capp_011CZkZjLP1cWxj5EtMmdgbq"
  bundle = client.beta.organization.claude_tag.bundles.retrieve(bundle_id)

  puts bundle.display_name
  ```
</CodeGroup>

## Цели Bundle

Цель Bundle (Bundle target) — это запись об одном Bundle, прикреплённом к одному каналу или одному рабочему пространству. Bundle, прикреплённый к рабочему пространству, может использоваться в рабочем пространстве и в каждом канале в нём. Bundle, прикреплённый к каналу, может использоваться только в этом канале.

| Поле                 | Описание                                                                                                                       |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `type`               | `slack_channel` или `slack_workspace`.                                                                                         |
| `id`                 | С префиксом `btgt_`. Это `{target_id}` в путях, и он никогда не совпадает с собственным `id` канала или рабочего пространства. |
| `slack_channel_id`   | Для цели `slack_channel`: `id` канала с префиксом `slch_`.                                                                     |
| `slack_workspace_id` | Для цели `slack_workspace`: `id` рабочего пространства с префиксом `slws_`.                                                    |
| `created_at`         | Когда Bundle был прикреплён.                                                                                                   |

Bundle прикрепляется к каналу или рабочему пространству не более одного раза, и у одной и той же пары всегда один и тот же `id`, в том числе после открепления и нового прикрепления. `id` непрозрачен: получайте его из ответа на прикрепление или из списка. Цель Bundle не содержит `id` своего Bundle, который также нужен в её путях, поэтому храните их вместе.

Первый Bundle, прикреплённый к каналу или рабочему пространству, делает его [сконфигурированным](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#configured-levels). Прикрепление или открепление не изменяет ни одной сохранённой настройки. Сеансы, выполняющиеся в канале или рабочем пространстве, получают уведомление о том, что его доступ изменился.

Bundle, который claude.ai прикрепляет в рамках настройки дежурства (on-call), выводится в списке и может быть прочитан, но не может быть прикреплён или откреплён здесь, и ничего нельзя прикрепить к каналу или рабочему пространству, которым управляет настройка дежурства, или открепить от него. Каждый из таких запросов возвращает `400`.

### Список целей Bundle

`GET /v1/organizations/claude_tag/bundles/{bundle_id}/targets` выводит список каналов и рабочих пространств, к которым прикреплён Bundle, начиная с самых новых по `created_at`. Требуется область действия `read:claude_tag`.

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/claude_tag/bundles/capp_011CZkZjLP1cWxj5EtMmdgbq/targets" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28"
  ```

  ```bash CLI
  ant beta:organization:claude-tag:bundles:targets list \
    --bundle-id capp_011CZkZjLP1cWxj5EtMmdgbq
  ```

  ```python Python
  client = anthropic.Anthropic()

  targets = client.beta.organization.claude_tag.bundles.targets.list(
      "capp_011CZkZjLP1cWxj5EtMmdgbq"
  )

  # Автоматически загружает дополнительные страницы по мере необходимости.
  for target in targets:
      print(f"{target.id}: {target.type}")
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const targets = await client.beta.organization.claudeTag.bundles.targets.list(
    "capp_011CZkZjLP1cWxj5EtMmdgbq"
  );

  for await (const target of targets) {
    console.log(`${target.id}: ${target.type}`);
  }
  ```

  ```csharp C#
  AnthropicClient client = new();

  var page = await client.Beta.Organization.ClaudeTag.Bundles.Targets.List(
      "capp_011CZkZjLP1cWxj5EtMmdgbq"
  );

  await foreach (var target in page.Paginate())
  {
      Console.WriteLine($"{target.ID}: {target.Type.GetString()}");
  }
  ```

  ```go Go
  client := anthropic.NewClient()

  targets := client.Beta.Organization.ClaudeTag.Bundles.Targets.ListAutoPaging(
  	context.Background(),
  	"capp_011CZkZjLP1cWxj5EtMmdgbq",
  	anthropic.BetaOrganizationClaudeTagBundleTargetListParams{},
  )

  for targets.Next() {
  	target := targets.Current()
  	fmt.Printf("%s: %s\n", target.ID, target.Type)
  }
  if err := targets.Err(); err != nil {
  	log.Fatal(err)
  }
  ```

  ```java Java
  AnthropicClient client = AnthropicOkHttpClient.fromEnv();

  var targets = client.beta().organization().claudeTag().bundles().targets()
      .list("capp_011CZkZjLP1cWxj5EtMmdgbq");

  for (var target : targets.autoPager()) {
      IO.println(target.id() + ": " + target.type().asString());
  }
  ```

  ```php PHP
  $client = new Client();

  $targets = $client->beta->organization->claudeTag->bundles->targets->list(
      bundleID: 'capp_011CZkZjLP1cWxj5EtMmdgbq',
  );

  // Только эта страница; для следующей снова вызовите list() с page: $targets->nextPage.
  foreach ($targets->getItems() as $target) {
      echo "{$target->id}: {$target->type}\n";
  }
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  bundle_id = "capp_011CZkZjLP1cWxj5EtMmdgbq"
  page = client.beta.organization.claude_tag.bundles.targets.list(bundle_id)

  page.auto_paging_each do |target|
    puts "#{target.id}: #{target.type}"
  end
  ```
</CodeGroup>

```json Response
{
  "data": [
    {
      "type": "slack_channel",
      "id": "btgt_011CZkZpBv9yQd6wKhAr8MnU",
      "slack_channel_id": "slch_011CZkZmRt4vNq8sHbYw2KdX",
      "created_at": "2026-10-19T16:21:44Z"
    },
    {
      "type": "slack_workspace",
      "id": "btgt_011CZkZuMc3dVk7xQpGw9StZ",
      "slack_workspace_id": "slws_011CZkZnWa7xPc3uJfZe5LgT",
      "created_at": "2026-09-12T08:17:02Z"
    }
  ],
  "next_page": null
}
```

В списке выводятся только прикрепления к каналам и рабочим пространствам. У Bundle, который в claude.ai прикреплён к чему-либо другому, например к **Default Slack access**, нет для этого цели Bundle, как нет её и у правила, которое применяет Bundle сразу во многих каналах. Поэтому Bundles, которые Claude может использовать в канале, могут не ограничиваться целями, указывающими на этот канал. Нет конечной точки, которая выводила бы список Bundles, прикреплённых к одному каналу или рабочему пространству.

### Прикрепление Bundle

`POST /v1/organizations/claude_tag/bundles/{bundle_id}/targets` прикрепляет Bundle и возвращает цель Bundle. В теле указываются `type` и соответствующий `id`. Канал или рабочее пространство уже должны быть настроены: прикрепление никогда не настраивает канал. Прикрепление уже прикреплённой пары возвращает `200` с существующей целью Bundle. Требуется область действия `write:claude_tag`.

Прикрепите Bundle к каналу:

<CodeGroup>
  ```bash cURL
  curl -X POST "https://api.anthropic.com/v1/organizations/claude_tag/bundles/capp_011CZkZjLP1cWxj5EtMmdgbq/targets" \
    -H "content-type: application/json" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28" \
    -d '{"type": "slack_channel", "slack_channel_id": "slch_011CZkZmRt4vNq8sHbYw2KdX"}'
  ```

  ```bash CLI
  ant beta:organization:claude-tag:bundles:targets create \
    --bundle-id capp_011CZkZjLP1cWxj5EtMmdgbq \
    --type slack_channel \
    --slack-channel-id slch_011CZkZmRt4vNq8sHbYw2KdX
  ```

  ```python Python
  client = anthropic.Anthropic()

  target = client.beta.organization.claude_tag.bundles.targets.create(
      "capp_011CZkZjLP1cWxj5EtMmdgbq",
      type="slack_channel",
      slack_channel_id="slch_011CZkZmRt4vNq8sHbYw2KdX",
  )

  print(target.id)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const target = await client.beta.organization.claudeTag.bundles.targets.create(
    "capp_011CZkZjLP1cWxj5EtMmdgbq",
    { type: "slack_channel", slack_channel_id: "slch_011CZkZmRt4vNq8sHbYw2KdX" }
  );

  console.log(target.id);
  ```

  ```csharp C#
  using Anthropic.Models.Beta.Organization.ClaudeTag.Bundles.Targets;

  AnthropicClient client = new();

  var target = await client.Beta.Organization.ClaudeTag.Bundles.Targets.Create(
      "capp_011CZkZjLP1cWxj5EtMmdgbq",
      new()
      {
          BetaClaudeTagBundleTargetCreate = new BetaClaudeTagSlackChannelBundleTargetCreate
          {
              SlackChannelID = "slch_011CZkZmRt4vNq8sHbYw2KdX",
          },
      }
  );

  Console.WriteLine(target.ID);
  ```

  ```go Go
  client := anthropic.NewClient()

  target, err := client.Beta.Organization.ClaudeTag.Bundles.Targets.New(
  	context.Background(),
  	"capp_011CZkZjLP1cWxj5EtMmdgbq",
  	anthropic.BetaOrganizationClaudeTagBundleTargetNewParams{
  		BetaClaudeTagBundleTargetCreate: anthropic.BetaClaudeTagBundleTargetCreateUnionParam{
  			OfSlackChannel: &anthropic.BetaClaudeTagSlackChannelBundleTargetCreateParam{
  				SlackChannelID: "slch_011CZkZmRt4vNq8sHbYw2KdX",
  			},
  		},
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(target.ID)
  ```

  ```java Java
  import com.anthropic.models.beta.organization.claudetag.bundles.targets.TargetCreateParams;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      var params = TargetCreateParams.builder()
          .slackChannelBetaClaudeTagBundleTargetCreate("slch_011CZkZmRt4vNq8sHbYw2KdX")
          .build();
      var target = client.beta().organization().claudeTag().bundles().targets()
          .create("capp_011CZkZjLP1cWxj5EtMmdgbq", params);

      IO.println(target.id());
  }
  ```

  ```php PHP
  $client = new Client();

  $target = $client->beta->organization->claudeTag->bundles->targets->create(
      bundleID: 'capp_011CZkZjLP1cWxj5EtMmdgbq',
      betaClaudeTagBundleTargetCreate: [
          'type' => 'slack_channel',
          'slackChannelID' => 'slch_011CZkZmRt4vNq8sHbYw2KdX',
      ],
  );

  echo "{$target->id}\n";
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  bundle_id = "capp_011CZkZjLP1cWxj5EtMmdgbq"
  target = client.beta.organization.claude_tag.bundles.targets.create(
    bundle_id,
    beta_claude_tag_bundle_target_create: {
      type: :slack_channel,
      slack_channel_id: "slch_011CZkZmRt4vNq8sHbYw2KdX"
    }
  )

  puts target.id
  ```
</CodeGroup>

```json Response
{
  "type": "slack_channel",
  "id": "btgt_011CZkZpBv9yQd6wKhAr8MnU",
  "slack_channel_id": "slch_011CZkZmRt4vNq8sHbYw2KdX",
  "created_at": "2026-10-19T16:21:44Z"
}
```

Прикрепите Bundle к рабочему пространству:

<CodeGroup>
  ```bash cURL
  curl -X POST "https://api.anthropic.com/v1/organizations/claude_tag/bundles/capp_011CZkZjLP1cWxj5EtMmdgbq/targets" \
    -H "content-type: application/json" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28" \
    -d '{"type": "slack_workspace", "slack_workspace_id": "slws_011CZkZnWa7xPc3uJfZe5LgT"}'
  ```

  ```bash CLI
  ant beta:organization:claude-tag:bundles:targets create \
    --bundle-id capp_011CZkZjLP1cWxj5EtMmdgbq \
    --type slack_workspace \
    --slack-workspace-id slws_011CZkZnWa7xPc3uJfZe5LgT
  ```

  ```python Python
  client = anthropic.Anthropic()

  target = client.beta.organization.claude_tag.bundles.targets.create(
      "capp_011CZkZjLP1cWxj5EtMmdgbq",
      type="slack_workspace",
      slack_workspace_id="slws_011CZkZnWa7xPc3uJfZe5LgT",
  )

  print(target.id)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const target = await client.beta.organization.claudeTag.bundles.targets.create(
    "capp_011CZkZjLP1cWxj5EtMmdgbq",
    { type: "slack_workspace", slack_workspace_id: "slws_011CZkZnWa7xPc3uJfZe5LgT" }
  );

  console.log(target.id);
  ```

  ```csharp C#
  using Anthropic.Models.Beta.Organization.ClaudeTag.Bundles.Targets;

  AnthropicClient client = new();

  var target = await client.Beta.Organization.ClaudeTag.Bundles.Targets.Create(
      "capp_011CZkZjLP1cWxj5EtMmdgbq",
      new()
      {
          BetaClaudeTagBundleTargetCreate = new BetaClaudeTagSlackWorkspaceBundleTargetCreate
          {
              SlackWorkspaceID = "slws_011CZkZnWa7xPc3uJfZe5LgT",
          },
      }
  );

  Console.WriteLine(target.ID);
  ```

  ```go Go
  client := anthropic.NewClient()

  target, err := client.Beta.Organization.ClaudeTag.Bundles.Targets.New(
  	context.Background(),
  	"capp_011CZkZjLP1cWxj5EtMmdgbq",
  	anthropic.BetaOrganizationClaudeTagBundleTargetNewParams{
  		BetaClaudeTagBundleTargetCreate: anthropic.BetaClaudeTagBundleTargetCreateUnionParam{
  			OfSlackWorkspace: &anthropic.BetaClaudeTagSlackWorkspaceBundleTargetCreateParam{
  				SlackWorkspaceID: "slws_011CZkZnWa7xPc3uJfZe5LgT",
  			},
  		},
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(target.ID)
  ```

  ```java Java
  import com.anthropic.models.beta.organization.claudetag.bundles.targets.TargetCreateParams;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      var params = TargetCreateParams.builder()
          .slackWorkspaceBetaClaudeTagBundleTargetCreate("slws_011CZkZnWa7xPc3uJfZe5LgT")
          .build();
      var target = client.beta().organization().claudeTag().bundles().targets()
          .create("capp_011CZkZjLP1cWxj5EtMmdgbq", params);

      IO.println(target.id());
  }
  ```

  ```php PHP
  $client = new Client();

  $target = $client->beta->organization->claudeTag->bundles->targets->create(
      bundleID: 'capp_011CZkZjLP1cWxj5EtMmdgbq',
      betaClaudeTagBundleTargetCreate: [
          'type' => 'slack_workspace',
          'slackWorkspaceID' => 'slws_011CZkZnWa7xPc3uJfZe5LgT',
      ],
  );

  echo "{$target->id}\n";
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  bundle_id = "capp_011CZkZjLP1cWxj5EtMmdgbq"
  target = client.beta.organization.claude_tag.bundles.targets.create(
    bundle_id,
    beta_claude_tag_bundle_target_create: {
      type: :slack_workspace,
      slack_workspace_id: "slws_011CZkZnWa7xPc3uJfZe5LgT"
    }
  )

  puts target.id
  ```
</CodeGroup>

У прикрепления к каналу есть условия, при которых оно применяется, например только пока в канале нет гостя Slack. Условия задаются в claude.ai и здесь не возвращаются. Прикрепление через этот API использует условия по умолчанию, а прикрепление уже прикреплённой пары оставляет её условия без изменений.

### Получение цели Bundle

`GET /v1/organizations/claude_tag/bundles/{bundle_id}/targets/{target_id}` возвращает цель Bundle. `target_id` без префикса `btgt_` возвращает `400`. `target_id`, который принадлежит другому Bundle, был откреплён или указывает на канал или рабочее пространство, которые больше не настроены, возвращает `404`. Требуется область действия `read:claude_tag`.

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/claude_tag/bundles/capp_011CZkZjLP1cWxj5EtMmdgbq/targets/btgt_011CZkZpBv9yQd6wKhAr8MnU" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28"
  ```

  ```bash CLI
  ant beta:organization:claude-tag:bundles:targets retrieve \
    --bundle-id capp_011CZkZjLP1cWxj5EtMmdgbq \
    --target-id btgt_011CZkZpBv9yQd6wKhAr8MnU
  ```

  ```python Python
  client = anthropic.Anthropic()

  target = client.beta.organization.claude_tag.bundles.targets.retrieve(
      "btgt_011CZkZpBv9yQd6wKhAr8MnU",
      bundle_id="capp_011CZkZjLP1cWxj5EtMmdgbq",
  )

  print(target.type)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const target = await client.beta.organization.claudeTag.bundles.targets.retrieve(
    "btgt_011CZkZpBv9yQd6wKhAr8MnU",
    { bundle_id: "capp_011CZkZjLP1cWxj5EtMmdgbq" }
  );

  console.log(target.type);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var target = await client.Beta.Organization.ClaudeTag.Bundles.Targets.Retrieve(
      "btgt_011CZkZpBv9yQd6wKhAr8MnU",
      new() { BundleID = "capp_011CZkZjLP1cWxj5EtMmdgbq" }
  );

  Console.WriteLine(target.Type.GetString());
  ```

  ```go Go
  client := anthropic.NewClient()

  target, err := client.Beta.Organization.ClaudeTag.Bundles.Targets.Get(
  	context.Background(),
  	"btgt_011CZkZpBv9yQd6wKhAr8MnU",
  	anthropic.BetaOrganizationClaudeTagBundleTargetGetParams{
  		BundleID: "capp_011CZkZjLP1cWxj5EtMmdgbq",
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(target.Type)
  ```

  ```java Java
  import com.anthropic.models.beta.organization.claudetag.bundles.targets.TargetRetrieveParams;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      var params = TargetRetrieveParams.builder()
          .bundleId("capp_011CZkZjLP1cWxj5EtMmdgbq")
          .build();
      var target = client.beta().organization().claudeTag().bundles().targets()
          .retrieve("btgt_011CZkZpBv9yQd6wKhAr8MnU", params);

      IO.println(target.type().asString());
  }
  ```

  ```php PHP
  $client = new Client();

  $target = $client->beta->organization->claudeTag->bundles->targets->retrieve(
      targetID: 'btgt_011CZkZpBv9yQd6wKhAr8MnU',
      bundleID: 'capp_011CZkZjLP1cWxj5EtMmdgbq',
  );

  echo "{$target->type}\n";
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  bundle_id = "capp_011CZkZjLP1cWxj5EtMmdgbq"
  target_id = "btgt_011CZkZpBv9yQd6wKhAr8MnU"
  target = client.beta.organization.claude_tag.bundles.targets.retrieve(
    target_id,
    bundle_id: bundle_id
  )

  puts target.type
  ```
</CodeGroup>

### Открепление Bundle

`DELETE /v1/organizations/claude_tag/bundles/{bundle_id}/targets/{target_id}` открепляет Bundle. Повторное открепление возвращает `404`. Требуется область действия `write:claude_tag`.

<CodeGroup>
  ```bash cURL
  curl -X DELETE "https://api.anthropic.com/v1/organizations/claude_tag/bundles/capp_011CZkZjLP1cWxj5EtMmdgbq/targets/btgt_011CZkZpBv9yQd6wKhAr8MnU" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: claude-tag-2026-09-28"
  ```

  ```bash CLI
  ant beta:organization:claude-tag:bundles:targets delete \
    --bundle-id capp_011CZkZjLP1cWxj5EtMmdgbq \
    --target-id btgt_011CZkZpBv9yQd6wKhAr8MnU
  ```

  ```python Python
  client = anthropic.Anthropic()

  deleted_target = client.beta.organization.claude_tag.bundles.targets.delete(
      "btgt_011CZkZpBv9yQd6wKhAr8MnU",
      bundle_id="capp_011CZkZjLP1cWxj5EtMmdgbq",
  )

  print(deleted_target.id)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const deletedTarget = await client.beta.organization.claudeTag.bundles.targets.delete(
    "btgt_011CZkZpBv9yQd6wKhAr8MnU",
    { bundle_id: "capp_011CZkZjLP1cWxj5EtMmdgbq" }
  );

  console.log(deletedTarget.id);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var deletedTarget = await client.Beta.Organization.ClaudeTag.Bundles.Targets.Delete(
      "btgt_011CZkZpBv9yQd6wKhAr8MnU",
      new() { BundleID = "capp_011CZkZjLP1cWxj5EtMmdgbq" }
  );

  Console.WriteLine(deletedTarget.ID);
  ```

  ```go Go
  client := anthropic.NewClient()

  deletedTarget, err := client.Beta.Organization.ClaudeTag.Bundles.Targets.Delete(
  	context.Background(),
  	"btgt_011CZkZpBv9yQd6wKhAr8MnU",
  	anthropic.BetaOrganizationClaudeTagBundleTargetDeleteParams{
  		BundleID: "capp_011CZkZjLP1cWxj5EtMmdgbq",
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(deletedTarget.ID)
  ```

  ```java Java
  import com.anthropic.models.beta.organization.claudetag.bundles.targets.TargetDeleteParams;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      var params = TargetDeleteParams.builder()
          .bundleId("capp_011CZkZjLP1cWxj5EtMmdgbq")
          .build();
      var deletedTarget = client.beta().organization().claudeTag().bundles().targets()
          .delete("btgt_011CZkZpBv9yQd6wKhAr8MnU", params);

      IO.println(deletedTarget.id());
  }
  ```

  ```php PHP
  $client = new Client();

  $deletedTarget = $client->beta->organization->claudeTag->bundles->targets->delete(
      targetID: 'btgt_011CZkZpBv9yQd6wKhAr8MnU',
      bundleID: 'capp_011CZkZjLP1cWxj5EtMmdgbq',
  );

  echo "{$deletedTarget->id}\n";
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  bundle_id = "capp_011CZkZjLP1cWxj5EtMmdgbq"
  target_id = "btgt_011CZkZpBv9yQd6wKhAr8MnU"
  deleted_target = client.beta.organization.claude_tag.bundles.targets.delete(
    target_id,
    bundle_id: bundle_id
  )

  puts deleted_target.id
  ```
</CodeGroup>

```json Response
{
  "type": "bundle_target_deleted",
  "id": "btgt_011CZkZpBv9yQd6wKhAr8MnU"
}
```

## Нераспознанные значения

`guest_policy.type`, `type` источника, `type` цели Bundle и коды ошибок могут в любой момент получить новые значения. Обрабатывайте нераспознанное значение так же, как любую неизвестную строку, а не завершайте работу с ошибкой.

## Ограничение скорости

Запросы ограничиваются для каждой организации в рамках двух бюджетов, которые являются общими для всех ключей вашей организации и не зависят от других ограничений Admin API вашей организации. Каждый бюджет допускает всплеск (burst), а затем пополняется с постоянной скоростью:

| Бюджет    | Запросы                  | Всплеск | Пополнение  |
| --------- | ------------------------ | ------- | ----------- |
| Чтение    | Каждый `GET`             | 120     | 2 в секунду |
| Изменения | Каждый `POST` и `DELETE` | 60      | 1 в секунду |

Запросы сверх бюджета возвращают **429 Too Many Requests** с заголовком `retry-after`. Ответы включают заголовки `anthropic-ratelimit-requests-limit`, `anthropic-ratelimit-requests-remaining` и `anthropic-ratelimit-requests-reset` для бюджета, за счёт которого выполнялся запрос.

## Пагинация

Конечные точки списков используют **непрозрачный курсор** (opaque cursor). Первый запрос возвращает до `limit` строк и курсор `next_page`; передайте курсор без изменений в качестве параметра `page` в следующем запросе и повторяйте, пока `next_page` не станет `null`. Считайте строку курсора непрозрачной: не разбирайте, не изменяйте и не создавайте её самостоятельно. [Список каналов](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#list-channels) может вернуть страницу, содержащую меньше `limit` каналов или ни одного, при этом `next_page` всё ещё задан, поэтому продолжайте запрашивать страницы, пока `next_page` не станет `null`. Итераторы списков в SDK для Python, TypeScript, C#, Go, Java и Ruby, а также CLI (кроме режима `--format raw`) делают это за вас. В PHP и curl запрашивайте каждую страницу самостоятельно и передавайте её `next_page` как `page`.

`limit` по умолчанию равен 20, минимум — 1, максимум — 100. Каждый список упорядочен начиная с самых новых по `created_at` и не поддерживает другой порядок.

## Ответы с ошибками

Ответы с ошибками имеют стандартную форму, описанную в разделе [Ошибки](https://platform.claude.com/docs/ru/api/errors). При обращении в службу поддержки указывайте `request_id` из тела ответа.

| Статус | Значение                                                                                                                                                                                                                   |
| ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 400    | Недопустимые входные данные, или операция неприменима к этому каналу, рабочему пространству или Bundle (см. раздел каждой конечной точки).                                                                                 |
| 401    | Отсутствует заголовок `x-api-key`, или ключ не распознан.                                                                                                                                                                  |
| 403    | Ключ не является ключом с областями действия уровня организации, у него нет требуемой области действия, или ваша организация не может внести это изменение.                                                                |
| 404    | Ресурс не найден или не принадлежит вашей организации. Также возвращается, если в запросе отсутствует значение `anthropic-beta` или API не включён для вашей организации, так что конечные точки выглядят несуществующими. |
| 409    | Что-то другое изменило или удалило ресурс во время выполнения запроса. Ничего не было сохранено. Прочитайте ресурс снова и повторно отправьте изменение, если оно всё ещё нужно.                                           |
| 429    | Превышено ограничение скорости. См. [Ограничение скорости](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#rate-limiting).                                                                                |
| 500    | Внутренняя ошибка.                                                                                                                                                                                                         |
| 503    | Временная ошибка. Для изменения она не сообщает, было ли изменение сохранено. Каждое изменение безопасно повторять, поэтому отправьте запрос снова без изменений.                                                          |

Если у одного статуса есть несколько причин, которые вы обрабатывали бы по-разному, ошибка также содержит `error.details.error_code`:

```json
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "...",
    "details": {
      "error_code": "slack_channel_set_up_settings_refused",
      "slack_channel_id": "slch_011CZkZmRt4vNq8sHbYw2KdX"
    }
  },
  "request_id": "req_018EeWyXxfu5pfWkrYcMdjWG"
}
```

| `error_code`                                 | Статус | Значение и что делать                                                                                                                                                                                                                                                                           |
| -------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `organization_level_scoped_api_key_required` | 403    | Учётные данные не являются ключом Admin API с областями действия, принадлежащим организации в целом. Попросите такой ключ у основного владельца.                                                                                                                                                |
| `api_key_scope_missing`                      | 403    | У ключа нет `read:claude_tag` или `write:claude_tag` — той области действия, которую требует конечная точка.                                                                                                                                                                                    |
| `workspace_selection_not_accepted`           | 400    | Запрос отправил заголовок `anthropic-workspace-id`. Удалите его.                                                                                                                                                                                                                                |
| `claude_tag_writes_not_enabled`              | 403    | Ваша организация может читать через этот API, но изменения для неё не включены.                                                                                                                                                                                                                 |
| `compliance_configuration_restricted`        | 403    | У вашей организации есть конфигурация соответствия требованиям, при которой Claude Tag не сохраняет ничего нового, например нулевое хранение данных. Настройка канала, обновление настроек (даже для их очистки) и прикрепление Bundle отклоняются. Открепление Bundle и удаление канала — нет. |
| `environment_not_found`                      | 404    | `environment_id` не указывает ни на одну среду, которую ваша организация может здесь использовать. `id` в пути корректен.                                                                                                                                                                       |
| `environment_archived`                       | 400    | `environment_id` указывает на архивированную среду.                                                                                                                                                                                                                                             |
| `slack_channel_set_up_settings_refused`      | 400    | Запрос настроил канал, после чего `settings` были отклонены. `details.slack_channel_id` — это канал. См. [Настройка канала](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#set-up-a-channel).                                                                                 |
| `slack_channel_set_up_environment_not_found` | 404    | Запрос настроил канал, после чего `environment_id` не был найден. `details.slack_channel_id` — это канал.                                                                                                                                                                                       |
| `slack_channel_set_up_settings_conflict`     | 409    | Запрос настроил канал, после чего другое изменение пересеклось с `settings`. Ничего из `settings` не было сохранено. `details.slack_channel_id` — это канал.                                                                                                                                    |
| `slack_channel_not_configured`               | 400    | Канал не [сконфигурирован](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#configured-levels), поэтому его нельзя удалить.                                                                                                                                                     |

Могут быть добавлены новые коды. Обрабатывайте нераспознанный код так же, как его статус. У `404` без `error_code` одна из двух причин. Либо что-то, указанное в запросе, не найдено (`id` в пути или канал либо рабочее пространство Slack в теле или параметрах запроса), либо все конечные точки выглядят несуществующими, потому что в запросе отсутствует значение `anthropic-beta` или API не включён для вашей организации. Чтобы различить их, [получите значения Slack по умолчанию](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#get-the-slack-defaults) с тем же ключом и теми же заголовками: этот запрос ничего не указывает, поэтому возвращает `404` только во втором случае.

## События Activity Feed

Каждое изменение, внесённое через этот API, записывается в [Compliance API Activity Feed](https://platform.claude.com/docs/ru/manage-claude/compliance-activity-feed) вашей организации и приписывается ключу API как `api_actor` с его идентификатором `apikey_`. Это те же события, которые лента записывает, когда такое же изменение вносится в claude.ai, поэтому один запрос находит изменение независимо от того, каким способом оно было внесено.

| Событие                           | Когда генерируется                                                                                                                                                                                                    |
| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ccr_agent_created`               | Настроен канал.                                                                                                                                                                                                       |
| `ccr_agent_updated`               | Изменяется настройка канала, рабочего пространства или значений Slack по умолчанию, либо уровень становится [сконфигурированным](https://platform.claude.com/docs/ru/manage-claude/claude-tag-api#configured-levels). |
| `ccr_agent_deleted`               | Канал удалён. Его цели Bundle удаляются вместе с ним и не генерируют собственных событий.                                                                                                                             |
| `ccr_agent_proxy_profile_bound`   | Bundle прикреплён.                                                                                                                                                                                                    |
| `ccr_agent_proxy_profile_unbound` | Bundle откреплён.                                                                                                                                                                                                     |

События указывают канал или рабочее пространство по его `agent_id`, а не по `id`. Два события Bundle указывают Bundle в `profile_id`, а канал или рабочее пространство — в `scope_id`.

Событие `ccr_agent_updated` перечисляет изменения в `updated_fields` под собственными именами ленты:

| Настройка                         | Имя в `updated_fields`   |
| --------------------------------- | ------------------------ |
| `enabled`                         | `slackbot_version`       |
| `instructions`                    | `system_prompt_addendum` |
| `model`                           | `default_model`          |
| `environment_id`                  | `default_environment_id` |
| `guest_policy`                    | `guest_policy`           |
| (уровень стал сконфигурированным) | `is_virtual`             |

Операции чтения, запросы, которые ничего не изменяют, и запросы, отклонённые до сохранения каких-либо данных, ничего не записывают. Запрос на настройку, который настраивает канал, но чьи `settings` затем отклоняются, записывает `ccr_agent_created`.

## См. также

<CardGroup cols={2}>
  <Card title="Создание ключа Admin API" href="https://platform.claude.com/docs/ru/manage-claude/admin-api-keys">
    Где ваш основной владелец создаёт ключ с ограниченной областью действия.
  </Card>

  <Card title="Документация Claude Tag" href="https://claude.com/docs/claude-tag/overview">
    Что такое Claude Tag, как его настроить и что делает каждая настройка в Slack.
  </Card>

  <Card title="Compliance API Activity Feed" href="https://platform.claude.com/docs/ru/manage-claude/compliance-activity-feed">
    Журнал аудита всех изменений, внесённых здесь и в claude.ai.
  </Card>

  <Card title="Plugins API" href="https://platform.claude.com/docs/ru/manage-claude/plugins-api">
    Управление плагинами в вашей организации Claude Enterprise.
  </Card>
</CardGroup>
