---
title: Claude Tag API
url: https://platform.claude.com/docs/id/manage-claude/claude-tag-api
description: "Kelola Claude Tag di Slack untuk organisasi Claude Enterprise Anda dari sistem Anda sendiri: baca dan ubah pengaturan pada channel, workspace, dan default Slack organisasi Anda, lihat pengaturan mana yang berlaku dan alasannya, serta lampirkan Access bundle."
---

[Claude Tag](https://claude.com/docs/claude-tag/overview) adalah Claude yang bekerja sebagai rekan tim di Slack: seseorang menyebut Claude di sebuah channel dan Claude menjawab di thread. Claude Tag API memungkinkan Anda membaca dan mengubah, dari sistem Anda sendiri, pengaturan Claude Tag yang tanpa API ini diatur secara manual oleh pemilik organisasi di [claude.ai > Organization settings > Claude Tag](https://claude.ai/admin-settings/claude-tag). Gunakan API ini untuk mengaktifkan Claude channel demi channel dari alur kerja persetujuan, menyimpan konfigurasi Anda dalam "version control" (kontrol versi), atau mengaudit apa yang berlaku di setiap channel.

Claude Tag adalah produk claude.ai. API ini mengelolanya untuk organisasi Claude Enterprise dan tidak ada hubungannya dengan workspace Claude Platform, penggunaan API, atau Claude Console.

<Check>
  **Diperlukan kunci Admin API dengan scope tertentu**

  Endpoint ini memerlukan kunci Admin API dengan scope `read:claude_tag` (untuk endpoint `GET`) atau scope `write:claude_tag` (untuk endpoint `POST` dan `DELETE`); lihat [Scope](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#scopes). Lihat [Membuat kunci Admin API](https://platform.claude.com/docs/id/manage-claude/admin-api-keys#create-a-key-for-a-claude-enterprise-organization) untuk mengetahui di mana pemilik utama Anda membuatnya. Kirimkan kunci tersebut di header `x-api-key` pada setiap permintaan, bersama dengan header [`anthropic-version`](https://platform.claude.com/docs/id/api/versioning) dan header beta yang ditunjukkan dalam catatan berikut.
</Check>

<Note>
  Claude Tag API berstatus **beta** dan hanya tersedia untuk organisasi Claude Enterprise. API ini tidak tersedia untuk organisasi Claude Platform (Claude Console).

  Setiap permintaan harus menyertakan [header beta](https://platform.claude.com/docs/id/api/beta-headers) `anthropic-beta: claude-tag-2026-09-28` (SDK dan CLI `ant` mengirimkannya untuk Anda). Permintaan tanpa header tersebut mengembalikan `404`, persis seolah-olah endpoint tersebut tidak ada.
</Note>

## Endpoint

API ini menyediakan 18 endpoint di lima sumber daya:

| Sumber daya                                                                                                                                                                                                                              | Endpoint                                                                                                                                                                                                                                                                                                                                                                |
| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Channel Slack:** menyiapkan channel, mencantumkan channel dari sebuah workspace atau menemukan satu channel berdasarkan ID Slack-nya, membaca satu channel, mengubah pengaturannya, melihat apa yang berlaku di dalamnya, menghapusnya | `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}` |
| **Workspace Slack:** mencantumkan workspace yang terhubung atau menemukan satu workspace berdasarkan ID Slack-nya, membaca satu workspace, mengubah pengaturannya, melihat apa yang berlaku di dalamnya                                  | `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`                                                                                                                |
| **Default Slack:** membaca dan mengubah pengaturan yang berlaku untuk setiap workspace dan channel                                                                                                                                       | `GET /v1/organizations/claude_tag/slack_defaults`<br />`POST /v1/organizations/claude_tag/slack_defaults`                                                                                                                                                                                                                                                               |
| **Bundle:** mencantumkan Access bundle organisasi Anda, membaca satu Bundle (hanya-baca)                                                                                                                                                 | `GET /v1/organizations/claude_tag/bundles`<br />`GET /v1/organizations/claude_tag/bundles/{bundle_id}`                                                                                                                                                                                                                                                                  |
| **Target Bundle:** mencantumkan di mana sebuah Bundle dilampirkan, melampirkannya ke channel atau workspace, membaca satu lampiran, melepaskannya                                                                                        | `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}`                                                                  |

Rilis ini mencakup Slack. Menghubungkan dan memutuskan koneksi workspace Slack, membuat dan mengedit Access bundle, batas pengeluaran, dan setiap pengaturan Claude Tag selain lima pengaturan di [Pengaturan](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#settings) tetap berada di claude.ai.

## Prasyarat

* Organisasi Anda harus menggunakan paket Claude Enterprise, dengan [Claude Tag yang sudah disiapkan](https://claude.com/docs/claude-tag/admins/setup-overview) dan setidaknya satu workspace Slack yang terhubung.
* Pemilik utama Anda membuat kunci Admin API dengan scope `read:claude_tag`, scope `write:claude_tag`, atau keduanya di [claude.ai > Organization settings > API](https://claude.ai/admin-settings/api-access). Lihat [Membuat kunci Admin API](https://platform.claude.com/docs/id/manage-claude/admin-api-keys#create-a-key-for-a-claude-enterprise-organization).
* Setiap permintaan membawa tiga header: `x-api-key`, `anthropic-version: 2023-06-01`, dan `anthropic-beta: claude-tag-2026-09-28`.

SDK Python, TypeScript, C#, Go, Java, PHP, dan Ruby menyediakan endpoint ini di bawah `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`), dan [CLI `ant`](https://platform.claude.com/docs/id/cli-sdks-libraries/cli/quickstart) di bawah `ant beta:organization:claude-tag`; keduanya mengirimkan header `anthropic-version` dan `anthropic-beta` untuk Anda. Contoh di halaman ini menggunakan klien default setiap SDK, yang, seperti CLI, membaca kunci Admin API dari variabel lingkungan `ANTHROPIC_API_KEY`; contoh curl membaca kunci dari variabel yang sama dan mengirimkannya di header `x-api-key`. Ketika SDK atau CLI mengambil halaman tambahan untuk Anda, `limit` menetapkan ukuran halaman, bukan total (lihat [Paginasi](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#pagination)).

Kunci API adalah milik organisasi dan tetap berfungsi setelah orang yang membuatnya keluar. Jangan bagikan kunci tersebut atau memasukkannya ke kontrol sumber.

## Mulai cepat

Cantumkan workspace Slack yang telah dihubungkan organisasi Anda ke 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()

  # Secara otomatis mengambil halaman berikutnya sesuai kebutuhan.
  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();

  // Hanya halaman ini; untuk halaman berikutnya, panggil list() lagi dengan 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
}
```

Pengaturan yang bernilai `null` tidak diatur pada workspace ini, sehingga workspace mewarisinya. Lihat [Pengaturan tersimpan dan efektif](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#stored-and-effective-settings).

## Scope

| Scope              | Memberikan                                                                                                                                                     |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `read:claude_tag`  | Setiap endpoint `GET` di halaman ini.                                                                                                                          |
| `write:claude_tag` | Setiap endpoint `POST` dan `DELETE` di halaman ini. Scope ini tidak memberikan akses baca, meskipun respons terhadap perubahan berisi sumber daya yang diubah. |

Sebuah kunci dapat membawa kedua scope. Integrasi yang mencari sebuah channel lalu mengubahnya memerlukan keduanya. Tidak ada scope lain yang memberikan akses ke endpoint ini.

Kunci harus dimiliki oleh organisasi secara keseluruhan. Organisasi selalu merupakan organisasi pemilik kunci, dan tidak ada permintaan yang menyebutkan organisasi. Permintaan yang mengirimkan header `anthropic-workspace-id` mengembalikan `400`, karena tidak ada apa pun di sini yang dimiliki oleh workspace Claude Platform.

## Konsep utama

### Nama di halaman ini dan di claude.ai

| API ini            | claude.ai dan Slack                                                                                                                                            |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Workspace Slack    | Workspace Slack (yang juga disebut team oleh Slack). Tidak terkait dengan workspace Claude Platform, yang ID-nya diawali dengan `wrkspc_`.                     |
| Default Slack      | **Default Slack access**                                                                                                                                       |
| Tingkat pengaturan | Sebuah [scope](https://claude.com/docs/claude-tag/admins/customize): channel, workspace, atau default Slack                                                    |
| Bundle             | Sebuah [Access bundle](https://claude.com/docs/claude-tag/concepts/glossary#access-bundle)                                                                     |
| `enabled`          | Sakelar **Enable Claude Tag in Slack**                                                                                                                         |
| `instructions`     | **Custom instructions**                                                                                                                                        |
| `model`            | **Model**                                                                                                                                                      |
| `environment_id`   | **Environment**                                                                                                                                                |
| `guest_policy`     | **How should Claude work in channels with guests**: `restrict` adalah **Restrict**, `channel_only` adalah **Channel only**, dan `allow` adalah **Full access** |

### Channel dan workspace yang sudah disiapkan

Sebuah channel atau workspace **sudah disiapkan** ketika Claude Tag menyimpan catatan pengaturan untuknya. Hanya channel atau workspace yang sudah disiapkan yang memiliki `id`, dan hanya itu yang dicantumkan: Slack, bukan API ini, yang menyimpan daftar lengkap channel sebuah workspace.

* Sebuah **workspace** disiapkan ketika pemilik organisasi menghubungkannya di claude.ai. Tidak ada endpoint yang menyiapkan atau menghapus workspace.
* Sebuah **channel** disiapkan di claude.ai, oleh penggunaan pertama Claude di dalamnya, atau dengan [Menyiapkan channel](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#set-up-a-channel).
* **Default Slack** disiapkan saat pertama kali seseorang menyiapkan Claude Tag: pemilik menghubungkan workspace Slack, atau anggota masuk ke atau pertama kali menggunakan Claude di Slack.

Organisasi Anda memiliki sebuah workspace selama koneksinya aktif, dan memiliki channel di dalamnya. Channel atau workspace yang tidak Anda miliki mengembalikan `404` yang sama dengan yang tidak ada.

### ID

Anda mengenali sebuah channel dari ID yang ditampilkan Slack kepada Anda. Cari `id`-nya sekali dengan [Menemukan channel berdasarkan ID Slack-nya](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#find-a-channel-by-its-slack-ids), lalu simpan dan gunakan `id` tersebut.

| ID                             | Prefiks      | Tempat kemunculan                                                        |
| ------------------------------ | ------------ | ------------------------------------------------------------------------ |
| Sumber daya channel Slack      | `slch_`      | `id` pada channel; `slack_channel_id` di body permintaan dan respons     |
| Sumber daya workspace Slack    | `slws_`      | `id` pada workspace; `slack_workspace_id` di body permintaan dan respons |
| Bundle                         | `capp_`      | `id` pada Bundle; `{bundle_id}` di path                                  |
| Target Bundle                  | `btgt_`      | `id` pada target Bundle; `{target_id}` di path                           |
| ID team milik Slack sendiri    | `T`          | `slack.team_id`; parameter kueri `slack_team_id`                         |
| ID channel milik Slack sendiri | `C` atau `G` | `slack.channel_id`; parameter kueri `slack_channel_id`                   |

<Warning>
  `slack_channel_id` memiliki dua arti. Dalam **parameter kueri**, ini adalah ID milik Slack sendiri (`C05HJKL6MNP`). Dalam **body permintaan atau respons**, ini adalah `id` yang diterbitkan API ini (`slch_...`). ID milik Slack sendiri di body atau respons selalu berada di bawah `slack`.
</Warning>

Sebuah `id` tidak berubah selama channel atau workspace tersebut tetap disiapkan, apa pun yang Anda ubah padanya, dengan satu pengecualian yang dijelaskan di [Mode hanya-baca](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#read-only-mode). Channel atau workspace yang dihapus lalu disiapkan kembali memiliki `id` baru, dan `id` lama tetap mengembalikan `404`. Ketika `id` yang tersimpan mengembalikan `404` tanpa `error_code`, [dapatkan default Slack](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#get-the-slack-defaults) dengan kunci dan header yang sama. Permintaan tersebut tidak menyebutkan channel atau workspace, sehingga status apa pun selain `404` berarti `id` tersebut sudah tidak ada: temukan kembali channel atau workspace tersebut berdasarkan ID Slack-nya. `404` yang juga dikembalikan di sana tidak menyatakan apa pun tentang `id` tersebut: pertahankan nilai `id` Anda yang tersimpan dan lihat [Respons error](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#error-responses).

`agent_id` (diawali dengan `cagt_`) adalah cara [Compliance API](https://platform.claude.com/docs/id/manage-claude/compliance-api) menamai channel atau workspace yang sama, baik sebagai pemilik sesi yang dijalankan Claude di sana maupun dalam [event Activity Feed](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#activity-feed-events). ID ini bertahan selama `id` bertahan.

### Pengaturan

Setiap tingkat pengaturan menyimpan lima pengaturan yang sama, semuanya opsional:

| Pengaturan       | Tipe    | Deskripsi                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| ---------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `enabled`        | boolean | Apakah Claude aktif.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| `instructions`   | string  | Panduan tetap yang dibaca Claude di setiap sesi. Paling banyak 8.192 karakter setelah spasi di awal dan akhir dipangkas. Teks kosong menghapus pengaturan ini.                                                                                                                                                                                                                                                                                                                                                                               |
| `model`          | string  | Model yang digunakan untuk memulai sesi baru: sebuah [ID model](https://platform.claude.com/docs/id/models/overview) yang dapat digunakan organisasi Anda dengan Claude Tag. Paling banyak 128 karakter.                                                                                                                                                                                                                                                                                                                                     |
| `environment_id` | string  | Environment cloud tempat sesi berjalan, diawali dengan `env_`. Environment ini harus aktif dan dimiliki oleh organisasi Anda.                                                                                                                                                                                                                                                                                                                                                                                                                |
| `guest_policy`   | object  | Apa yang dilakukan Claude di sebuah channel selama ada tamu Slack di dalamnya, untuk semua orang di channel tersebut: `{"type": "allow"}` (Claude menjawab), `{"type": "restrict"}` (Claude tidak menjawab), atau `{"type": "channel_only"}` (Claude menjawab hanya dengan Bundle yang dilampirkan ke channel itu sendiri). Lihat [Membatasi channel tamu](https://claude.com/docs/claude-tag/admins/restrict-access#restrict-guest-channels) untuk artinya di channel yang dibagikan melalui Slack Connect atau di seluruh Enterprise Grid. |

`model` dan `environment_id` diperiksa saat Anda menuliskannya dan tidak diperiksa lagi: jika model atau environment tersebut kemudian berubah, kedua tampilan tetap mengembalikan nilai yang tersimpan.

Jika pemilik organisasi telah menempatkan sebuah tingkat pengaturan pada pool runner self-hosted di claude.ai, `environment_id`-nya mengembalikan ID pool tersebut, yang diawali dengan `ccpool_`. API ini tidak dapat menetapkan pool runner, dan mengembalikan `400` untuk permintaan yang mengubah atau menghapus `environment_id` pada tingkat pengaturan yang menyimpan pool runner.

### Pengaturan tersimpan dan efektif

Pengaturan ada di tiga tingkat: channel, workspace tempat channel berada, dan default Slack organisasi Anda. Setiap tingkat hanya menyimpan apa yang diatur padanya. API memberi Anda dua tampilan:

* Tampilan **tersimpan** ([Mendapatkan channel](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#get-a-channel), [Mendapatkan workspace](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#get-a-workspace)) berisi apa yang disimpan oleh channel atau workspace itu sendiri. Pengaturan yang tidak diatur di sana bernilai `null`. Gunakan tampilan ini untuk membandingkan dengan konfigurasi yang Anda simpan di tempat lain.
* Tampilan **efektif** ([Mendapatkan pengaturan efektif channel](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#get-a-channels-effective-settings), [Mendapatkan pengaturan efektif workspace](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#get-a-workspaces-effective-settings)) berisi apa yang berlaku setelah setiap tingkat diperhitungkan, dan `sources` menyebutkan tingkat asal setiap nilai. Gunakan tampilan ini untuk mengaudit, atau untuk mengetahui mengapa Claude berperilaku seperti itu di satu channel.

Setiap pengaturan ditentukan secara terpisah:

| Pengaturan       | Aturan                                                                                                                                                            | Ketika tidak ada tingkat yang mengaturnya                       |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- |
| `enabled`        | Tingkat terdekat yang mengaturnya yang menentukan, sehingga `true` pada sebuah channel mengaktifkan Claude di sana bahkan ketika workspace-nya menyimpan `false`. | `true`                                                          |
| `instructions`   | Aditif. Teks dari setiap tingkat yang mengaturnya digabungkan, dari yang paling luas terlebih dahulu, dengan baris kosong di antaranya.                           | `null`                                                          |
| `model`          | Tingkat terdekat yang mengaturnya yang menentukan.                                                                                                                | `null`: Claude menggunakan model default produk                 |
| `environment_id` | Tingkat terdekat yang mengaturnya yang menentukan.                                                                                                                | `null`                                                          |
| `guest_policy`   | Tingkat terdekat yang mengaturnya yang menentukan.                                                                                                                | `restrict` di organisasi yang default Slack-nya sudah disiapkan |

Sebagai contoh, sebuah organisasi menyimpan instruksi pada default Slack-nya, menonaktifkan Claude pada sebuah workspace, dan menetapkan model pada satu channel di workspace tersebut. Tampilan efektif channel tersebut menunjukkan ketiga nilai dan asal masing-masing:

```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" }
  }
}
```

Sebuah sumber adalah salah satu dari:

| `type`                 | Arti                                                                                                                                                                                                                                                                                                                |
| ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `slack_channel`        | Channel, disebutkan dalam `slack_channel_id`.                                                                                                                                                                                                                                                                       |
| `slack_workspace`      | Workspace, disebutkan dalam `slack_workspace_id`.                                                                                                                                                                                                                                                                   |
| `slack_parent_channel` | Induk dari sebuah code channel, disebutkan dalam `slack_channel_id`. Code channel adalah channel yang dimulai dari channel lain. Selama induknya adalah channel publik di workspace yang sama, induk tersebut berada di antara channel dan workspace serta hanya menyumbangkan `instructions` dan `environment_id`. |
| `slack_defaults`       | Default Slack organisasi Anda, yang tidak memiliki ID.                                                                                                                                                                                                                                                              |
| `default`              | Tidak ada tingkat yang menetapkan nilai, sehingga default bawaan yang berlaku.                                                                                                                                                                                                                                      |

`sources.instructions` adalah daftar, dari yang paling luas terlebih dahulu, dari setiap tingkat yang menyumbangkan teks, dan kosong jika tidak ada. ID pada sebuah sumber dapat bernilai `null` di organisasi yang menjangkau channel melalui koneksi Slack Enterprise Grid, bukan melalui workspace channel itu sendiri.

### Mengubah pengaturan

Ketiga endpoint pembaruan dan [Menyiapkan channel](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#set-up-a-channel) menerima objek `settings` dengan aturan yang sama:

* **Pengaturan yang tidak Anda sertakan tidak berubah.** `{"settings": {"enabled": false}}` menonaktifkan Claude dan membiarkan empat pengaturan lainnya apa adanya.
* **Pengaturan yang Anda kirim sebagai `null` dihapus**, sehingga tingkat tersebut mewarisinya kembali.
* **Semua atau tidak sama sekali.** Jika ada nilai dalam permintaan yang ditolak, tidak ada pengaturan dalam permintaan tersebut yang disimpan.
* **Aman untuk diulang.** Setiap perubahan membuat sumber daya berada dalam keadaan yang sama seperti setelah permintaan identik pertama, sehingga tidak ada endpoint yang menerima `Idempotency-Key`. Permintaan yang tidak mengubah apa pun tidak menulis apa pun dan tidak mencatat event Activity Feed.
* **Penulisan terakhir yang menang.** Tidak ada permintaan yang menerima prakondisi. Dua pemanggil yang masing-masing membaca sebuah sumber daya lalu mengubah pengaturan yang sama akan saling menimpa. `409` hanya dikembalikan ketika perubahan lain tumpang tindih dengan permintaan Anda saat sedang berjalan; tidak ada bagian dari permintaan Anda yang disimpan, jadi baca kembali sumber daya tersebut dan kirim ulang perubahan jika masih diperlukan.

Perubahan pada `guest_policy` di sebuah channel dapat mengakhiri sesi yang sedang berjalan di channel tersebut. Sesi-sesi itu berakhir di latar belakang, dan respons tidak menunggunya.

### Tingkat yang terkonfigurasi

Sebuah tingkat pengaturan **terkonfigurasi** setelah seseorang atau sebuah kunci mengubah pengaturan padanya atau melampirkan Bundle padanya. Tingkat tersebut tetap terkonfigurasi sejak saat itu, bahkan setelah setiap pengaturan dihapus dan setiap Bundle dilepaskan. Channel yang disiapkan oleh penggunaan pertama Claude, atau melalui API ini tanpa pengaturan apa pun, belum terkonfigurasi hingga perubahan pertamanya atau Bundle pertamanya. Hal ini penting di dua tempat: hanya channel yang terkonfigurasi yang dapat [dihapus](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#remove-a-channel), dan hanya channel yang belum terkonfigurasi yang dapat memperoleh `id` baru (lihat [Mode hanya-baca](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#read-only-mode)).

### Mode hanya-baca

**API / Terraform read-only mode** adalah pengaturan yang diaktifkan dan dinonaktifkan oleh pemilik organisasi di pengaturan Claude Tag di claude.ai. Namanya menggambarkan claude.ai dan Slack: selama mode ini aktif, keduanya menolak perubahan oleh seseorang terhadap apa yang dikelola API ini, sehingga hanya kunci yang dapat melakukan perubahan tersebut. Mode ini tidak membuat API ini menjadi hanya-baca. Setiap endpoint di halaman ini merespons dengan cara yang sama baik mode aktif maupun nonaktif, dan tidak ada endpoint yang membaca atau mengubahnya.

Selama mode nonaktif, orang dan kunci mengubah pengaturan yang sama serta melampirkan dan melepaskan Bundle yang sama, dan setiap perubahan menggantikan apa yang tersimpan. Aktifkan mode ini jika pipeline Anda harus menjadi satu-satunya sumber perubahan.

Selama mode aktif, claude.ai dan Slack menolak:

* Mengubah salah satu dari lima pengaturan pada channel, workspace, atau default Slack.
* Menyiapkan channel, menghapus channel, atau memutuskan koneksi workspace di claude.ai.
* Melampirkan Bundle ke channel atau workspace, melepaskannya, atau menghapus Bundle yang terlampir pada salah satunya.

Beberapa hal tetap dapat dilakukan dalam kedua kondisi: pemilik masih dapat menghubungkan workspace baru, membuat dan mengedit Bundle, serta mengubah pengaturan Claude Tag yang tidak dikelola API ini. Penggunaan pertama Claude tetap menyiapkan channel, menghapus channel di Slack tetap menghapusnya dari Claude Tag, dan mencopot pemasangan aplikasi Slack Claude tetap memutuskan koneksi workspace tersebut.

Selama mode nonaktif, menyiapkan di claude.ai sebuah channel yang sudah disiapkan dan belum [terkonfigurasi](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#configured-levels) dapat menggantikan catatan channel tersebut. Channel tersebut kemudian memiliki `id` dan `agent_id` baru, dan `id` lama mengembalikan `404`. `id` dari channel yang terkonfigurasi bertahan hingga channel tersebut dihapus.

### Pesan langsung grup

Pesan langsung grup Slack memiliki ID dalam bentuk ID channel, sehingga penggunaan Claude di dalamnya menyiapkannya seperti channel: pesan tersebut memiliki `id`, dicantumkan, dan dapat dibaca. Menyiapkannya melalui API ini, mengubah pengaturan padanya, dan melampirkan Bundle padanya masing-masing mengembalikan `400`. Melepaskan Bundle darinya diperbolehkan.

## Contoh alur kerja

### Aktifkan Claude hanya di channel yang disetujui

Setiap anggota dapat mengundang Claude ke channel publik. Untuk menjaga Claude tetap aktif hanya di tempat yang telah Anda setujui:

1. Nonaktifkan Claude di semua tempat dengan menetapkan `enabled` ke `false` pada [default Slack](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#update-the-slack-defaults).
2. Ketika sistem persetujuan Anda menyetujui sebuah channel, [siapkan channel tersebut](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#set-up-a-channel) dengan `"settings": {"enabled": true}`. Permintaan ini menerima ID milik Slack sendiri dan mengembalikan channel tersebut baik sudah disiapkan maupun belum, sehingga aman untuk diulang.
3. Dalam proses yang sama, [lampirkan](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#attach-a-bundle) Bundle yang telah disetujui untuk tim tersebut, sehingga sesi pertama channel sudah memiliki alat-alatnya.

### Simpan konfigurasi dalam kontrol versi

1. Gunakan ID yang ditampilkan Slack untuk setiap channel sebagai kunci konfigurasi Anda, dan [temukan setiap channel](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#find-a-channel-by-its-slack-ids) berdasarkan ID tersebut.
2. Bandingkan tampilan **tersimpan** dengan apa yang dideklarasikan repositori Anda. Tampilan efektif akan mencampurkan nilai yang diwarisi.
3. Kirim hanya pengaturan yang berbeda, dan kirim `null` untuk pengaturan yang tidak lagi dideklarasikan repositori Anda.
4. Minta pemilik organisasi untuk mengaktifkan [mode hanya-baca](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#read-only-mode), sehingga tidak ada yang mengubah pengaturan yang sama secara manual.

### Audit apa yang berlaku di semua tempat

1. [Cantumkan workspace Anda](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#list-workspaces), lalu [cantumkan channel setiap workspace](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#list-channels).
2. Baca [pengaturan efektif](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#get-a-channels-effective-settings) setiap channel dan tandai apa yang dilarang kebijakan Anda, seperti channel dengan `enabled` bernilai `true` tanpa persetujuan yang tercatat, atau dengan `guest_policy` bernilai `allow`.
3. [Cantumkan Bundle Anda](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#list-bundles), lalu [target setiap Bundle](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#list-a-bundles-targets), untuk melihat di mana akses ke sistem sensitif dilampirkan.

## Channel Slack

Objek channel adalah tampilan tersimpan dari satu channel Slack:

| Field        | Deskripsi                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| ------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `type`       | `slack_channel`.                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| `id`         | Diawali dengan `slch_`. Lihat [ID](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#ids).                                                                                                                                                                                                                                                                                                                                                       |
| `slack`      | ID milik Slack sendiri: `team_id` untuk workspace tempat channel berada, dan `channel_id` untuk channel.                                                                                                                                                                                                                                                                                                                                                        |
| `settings`   | Apa yang disimpan oleh channel itu sendiri. Selalu ada, dengan kelima [pengaturan](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#settings); pengaturan yang tidak diatur bernilai `null`.                                                                                                                                                                                                                                                    |
| `agent_id`   | Diawali dengan `cagt_`. Lihat [ID](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#ids).                                                                                                                                                                                                                                                                                                                                                       |
| `created_at` | Kapan channel disiapkan.                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| `updated_at` | Kapan catatan Claude Tag tentang channel terakhir berubah. Nilai ini diperbarui pada setiap perubahan pengaturan, di sini, di claude.ai, atau di Slack, dan juga dapat diperbarui karena perubahan yang tidak ditunjukkan oleh respons apa pun di sini. Anggap nilai yang lebih baru sebagai alasan untuk membaca channel lagi, bukan sebagai bukti bahwa sebuah pengaturan berubah. Melampirkan atau melepaskan Bundle tidak dengan sendirinya memperbaruinya. |

`id` yang tidak memiliki prefiks `slch_` mengembalikan `400`. `id` yang memiliki prefiks tersebut tetapi tidak merujuk ke channel mana pun milik organisasi Anda mengembalikan `404`.

### Menyiapkan channel

`POST /v1/organizations/claude_tag/slack_channels` menyiapkan channel Slack dan mengembalikannya. `slack.team_id` dan `slack.channel_id` wajib diisi dan merupakan ID milik Slack sendiri. `settings` bersifat opsional dan mengikuti [Mengubah pengaturan](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#changing-settings). Jika channel sudah disiapkan, permintaan mengembalikan channel yang ada dan menerapkan `settings`; responsnya `200` dalam kedua kasus. Memerlukan scope `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"
}
```

Sebelum sebuah channel disiapkan, aplikasi Slack Claude mengonfirmasi dengan Slack bahwa channel tersebut berada di workspace, tidak diarsipkan, dan terlihat oleh aplikasi. Channel yang gagal dalam pemeriksaan tersebut mengembalikan `404`, begitu pula workspace yang tidak memasang aplikasi Slack Claude.

Menyiapkan channel dan menerapkan `settings` adalah dua langkah. Ketika langkah pertama berhasil dan langkah kedua ditolak, responsnya adalah penolakan tersebut dan channel tetap disiapkan tanpa ada yang tersimpan. Penolakan tersebut membawa `error_code` yang diawali dengan `slack_channel_set_up_` dan `id` channel baru di `error.details.slack_channel_id` (lihat [Respons error](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#error-responses)). Perbaiki `settings` dan kirimkan dalam [pembaruan](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#update-a-channel) ke `id` tersebut, atau kirim ulang permintaan penyiapan.

### Mencantumkan channel

`GET /v1/organizations/claude_tag/slack_channels` mencantumkan channel yang sudah disiapkan dari satu workspace, yang terbaru lebih dulu berdasarkan `created_at`. `slack_team_id` wajib diisi dan merupakan ID milik Slack sendiri untuk workspace tersebut. Sebuah halaman dapat berisi kurang dari `limit` channel, atau tidak ada sama sekali, sementara `next_page` masih terisi, jadi terus minta halaman hingga `next_page` bernilai `null` (lihat [Paginasi](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#pagination)). Memerlukan scope `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"
  )

  # Secara otomatis mengambil halaman berikutnya sesuai kebutuhan.
  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',
  );

  // Hanya halaman ini; untuk halaman berikutnya, panggil list() lagi dengan 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>

Responsnya adalah `{"data": [...], "next_page": ...}`, dengan setiap item berupa objek channel. `slack_team_id` yang merujuk ke workspace yang tidak dimiliki organisasi Anda mengembalikan `404`.

### Menemukan channel berdasarkan ID Slack-nya

Tambahkan `slack_channel_id`, ID milik Slack sendiri untuk channel tersebut, untuk mencari satu channel. `data` berisi channel tersebut, atau kosong jika channel belum disiapkan. Pencarian mengabaikan `limit` dan `page`, dan `next_page`-nya bernilai `null`. Beginilah cara Anda menemukan `id` sebuah channel.

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

Mengirimkan ID `slch_` sebagai `slack_channel_id` mengembalikan `400`.

### Mendapatkan channel

`GET /v1/organizations/claude_tag/slack_channels/{id}` mengembalikan objek channel. Memerlukan scope `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>

### Memperbarui channel

`POST /v1/organizations/claude_tag/slack_channels/{id}` mengubah pengaturan channel dan mengembalikan objek channel. `settings` wajib diisi dan mengikuti [Mengubah pengaturan](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#changing-settings). Memerlukan scope `write:claude_tag`.

Nonaktifkan Claude di satu channel dan biarkan pengaturan lainnya apa adanya:

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

Hapus instruksi channel, sehingga hanya instruksi yang diwarisi yang berlaku:

<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() membuang nilai null di dalam array, jadi susun objek settings agar mengirim 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>

### Mendapatkan pengaturan efektif channel

`GET /v1/organizations/claude_tag/slack_channels/{id}/effective` mengembalikan apa yang berlaku di channel tersebut dan dari mana setiap nilai berasal. [Pengaturan tersimpan dan efektif](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#stored-and-effective-settings) menunjukkan respons lengkapnya. Dalam tampilan ini, `enabled` dan `guest_policy` tidak pernah bernilai `null`. Tampilan ini ditentukan pada setiap pembacaan, sehingga tidak memiliki `created_at` atau `updated_at`. Jika suatu tingkat tidak dapat dibaca, permintaan gagal dengan `503` alih-alih menentukannya tanpa tingkat tersebut. Memerlukan scope `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>

### Menghapus channel

`DELETE /v1/organizations/claude_tag/slack_channels/{id}` menghapus sebuah channel dari Claude Tag. Ini adalah penghapusan yang sama dengan yang dilakukan pemilik organisasi di claude.ai, dengan efek yang sama. Ini tidak menghapus, mengarsipkan, atau mengubah channel di Slack, maupun pesan apa pun di dalamnya. Memerlukan scope `write:claude_tag`.

<Warning>
  Penghapusan tidak dapat dibatalkan. Ini menghapus apa yang disimpan Claude Tag untuk channel tersebut:

  * pengaturan tersimpannya dan target Bundle-nya
  * sesi-sesinya beserta transkripnya, termasuk sesi yang sedang berjalan
  * memorinya, yaitu apa yang disimpan Claude tentang channel tersebut dari satu sesi ke sesi berikutnya
  * routine-nya dan artefak yang dipublikasikan darinya
</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` tersebut mengembalikan `404` segera setelah permintaan selesai, dan sisanya dihapus di latar belakang. Penghapusan berulang mengembalikan `404`.

**Menghapus sebuah channel tidak menghentikan Claude di dalamnya.** Claude tetap menjawab berdasarkan apa yang diwarisi channel tersebut, tanpa memori tentang channel itu, dan penggunaan berikutnya dapat menyiapkan channel itu lagi dengan `id` baru.

* Untuk menghentikan Claude menjawab di sebuah channel, atur `enabled` ke `false` pada channel tersebut sebagai gantinya.
* Agar sebuah channel tidak menyimpan apa pun namun tetap mempertahankan sesi dan memorinya, hapus setiap pengaturan dan lepaskan setiap Bundle sebagai gantinya.

Dua jenis channel tidak dapat dihapus di sini dan mengembalikan `400`: channel yang tidak [terkonfigurasi](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#configured-levels) (`error_code: "slack_channel_not_configured"`), dan channel yang menyimpan konfigurasi yang tidak dikelola API ini, seperti pool runner atau pengaturan yang hanya dimiliki claude.ai. Pemilik organisasi menghapus jenis kedua di claude.ai.

## Workspace Slack

Objek workspace adalah tampilan tersimpan dari satu workspace Slack. Objek ini memiliki field yang sama dengan [objek channel](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#slack-channels), kecuali bahwa `type` adalah `slack_workspace`, `id` diawali dengan `slws_`, dan `slack` hanya berisi `team_id`. Respons [Mulai cepat](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#quick-start) menunjukkan contoh lengkapnya.

`id` yang tidak memiliki prefiks `slws_` mengembalikan `400`. `id` yang memiliki prefiks tersebut tetapi tidak merujuk ke workspace mana pun milik organisasi Anda mengembalikan `404`.

### Mencantumkan workspace

`GET /v1/organizations/claude_tag/slack_workspaces` mencantumkan workspace yang sudah disiapkan dan dimiliki organisasi Anda, yang terbaru lebih dulu berdasarkan `created_at`. [Mulai cepat](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#quick-start) menunjukkan permintaan dan responsnya. Untuk menemukan satu workspace berdasarkan ID milik Slack sendiri, tambahkan `slack_team_id`: `data` berisi workspace tersebut, atau kosong jika workspace itu belum disiapkan, dan workspace yang tidak dimiliki organisasi Anda mengembalikan `404`. Memerlukan scope `read:claude_tag`.

### Mendapatkan workspace

`GET /v1/organizations/claude_tag/slack_workspaces/{id}` mengembalikan objek workspace. Memerlukan scope `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>

### Memperbarui workspace

`POST /v1/organizations/claude_tag/slack_workspaces/{id}` mengubah pengaturan workspace dan mengembalikan objek workspace. `settings` wajib diisi dan mengikuti [Mengubah pengaturan](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#changing-settings). Apa yang Anda atur di sini berlaku di setiap channel dalam workspace yang tidak menetapkan nilainya sendiri. Memerlukan scope `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>

### Mendapatkan pengaturan efektif workspace

`GET /v1/organizations/claude_tag/slack_workspaces/{id}/effective` mengembalikan apa yang berlaku di workspace tersebut, yang ditentukan dari workspace dan default Slack, dalam bentuk yang ditunjukkan oleh [Pengaturan tersimpan dan efektif](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#stored-and-effective-settings), dengan `type` diatur ke `slack_workspace_effective`. Memerlukan scope `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>

## Default Slack

Organisasi Anda memiliki tepat satu objek default Slack. Objek ini berlaku untuk setiap workspace dan channel, tidak memiliki `id`, dan tidak memiliki tampilan efektif, karena tidak ada tingkat yang lebih luas.

| Field      | Deskripsi                                                                                                                                                         |
| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `type`     | `slack_defaults`.                                                                                                                                                 |
| `settings` | Apa yang disimpan oleh default, seperti pada [channel](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#slack-channels).                          |
| `agent_id` | Diawali dengan `cagt_`. `null` hingga default Slack [disiapkan](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#set-up-channels-and-workspaces). |

### Mendapatkan default Slack

`GET /v1/organizations/claude_tag/slack_defaults` mengembalikan objek tersebut. Organisasi yang default Slack-nya belum disiapkan mendapatkan `200` dengan setiap pengaturan dan `agent_id` bernilai `null`. Memerlukan scope `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>

### Memperbarui default Slack

`POST /v1/organizations/claude_tag/slack_defaults` mengubah default dan mengembalikan objek tersebut. `settings` wajib diisi dan mengikuti [Mengubah pengaturan](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#changing-settings). Permintaan yang menetapkan suatu nilai saat default Slack belum disiapkan mengembalikan `400`. Memerlukan scope `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"
}
```

## Bundle

Bundle adalah apa yang disebut claude.ai sebagai [Access bundle](https://claude.com/docs/claude-tag/admins/add-connections): sekumpulan akses bernama, seperti konektor, repositori, dan kredensial, yang dapat digunakan Claude di sebuah channel atau workspace. Pemilik organisasi membuat, mengedit, dan menghapus Bundle di claude.ai. API ini mencantumkan dan melampirkannya. API ini mengembalikan nama dan deskripsi Bundle dan tidak pernah mengembalikan apa yang diberikan oleh Bundle tersebut.

| Field                      | Deskripsi                                |
| -------------------------- | ---------------------------------------- |
| `type`                     | `bundle`.                                |
| `id`                       | Diawali dengan `capp_`.                  |
| `display_name`             | Nama Bundle.                             |
| `description`              | Kegunaan Bundle. `null` jika tidak ada.  |
| `created_at`, `updated_at` | Kapan Bundle dibuat dan terakhir diubah. |

`bundle_id` yang tidak memiliki prefiks `capp_` mengembalikan `400`. `bundle_id` yang memiliki prefiks tersebut tetapi tidak ada atau milik organisasi lain mengembalikan `404`, apa pun isi permintaan lainnya. Bundle yang dikelola Claude Tag untuk dirinya sendiri tidak dicantumkan dan mengembalikan `404`.

### Mencantumkan Bundle

`GET /v1/organizations/claude_tag/bundles` mencantumkan Bundle organisasi Anda, yang terbaru lebih dulu berdasarkan `created_at`. Memerlukan scope `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()

  # Secara otomatis mengambil halaman berikutnya sesuai kebutuhan.
  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();

  // Hanya halaman ini; untuk halaman berikutnya, panggil list() lagi dengan 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
}
```

### Mendapatkan Bundle

`GET /v1/organizations/claude_tag/bundles/{bundle_id}` mengembalikan objek Bundle. Memerlukan scope `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>

## Target Bundle

Target Bundle adalah catatan dari satu Bundle yang dilampirkan ke satu channel atau satu workspace. Bundle yang dilampirkan ke sebuah workspace dapat digunakan di workspace tersebut dan di setiap channel di dalamnya. Bundle yang dilampirkan ke sebuah channel hanya dapat digunakan di channel tersebut.

| Field                | Deskripsi                                                                                                                              |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| `type`               | `slack_channel` atau `slack_workspace`.                                                                                                |
| `id`                 | Diawali dengan `btgt_`. Ini adalah `{target_id}` dalam path, dan tidak pernah merupakan `id` milik channel atau workspace itu sendiri. |
| `slack_channel_id`   | Pada target `slack_channel`: `id` channel, diawali dengan `slch_`.                                                                     |
| `slack_workspace_id` | Pada target `slack_workspace`: `id` workspace, diawali dengan `slws_`.                                                                 |
| `created_at`         | Kapan Bundle dilampirkan.                                                                                                              |

Sebuah Bundle dilampirkan ke sebuah channel atau workspace paling banyak satu kali, dan pasangan yang sama selalu memiliki `id` yang sama, juga setelah dilepaskan dan dilampirkan kembali. `id` bersifat opaque: dapatkan dari respons pelampiran atau dari daftar. Target Bundle tidak menyimpan `id` Bundle-nya, yang juga diperlukan oleh path-nya, jadi simpan keduanya bersama-sama.

Bundle pertama yang dilampirkan ke sebuah channel atau workspace membuatnya [terkonfigurasi](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#configured-levels). Melampirkan atau melepaskan tidak mengubah pengaturan tersimpan apa pun. Sesi yang sedang berjalan di channel atau workspace tersebut diberi tahu bahwa aksesnya telah berubah.

Bundle yang dilampirkan claude.ai sebagai bagian dari penyiapan on-call dicantumkan dan dapat dibaca, tetapi tidak dapat dilampirkan atau dilepaskan di sini, dan tidak ada yang dapat dilampirkan ke atau dilepaskan dari channel atau workspace yang dikelola oleh penyiapan on-call. Setiap permintaan tersebut mengembalikan `400`.

### Mencantumkan target Bundle

`GET /v1/organizations/claude_tag/bundles/{bundle_id}/targets` mencantumkan channel dan workspace tempat Bundle dilampirkan, yang terbaru lebih dulu berdasarkan `created_at`. Memerlukan scope `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"
  )

  # Secara otomatis mengambil halaman berikutnya sesuai kebutuhan.
  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',
  );

  // Hanya halaman ini; untuk halaman berikutnya, panggil list() lagi dengan 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
}
```

Hanya lampiran ke channel dan workspace yang dicantumkan. Bundle yang dilampirkan di claude.ai ke hal lain, seperti **Default Slack access**, tidak memiliki target Bundle untuk itu, begitu pula aturan yang menerapkan sebuah Bundle di banyak channel sekaligus. Jadi, Bundle yang dapat digunakan Claude di sebuah channel bisa lebih banyak daripada target yang menyebutkannya. Tidak ada endpoint yang mencantumkan Bundle yang dilampirkan ke satu channel atau workspace.

### Melampirkan Bundle

`POST /v1/organizations/claude_tag/bundles/{bundle_id}/targets` melampirkan Bundle dan mengembalikan target Bundle. Body menyebutkan `type` dan `id` yang sesuai. Channel atau workspace harus sudah disiapkan: melampirkan tidak pernah menyiapkan sebuah channel. Melampirkan pasangan yang sudah dilampirkan mengembalikan `200` dengan target Bundle yang sudah ada. Memerlukan scope `write:claude_tag`.

Lampirkan Bundle ke sebuah channel:

<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"
}
```

Lampirkan Bundle ke sebuah workspace:

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

Lampiran ke sebuah channel memiliki kondisi yang menentukan kapan lampiran itu berlaku, seperti hanya selama tidak ada tamu Slack di channel tersebut. Kondisi diatur di claude.ai dan tidak dikembalikan di sini. Melampirkan melalui API ini menggunakan kondisi default, dan melampirkan pasangan yang sudah dilampirkan tidak mengubah kondisinya.

### Mendapatkan target Bundle

`GET /v1/organizations/claude_tag/bundles/{bundle_id}/targets/{target_id}` mengembalikan target Bundle. `target_id` yang tidak memiliki prefiks `btgt_` mengembalikan `400`. `target_id` yang milik Bundle lain, telah dilepaskan, atau merujuk ke channel atau workspace yang tidak lagi disiapkan mengembalikan `404`. Memerlukan scope `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>

### Melepaskan Bundle

`DELETE /v1/organizations/claude_tag/bundles/{bundle_id}/targets/{target_id}` melepaskan Bundle. Pelepasan berulang mengembalikan `404`. Memerlukan scope `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"
}
```

## Nilai yang tidak dikenali

`guest_policy.type`, `type` dari sebuah sumber, `type` dari sebuah target Bundle, dan kode error dapat memperoleh nilai baru kapan saja. Perlakukan nilai yang tidak Anda kenali seperti string tak dikenal lainnya alih-alih menggagalkan proses.

## Pembatasan laju

Permintaan dibatasi per organisasi, dalam dua anggaran yang digunakan bersama oleh semua kunci organisasi Anda dan terpisah dari batas Admin API lainnya milik organisasi Anda. Setiap anggaran mengizinkan "burst" (lonjakan) lalu terisi ulang dengan laju tetap:

| Anggaran  | Permintaan                 | Lonjakan | Pengisian ulang |
| --------- | -------------------------- | -------- | --------------- |
| Pembacaan | Setiap `GET`               | 120      | 2 per detik     |
| Perubahan | Setiap `POST` dan `DELETE` | 60       | 1 per detik     |

Permintaan yang melebihi anggaran mengembalikan **429 Too Many Requests** dengan header `retry-after`. Respons menyertakan header `anthropic-ratelimit-requests-limit`, `anthropic-ratelimit-requests-remaining`, dan `anthropic-ratelimit-requests-reset` untuk anggaran yang digunakan oleh permintaan tersebut.

## Paginasi

Endpoint daftar menggunakan **cursor opaque**. Permintaan pertama mengembalikan hingga `limit` baris ditambah cursor `next_page`; teruskan cursor tersebut tanpa diubah sebagai parameter `page` pada permintaan berikutnya, dan ulangi hingga `next_page` bernilai `null`. Perlakukan string cursor sebagai opaque: jangan mengurai, memodifikasi, atau membuatnya sendiri. [Mencantumkan channel](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#list-channels) dapat mengembalikan halaman dengan channel yang lebih sedikit dari `limit`, atau tidak ada sama sekali, sementara `next_page` masih terisi, jadi terus minta halaman hingga `next_page` bernilai `null`. Iterator daftar pada SDK Python, TypeScript, C#, Go, Java, dan Ruby serta CLI (kecuali dengan `--format raw`) melakukannya untuk Anda. Di PHP dan curl, minta setiap halaman sendiri dan teruskan `next_page`-nya sebagai `page`.

`limit` secara default bernilai 20, dengan minimum 1 dan maksimum 100. Setiap daftar diurutkan dari yang terbaru berdasarkan `created_at`, dan tidak menerima urutan lain.

## Respons error

Respons error mengikuti bentuk standar yang didokumentasikan di [Error](https://platform.claude.com/docs/id/api/errors). Sertakan `request_id` dari body respons saat menghubungi dukungan.

| Status | Arti                                                                                                                                                                                                                                          |
| ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 400    | Input tidak valid, atau operasi tidak berlaku untuk channel, workspace, atau Bundle ini (lihat bagian masing-masing endpoint).                                                                                                                |
| 401    | Header `x-api-key` tidak ada, atau kunci tidak dikenali.                                                                                                                                                                                      |
| 403    | Kunci bukan kunci ber-scope tingkat organisasi, tidak memiliki scope yang diperlukan, atau organisasi Anda tidak dapat melakukan perubahan ini.                                                                                               |
| 404    | Sumber daya tidak ditemukan, atau bukan milik organisasi Anda. Juga dikembalikan ketika permintaan tidak menyertakan nilai `anthropic-beta`, atau API tidak diaktifkan untuk organisasi Anda, sehingga endpoint tampak seolah-olah tidak ada. |
| 409    | Sesuatu yang lain mengubah atau menghapus sumber daya saat permintaan berjalan. Tidak ada yang disimpan. Baca lagi dan kirim ulang perubahan jika masih diperlukan.                                                                           |
| 429    | Batas laju terlampaui. Lihat [Pembatasan laju](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#rate-limiting).                                                                                                               |
| 500    | Error internal.                                                                                                                                                                                                                               |
| 503    | Sementara. Pada sebuah perubahan, ini tidak menyatakan apakah perubahan tersebut disimpan. Setiap perubahan aman untuk diulang, jadi kirim ulang permintaan tanpa diubah.                                                                     |

Ketika satu status memiliki beberapa penyebab yang akan Anda tangani secara berbeda, error juga membawa `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`                                 | Status | Arti dan apa yang harus dilakukan                                                                                                                                                                                                                                                                    |
| -------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `organization_level_scoped_api_key_required` | 403    | Kredensial bukan kunci Admin API ber-scope yang dimiliki organisasi secara keseluruhan. Mintalah kunci seperti itu kepada pemilik utama Anda.                                                                                                                                                        |
| `api_key_scope_missing`                      | 403    | Kunci tidak memiliki `read:claude_tag` atau `write:claude_tag`, mana pun yang diperlukan endpoint.                                                                                                                                                                                                   |
| `workspace_selection_not_accepted`           | 400    | Permintaan mengirim header `anthropic-workspace-id`. Hapus header tersebut.                                                                                                                                                                                                                          |
| `claude_tag_writes_not_enabled`              | 403    | Organisasi Anda dapat membaca melalui API ini tetapi tidak diaktifkan untuk perubahan.                                                                                                                                                                                                               |
| `compliance_configuration_restricted`        | 403    | Organisasi Anda memiliki konfigurasi kepatuhan yang membuat Claude Tag tidak menyimpan hal baru apa pun, seperti zero data retention. Menyiapkan channel, memperbarui pengaturan (bahkan untuk menghapusnya), dan melampirkan Bundle ditolak. Melepaskan Bundle dan menghapus channel tidak ditolak. |
| `environment_not_found`                      | 404    | `environment_id` tidak merujuk ke environment mana pun yang dapat digunakan organisasi Anda di sini. `id` dalam path tidak bermasalah.                                                                                                                                                               |
| `environment_archived`                       | 400    | `environment_id` merujuk ke environment yang diarsipkan.                                                                                                                                                                                                                                             |
| `slack_channel_set_up_settings_refused`      | 400    | Permintaan menyiapkan channel, lalu `settings` ditolak. `details.slack_channel_id` adalah channel tersebut. Lihat [Menyiapkan channel](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#set-up-a-channel).                                                                           |
| `slack_channel_set_up_environment_not_found` | 404    | Permintaan menyiapkan channel, lalu `environment_id` tidak ditemukan. `details.slack_channel_id` adalah channel tersebut.                                                                                                                                                                            |
| `slack_channel_set_up_settings_conflict`     | 409    | Permintaan menyiapkan channel, lalu perubahan lain tumpang tindih dengan `settings`. Tidak ada bagian dari `settings` yang disimpan. `details.slack_channel_id` adalah channel tersebut.                                                                                                             |
| `slack_channel_not_configured`               | 400    | Channel tidak [terkonfigurasi](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#configured-levels), sehingga tidak dapat dihapus.                                                                                                                                                    |

Kode baru dapat ditambahkan. Perlakukan kode yang tidak Anda kenali sebagaimana Anda memperlakukan statusnya. `404` tanpa `error_code` memiliki salah satu dari dua penyebab. Entah sesuatu yang disebutkan permintaan tidak ditemukan (sebuah `id` di path, atau channel atau workspace Slack di body atau kueri), atau setiap endpoint tampak seolah-olah tidak ada karena permintaan tidak menyertakan nilai `anthropic-beta` atau API tidak diaktifkan untuk organisasi Anda. Untuk membedakannya, [dapatkan default Slack](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#get-the-slack-defaults) dengan kunci dan header yang sama: permintaan tersebut tidak menyebutkan apa pun, sehingga hanya mengembalikan `404` pada kasus kedua.

## Event Activity Feed

Setiap perubahan melalui API ini dicatat di [Compliance API Activity Feed](https://platform.claude.com/docs/id/manage-claude/compliance-activity-feed) organisasi Anda, diatribusikan ke kunci API sebagai `api_actor` yang membawa ID `apikey_`-nya. Event tersebut sama dengan yang dicatat oleh feed ketika perubahan yang sama dilakukan di claude.ai, sehingga satu kueri dapat menemukan suatu perubahan dengan cara apa pun perubahan itu dilakukan.

| Event                             | Dipancarkan ketika                                                                                                                                                                                      |
| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ccr_agent_created`               | Sebuah channel disiapkan.                                                                                                                                                                               |
| `ccr_agent_updated`               | Sebuah pengaturan berubah pada channel, workspace, atau default Slack, atau suatu tingkat menjadi [terkonfigurasi](https://platform.claude.com/docs/id/manage-claude/claude-tag-api#configured-levels). |
| `ccr_agent_deleted`               | Sebuah channel dihapus. Target Bundle-nya ikut terhapus dan tidak memancarkan event sendiri.                                                                                                            |
| `ccr_agent_proxy_profile_bound`   | Sebuah Bundle dilampirkan.                                                                                                                                                                              |
| `ccr_agent_proxy_profile_unbound` | Sebuah Bundle dilepaskan.                                                                                                                                                                               |

Event tersebut menyebut channel atau workspace berdasarkan `agent_id`-nya, bukan berdasarkan `id`-nya. Kedua event Bundle menyebut Bundle di `profile_id` dan channel atau workspace di `scope_id`.

Event `ccr_agent_updated` mencantumkan apa yang berubah di `updated_fields`, menggunakan nama-nama milik feed itu sendiri:

| Pengaturan                       | Nama di `updated_fields` |
| -------------------------------- | ------------------------ |
| `enabled`                        | `slackbot_version`       |
| `instructions`                   | `system_prompt_addendum` |
| `model`                          | `default_model`          |
| `environment_id`                 | `default_environment_id` |
| `guest_policy`                   | `guest_policy`           |
| (tingkat menjadi terkonfigurasi) | `is_virtual`             |

Pembacaan, permintaan yang tidak mengubah apa pun, dan permintaan yang ditolak sebelum apa pun disimpan tidak mencatat apa pun. Permintaan penyiapan yang menyiapkan sebuah channel dan yang `settings`-nya kemudian ditolak akan mencatat `ccr_agent_created`.

## Lihat juga

<CardGroup cols={2}>
  <Card title="Membuat kunci Admin API" href="https://platform.claude.com/docs/id/manage-claude/admin-api-keys">
    Tempat pemilik utama Anda membuat kunci dengan scope tertentu.
  </Card>

  <Card title="Dokumentasi Claude Tag" href="https://claude.com/docs/claude-tag/overview">
    Apa itu Claude Tag, cara menyiapkannya, dan apa fungsi setiap pengaturan di Slack.
  </Card>

  <Card title="Compliance API Activity Feed" href="https://platform.claude.com/docs/id/manage-claude/compliance-activity-feed">
    Jejak audit dari setiap perubahan yang dilakukan di sini dan di claude.ai.
  </Card>

  <Card title="Plugins API" href="https://platform.claude.com/docs/id/manage-claude/plugins-api">
    Kelola plugin di organisasi Claude Enterprise Anda.
  </Card>
</CardGroup>
