---
title: Plugins API
url: https://platform.claude.com/docs/ja/manage-claude/plugins-api
description: Claude Enterprise組織内のプラグインを一覧化して管理します。プラグインとバージョンのアップロード、メンバーに提供するバージョンの選択、各プラグインを使用できるユーザーの制御、レビュー用のプラグインファイルのダウンロード、接続前のマーケットプレイスの検証を行えます。
---

Plugins APIでは、次の操作を行えます。

* Claude Enterprise組織内のすべての「plugin」（プラグイン）を一覧化する
* 独自のパイプラインからプラグインと新しいバージョンを公開する
* メンバーに提供するバージョンを選択する
* 各プラグインを使用できるユーザーを制御する
* レビュー用にプラグインファイルをダウンロードする
* Gitマーケットプレイスを接続する前に確認する

プラグインの*使用状況*のレポート（メンバーがどのプラグインやスキルをどのくらいの頻度で使用しているか）については、[Analytics APIs](https://platform.claude.com/docs/ja/manage-claude/analytics-api)を参照してください。

<Check>
  **スコープ付きのAdmin APIキーが必要です**

  これらのエンドポイントには、次のいずれかのスコープを持つAdmin APIキーが必要です。

  * `read:plugins`スコープ：`GET`エンドポイント（アーカイブのダウンロードを含む）
  * `write:plugins`スコープ：`POST`および`DELETE`エンドポイント

  ただし、マーケットプレイスの検証はどちらのスコープでも実行できます。詳細は[スコープ](https://platform.claude.com/docs/ja/manage-claude/plugins-api#scopes)を参照してください。同様に使用できる他の2つの読み取りスコープについても説明しています。プライマリオーナーがキーを作成する場所については、[Admin APIキーの作成](https://platform.claude.com/docs/ja/manage-claude/admin-api-keys#create-a-key-for-a-claude-enterprise-organization)を参照してください。すべてのリクエストで、キーを`x-api-key`ヘッダーに渡してください。あわせて、[`anthropic-version`](https://platform.claude.com/docs/ja/api/versioning)ヘッダーと、次の注記に示すベータヘッダーも必要です。
</Check>

<Note>
  Plugins APIは**ベータ版**で、Claude Enterprise組織のみが利用できます。Claude Platform（Claude Console）組織や、HIPAA対応が有効になっている組織では利用できません。

  すべてのリクエストに[ベータヘッダー](https://platform.claude.com/docs/ja/api/beta-headers)`anthropic-beta: ce-plugins-2026-09-01`を含める必要があります（SDKと`ant` CLIは自動的に送信します）。このヘッダーがないリクエストは、エンドポイントが存在しない場合とまったく同じように`404`を返します。
</Note>

## エンドポイント

このAPIは、5つのリソースにわたる18個のエンドポイントを公開しています。

| リソース                                                                                             | エンドポイント                                                                                                                                                                                                                                                                                                                   |
| ------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **プラグイン**：組織内のすべてのプラグインの一覧表示、新しいプラグインのアップロード、プラグインの参照、メンバーに提供するバージョンの選択（ロールバックまたは昇格）、プラグインの削除    | `GET /v1/organizations/plugins`<br />`POST /v1/organizations/plugins`<br />`GET /v1/organizations/plugins/{plugin_id}`<br />`POST /v1/organizations/plugins/{plugin_id}`<br />`DELETE /v1/organizations/plugins/{plugin_id}`                                                                                              |
| **プラグインバージョン**：プラグインのバージョン履歴の一覧表示、新しいバージョンのアップロード、バージョンの参照、バージョンのファイルのダウンロード                     | `GET /v1/organizations/plugins/{plugin_id}/versions`<br />`POST /v1/organizations/plugins/{plugin_id}/versions`<br />`GET /v1/organizations/plugins/{plugin_id}/versions/{version}`<br />`GET /v1/organizations/plugins/{plugin_id}/versions/{version}/content`                                                           |
| **インストール設定**：組織所有のプラグインを使用できるユーザーの読み取り、組織全体または1つのグループに対する設定、いずれかの設定の削除                           | `GET /v1/organizations/plugins/{plugin_id}/installation_settings`<br />`POST /v1/organizations/plugins/{plugin_id}/installation_settings/{target}`<br />`DELETE /v1/organizations/plugins/{plugin_id}/installation_settings/{target}`                                                                                     |
| **共有**：メンバーが自分のプラグインを誰と共有しているかの読み取り（読み取り専用）                                                      | `GET /v1/organizations/plugins/{plugin_id}/shares`                                                                                                                                                                                                                                                                        |
| **プラグインマーケットプレイス**：マーケットプレイスのIDの検索、マーケットプレイスの参照、そのプラグインのデフォルトのインストール設定の設定、接続前のマーケットプレイスのコンテンツの確認 | `GET /v1/organizations/plugin_marketplaces`<br />`GET /v1/organizations/plugin_marketplaces/{marketplace_id}`<br />`POST /v1/organizations/plugin_marketplaces/{marketplace_id}`<br />`POST /v1/organizations/plugin_marketplaces/validate_repository`<br />`POST /v1/organizations/plugin_marketplaces/validate_archive` |

このリリースには、スタンドアロンスキル（メンバーがclaude.aiのスキルエディターで作成したスキル、または単一のスキルとしてアップロードしたスキル）は含まれません。これらはインベントリに表示されず、ここで作成することもできません。Anthropicが公開するプラグインもインベントリには含まれません。それらの使用状況は[Analytics APIs](https://platform.claude.com/docs/ja/manage-claude/analytics-api)で報告されます。マーケットプレイスの作成、リポジトリへの接続、削除は、このAPIではなくclaude.aiで行います。

## 前提条件

* 組織がClaude Enterpriseプランを利用している必要があります。
* プライマリオーナーが、[claude.ai > 組織設定 > API](https://claude.ai/admin-settings/api-access)で、`read:plugins`スコープ、`write:plugins`スコープ、またはその両方を持つAdmin APIキーを作成します。[Admin APIキーを作成する](https://platform.claude.com/docs/ja/manage-claude/admin-api-keys#create-a-key-for-a-claude-enterprise-organization)を参照してください。
* すべてのリクエストには、`x-api-key`、`anthropic-version: 2023-06-01`、`anthropic-beta: ce-plugins-2026-09-01`の3つのヘッダーを含めます。

Python、TypeScript、C#、Go、Java、PHP、Ruby SDKは、これらのエンドポイントを`client.beta.organization` (csharp, go: `client.Beta.Organization`; java: `client.beta().organization()`; php: `$client->beta->organization`)の下で公開し、[`ant` CLI](https://platform.claude.com/docs/ja/cli-sdks-libraries/cli/quickstart)は`ant beta:organization`の下で公開しています。これらは`anthropic-version`ヘッダーと`anthropic-beta`ヘッダーを自動的に送信します。このページの例では各SDKのデフォルトクライアントを使用しており、CLIと同様に`ANTHROPIC_API_KEY`環境変数からAdmin APIキーを読み取ります。curlの例も同じ変数からキーを読み取り、`x-api-key`ヘッダーで渡します。SDKまたはCLIが追加のページを自動的に取得する場合、`limit`は合計数ではなくページサイズを設定します（[ページネーション](https://platform.claude.com/docs/ja/manage-claude/plugins-api#pagination)を参照）。

APIキーは組織に属しており、作成した人が退職した後も引き続き機能します。APIキーを共有したり、ソース管理にチェックインしたりしないでください。

## クイックスタート

組織独自のマーケットプレイスにあるプラグインを、新しい順に一覧表示します。

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/plugins?owner_type=organization&limit=20" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01"
  ```

  ```bash CLI
  ant beta:organization:plugins list --owner-type organization --limit 20
  ```

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

  plugins = client.beta.organization.plugins.list(owner_type="organization", limit=20)

  # 必要に応じて後続のページを自動的に取得します。
  for plugin in plugins:
      print(f"{plugin.id}: {plugin.name}")
  ```

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

  const plugins = await client.beta.organization.plugins.list({
    owner_type: "organization",
    limit: 20
  });

  for await (const plugin of plugins) {
    console.log(`${plugin.id}: ${plugin.name}`);
  }
  ```

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

  AnthropicClient client = new();

  var page = await client.Beta.Organization.Plugins.List(
      new() { OwnerType = OwnerType.Organization, Limit = 20 }
  );

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

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

  plugins := client.Beta.Organization.Plugins.ListAutoPaging(context.Background(), anthropic.BetaOrganizationPluginListParams{
  	OwnerType: anthropic.BetaOrganizationPluginListParamsOwnerTypeOrganization,
  	Limit:     anthropic.Int(20),
  })

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

  ```java Java
  import com.anthropic.models.beta.organization.plugins.PluginListParams;

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

      var params = PluginListParams.builder()
          .ownerType(PluginListParams.OwnerType.ORGANIZATION)
          .limit(20)
          .build();
      var plugins = client.beta().organization().plugins().list(params);

      for (var plugin : plugins.autoPager()) {
          IO.println(plugin.id() + ": " + plugin.name());
      }
  }
  ```

  ```php PHP
  use Anthropic\Beta\Organization\Plugins\PluginListParams\OwnerType;
  // ...

  $client = new Client();

  $plugins = $client->beta->organization->plugins->list(
      limit: 20,
      ownerType: OwnerType::ORGANIZATION,
  );

  // このページのみです。次のページを取得するには、page: $plugins->nextPage を指定して list() を再度呼び出します。
  foreach ($plugins->getItems() as $plugin) {
      echo "{$plugin->id}: {$plugin->name}\n";
  }
  ```

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

  page = client.beta.organization.plugins.list(owner_type: :organization, limit: 20)

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

```json
{
  "data": [
    {
      "type": "plugin",
      "id": "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
      "name": "sales-toolkit",
      "display_name": "Sales Toolkit",
      "description": "Account research and call prep for the sales team.",
      "served_version_id": "pluginver_01Km7tL4pR9xF5sU2zV3jP6q",
      "served_version_pinned": true,
      "latest_version_id": "pluginver_01Jd5sK2nQ8wE4rT6yU1iO3p",
      "manifest_version": "1.4.0",
      "owner": { "type": "organization" },
      "marketplace_id": "marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r",
      "created_by": { "type": "api_actor", "api_key_id": "apikey_01Nq9vN6rT2zH7uW4bX5mR8s" },
      "organization_installation_preference": "available",
      "organization_installation_preference_inherited": true,
      "content_scan": { "status": "completed", "assessment": "pass", "reason": null },
      "components": [
        {
          "type": "skill",
          "name": "account-research",
          "description": "Researches a customer account before a call."
        },
        { "type": "mcp_server", "name": "crm", "description": null }
      ],
      "reach": "remote",
      "created_at": "2026-09-01T17:04:11Z",
      "updated_at": "2026-09-15T14:12:30Z"
    }
  ],
  "next_page": "page_xK9f2LqT7vNw3pRzBd8sHy"
}
```

この例では、プラグインは以前のバージョンに固定されています。新しいバージョン（`latest_version_id`）は保存されていますが、まだ提供されていません。

## スコープ

| スコープ                       | 付与される権限                                                                                                                                                                                                                                                                                  |
| -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `read:plugins`             | このページのすべての`GET`エンドポイント（アーカイブのダウンロードを含む）と、マーケットプレイスの検証。                                                                                                                                                                                                                                   |
| `write:plugins`            | このページのすべての`POST`および`DELETE`エンドポイントと、マーケットプレイスの検証。具体的には、プラグインの作成、バージョンの作成、提供バージョンの変更、プラグインの削除、インストール設定の設定と削除、マーケットプレイスのデフォルトの設定です。読み取り権限は付与されません。                                                                                                                                         |
| `read:org_audit`           | セキュリティ監査の統合向けの読み取り専用スコープ。このページのすべての`GET`エンドポイント（アーカイブのダウンロードを含む）に加え、[ユーザー管理](https://platform.claude.com/docs/ja/manage-claude/user-management)と[Compliance API](https://platform.claude.com/docs/ja/manage-claude/compliance-api)の読み取りエンドポイントへのアクセスを付与します。マーケットプレイスの検証や書き込みの権限は付与されません。 |
| `read:compliance_org_data` | 組織のメタデータ（名前、タイプ、ロール、グループ）と有効な設定を対象とするCompliance APIのスコープ。`read:org_audit`とまったく同じく、このページのすべての`GET`エンドポイントへのアクセスを付与します。そのため、Compliance Access Keyだけで、2つ目のキーなしにプラグインを読み取れます。マーケットプレイスの検証や書き込みの権限は付与されません。                                                                                   |

1つのキーに複数のスコープを持たせることができます。プラグインをアップロードしてから読み戻す統合には、`read:plugins`と`write:plugins`の両方が必要です。このページでエンドポイントに`read:plugins`スコープが必要と記載されている箇所では、`read:org_audit`または`read:compliance_org_data`を持つキーも使用できます。

### メンバーのプラグインファイルへのアクセス

これらの読み取りスコープ（`read:plugins`、`read:org_audit`、`read:compliance_org_data`）はいずれも、メンバーの個人用マーケットプレイスにあるプラグインのファイルをダウンロードできます。これには、claude.aiの管理設定に表示されないファイルも含まれます。

さらに、親組織に紐付けられた`read:org_audit`または`read:compliance_org_data`キーは、`organization_id`を渡すことで、その配下にあり、このAPIにアクセスできる任意の組織で同じ操作を行えます（[同じ親組織の配下にある別の組織の読み取り](https://platform.claude.com/docs/ja/manage-claude/plugins-api#reading-another-organization-under-the-same-parent)を参照）。

このようなダウンロードのたびに、[Compliance API Activity Feed](https://platform.claude.com/docs/ja/manage-claude/compliance-activity-feed)に`claude_plugin_archive_accessed`イベントが記録されます。このイベントは、キー、プラグイン、バージョン、メンバーを識別します（[Activity Feedイベント](https://platform.claude.com/docs/ja/manage-claude/plugins-api#activity-feed-events)を参照）。組織所有のプラグインのダウンロードは記録されません。

### 同じ親組織の配下にある別の組織の読み取り

`read:plugins`キーと`write:plugins`キーは、作成された組織に対してのみ読み取りと書き込みを行います。

会社に、1つの親組織の下にリンクされた複数のClaude組織がある場合は、親組織のプライマリオーナーがすべてのリンクされた組織向けに作成した`read:org_audit`または`read:compliance_org_data`キーを使用できます（[Admin APIキーの作成](https://platform.claude.com/docs/ja/manage-claude/admin-api-keys#create-a-key-for-a-claude-enterprise-organization)を参照）。このキーは、リンクされた組織のうち、このAPIにアクセスできる任意の組織を読み取れます。このページの任意の`GET`エンドポイントで、`organization_id`クエリパラメータにその組織のIDを渡してください。

* IDは、claude.aiの設定に表示される組織のUUIDです（`org_`プレフィックス付きの形式も受け付けます）。
* パラメータを指定しない場合、キーは作成された組織を読み取ります。
* `404`は、指定した組織がキーの親組織の配下にないか、その組織でAPIが利用できないことを意味します。
* UUIDでも`org_` IDでもない値は`400`を返します。
* その他のキーで自身以外の組織を指定すると、`404`が返されます。
* 書き込みでは`organization_id`を受け付けません。

## 主要な概念

### プラグインとコンポーネント

**プラグイン**は、組織のメンバー向けにClaudeを拡張するパッケージです。次の「component」（コンポーネント）を任意に組み合わせて含みます。

| コンポーネント    | 説明                                                            |
| ---------- | ------------------------------------------------------------- |
| Skill      | タスクで必要になったときにClaudeが読み込む指示とファイル。                              |
| Command    | メンバーが`/`に続けてコマンド名を入力して実行する、保存済みのプロンプト。                        |
| Agent      | 独自の指示を持つヘルパーアシスタント。Claudeはタスクの一部をこれに任せることができます。               |
| Hook       | セッション中にイベントが発生したとき（Claudeがツールを使用する前など）に自動的に実行されるコマンド。         |
| MCP server | Claudeから別のシステムのツールやデータへの接続（「Model Context Protocol」、すなわちMCP）。 |
| CLI        | プラグインによってClaudeが実行できるようになるコマンドラインプログラム。                       |

すべてのプラグインには、`.claude-plugin/plugin.json`にマニフェストがあります。マニフェストの`name`がプラグインの`name`になります。これは、マーケットプレイス内で一意の小文字の識別子です。

### マーケットプレイス

「marketplace」（マーケットプレイス）は、プラグインのコンテナです。各マーケットプレイスには、オーナーとソースがあります。

* **オーナー。** 組織は自身のマーケットプレイスを所有します。各メンバーも個人用マーケットプレイスを持つことができます。

* **ソース。** ソースの値は次のとおりです。

  * `manual`：プラグインはアップロードされます。アップロード先はclaude.aiで、組織のマーケットプレイスの場合はこのAPIも使用できます。
  * `github`、`gitlab`、`public_git`：プラグインは、オーナーが接続したGitリポジトリから同期されます。

  同期されるマーケットプレイスには何もアップロードできず、このAPIでそのプラグインを削除することもできません。次回の同期でどちらの変更も元に戻されるためです。代わりにリポジトリを変更してください。

組織の**ライブラリマーケットプレイス**は、組織所有の`manual`マーケットプレイスです。マーケットプレイスを指定せずにアップロードすると、ここにアップロードされます。最初に何かがアップロードされたときに作成されます。

### 組織所有のプラグインとメンバー所有のプラグイン

プラグインの`owner.type`は、そのプラグインが誰のマーケットプレイスにあるかを示します。

* `organization`：このAPIを通じて管理できます。ただし、Gitから同期されたマーケットプレイス内のプラグインは、ここでアップロードを受け付けたり削除したりすることはできません。
* `user`：1人のメンバーの個人用マーケットプレイスにあります。詳細の読み取りとファイルのダウンロードができ、マーケットプレイスが`manual`の場合は削除もできます。バージョンのアップロードと提供バージョンの選択は`403`を返します。共有はメンバーのみがclaude.aiで管理します。

メンバーを組織から削除しても、そのメンバーのプラグインは削除されません。プラグインはメンバーの`user_id`の下でインベントリに残り、`owner_user_id`フィルターで引き続き見つけられるため、退職したメンバーのコンテンツを確認して削除できます。メンバーのアカウントが削除されると、インベントリから削除されます。

### バージョンと提供バージョン

このAPI、claude.ai、Gitの同期のいずれからのアップロードであっても、アップロードのたびに新しい不変の「version」（バージョン）が作成されます。プラグインには、バージョンを指す2つのポインターがあります。

* `latest_version_id`：最新のバージョン。
* `served_version_id`：メンバーに提供されるバージョン。

デフォルトでは`served_version_pinned`は`false`であり、提供バージョンは通常、最新のバージョンに追従します。コンテンツスキャンが有効な場合、claude.aiで保存されたバージョンはコンテンツスキャンを**待機**することがあります。つまり、保存されますがすぐには提供されません。このページでは、「待機」という表現をclaude.aiで保存されたバージョンにのみ使用し、メンバーまたは管理者がプラグインに公開したバージョンには使用しません。スキャンが有効な間、待機中のバージョンは、スキャンが`pass`または`warn`で完了した後にのみ提供されます。バージョンが待機している間、`served_version_id`は`latest_version_id`よりも前のバージョンを指します。2つのIDが一致するまでポーリングしないでください。スキャンが失敗した場合など、異なったままになる可能性があります。

`POST /v1/organizations/plugins/{plugin_id}`でバージョンを選択すると、プラグインが**固定**されます（`served_version_pinned: true`）。管理者がclaude.aiでバージョンを選択した場合や、プラグインへの公開を求めるメンバーのリクエストを承認した場合も同様です。それ以降、新しいアップロードは保存されて`latest_version_id`を進めますが、`served_version_id`を別のバージョンに向けるまで、メンバーは固定されたバージョンを使い続けます。2つのポインターが異なるプラグインには、提供されていない保存済みバージョンがあります。

これにより、リリースパイプラインで各ビルドをアップロードし、テストしてから昇格させることができます。各ビルドをいつ提供するかをパイプラインで決定するには、`served_version_id`を現在のバージョンに設定してプラグインを一度固定します。それ以降は、提供したい各ビルドを昇格させます。コンテンツスキャンが有効な場合、最初の固定は、現在のバージョンのスキャンが完了するまで`409 scan_pending`を返し、スキャンが`fail`または`unknown`で完了した場合やエラーになった場合は`400 scan_failed`を返します（`warn`は受け付けられます）。固定されたプラグインは、現在のところ、ここでもclaude.aiでも固定を解除できません。

ロールバックするには、`served_version_id`を以前のバージョンに設定します。ロールフォワードも同じ方法で行います。

これらのルールは組織所有のプラグインについて説明したものです。メンバー所有のプラグインの提供バージョンは、そのオーナーがclaude.aiで制御します。

### インストール設定

「installation settings」（インストール設定）は、組織所有のプラグインを使用できるユーザーを決定します。各設定は4つの値のいずれかを持ち、`installation_preference`という名前のフィールド（およびプラグインオブジェクトとマーケットプレイスオブジェクトでは`organization_installation_preference`と`default_installation_preference`）に格納されます。

| 値               | メンバーに表示される内容               |
| --------------- | -------------------------- |
| `required`      | プラグインはインストールされ、削除できません。    |
| `auto_install`  | プラグインはインストールされ、削除できます。     |
| `available`     | プラグインはリクエストに応じてインストールできます。 |
| `not_available` | プラグインは非表示になります。            |

プラグインは、組織全体の設定を1つと、グループごとの設定を1つずつ保持できます（グループは[ユーザー管理](https://platform.claude.com/docs/ja/manage-claude/user-management#groups)で管理されるロールベースのアクセス制御グループです）。メンバーは次のルールによって値を取得します。

1. 組織全体の値は、プラグイン自身の組織全体の設定があればその値、なければマーケットプレイスのデフォルト、それもなければ`not_available`です。プラグインはこの値を`organization_installation_preference`で報告し、マーケットプレイスのデフォルトから取得している間は`organization_installation_preference_inherited: true`となります。
2. プラグインの設定を保持するグループに属していないメンバーは、組織全体の値を取得します。
3. 設定を保持する1つ以上のグループに属するメンバーは、代わりにそれらのグループの設定のうち最も許容度の高いものを取得します。順位は`required`、`auto_install`、`available`、`not_available`です。

グループの設定は、そのメンバーに対して組織全体の値を置き換えるものであり、追加されるものではありません。たとえば、組織全体の値が`required`で、Pilotグループが`available`を保持している場合、Pilotのメンバーは`available`を取得します。プラグインをパイロットグループから組織全体に移行する場合は、組織全体の値を設定してから、グループの設定を削除してください。組織全体の値を設定すると、プラグインはマーケットプレイスのデフォルトを継承しなくなります。[組織全体の設定を削除する](https://platform.claude.com/docs/ja/manage-claude/plugins-api#remove-an-installation-setting)と、プラグインはそのデフォルトに戻ります。

このAPIで作成されたプラグインは独自の設定を持たない状態で開始されるため、マーケットプレイスのデフォルトを継承します。誰かがデフォルトを設定していない限り、`not_available`です。グループを削除すると、すべてのプラグインからそのグループの設定が削除されます。

### 共有

「shares」（共有）は、メンバー所有のプラグインを使用できるユーザーを決定します。オーナーはclaude.aiで、すべてのメンバー、グループ、または指定したメンバーとプラグインを共有します。このAPIは共有を一覧表示できますが、変更はできません。

組織がclaude.aiの設定で特定の種類の共有をオフにしている場合、その種類の共有は一覧には引き続き表示されます。ただし、その設定がオフの間は誰にもアクセス権を与えません。一覧自体には、設定がオフかどうかは表示されません。

### コンテンツスキャン

「content scanning」（コンテンツスキャン）は、claude.aiの組織設定です。有効な場合、新しく保存されたバージョンがスキャンされ（claude.aiはいくつかを除外します）、結果が`content_scan`で報告されます。スキャンされなかったバージョン（たとえば、スキャンが有効になる前に保存されたバージョン）は`content_scan: null`となります。カスタマー管理の暗号化キーまたはゼロデータ保持を使用している組織には、スキャンは提供されません。

スキャンが有効な間、メンバーにプラグインが提供されるのは、提供バージョンのスキャンが`pass`または`warn`で`completed`になっている場合のみです。スキャンの実行中、またはスキャンが失敗した、エラーになった、判定に至らなかった後は、プラグインはメンバーに提供されず、代わりに以前のバージョンが提供されることもありません。一度もスキャンされていないバージョン（`content_scan: null`）は通常どおり提供されます。

このAPIでアップロードしたバージョンは、コンテンツスキャンを待機することはありません。そのバージョンが提供バージョンになると、スキャンに合格するまでメンバーはプラグインを利用できなくなり、スキャンが失敗した場合は利用できないままになります。新しいバージョンのスキャン中もメンバーに現在のバージョンを使い続けてもらう場合は、先にプラグインを固定してください（[バージョンと提供バージョン](https://platform.claude.com/docs/ja/manage-claude/plugins-api#versions-and-the-served-version)を参照）。

claude.aiで保存されたバージョンがスキャンを待機している間、提供バージョンは変わりません。APIでのアップロードが提供バージョンになると、待機は終了します。待機中だったバージョンは、誰かがそれを選択した場合にのみ提供されます。待機中のバージョンのスキャンを確認するには、そのバージョンを読み取ってください（[プラグインのバージョンを一覧表示する](https://platform.claude.com/docs/ja/manage-claude/plugins-api#list-a-plugins-versions)を参照）。

アップロード後、`content_scan.status`は`processing`となり、判定は非同期で届きます。判定を確認するにはバージョンを読み取ってください。プラグインオブジェクトには提供バージョンのスキャンのみが表示されます。スキャンがまだ実行中のバージョンに提供バージョンを変更すると`409 scan_pending`が返され、スキャンが失敗したバージョンに変更すると`400 scan_failed`が返されます。

### リーチ

`reach`は、バージョンがメンバーのマシン上およびその外部にどこまで及ぶかを1つの値で要約します。

| 値            | 意味                                                                                                                                                                                                                                                           |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `remote`     | 他に何を宣言しているかにかかわらず、MCPサーバーまたはCLIを宣言しています。                                                                                                                                                                                                                     |
| `privileged` | MCPサーバーやCLIは宣言していませんが、フック、モニター（セッション中に実行され続けるバックグラウンドコマンド）、「Language Server Protocol」（言語サーバープロトコル）、すなわちLSPのサーバー、またはプラグインがメンバーのアプリに適用する設定を宣言しているか、フロントマターでツールを事前承認する（`allowed-tools`）スキル、コマンド、またはその他のMarkdownファイルを含んでいます。これらはメンバー自身のコンピューター上で実行されるか、効果を発揮します。 |
| `contained`  | MCPサーバー、CLI、フック、モニター、LSPサーバー、アプリ設定のいずれも宣言しておらず、どのMarkdownファイルもツールを事前承認していません（たとえば、`allowed-tools`を持たないスキル、コマンド、エージェントのみを含むプラグイン）。                                                                                                                            |

`reach`は、`components`に一覧表示されないモニター、LSPサーバー、アプリ設定を含め、バージョンが宣言するすべてのものを考慮するため、`components`リストが空のバージョンでも`privileged`になる場合があります。コンポーネントが記録される前に保存されたバージョンや、スキルのいずれかの`SKILL.md`またはコマンドファイルのいずれかを読み取れなかったためにリーチを判定できなかったバージョンでは`null`になります。`null`は未分類として扱ってください。

### アップロードの要件

アップロードはclaude.aiでのプラグインのアップロードと同じルールに従うため、どちらでも同じアーカイブが受け付けられます。

* アップロードは、1つの`.zip`または`.plugin`アーカイブ、あるいは個別のファイルのセットのいずれかです。アーカイブでは、すべてを1つのトップレベルフォルダーで囲むことができます。

* `.claude-plugin/plugin.json`にマニフェストを1つだけ含める必要があり、マニフェストでは`name`を宣言する必要があります。マニフェストのない単独の`SKILL.md`は拒否されます。

* フロントマターでプラグインコンポーネントを宣言しているトップレベルの`SKILL.md`は、マニフェストにマージされます。両方で値が設定されている場合は、`plugin.json`が優先されます。

* `name`には、小文字（任意のアルファベット）、数字、ハイフンを最大64文字まで使用できます。大文字、スペース、アンダースコア、その他の句読点は拒否されます。

* `displayName`は最大64文字、`description`は最大500文字です。

* すべての`SKILL.md`には、`name`と`description`を含む有効なYAMLフロントマターが必要です。どちらにも`<example>`などのXMLタグを含めることはできません。2つのスキル、または2つのコマンドが同じ名前を共有することはできません。

* トップレベルの`bin/`ディレクトリの下にファイルを置くことはできません。

* ネストされた`.zip`ファイルは使用できません。パッケージ化されたMCPサーバー（`.mcpb`、`.dxt`）は使用できます。

* ファイルパスは相対パスである必要があり、`..`を含めることはできません。使用できる文字は、文字、数字、スペース、`_ . - / ( ) ,`のみです。

* サイズと数の上限は次のとおりです。

  * リクエストボディと展開後のアーカイブ：それぞれ最大200 MB。上限を超えるリクエストボディは、`400`ではなく`413`（`request_too_large`）を返します。
  * ファイル数：最大5,000
  * パスの深さ：最大12
  * パスの長さ：最大472文字
  * ファイル名またはフォルダー名：最大255文字

* ZIPアーカイブはDEFLATEまたはSTORE圧縮を使用する必要があり、暗号化やシンボリックリンクを含めることはできません。

* 1つのマーケットプレイスに保持できるアイテムは最大500個です。これには、プラグインと、メンバーがそこに保持しているスタンドアロンスキルが含まれます。この上限と5,000ファイルの上限は現在の値であり、引き上げられる可能性があります。

## ワークフローの例

### リリースパイプラインから各ビルドを公開する

CIからタグ付けされたすべてのビルドをアップロードし、ビルドを提供するタイミングをパイプラインで決定します。

1. `GET /v1/organizations/plugin_marketplaces?owner_type=organization`でアップロード先のマーケットプレイスを見つけます。ライブラリマーケットプレイスを使用する場合は、`marketplace_id`を省略します。
2. 最初のリリースでは、`POST /v1/organizations/plugins`で[プラグインを作成](https://platform.claude.com/docs/ja/manage-claude/plugins-api#create-a-plugin)します。以降のリリースでは、プラグインの`latest_version_id`を記録してから、`POST /v1/organizations/plugins/{plugin_id}/versions`で[バージョンをアップロード](https://platform.claude.com/docs/ja/manage-claude/plugins-api#create-a-version)します。アップロードのレスポンスが失われた場合は、プラグインを読み取り、`latest_version_id`が変わっていない場合にのみ再試行します（[アップロードの再試行](https://platform.claude.com/docs/ja/manage-claude/plugins-api#retrying-uploads)を参照）。
3. 新しいビルドを確認している間もメンバーに現在のバージョンを使わせるには、`served_version_id`を現在のバージョンに設定して、プラグインを一度固定します。以降、各アップロードは提供されずに保存されます。固定は元に戻せないため、提供したいすべてのビルドでステップ5が必要になります。
4. コンテンツスキャンが有効な場合は、`content_scan.status`が`processing`でなくなるまで`GET /v1/organizations/plugins/{plugin_id}/versions/{version}`をポーリングします。`pass`または`warn`で`completed`になった場合にのみ昇格します。
5. `POST /v1/organizations/plugins/{plugin_id}`と`{"served_version_id": "<the new version's ID>"}`で[ビルドを昇格](https://platform.claude.com/docs/ja/manage-claude/plugins-api#change-the-served-version)します。ロールバックするには、同じ方法で以前のバージョンのIDを送信します。

### プラグインをパイロットグループに展開してから全員に展開する

1. `GET /v1/organizations/rbac_groups`でパイロットグループのIDを調べます。この呼び出しには`read:rbac_groups`スコープが必要で、このスコープにはすべてのリンクされた組織向けに作成されたキーが必要です（[ユーザー管理](https://platform.claude.com/docs/ja/manage-claude/user-management#groups)を参照）。次のステップには`write:plugins`が必要で、これはキーが作成された組織に対してのみ機能します。そのため、複数のリンクされた組織を持つエンタープライズでは、プラグインを保持する組織でこのキーを作成して両方のスコープを付与するか、それらのステップにはその組織で作成した2つ目のキーを使用してください。

2. 組織全体の値を`not_available`のままにして、`POST /v1/organizations/plugins/{plugin_id}/installation_settings/{target}`（`{target}`はグループの`rbac_group_` ID）で[グループに独自の設定を付与](https://platform.claude.com/docs/ja/manage-claude/plugins-api#set-an-installation-setting)します（たとえば`auto_install`）。グループのメンバーのみがプラグインを取得します。

3. パイロットが終了したら、次の呼び出しで組織全体の値を設定し、グループの設定を削除して、グループが再び組織に従うようにします。組織全体の値を設定すると、プラグインはマーケットプレイスのデフォルトを継承しなくなります。後で[組織全体の設定を削除する](https://platform.claude.com/docs/ja/manage-claude/plugins-api#remove-an-installation-setting)と、プラグインはそのデフォルトに戻ります。

   <CodeGroup>
     ```bash cURL
     curl -X POST "https://api.anthropic.com/v1/organizations/plugins/plugin_01Hq3vX8kZcN2mB7pR4tY9wL/installation_settings/organization" \
       -H "content-type: application/json" \
       -H "x-api-key: $ANTHROPIC_API_KEY" \
       -H "anthropic-version: 2023-06-01" \
       -H "anthropic-beta: ce-plugins-2026-09-01" \
       -d '{"installation_preference": "required"}'
     ```

     ```bash CLI
     ant beta:organization:plugins:installation-settings set \
       --plugin-id plugin_01Hq3vX8kZcN2mB7pR4tY9wL \
       --target organization \
       --installation-preference required
     ```

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

     setting = client.beta.organization.plugins.installation_settings.set(
         "organization",
         plugin_id="plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
         installation_preference="required",
     )

     print(f"plugin_id: {setting.plugin_id}")
     print(f"installation_preference: {setting.installation_preference}")
     ```

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

     const setting = await client.beta.organization.plugins.installationSettings.set(
       "organization",
       {
         plugin_id: "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
         installation_preference: "required"
       }
     );

     console.log(`plugin_id: ${setting.plugin_id}`);
     console.log(`installation_preference: ${setting.installation_preference}`);
     ```

     ```csharp C#
     using Anthropic.Models.Beta.Organization.Plugins.InstallationSettings;

     AnthropicClient client = new();

     var setting = await client.Beta.Organization.Plugins.InstallationSettings.Set(
         "organization",
         new()
         {
             PluginID = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
             InstallationPreference = InstallationPreference.Required,
         }
     );

     Console.WriteLine($"plugin_id: {setting.PluginID}");
     Console.WriteLine($"installation_preference: {setting.InstallationPreference.Raw()}");
     ```

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

     setting, err := client.Beta.Organization.Plugins.InstallationSettings.Set(
     	context.Background(),
     	"organization",
     	anthropic.BetaOrganizationPluginInstallationSettingSetParams{
     		PluginID:               "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
     		InstallationPreference: anthropic.BetaOrganizationPluginInstallationSettingSetParamsInstallationPreferenceRequired,
     	},
     )
     if err != nil {
     	log.Fatal(err)
     }

     fmt.Printf("plugin_id: %s\n", setting.PluginID)
     fmt.Printf("installation_preference: %s\n", setting.InstallationPreference)
     ```

     ```java Java
     import com.anthropic.models.beta.organization.plugins.installationsettings.InstallationSettingSetParams;

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

         var params = InstallationSettingSetParams.builder()
             .pluginId("plugin_01Hq3vX8kZcN2mB7pR4tY9wL")
             .installationPreference(InstallationSettingSetParams.InstallationPreference.REQUIRED)
             .build();
         var setting = client.beta().organization().plugins().installationSettings()
             .set("organization", params);

         IO.println("plugin_id: " + setting.pluginId());
         IO.println("installation_preference: " + setting.installationPreference().asString());
     }
     ```

     ```php PHP
     use Anthropic\Beta\Organization\Plugins\InstallationSettings\InstallationSettingSetParams\InstallationPreference;
     // ...

     $client = new Client();

     $setting = $client->beta->organization->plugins->installationSettings->set(
         target: 'organization',
         pluginID: 'plugin_01Hq3vX8kZcN2mB7pR4tY9wL',
         installationPreference: InstallationPreference::REQUIRED,
     );

     echo "plugin_id: {$setting->pluginID}\n";
     echo "installation_preference: {$setting->installationPreference}\n";
     ```

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

     plugin_id = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
     setting = client.beta.organization.plugins.installation_settings.set(
       "organization",
       plugin_id: plugin_id,
       installation_preference: :required
     )

     puts "plugin_id: #{setting.plugin_id}"
     puts "installation_preference: #{setting.installation_preference}"
     ```
   </CodeGroup>

   次に、`DELETE /v1/organizations/plugins/{plugin_id}/installation_settings/{target}`（`{target}`はグループのID）でグループの設定を削除します。グループの設定は、そのメンバーに対して組織全体の値に追加されるのではなく置き換えるため、`available`のグループ設定が残っていると、それらのメンバーは`available`のままになります。

### セキュリティインベントリを同期させる

メンバーのセッションの外部に及ぶプラグインや、コンテンツスキャンに失敗したプラグインにフラグを立てる夜間ジョブを実行します。

1. `next_page`が`null`になるまで[`GET /v1/organizations/plugins?limit=100`](https://platform.claude.com/docs/ja/manage-claude/plugins-api#list-plugins)をページングします（[ページネーション](https://platform.claude.com/docs/ja/manage-claude/plugins-api#pagination)を参照）。実行のたびに、その一覧から各プラグインの`reach`と`content_scan`を読み取ってください。後から届いたスキャン判定では`updated_at`は変わりません。`updated_at`は通常、前回の実行以降に新しいコンテンツまたは新しい提供バージョンを持つプラグイン（新たにアーカイブをダウンロードする価値があるもの）を示します。待機中のバージョン（[バージョンと提供バージョン](https://platform.claude.com/docs/ja/manage-claude/plugins-api#versions-and-the-served-version)を参照）は、提供バージョンになったときに`updated_at`を変更します。保存されたときに変更するとは限りません。これに気付くには、`latest_version_id`を前回の実行時の値と比較してください。削除を検出できるのも完全な再一覧表示です。Gitの同期やアカウントの削除によって削除されたプラグインは、イベントなしで消えるためです。
2. `reach`が`remote`（MCPサーバーまたはCLIを宣言している）であるプラグイン、または`content_scan.assessment`が`fail`または`unknown`であるプラグインにフラグを立てます。これらのフィールドは提供バージョンを表します。提供されていない新しいバージョンも確認するには、`latest_version_id`が`served_version_id`と異なる場合にプラグインのバージョンを一覧表示してください（[プラグインのバージョンを一覧表示する](https://platform.claude.com/docs/ja/manage-claude/plugins-api#list-a-plugins-versions)を参照）。
3. フラグを立てた各プラグインについて、`GET /v1/organizations/plugins/{plugin_id}/versions/{served_version_id}/content`で提供バージョンのアーカイブをダウンロードしてレビューします（[バージョンのファイルをダウンロードする](https://platform.claude.com/docs/ja/manage-claude/plugins-api#download-a-versions-files)を参照）。ステップ2の条件を満たす提供されていないバージョンも、そのIDを指定してダウンロードしてください。
4. レビュー中にメンバーからプラグインを取り上げるには、元に戻せる（組織所有の）オプションと恒久的なオプションについて[プラグインを削除する](https://platform.claude.com/docs/ja/manage-claude/plugins-api#delete-a-plugin)を参照してください。

## プラグイン

プラグインオブジェクトは、組織のいずれかのマーケットプレイスまたはメンバーの個人用マーケットプレイスにあるプラグインを表します（[クイックスタート](https://platform.claude.com/docs/ja/manage-claude/plugins-api#quick-start)のレスポンスに完全な例が示されています）。その`display_name`、`description`、`manifest_version`、`content_scan`、`components`、`reach`は**提供**バージョンを表すため、1回の一覧呼び出しでメンバーに何が提供されているかがわかります。

| フィールド                                                                                   | 説明                                                                                                                                                                                                                                                                                                                                                        |
| --------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`                                                                                    | `plugin_`プレフィックス付き。                                                                                                                                                                                                                                                                                                                                       |
| `name`                                                                                  | マニフェストから取得。組織全体ではなく、マーケットプレイス内で一意です。組織所有のプラグインでは固定されています。メンバーがclaude.aiで自分のプラグインの名前を変更すると変わります。                                                                                                                                                                                                                                                           |
| `display_name`、`description`、`manifest_version`                                         | 提供バージョンのマニフェストの`displayName`、`description`、`version`。マニフェストで宣言されていない場合はそれぞれ`null`です。`manifest_version`は表示用に正規化されます。先頭の`v`または`V`が1つ削除されるため、マニフェストの`version`が`"v1.4.0"`の場合は`"1.4.0"`として返されます。また、`"latest"`のようにバージョン番号に見えない値の場合や、claude.aiが2026年8月にこのフィールドの記録を開始する前に作成されたプラグインバージョンの場合も`null`です。`version`を理由にアップロードが拒否されることはなく、`manifest_version`は一意ではありません。 |
| `served_version_id`、`latest_version_id`                                                 | `pluginver_`プレフィックス付き。メンバーに提供されるバージョンと、最新のバージョンです。[バージョンと提供バージョン](https://platform.claude.com/docs/ja/manage-claude/plugins-api#versions-and-the-served-version)を参照してください。                                                                                                                                                                                |
| `served_version_pinned`                                                                 | プラグインが固定されるまでは`false`（[バージョンと提供バージョン](https://platform.claude.com/docs/ja/manage-claude/plugins-api#versions-and-the-served-version)を参照）、それ以降は`true`です。                                                                                                                                                                                                   |
| `owner`                                                                                 | `{"type": "organization"}`、またはメンバーの個人用マーケットプレイスの場合は`{"type": "user", "user_id": "user_..."}`。                                                                                                                                                                                                                                                             |
| `marketplace_id`                                                                        | `marketplace_`プレフィックス付き。                                                                                                                                                                                                                                                                                                                                  |
| `created_by`                                                                            | プラグインを作成した人：claude.aiの人物の場合は`{"type": "user_actor", "user_id": "user_...", "email_address": "..."}`（`email_address`は`null`の場合があります）、APIキーの場合は`{"type": "api_actor", "api_key_id": "apikey_..."}`。他のアクタータイプが表示される場合もあります。Gitから同期されたプラグインなど、作成者が記録されていない場合は`null`です。                                                                                        |
| `organization_installation_preference`、`organization_installation_preference_inherited` | 組織所有：組織全体の値と、それがマーケットプレイスのデフォルトから取得されているかどうか（[インストール設定](https://platform.claude.com/docs/ja/manage-claude/plugins-api#installation-settings)を参照）。メンバー所有：どちらも`null`。                                                                                                                                                                                       |
| `content_scan`                                                                          | 提供バージョンのスキャン結果。`status`、`assessment`、`reason`を持つオブジェクトです（この表の後で説明します）。一度もスキャンされていない場合は`null`です。                                                                                                                                                                                                                                                           |
| `components`                                                                            | 提供バージョンのコンポーネント。それぞれ`{"type", "name", "description"}`で、`type`は`skill`、`mcp_server`、`command`、`agent`、`hook`、`cli`のいずれかであり、このタイプ順、次に名前順で一覧表示されます。MCPサーバーの場合、`name`はマニフェスト内のキーです。フックの場合は実行されるイベント、CLIの場合は実行可能ファイルの名前です。MCPサーバー、フック、CLIの`description`は常に`null`です。記録されていない場合は`null`です。                                                                        |
| `reach`                                                                                 | `contained`、`privileged`、または`remote`。[リーチ](https://platform.claude.com/docs/ja/manage-claude/plugins-api#reach)を参照してください。                                                                                                                                                                                                                                 |
| `updated_at`                                                                            | 提供バージョンが変わったとき、プラグインが固定されたとき、および通常は新しいバージョンが保存されたときに変わります。待機中のバージョン（[バージョンと提供バージョン](https://platform.claude.com/docs/ja/manage-claude/plugins-api#versions-and-the-served-version)を参照）は、提供バージョンになったときにこれを変更します。保存されたときに変更するとは限りません。インストール設定、共有、新しいスキャン結果では変わりません。                                                                                         |

`content_scan`オブジェクト：

| フィールド        | 説明                                                                                                                                                                                                                  |
| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `status`     | スキャンの実行中は`processing`、完了したときは`completed`、完了できなかったとき（または、まれにこのレスポンス用に結果を読み取れなかったとき。この場合は後の読み取りで報告される可能性があります）は`errored`です。スキャンが`processing`または`errored`のバージョンはメンバーに提供されません。コンテンツを新しいバージョンとして再度アップロードすると、新たにスキャンされます。 |
| `assessment` | `status`が`completed`の場合に設定されます：`pass`（何も見つからなかった）、`warn`（使用をブロックしない問題が見つかった）、`fail`（使用をブロックする問題が見つかった）、または`unknown`（判定なし）。それ以外の場合は`null`です。                                                                         |
| `reason`     | `warn`と`fail`の場合、次のリストから主な懸念事項が示されます。それ以外の場合は`null`であり、理由の記録が始まる前の古いスキャンでも`null`です。                                                                                                                                 |

<Accordion title="コンテンツスキャンのreasonの値">
  | `reason`                          | 意味                                                                      |
  | --------------------------------- | ----------------------------------------------------------------------- |
  | `covert-usage-telemetry`          | メンバーやその使用状況に関する情報を、本人に知らせずに外部のアドレスに送信するようClaudeに指示します。                  |
  | `undisclosed-data-destination`    | ファイル、メール、ドキュメント、その他のコンテンツを、メンバーに表示されず、メンバーが制御できない固定の外部宛先に送信します。         |
  | `remote-code-instruction-loader`  | プラグインのインストール後に変更される可能性のある外部コンテンツをダウンロードして実行する、またはその指示に従うようClaudeに指示します。 |
  | `credential-exposure`             | 有効な認証情報を含んでいるか、メンバーの環境から認証情報やトークンを収集します。                                |
  | `guardrail-tampering`             | すべての権限プロンプトを事前承認するなどして、メンバーの安全対策を弱めます。                                  |
  | `system-prompt-spoofing`          | Claudeのシステム指示を模倣するか、置き換えようとします。                                         |
  | `covert-record-tampering`         | メンバーが本来目にするはずの情報を、ひそかに変更、非表示、または削除します。                                  |
  | `covert-behavior-override`        | プラグインの目的を超えてClaudeの動作を変更し、その変更をメンバーから隠します。                              |
  | `hidden-code-execution`           | バンドルされたコードを実行しながら、その動作を明かさないようClaudeに指示します。                             |
  | `undisclosed-promotion-injection` | 開示されていない宣伝コンテンツをClaudeの出力に挿入します。                                        |
  | `hidden-identity-gate`            | 理由を示さずに、どのアカウントが実行するかに応じて動作を変更または停止します。                                 |
  | `destructive-persistence`         | メンバーのファイルを削除または破損したり、プラグインの削除後も残るプログラムをインストールしたりする可能性があります。             |
  | `unanalyzable-binary`             | コンパイル済みまたは読み取り不能なプログラムを含んでいるため、スキャンでその動作を検証できませんでした。                    |
  | `other`                           | このリストより新しいものを含む、その他の懸念事項。                                               |
</Accordion>

`plugin_`プレフィックスのない`plugin_id`は`400`を返します。プレフィックスはあるものの解決できない、別の組織に属している、またはスタンドアロンスキルを参照している`plugin_id`は`404`を返します。

### プラグインの一覧表示

`GET /v1/organizations/plugins`は、組織内のすべてのプラグインを`created_at`の降順で一覧表示します。対象は、組織のマーケットプレイスとメンバーの個人用マーケットプレイスの両方です。`read:plugins`スコープが必要です。

次のフィルターを使用できます。

* `owner_type`（`organization`または`user`）
* `owner_user_id`（`user_`プレフィックス付き。メンバーのプラグインを返します。メンバーが組織を離れた後も使用できます）
* `marketplace_id`
* `created_at[gte]`、`created_at[gt]`、`created_at[lte]`、`created_at[lt]`（RFC 3339タイムスタンプ）

フィルターはANDで結合されます。組織内で何にも一致しない`marketplace_id`または`owner_user_id`は、エラーではなく空のページを返します。レスポンスの形式は[クイックスタート](https://platform.claude.com/docs/ja/manage-claude/plugins-api#quick-start)に示したとおりです。

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/plugins?owner_type=organization&limit=20" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01"
  ```

  ```bash CLI
  ant beta:organization:plugins list --owner-type organization --limit 20
  ```

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

  plugins = client.beta.organization.plugins.list(owner_type="organization", limit=20)

  # 必要に応じて後続のページを自動的に取得します。
  for plugin in plugins:
      print(f"{plugin.id}: {plugin.name}")
  ```

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

  const plugins = await client.beta.organization.plugins.list({
    owner_type: "organization",
    limit: 20
  });

  for await (const plugin of plugins) {
    console.log(`${plugin.id}: ${plugin.name}`);
  }
  ```

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

  AnthropicClient client = new();

  var page = await client.Beta.Organization.Plugins.List(
      new() { OwnerType = OwnerType.Organization, Limit = 20 }
  );

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

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

  plugins := client.Beta.Organization.Plugins.ListAutoPaging(context.Background(), anthropic.BetaOrganizationPluginListParams{
  	OwnerType: anthropic.BetaOrganizationPluginListParamsOwnerTypeOrganization,
  	Limit:     anthropic.Int(20),
  })

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

  ```java Java
  import com.anthropic.models.beta.organization.plugins.PluginListParams;

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

      var params = PluginListParams.builder()
          .ownerType(PluginListParams.OwnerType.ORGANIZATION)
          .limit(20)
          .build();
      var plugins = client.beta().organization().plugins().list(params);

      for (var plugin : plugins.autoPager()) {
          IO.println(plugin.id() + ": " + plugin.name());
      }
  }
  ```

  ```php PHP
  use Anthropic\Beta\Organization\Plugins\PluginListParams\OwnerType;
  // ...

  $client = new Client();

  $plugins = $client->beta->organization->plugins->list(
      limit: 20,
      ownerType: OwnerType::ORGANIZATION,
  );

  // このページのみです。次のページを取得するには、page: $plugins->nextPage を指定して list() を再度呼び出します。
  foreach ($plugins->getItems() as $plugin) {
      echo "{$plugin->id}: {$plugin->name}\n";
  }
  ```

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

  page = client.beta.organization.plugins.list(owner_type: :organization, limit: 20)

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

### プラグインを作成する

`POST /v1/organizations/plugins`は、組織所有のプラグインとその最初のバージョンを1回の呼び出しで作成します。このバージョンが「served version」（提供バージョン）になります。本文は`multipart/form-data`です。`files[]`には、1つの`.zip`または`.plugin`アーカイブを指定するか、ファイルごとに1つのパートを指定します。後者の場合、各パートのファイル名はプラグイン内でのそのファイルのパスです（例: `.claude-plugin/plugin.json`）。オプションのフィールドは`marketplace_id`（組織所有の`manual`マーケットプレイス。デフォルトはライブラリマーケットプレイスで、初回使用時に作成されます）と`release_notes`（最大5,000文字。claude.aiのバージョン履歴に表示され、バージョンでも返されます）です。プラグインの`name`、`display_name`、`description`、`manifest_version`はアップロードされたマニフェストから取得され、アップロードは[アップロード要件](https://platform.claude.com/docs/ja/manage-claude/plugins-api#upload-requirements)を満たす必要があります。コンテンツスキャンが有効な場合、レスポンスの`content_scan.status`は`processing`となり、判定結果は非同期で届きます。プラグインを返します。`write:plugins`スコープが必要です。

アーカイブをアップロードします:

<CodeGroup>
  ```bash cURL
  curl -X POST "https://api.anthropic.com/v1/organizations/plugins" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01" \
    -F "files[]=@dist/sales-toolkit.zip" \
    -F "release_notes=First release"
  ```

  ```bash CLI
  ant beta:organization:plugins create \
    --file dist/sales-toolkit.zip \
    --release-notes "First release"
  ```

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

  with open("dist/sales-toolkit.zip", "rb") as archive:
      plugin = client.beta.organization.plugins.create(
          files=[archive],
          release_notes="First release",
      )

  print(f"id: {plugin.id}")
  print(f"served_version_id: {plugin.served_version_id}")
  ```

  ```typescript TypeScript
  import fs from "node:fs";

  const client = new Anthropic();

  const plugin = await client.beta.organization.plugins.create({
    files: [fs.createReadStream("dist/sales-toolkit.zip")],
    release_notes: "First release"
  });

  console.log(`id: ${plugin.id}`);
  console.log(`served_version_id: ${plugin.served_version_id}`);
  ```

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

  var plugin = await client.Beta.Organization.Plugins.Create(
      new()
      {
          Files = [File.OpenRead("dist/sales-toolkit.zip")],
          ReleaseNotes = "First release",
      }
  );

  Console.WriteLine($"id: {plugin.ID}");
  Console.WriteLine($"served_version_id: {plugin.ServedVersionID}");
  ```

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

  archive, err := os.Open("dist/sales-toolkit.zip")
  if err != nil {
  	log.Fatal(err)
  }
  defer archive.Close()

  plugin, err := client.Beta.Organization.Plugins.New(context.Background(), anthropic.BetaOrganizationPluginNewParams{
  	Files:        []io.Reader{archive},
  	ReleaseNotes: anthropic.String("First release"),
  })
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Printf("id: %s\n", plugin.ID)
  fmt.Printf("served_version_id: %s\n", plugin.ServedVersionID)
  ```

  ```java Java
  import com.anthropic.core.MultipartField;
  import com.anthropic.models.beta.organization.plugins.PluginCreateParams;

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

      // `files[]` パートを手動で構築し、アーカイブをファイル名付きで送信します。
      // アップロードにはファイル名が必要なためです。
      var archive = MultipartField.<List<InputStream>>builder()
          .value(List.of(Files.newInputStream(Path.of("dist/sales-toolkit.zip"))))
          .filename("sales-toolkit.zip")
          .contentType("application/octet-stream")
          .build();
      var params = PluginCreateParams.builder()
          .files(archive)
          .releaseNotes("First release")
          .build();
      var plugin = client.beta().organization().plugins().create(params);

      IO.println("id: " + plugin.id());
      IO.println("served_version_id: " + plugin.servedVersionId());
  }
  ```

  ```php PHP
  use Anthropic\Core\FileParam;

  $client = new Client();

  $plugin = $client->beta->organization->plugins->create(
      files: [
          FileParam::fromResource(fopen('dist/sales-toolkit.zip', 'r')),
      ],
      releaseNotes: 'First release',
  );

  echo "id: {$plugin->id}\n";
  echo "served_version_id: {$plugin->servedVersionID}\n";
  ```

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

  plugin = client.beta.organization.plugins.create(
    files: [Pathname("dist/sales-toolkit.zip")],
    release_notes: "First release"
  )

  puts "id: #{plugin.id}"
  puts "served_version_id: #{plugin.served_version_id}"
  ```
</CodeGroup>

```json
{
  "type": "plugin",
  "id": "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  "name": "sales-toolkit",
  "display_name": "Sales Toolkit",
  "description": "Account research and call prep for the sales team.",
  "served_version_id": "pluginver_01Km7tL4pR9xF5sU2zV3jP6q",
  "served_version_pinned": false,
  "latest_version_id": "pluginver_01Km7tL4pR9xF5sU2zV3jP6q",
  "manifest_version": "1.4.0",
  "owner": { "type": "organization" },
  "marketplace_id": "marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r",
  "created_by": { "type": "api_actor", "api_key_id": "apikey_01Nq9vN6rT2zH7uW4bX5mR8s" },
  "organization_installation_preference": "available",
  "organization_installation_preference_inherited": true,
  "content_scan": { "status": "processing", "assessment": null, "reason": null },
  "components": [
    {
      "type": "skill",
      "name": "account-research",
      "description": "Researches a customer account before a call."
    },
    { "type": "mcp_server", "name": "crm", "description": null }
  ],
  "reach": "remote",
  "created_at": "2026-09-01T17:04:11Z",
  "updated_at": "2026-09-01T17:04:11Z"
}
```

個々のファイルを名前付きのマーケットプレイスにアップロードします。各ファイルは、プラグイン内でのそのファイルのパスで添付してください（cURLの例では`;filename=`サフィックス、SDKの例ではファイル名引数）。ベース名だけで送信されたファイルは、マニフェストが見つからない原因になります。TypeScriptおよびJavaのSDKと`ant` CLIは、まだパスを指定してファイルを添付できないため、それらの例では代わりにプラグインを1つのアーカイブとしてマーケットプレイスにアップロードしています:

<CodeGroup>
  ```bash cURL
  curl -X POST "https://api.anthropic.com/v1/organizations/plugins" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01" \
    -F "files[]=@.claude-plugin/plugin.json;filename=.claude-plugin/plugin.json" \
    -F "files[]=@skills/account-research/SKILL.md;filename=skills/account-research/SKILL.md" \
    -F "marketplace_id=marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r"
  ```

  ```bash CLI
  # CLI は各ファイルをベース名のみで送信するため、
  # プラグインは 1 つのアーカイブとしてアップロードしてください。
  ant beta:organization:plugins create \
    --file dist/sales-toolkit.zip \
    --marketplace-id marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r
  ```

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

  # (filename, file) のタプルを使うと、プラグイン内での各ファイルのパスが保持されます。
  # ファイルオブジェクトを単体で渡すと、ベース名のみで送信されます。
  with (
      open(".claude-plugin/plugin.json", "rb") as manifest,
      open("skills/account-research/SKILL.md", "rb") as skill_md,
  ):
      plugin = client.beta.organization.plugins.create(
          files=[
              (".claude-plugin/plugin.json", manifest),
              ("skills/account-research/SKILL.md", skill_md),
          ],
          marketplace_id="marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r",
      )

  print(f"id: {plugin.id}")
  print(f"served_version_id: {plugin.served_version_id}")
  ```

  ```typescript TypeScript
  import fs from "node:fs";

  const client = new Anthropic();

  // TypeScript SDK は各ファイルをベース名で送信するため、
  // プラグインは 1 つのアーカイブとしてアップロードしてください。
  const plugin = await client.beta.organization.plugins.create({
    files: [fs.createReadStream("dist/sales-toolkit.zip")],
    marketplace_id: "marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r"
  });

  console.log(`id: ${plugin.id}`);
  console.log(`served_version_id: ${plugin.served_version_id}`);
  ```

  ```csharp C#
  using Anthropic.Core;

  AnthropicClient client = new();

  // FileName はプラグイン内での各ファイルのパスを保持します。これがない場合、FileStream は
  // ベース名のみで送信されます。
  var plugin = await client.Beta.Organization.Plugins.Create(
      new()
      {
          Files =
          [
              new BinaryContent
              {
                  Stream = File.OpenRead(".claude-plugin/plugin.json"),
                  FileName = ".claude-plugin/plugin.json",
              },
              new BinaryContent
              {
                  Stream = File.OpenRead("skills/account-research/SKILL.md"),
                  FileName = "skills/account-research/SKILL.md",
              },
          ],
          MarketplaceID = "marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r",
      }
  );

  Console.WriteLine($"id: {plugin.ID}");
  Console.WriteLine($"served_version_id: {plugin.ServedVersionID}");
  ```

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

  manifest, err := os.Open(".claude-plugin/plugin.json")
  if err != nil {
  	log.Fatal(err)
  }
  defer manifest.Close()

  skillMd, err := os.Open("skills/account-research/SKILL.md")
  if err != nil {
  	log.Fatal(err)
  }
  defer skillMd.Close()

  // anthropic.File は、プラグイン内での各ファイルのパスをパートの filename として保持します。
  // 素の *os.File ではベース名で送信されるため、マニフェストが見つからなくなります。
  plugin, err := client.Beta.Organization.Plugins.New(context.Background(), anthropic.BetaOrganizationPluginNewParams{
  	Files: []io.Reader{
  		anthropic.File(manifest, ".claude-plugin/plugin.json", "application/json"),
  		anthropic.File(skillMd, "skills/account-research/SKILL.md", "text/markdown"),
  	},
  	MarketplaceID: anthropic.String("marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r"),
  })
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Printf("id: %s\n", plugin.ID)
  fmt.Printf("served_version_id: %s\n", plugin.ServedVersionID)
  ```

  ```java Java
  import com.anthropic.core.MultipartField;
  import com.anthropic.models.beta.organization.plugins.PluginCreateParams;

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

      // PluginCreateParams の `files` セッターはリスト全体に対してファイル名を1つしか受け取らないため、
      // 代わりにプラグインを1つのアーカイブとしてアップロードします。つまり、手動で構築した単一の
      // パートにアーカイブのファイル名を持たせます（アップロードにはファイル名が必要です）。
      var archive = MultipartField.<List<InputStream>>builder()
          .value(List.of(Files.newInputStream(Path.of("dist/sales-toolkit.zip"))))
          .filename("sales-toolkit.zip")
          .contentType("application/octet-stream")
          .build();
      var params = PluginCreateParams.builder()
          .files(archive)
          .marketplaceId("marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r")
          .build();
      var plugin = client.beta().organization().plugins().create(params);

      IO.println("id: " + plugin.id());
      IO.println("served_version_id: " + plugin.servedVersionId());
  }
  ```

  ```php PHP
  use Anthropic\Core\FileParam;

  $client = new Client();

  $plugin = $client->beta->organization->plugins->create(
      files: [
          FileParam::fromResource(
              fopen('.claude-plugin/plugin.json', 'r'),
              filename: '.claude-plugin/plugin.json',
          ),
          FileParam::fromResource(
              fopen('skills/account-research/SKILL.md', 'r'),
              filename: 'skills/account-research/SKILL.md',
          ),
      ],
      marketplaceID: 'marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r',
  );

  echo "id: {$plugin->id}\n";
  echo "served_version_id: {$plugin->servedVersionID}\n";
  ```

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

  # filename: を指定した FilePart は、プラグイン内での各ファイルのパスを保持します。
  # 素の Pathname ではベース名のみで送信されます。
  plugin = client.beta.organization.plugins.create(
    files: [
      Anthropic::FilePart.new(
        Pathname(".claude-plugin/plugin.json"),
        filename: ".claude-plugin/plugin.json"
      ),
      Anthropic::FilePart.new(
        Pathname("skills/account-research/SKILL.md"),
        filename: "skills/account-research/SKILL.md"
      )
    ],
    marketplace_id: "marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r"
  )

  puts "id: #{plugin.id}"
  puts "served_version_id: #{plugin.served_version_id}"
  ```
</CodeGroup>

[アップロード要件](https://platform.claude.com/docs/ja/manage-claude/plugins-api#upload-requirements)に違反するアップロードに対する`400`（リクエスト本文が200 MBを超える場合は`413`）と共通のレスポンス（`marketplace_id`がメンバーの個人用マーケットプレイスである場合の`403`。[エラーレスポンス](https://platform.claude.com/docs/ja/manage-claude/plugins-api#error-responses)を参照）に加えて、作成は次の理由で失敗することがあります:

| ステータス                      | 原因                                                           | 対処方法                                                                                                                                                          |
| -------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 404                        | `marketplace_id`が組織のマーケットプレイスではありません。                        | [マーケットプレイスを一覧表示する](https://platform.claude.com/docs/ja/manage-claude/plugins-api#list-marketplaces)からIDを取得してください。                                             |
| 400                        | マーケットプレイスがGitから同期されているか、すでに500個のプラグインとスキルを保持しています。           | `manual`マーケットプレイスにアップロードするか、代わりにリポジトリを変更してください。                                                                                                               |
| 409 `plugin_name_taken`    | その名前はそのマーケットプレイスですでに使用されています。                                | `details.plugin_id`で続行する（そのプラグインにバージョンをアップロードする）か、マニフェストの`name`を変更してください。                                                                                     |
| 409 `skill_name_taken`     | プラグインがライブラリマーケットプレイスに追加されようとしており、そのスキルの1つが組織スキルと同じ名前を持っています。 | スキルの名前を変更するか、claude.aiで組織スキルを削除してください。                                                                                                                        |
| 409（`error_code`なし）        | 同じマーケットプレイスへの同じ名前の別のアップロードがまだ進行中です。                          | しばらくしてから再試行してください。                                                                                                                                            |
| 503 `registration_pending` | プラグインは作成されましたが、その登録が完了しませんでした。                               | 再送信しないでください。同じファイルを`details.plugin_id`のバージョンとしてアップロードしてください（[アップロードの再試行](https://platform.claude.com/docs/ja/manage-claude/plugins-api#retrying-uploads)を参照）。 |

### プラグインを取得する

`GET /v1/organizations/plugins/{plugin_id}`は1つのプラグインを返します。`read:plugins`スコープが必要です。

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/plugins/plugin_01Hq3vX8kZcN2mB7pR4tY9wL" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01"
  ```

  ```bash CLI
  ant beta:organization:plugins retrieve \
    --plugin-id plugin_01Hq3vX8kZcN2mB7pR4tY9wL
  ```

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

  plugin = client.beta.organization.plugins.retrieve("plugin_01Hq3vX8kZcN2mB7pR4tY9wL")

  print(f"id: {plugin.id}")
  print(f"name: {plugin.name}")
  ```

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

  const plugin = await client.beta.organization.plugins.retrieve(
    "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  );

  console.log(`id: ${plugin.id}`);
  console.log(`name: ${plugin.name}`);
  ```

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

  var plugin = await client.Beta.Organization.Plugins.Retrieve("plugin_01Hq3vX8kZcN2mB7pR4tY9wL");

  Console.WriteLine($"id: {plugin.ID}");
  Console.WriteLine($"name: {plugin.Name}");
  ```

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

  plugin, err := client.Beta.Organization.Plugins.Get(
  	context.Background(),
  	"plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  	anthropic.BetaOrganizationPluginGetParams{},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Printf("id: %s\n", plugin.ID)
  fmt.Printf("name: %s\n", plugin.Name)
  ```

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

  var plugin = client.beta().organization().plugins()
      .retrieve("plugin_01Hq3vX8kZcN2mB7pR4tY9wL");

  IO.println("id: " + plugin.id());
  IO.println("name: " + plugin.name());
  ```

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

  $plugin = $client->beta->organization->plugins->retrieve(
      pluginID: 'plugin_01Hq3vX8kZcN2mB7pR4tY9wL',
  );

  echo "id: {$plugin->id}\n";
  echo "name: {$plugin->name}\n";
  ```

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

  plugin_id = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  plugin = client.beta.organization.plugins.retrieve(plugin_id)

  puts "id: #{plugin.id}"
  puts "name: #{plugin.name}"
  ```
</CodeGroup>

### 提供バージョンを変更する

`POST /v1/organizations/plugins/{plugin_id}`は、組織所有のプラグインのどのバージョンをメンバーに提供するかを変更します。ロールバックするには以前のバージョンを、提供されずに保存されたビルドを昇格させるには新しいバージョンを渡します。これによりプラグインは固定（pin）され、固定されたプラグインは現在、ここでもclaude.aiでも固定を解除できません（[バージョンと提供バージョン](https://platform.claude.com/docs/ja/manage-claude/plugins-api#versions-and-the-served-version)を参照）。更新可能なフィールドは`served_version_id`のみで、必須です。変更はレスポンスが返る前にメンバーに反映され、バージョンは作成されません。コンテンツスキャンが有効な場合、そのバージョンはメンバーに提供可能なものである必要があります（[コンテンツスキャン](https://platform.claude.com/docs/ja/manage-claude/plugins-api#content-scanning)を参照）。固定されたプラグインですでに提供されているバージョンを渡しても何も変わりません。固定されていないプラグインでそれを渡すと、そのバージョンで固定されるため、以降のアップロードは自動的に提供されなくなります。固定により待機も終了します。コンテンツスキャンを待っていたバージョンは保存されたままとなり、誰かが選択した場合にのみ提供されます。プラグインを返します。`write:plugins`スコープが必要です。

<CodeGroup>
  ```bash cURL
  curl -X POST "https://api.anthropic.com/v1/organizations/plugins/plugin_01Hq3vX8kZcN2mB7pR4tY9wL" \
    -H "content-type: application/json" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01" \
    -d '{"served_version_id": "pluginver_01Jd5sK2nQ8wE4rT6yU1iO3p"}'
  ```

  ```bash CLI
  ant beta:organization:plugins update \
    --plugin-id plugin_01Hq3vX8kZcN2mB7pR4tY9wL \
    --served-version-id pluginver_01Jd5sK2nQ8wE4rT6yU1iO3p
  ```

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

  plugin = client.beta.organization.plugins.update(
      "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
      served_version_id="pluginver_01Jd5sK2nQ8wE4rT6yU1iO3p",
  )

  print(f"id: {plugin.id}")
  print(f"served_version_id: {plugin.served_version_id}")
  ```

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

  const plugin = await client.beta.organization.plugins.update(
    "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
    { served_version_id: "pluginver_01Jd5sK2nQ8wE4rT6yU1iO3p" }
  );

  console.log(`id: ${plugin.id}`);
  console.log(`served_version_id: ${plugin.served_version_id}`);
  ```

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

  var plugin = await client.Beta.Organization.Plugins.Update(
      "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
      new() { ServedVersionID = "pluginver_01Jd5sK2nQ8wE4rT6yU1iO3p" }
  );

  Console.WriteLine($"id: {plugin.ID}");
  Console.WriteLine($"served_version_id: {plugin.ServedVersionID}");
  ```

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

  plugin, err := client.Beta.Organization.Plugins.Update(
  	context.Background(),
  	"plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  	anthropic.BetaOrganizationPluginUpdateParams{
  		ServedVersionID: "pluginver_01Jd5sK2nQ8wE4rT6yU1iO3p",
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Printf("id: %s\n", plugin.ID)
  fmt.Printf("served_version_id: %s\n", plugin.ServedVersionID)
  ```

  ```java Java
  import com.anthropic.models.beta.organization.plugins.PluginUpdateParams;

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

      var params = PluginUpdateParams.builder()
          .servedVersionId("pluginver_01Jd5sK2nQ8wE4rT6yU1iO3p")
          .build();
      var plugin = client.beta().organization().plugins()
          .update("plugin_01Hq3vX8kZcN2mB7pR4tY9wL", params);

      IO.println("id: " + plugin.id());
      IO.println("served_version_id: " + plugin.servedVersionId());
  }
  ```

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

  $plugin = $client->beta->organization->plugins->update(
      pluginID: 'plugin_01Hq3vX8kZcN2mB7pR4tY9wL',
      servedVersionID: 'pluginver_01Jd5sK2nQ8wE4rT6yU1iO3p',
  );

  echo "id: {$plugin->id}\n";
  echo "served_version_id: {$plugin->servedVersionID}\n";
  ```

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

  plugin_id = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  plugin = client.beta.organization.plugins.update(
    plugin_id,
    served_version_id: "pluginver_01Jd5sK2nQ8wE4rT6yU1iO3p"
  )

  puts "id: #{plugin.id}"
  puts "served_version_id: #{plugin.served_version_id}"
  ```
</CodeGroup>

```json
{
  "type": "plugin",
  "id": "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  "name": "sales-toolkit",
  "display_name": "Sales Toolkit",
  "description": "Account research and call prep for the sales team.",
  "served_version_id": "pluginver_01Jd5sK2nQ8wE4rT6yU1iO3p",
  "served_version_pinned": true,
  "latest_version_id": "pluginver_01Jd5sK2nQ8wE4rT6yU1iO3p",
  "manifest_version": "1.5.0",
  "owner": { "type": "organization" },
  "marketplace_id": "marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r",
  "created_by": { "type": "api_actor", "api_key_id": "apikey_01Nq9vN6rT2zH7uW4bX5mR8s" },
  "organization_installation_preference": "available",
  "organization_installation_preference_inherited": true,
  "content_scan": { "status": "completed", "assessment": "pass", "reason": null },
  "components": [
    {
      "type": "skill",
      "name": "account-research",
      "description": "Researches a customer account before a call."
    },
    { "type": "mcp_server", "name": "crm", "description": null },
    {
      "type": "command",
      "name": "call-prep",
      "description": "Builds a one-page brief for an upcoming call."
    }
  ],
  "reach": "remote",
  "created_at": "2026-09-01T17:04:11Z",
  "updated_at": "2026-09-16T10:02:45Z"
}
```

共通レスポンス（メンバー所有のプラグインに対する`403`、およびメンバーに提供できないバージョンに対する`409 scan_pending`または`400 scan_failed`。[エラーレスポンス](https://platform.claude.com/docs/ja/manage-claude/plugins-api#error-responses)を参照）に加えて、リクエストは次の理由で失敗することがあります：

| ステータス                  | 原因                                                                                                           | 対処方法                                                                                                                      |
| ---------------------- | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------- |
| 400                    | 本文に`served_version_id`が含まれていない、`null`に設定されている、または他のフィールドが含まれている。あるいは値に`pluginver_`プレフィックスがない、または`latest`である。 | 正確に`{"served_version_id": "pluginver_…"}`を送信してください。                                                                       |
| 404                    | `served_version_id`がこのプラグインのバージョンではありません。                                                                    | [プラグインのバージョンを一覧表示する](https://platform.claude.com/docs/ja/manage-claude/plugins-api#list-a-plugins-versions)からIDを取得してください。 |
| 409（`error_code`なし）    | このプラグインへのアップロード、または別の提供バージョンの変更がまだ進行中です。                                                                     | しばらくしてから再試行してください。                                                                                                        |
| 409 `skill_name_taken` | プラグインがライブラリマーケットプレイスにあり、そのバージョンに、現在組織スキルが使用している名前のスキルがあります。                                                  | 別のバージョンを選択するか、いずれかのスキルの名前を変更してください。                                                                                       |

### プラグインを削除する

`DELETE /v1/organizations/plugins/{plugin_id}`は、claude.aiでの管理者による削除と同様に、プラグインとそれが保持するすべてのバージョンを完全に削除します。`manual`マーケットプレイス内の任意のプラグインに対して機能し、メンバーのプラグインも、そのメンバーがすでに組織を離れている場合でも対象になります。削除が返ると、プラグイン、そのバージョン、およびそれらのファイルはすべての読み取りから消え、メンバーには提供されなくなります。組織所有のプラグインのインストール設定はプラグインとともに削除されます。メンバー所有のプラグインの共有は取り消され、所有者からも見えなくなります。Gitから同期されたマーケットプレイス内のプラグインは`400`を返します。リポジトリから削除するか、claude.aiでマーケットプレイスを削除してください。`write:plugins`スコープが必要です。

削除は元に戻せず、バージョン単位の削除はありません。代わりに組織所有のプラグインを元に戻せる形で提供停止するには、その組織全体のインストール設定を`not_available`に設定し（マーケットプレイスのデフォルトを継承していたプラグインには独自の設定が付与され、後で[その組織全体の設定を削除する](https://platform.claude.com/docs/ja/manage-claude/plugins-api#remove-an-installation-setting)とプラグインはデフォルトに戻ります）、`GET /v1/organizations/plugins/{plugin_id}/installation_settings`が一覧表示するすべてのグループ設定を削除（または`not_available`に設定）してください。グループの設定は、そのメンバーに対して組織全体の値を上書きするためです。これらの書き込みは並列ではなく、1つずつ順番に送信してください（[インストール設定を設定する](https://platform.claude.com/docs/ja/manage-claude/plugins-api#set-an-installation-setting)を参照）。メンバー所有のプラグインは、このAPIでは削除する以外に提供停止する方法はなく、それもマーケットプレイスが`manual`の場合に限られます。

<CodeGroup>
  ```bash cURL
  curl -X DELETE "https://api.anthropic.com/v1/organizations/plugins/plugin_01Hq3vX8kZcN2mB7pR4tY9wL" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01"
  ```

  ```bash CLI
  ant beta:organization:plugins delete --plugin-id plugin_01Hq3vX8kZcN2mB7pR4tY9wL
  ```

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

  deleted_plugin = client.beta.organization.plugins.delete(
      "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  )

  print(f"id: {deleted_plugin.id}")
  ```

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

  const deletedPlugin = await client.beta.organization.plugins.delete(
    "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  );

  console.log(`id: ${deletedPlugin.id}`);
  ```

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

  var deletedPlugin = await client.Beta.Organization.Plugins.Delete(
      "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  );

  Console.WriteLine($"id: {deletedPlugin.ID}");
  ```

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

  deletedPlugin, err := client.Beta.Organization.Plugins.Delete(
  	context.Background(),
  	"plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  	anthropic.BetaOrganizationPluginDeleteParams{},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Printf("id: %s\n", deletedPlugin.ID)
  ```

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

  var deletedPlugin = client.beta().organization().plugins()
      .delete("plugin_01Hq3vX8kZcN2mB7pR4tY9wL");

  IO.println("id: " + deletedPlugin.id());
  ```

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

  $deletedPlugin = $client->beta->organization->plugins->delete(
      pluginID: 'plugin_01Hq3vX8kZcN2mB7pR4tY9wL',
  );

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

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

  plugin_id = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  deleted_plugin = client.beta.organization.plugins.delete(plugin_id)

  puts "id: #{deleted_plugin.id}"
  ```
</CodeGroup>

```json
{ "type": "plugin_deleted", "id": "plugin_01Hq3vX8kZcN2mB7pR4tY9wL" }
```

## プラグインのバージョン

プラグインのバージョンは、1回のアップロードによるプラグインのファイルの不変のスナップショットです（完全なオブジェクトは[バージョンを作成する](https://platform.claude.com/docs/ja/manage-claude/plugins-api#create-a-version)のレスポンスで確認できます）。そのフィールドは、このバージョンについてのプラグインの提供バージョンのフィールド（`display_name`、`description`、`manifest_version`、`content_scan`、`components`、`reach`）を反映しており、さらに`release_notes`（アップロード時に指定されたもの。claude.aiのバージョン履歴に表示されます）と`created_by`（アップロードした人）が含まれます。

`pluginver_`プレフィックスのない`{version}`は`400`を返します（記載がある場合のリテラル`latest`を除く）。プレフィックスはあるものの、そのプラグインのバージョンを特定しないものは`404`を返します。

### プラグインのバージョンを一覧表示する

`GET /v1/organizations/plugins/{plugin_id}/versions`は、プラグインのバージョンを`created_at`の降順で一覧表示します。最初の項目は`latest_version_id`が示すバージョンです。`limit`は1から1,000です。`read:plugins`スコープが必要です。

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/plugins/plugin_01Hq3vX8kZcN2mB7pR4tY9wL/versions?limit=50" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01"
  ```

  ```bash CLI
  ant beta:organization:plugins:versions list \
    --plugin-id plugin_01Hq3vX8kZcN2mB7pR4tY9wL \
    --limit 50
  ```

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

  versions = client.beta.organization.plugins.versions.list(
      "plugin_01Hq3vX8kZcN2mB7pR4tY9wL", limit=50
  )

  # 必要に応じて後続のページを自動的に取得します。
  for version in versions:
      print(f"{version.id}: {version.manifest_version}")
  ```

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

  const versions = await client.beta.organization.plugins.versions.list(
    "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
    { limit: 50 }
  );

  for await (const version of versions) {
    console.log(`${version.id}: ${version.manifest_version}`);
  }
  ```

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

  var page = await client.Beta.Organization.Plugins.Versions.List(
      "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
      new() { Limit = 50 }
  );

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

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

  versions := client.Beta.Organization.Plugins.Versions.ListAutoPaging(
  	context.Background(),
  	"plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  	anthropic.BetaOrganizationPluginVersionListParams{
  		Limit: anthropic.Int(50),
  	},
  )

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

  ```java Java
  import com.anthropic.models.beta.organization.plugins.versions.VersionListParams;

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

      var params = VersionListParams.builder()
          .limit(50)
          .build();
      var versions = client.beta().organization().plugins().versions()
          .list("plugin_01Hq3vX8kZcN2mB7pR4tY9wL", params);

      for (var version : versions.autoPager()) {
          IO.println(version.id() + ": " + version.manifestVersion().orElse(null));
      }
  }
  ```

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

  $versions = $client->beta->organization->plugins->versions->list(
      pluginID: 'plugin_01Hq3vX8kZcN2mB7pR4tY9wL',
      limit: 50,
  );

  // このページのみです。次のページを取得するには、page: $versions->nextPage を指定して list() を再度呼び出します。
  foreach ($versions->getItems() as $version) {
      echo "{$version->id}: {$version->manifestVersion}\n";
  }
  ```

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

  plugin_id = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  page = client.beta.organization.plugins.versions.list(plugin_id, limit: 50)

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

### バージョンを作成する

`POST /v1/organizations/plugins/{plugin_id}/versions`は、`manual`マーケットプレイス内の組織所有のプラグインにバージョンを追加します。本文は`multipart/form-data`で、[プラグインを作成する](https://platform.claude.com/docs/ja/manage-claude/plugins-api#create-a-plugin)と同じ`files[]`および`release_notes`フィールド、[アップロード要件](https://platform.claude.com/docs/ja/manage-claude/plugins-api#upload-requirements)、ならびにファイル、マニフェスト、アーカイブ、サイズのエラーを持ちます。アップロードされた名前（マニフェストの`name`）はプラグインの`name`と一致する必要があります。プラグインが固定されていない場合、新しいバージョンは通常、保存されるとすぐに提供されます。固定されている場合、バージョンは保存されますが、提供バージョンをそれに変更するまで提供されません。確認するには、レスポンスの`id`とプラグインの`served_version_id`を比較してください。バージョンを返します。`write:plugins`スコープが必要です。

<CodeGroup>
  ```bash cURL
  curl -X POST "https://api.anthropic.com/v1/organizations/plugins/plugin_01Hq3vX8kZcN2mB7pR4tY9wL/versions" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01" \
    -F "files[]=@dist/sales-toolkit.zip" \
    -F "release_notes=Adds the call-prep command."
  ```

  ```bash CLI
  ant beta:organization:plugins:versions create \
    --plugin-id plugin_01Hq3vX8kZcN2mB7pR4tY9wL \
    --file dist/sales-toolkit.zip \
    --release-notes "Adds the call-prep command."
  ```

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

  with open("dist/sales-toolkit.zip", "rb") as archive:
      version = client.beta.organization.plugins.versions.create(
          "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
          files=[archive],
          release_notes="Adds the call-prep command.",
      )

  print(f"id: {version.id}")
  print(f"manifest_version: {version.manifest_version}")
  ```

  ```typescript TypeScript
  import fs from "node:fs";

  const client = new Anthropic();

  const version = await client.beta.organization.plugins.versions.create(
    "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
    {
      files: [fs.createReadStream("dist/sales-toolkit.zip")],
      release_notes: "Adds the call-prep command."
    }
  );

  console.log(`id: ${version.id}`);
  console.log(`manifest_version: ${version.manifest_version}`);
  ```

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

  var version = await client.Beta.Organization.Plugins.Versions.Create(
      "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
      new()
      {
          Files = [File.OpenRead("dist/sales-toolkit.zip")],
          ReleaseNotes = "Adds the call-prep command.",
      }
  );

  Console.WriteLine($"id: {version.ID}");
  Console.WriteLine($"manifest_version: {version.ManifestVersion}");
  ```

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

  archive, err := os.Open("dist/sales-toolkit.zip")
  if err != nil {
  	log.Fatal(err)
  }
  defer archive.Close()

  version, err := client.Beta.Organization.Plugins.Versions.New(
  	context.Background(),
  	"plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  	anthropic.BetaOrganizationPluginVersionNewParams{
  		Files:        []io.Reader{archive},
  		ReleaseNotes: anthropic.String("Adds the call-prep command."),
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Printf("id: %s\n", version.ID)
  fmt.Printf("manifest_version: %s\n", version.ManifestVersion)
  ```

  ```java Java
  import com.anthropic.core.MultipartField;
  import com.anthropic.models.beta.organization.plugins.versions.VersionCreateParams;

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

      // アーカイブがファイル名付きで送信されるよう、`files[]` パートを手動で構築します。
      // これはアップロードに必須です。
      var archive = MultipartField.<List<InputStream>>builder()
          .value(List.of(Files.newInputStream(Path.of("dist/sales-toolkit.zip"))))
          .filename("sales-toolkit.zip")
          .contentType("application/octet-stream")
          .build();
      var params = VersionCreateParams.builder()
          .files(archive)
          .releaseNotes("Adds the call-prep command.")
          .build();
      var version = client.beta().organization().plugins().versions()
          .create("plugin_01Hq3vX8kZcN2mB7pR4tY9wL", params);

      IO.println("id: " + version.id());
      IO.println("manifest_version: " + version.manifestVersion().orElse(null));
  }
  ```

  ```php PHP
  use Anthropic\Core\FileParam;

  $client = new Client();

  $version = $client->beta->organization->plugins->versions->create(
      pluginID: 'plugin_01Hq3vX8kZcN2mB7pR4tY9wL',
      files: [
          FileParam::fromResource(fopen('dist/sales-toolkit.zip', 'r')),
      ],
      releaseNotes: 'Adds the call-prep command.',
  );

  echo "id: {$version->id}\n";
  echo "manifest_version: {$version->manifestVersion}\n";
  ```

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

  plugin_id = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  version = client.beta.organization.plugins.versions.create(
    plugin_id,
    files: [Pathname("dist/sales-toolkit.zip")],
    release_notes: "Adds the call-prep command."
  )

  puts "id: #{version.id}"
  puts "manifest_version: #{version.manifest_version}"
  ```
</CodeGroup>

```json
{
  "type": "plugin_version",
  "id": "pluginver_01Jd5sK2nQ8wE4rT6yU1iO3p",
  "plugin_id": "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  "display_name": "Sales Toolkit",
  "description": "Account research and call prep for the sales team.",
  "manifest_version": "1.5.0",
  "release_notes": "Adds the call-prep command.",
  "created_by": { "type": "api_actor", "api_key_id": "apikey_01Nq9vN6rT2zH7uW4bX5mR8s" },
  "content_scan": { "status": "processing", "assessment": null, "reason": null },
  "components": [
    {
      "type": "skill",
      "name": "account-research",
      "description": "Researches a customer account before a call."
    },
    { "type": "mcp_server", "name": "crm", "description": null },
    {
      "type": "command",
      "name": "call-prep",
      "description": "Builds a one-page brief for an upcoming call."
    }
  ],
  "reach": "remote",
  "created_at": "2026-09-15T14:12:30Z"
}
```

[アップロード要件](https://platform.claude.com/docs/ja/manage-claude/plugins-api#upload-requirements)に違反するアップロードに対する`400`（リクエスト本文が200 MBを超える場合は`413`）と共通レスポンス（メンバー所有のプラグインに対する`403`。[エラーレスポンス](https://platform.claude.com/docs/ja/manage-claude/plugins-api#error-responses)を参照）に加えて、リクエストは次の理由で失敗することがあります：

| ステータス                      | 原因                                                        | 対処方法                                                                                                                                                       |
| -------------------------- | --------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 400                        | プラグインがGitから同期されたマーケットプレイスにあるか、アップロードされた名前がプラグインの名前と異なります。 | 代わりにリポジトリを変更するか、マニフェストの`name`を修正してください。                                                                                                                    |
| 409（`error_code`なし）        | このプラグインへの別のアップロード、または提供バージョンの変更がまだ進行中です。                  | しばらくしてから再試行してください。                                                                                                                                         |
| 409 `skill_name_taken`     | プラグインがライブラリマーケットプレイスにあり、そのバージョンが組織スキルの名前を持つスキルを追加しています。   | スキルの名前を変更するか、claude.aiで組織スキルを削除してください。                                                                                                                     |
| 503 `registration_pending` | バージョンは保存されましたが、その登録が完了しませんでした。                            | レスポンスに`x-should-retry: true`が含まれている場合は、同じリクエストを再送信してください（[アップロードの再試行](https://platform.claude.com/docs/ja/manage-claude/plugins-api#retrying-uploads)を参照）。 |

### バージョンを取得する

`GET /v1/organizations/plugins/{plugin_id}/versions/{version}`は1つのバージョンを返します。`{version}`はバージョンID、またはリクエスト時点で`latest_version_id`が示すバージョンを表す`latest`です。`read:plugins`スコープが必要です。

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/plugins/plugin_01Hq3vX8kZcN2mB7pR4tY9wL/versions/latest" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01"
  ```

  ```bash CLI
  ant beta:organization:plugins:versions retrieve \
    --plugin-id plugin_01Hq3vX8kZcN2mB7pR4tY9wL \
    --version latest
  ```

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

  version = client.beta.organization.plugins.versions.retrieve(
      "latest",
      plugin_id="plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  )

  print(f"id: {version.id}")
  print(f"manifest_version: {version.manifest_version}")
  ```

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

  const version = await client.beta.organization.plugins.versions.retrieve("latest", {
    plugin_id: "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  });

  console.log(`id: ${version.id}`);
  console.log(`manifest_version: ${version.manifest_version}`);
  ```

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

  var version = await client.Beta.Organization.Plugins.Versions.Retrieve(
      "latest",
      new() { PluginID = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL" }
  );

  Console.WriteLine($"id: {version.ID}");
  Console.WriteLine($"manifest_version: {version.ManifestVersion}");
  ```

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

  version, err := client.Beta.Organization.Plugins.Versions.Get(
  	context.Background(),
  	"latest",
  	anthropic.BetaOrganizationPluginVersionGetParams{
  		PluginID: "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Printf("id: %s\n", version.ID)
  fmt.Printf("manifest_version: %s\n", version.ManifestVersion)
  ```

  ```java Java
  import com.anthropic.models.beta.organization.plugins.versions.VersionRetrieveParams;

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

      var params = VersionRetrieveParams.builder()
          .pluginId("plugin_01Hq3vX8kZcN2mB7pR4tY9wL")
          .build();
      var version = client.beta().organization().plugins().versions()
          .retrieve("latest", params);

      IO.println("id: " + version.id());
      IO.println("manifest_version: " + version.manifestVersion().orElse(null));
  }
  ```

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

  $version = $client->beta->organization->plugins->versions->retrieve(
      version: 'latest',
      pluginID: 'plugin_01Hq3vX8kZcN2mB7pR4tY9wL',
  );

  echo "id: {$version->id}\n";
  echo "manifest_version: {$version->manifestVersion}\n";
  ```

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

  plugin_id = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  version = client.beta.organization.plugins.versions.retrieve("latest", plugin_id: plugin_id)

  puts "id: #{version.id}"
  puts "manifest_version: #{version.manifest_version}"
  ```
</CodeGroup>

### バージョンのファイルをダウンロードする

`GET /v1/organizations/plugins/{plugin_id}/versions/{version}/content`は、バージョンのファイルを保存されている`.zip`アーカイブとしてダウンロードします（`Content-Type: application/zip`）。アーカイブはコンテンツスキャンの結果にかかわらず返されるため、メンバーへの提供が保留されているバージョンも検査できます。アーカイブは保存されたとおりに提供されるため、`manual`マーケットプレイス内の組織所有のプラグインであれば、現在のアップロード要件を満たしている限り、変更せずに新しいバージョンとして再アップロードできます。`{version}`は`latest`ではなくバージョンIDである必要があります。先にプラグインの`served_version_id`または`latest_version_id`を読み取るか、`GET /v1/organizations/plugins/{plugin_id}/versions/latest`で`latest`を解決してください。`Content-Disposition`のファイル名はプラグインの名前から派生したもので、一意ではありません。保存するファイルにはプラグインIDとバージョンIDで名前を付けてください。`read:plugins`スコープが必要です。

**メンバー所有**のプラグインのアーカイブをダウンロードすると、Compliance APIのActivity Feedに`claude_plugin_archive_accessed`イベントが記録されます。このイベントは、キー（`api_actor`として）、プラグインとそのマーケットプレイス、バージョン、および所有メンバーをIDで識別し、名前は含みません。組織所有のプラグインのアーカイブをダウンロードしても何も記録されません。

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/plugins/plugin_01Hq3vX8kZcN2mB7pR4tY9wL/versions/pluginver_01Km7tL4pR9xF5sU2zV3jP6q/content" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01" \
    -o plugin_01Hq3vX8kZcN2mB7pR4tY9wL_pluginver_01Km7tL4pR9xF5sU2zV3jP6q.zip
  ```

  ```bash CLI
  ant beta:organization:plugins:versions download \
    --plugin-id plugin_01Hq3vX8kZcN2mB7pR4tY9wL \
    --version pluginver_01Km7tL4pR9xF5sU2zV3jP6q \
    --output plugin_01Hq3vX8kZcN2mB7pR4tY9wL_pluginver_01Km7tL4pR9xF5sU2zV3jP6q.zip
  ```

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

  plugin_id = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  version_id = "pluginver_01Km7tL4pR9xF5sU2zV3jP6q"

  with client.beta.organization.plugins.versions.with_streaming_response.download(
      version_id,
      plugin_id=plugin_id,
  ) as response:
      response.stream_to_file(f"{plugin_id}_{version_id}.zip")
  ```

  ```typescript TypeScript
  import { writeFile } from "node:fs/promises";

  const client = new Anthropic();

  const pluginId = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL";
  const versionId = "pluginver_01Km7tL4pR9xF5sU2zV3jP6q";

  const response = await client.beta.organization.plugins.versions.download(versionId, {
    plugin_id: pluginId
  });
  if (!response.body) {
    throw new Error("The download returned no body");
  }

  await writeFile(`${pluginId}_${versionId}.zip`, response.body);
  ```

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

  using var response = await client.Beta.Organization.Plugins.Versions.Download(
      "pluginver_01Km7tL4pR9xF5sU2zV3jP6q",
      new() { PluginID = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL" }
  );

  using var content = await response.ReadAsStream();
  using var file = File.Create(
      "plugin_01Hq3vX8kZcN2mB7pR4tY9wL_pluginver_01Km7tL4pR9xF5sU2zV3jP6q.zip"
  );
  await content.CopyToAsync(file);
  ```

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

  response, err := client.Beta.Organization.Plugins.Versions.Download(
  	context.Background(),
  	"pluginver_01Km7tL4pR9xF5sU2zV3jP6q",
  	anthropic.BetaOrganizationPluginVersionDownloadParams{
  		PluginID: "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }
  defer response.Body.Close()

  out, err := os.Create("plugin_01Hq3vX8kZcN2mB7pR4tY9wL_pluginver_01Km7tL4pR9xF5sU2zV3jP6q.zip")
  if err != nil {
  	log.Fatal(err)
  }
  defer out.Close()

  if _, err := io.Copy(out, response.Body); err != nil {
  	log.Fatal(err)
  }
  ```

  ```java Java
  import com.anthropic.core.http.HttpResponse;
  import com.anthropic.models.beta.organization.plugins.versions.VersionDownloadParams;

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

      var params = VersionDownloadParams.builder()
          .pluginId("plugin_01Hq3vX8kZcN2mB7pR4tY9wL")
          .build();
      try (HttpResponse response = client.beta().organization().plugins().versions()
              .download("pluginver_01Km7tL4pR9xF5sU2zV3jP6q", params)) {
          Files.copy(
              response.body(),
              Path.of("plugin_01Hq3vX8kZcN2mB7pR4tY9wL_pluginver_01Km7tL4pR9xF5sU2zV3jP6q.zip"),
              StandardCopyOption.REPLACE_EXISTING);
      }
  }
  ```

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

  // download() はアーカイブ全体を1つの文字列として返してしまうため、生の
  // レスポンスを取得し、その本文をチャンク単位でディスクにコピーします。
  $response = $client->beta->organization->plugins->versions->raw->download(
      version: 'pluginver_01Km7tL4pR9xF5sU2zV3jP6q',
      params: ['pluginID' => 'plugin_01Hq3vX8kZcN2mB7pR4tY9wL'],
  );

  $archive = $response->getBody();
  $file = fopen('plugin_01Hq3vX8kZcN2mB7pR4tY9wL_pluginver_01Km7tL4pR9xF5sU2zV3jP6q.zip', 'wb');
  while (!$archive->eof()) {
      fwrite($file, $archive->read(1024 * 1024));
  }
  fclose($file);
  ```

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

  plugin_id = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  version_id = "pluginver_01Km7tL4pR9xF5sU2zV3jP6q"
  archive = client.beta.organization.plugins.versions.download(version_id, plugin_id: plugin_id)

  # SDK は、アーカイブをメモリに読み込み済みの StringIO として返します。
  File.binwrite("#{plugin_id}_#{version_id}.zip", archive.string)
  ```
</CodeGroup>

## プラグインのインストール設定

これらのエンドポイントは組織所有のプラグインに適用されます。メンバー所有のプラグインに対しては`404`を返します。メンバー所有のプラグインには代わりに[共有](https://platform.claude.com/docs/ja/manage-claude/plugins-api#plugin-shares)があります。`{target}`は、プラグインの組織全体の設定を表すリテラル`organization`、またはそのグループの設定を表すグループの`rbac_group_` IDです。それ以外の値は`400`を返します。グループIDは`GET /v1/organizations/rbac_groups`から取得します（スコープ`read:rbac_groups`。[ユーザー管理](https://platform.claude.com/docs/ja/manage-claude/user-management#groups)を参照）。設定には独自の`id`はありません。設定は`(plugin_id, target)`で指定され、設定自体には実行者は記録されません（実行者はその`plugin_installation_preference_updated`アクティビティイベントに記録されます）。

### プラグインのインストール設定を一覧表示する

`GET /v1/organizations/plugins/{plugin_id}/installation_settings`は、組織所有のプラグインが保持する設定を`created_at`の降順で一覧表示します。対象は、プラグイン独自の組織全体の設定（マーケットプレイスのデフォルトを継承している間は存在しません）と各グループの設定です。`target_type`（`organization`または`rbac_group`）でフィルタリングできます。`read:plugins`スコープが必要です。

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/plugins/plugin_01Hq3vX8kZcN2mB7pR4tY9wL/installation_settings" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01"
  ```

  ```bash CLI
  ant beta:organization:plugins:installation-settings list \
    --plugin-id plugin_01Hq3vX8kZcN2mB7pR4tY9wL
  ```

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

  settings = client.beta.organization.plugins.installation_settings.list(
      "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  )

  # 必要に応じて後続のページを自動的に取得します。
  for setting in settings:
      print(f"{setting.plugin_id}: {setting.installation_preference}")
  ```

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

  const settings = await client.beta.organization.plugins.installationSettings.list(
    "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  );

  for await (const setting of settings) {
    console.log(`${setting.plugin_id}: ${setting.installation_preference}`);
  }
  ```

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

  var page = await client.Beta.Organization.Plugins.InstallationSettings.List(
      "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  );

  await foreach (var setting in page.Paginate())
  {
      Console.WriteLine($"{setting.PluginID}: {setting.InstallationPreference.Raw()}");
  }
  ```

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

  settings := client.Beta.Organization.Plugins.InstallationSettings.ListAutoPaging(
  	context.Background(),
  	"plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  	anthropic.BetaOrganizationPluginInstallationSettingListParams{},
  )

  for settings.Next() {
  	setting := settings.Current()
  	fmt.Printf("%s: %s\n", setting.PluginID, setting.InstallationPreference)
  }
  if err := settings.Err(); err != nil {
  	log.Fatal(err)
  }
  ```

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

  var settings = client.beta().organization().plugins().installationSettings()
      .list("plugin_01Hq3vX8kZcN2mB7pR4tY9wL");

  for (var setting : settings.autoPager()) {
      IO.println(setting.pluginId() + ": " + setting.installationPreference().asString());
  }
  ```

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

  $settings = $client->beta->organization->plugins->installationSettings->list(
      pluginID: 'plugin_01Hq3vX8kZcN2mB7pR4tY9wL',
  );

  // このページのみです。次のページを取得するには、page: $settings->nextPage を指定して list() を再度呼び出します。
  foreach ($settings->getItems() as $setting) {
      echo "{$setting->pluginID}: {$setting->installationPreference}\n";
  }
  ```

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

  plugin_id = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  page = client.beta.organization.plugins.installation_settings.list(plugin_id)

  page.auto_paging_each do |setting|
    puts "#{setting.plugin_id}: #{setting.installation_preference}"
  end
  ```
</CodeGroup>

### インストール設定を設定する

`POST /v1/organizations/plugins/{plugin_id}/installation_settings/{target}`は、組織所有のプラグインについて1つのターゲットのインストール設定を設定し、新規作成するか、すでに保持している値を変更します。本文の唯一のフィールドは`installation_preference`（`required`、`auto_install`、`available`、または`not_available`）で、必須です。ターゲットがすでに保持している値を設定しても何も変わりません。`organization`ターゲットを設定すると、値がデフォルトと同じであっても、プラグインはマーケットプレイスのデフォルトの継承を停止し（`organization_installation_preference_inherited`が`false`になります）、以降のマーケットプレイスのデフォルトの変更に従わなくなります。プラグインをマーケットプレイスのデフォルトに戻すには、[組織全体の設定を削除](https://platform.claude.com/docs/ja/manage-claude/plugins-api#remove-an-installation-setting)してください。グループ設定は影響を受けません。グループターゲットは、組織が`GET /v1/organizations/rbac_groups`で参照できるグループである必要があり、そうでない場合リクエストは`404`を返します。この変更はプラグインの`updated_at`を変更せず、Activity Feedに記録されます。設定を返します。`write:plugins`スコープが必要です。

プラグインのインストール設定の書き込みは1つずつ送信してください。同じプラグインに対する複数の書き込みが同時に届いた場合、サーバーはそれらを1つずつ順番に処理し、一部を適用せずに`503`で応答することがあります。その`503`には`x-should-retry: true`が含まれており、書き込みは安全に繰り返すことができます。1〜2秒待ってから再送信してください。

<CodeGroup>
  ```bash cURL
  curl -X POST "https://api.anthropic.com/v1/organizations/plugins/plugin_01Hq3vX8kZcN2mB7pR4tY9wL/installation_settings/rbac_group_01F3xQqQzXyWvUtSrQpOnMlK" \
    -H "content-type: application/json" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01" \
    -d '{"installation_preference": "available"}'
  ```

  ```bash CLI
  ant beta:organization:plugins:installation-settings set \
    --plugin-id plugin_01Hq3vX8kZcN2mB7pR4tY9wL \
    --target rbac_group_01F3xQqQzXyWvUtSrQpOnMlK \
    --installation-preference available
  ```

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

  setting = client.beta.organization.plugins.installation_settings.set(
      "rbac_group_01F3xQqQzXyWvUtSrQpOnMlK",
      plugin_id="plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
      installation_preference="available",
  )

  print(f"plugin_id: {setting.plugin_id}")
  print(f"installation_preference: {setting.installation_preference}")
  ```

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

  const setting = await client.beta.organization.plugins.installationSettings.set(
    "rbac_group_01F3xQqQzXyWvUtSrQpOnMlK",
    {
      plugin_id: "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
      installation_preference: "available"
    }
  );

  console.log(`plugin_id: ${setting.plugin_id}`);
  console.log(`installation_preference: ${setting.installation_preference}`);
  ```

  ```csharp C#
  using Anthropic.Models.Beta.Organization.Plugins.InstallationSettings;

  AnthropicClient client = new();

  var setting = await client.Beta.Organization.Plugins.InstallationSettings.Set(
      "rbac_group_01F3xQqQzXyWvUtSrQpOnMlK",
      new()
      {
          PluginID = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
          InstallationPreference = InstallationPreference.Available,
      }
  );

  Console.WriteLine($"plugin_id: {setting.PluginID}");
  Console.WriteLine($"installation_preference: {setting.InstallationPreference.Raw()}");
  ```

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

  setting, err := client.Beta.Organization.Plugins.InstallationSettings.Set(
  	context.Background(),
  	"rbac_group_01F3xQqQzXyWvUtSrQpOnMlK",
  	anthropic.BetaOrganizationPluginInstallationSettingSetParams{
  		PluginID:               "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  		InstallationPreference: anthropic.BetaOrganizationPluginInstallationSettingSetParamsInstallationPreferenceAvailable,
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Printf("plugin_id: %s\n", setting.PluginID)
  fmt.Printf("installation_preference: %s\n", setting.InstallationPreference)
  ```

  ```java Java
  import com.anthropic.models.beta.organization.plugins.installationsettings.InstallationSettingSetParams;

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

      var params = InstallationSettingSetParams.builder()
          .pluginId("plugin_01Hq3vX8kZcN2mB7pR4tY9wL")
          .installationPreference(InstallationSettingSetParams.InstallationPreference.AVAILABLE)
          .build();
      var setting = client.beta().organization().plugins().installationSettings()
          .set("rbac_group_01F3xQqQzXyWvUtSrQpOnMlK", params);

      IO.println("plugin_id: " + setting.pluginId());
      IO.println("installation_preference: " + setting.installationPreference().asString());
  }
  ```

  ```php PHP
  use Anthropic\Beta\Organization\Plugins\InstallationSettings\InstallationSettingSetParams\InstallationPreference;
  // ...

  $client = new Client();

  $setting = $client->beta->organization->plugins->installationSettings->set(
      target: 'rbac_group_01F3xQqQzXyWvUtSrQpOnMlK',
      pluginID: 'plugin_01Hq3vX8kZcN2mB7pR4tY9wL',
      installationPreference: InstallationPreference::AVAILABLE,
  );

  echo "plugin_id: {$setting->pluginID}\n";
  echo "installation_preference: {$setting->installationPreference}\n";
  ```

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

  plugin_id = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  group_id = "rbac_group_01F3xQqQzXyWvUtSrQpOnMlK"
  setting = client.beta.organization.plugins.installation_settings.set(
    group_id,
    plugin_id: plugin_id,
    installation_preference: :available
  )

  puts "plugin_id: #{setting.plugin_id}"
  puts "installation_preference: #{setting.installation_preference}"
  ```
</CodeGroup>

```json
{
  "type": "plugin_installation_setting",
  "plugin_id": "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  "target": { "type": "rbac_group", "rbac_group_id": "rbac_group_01F3xQqQzXyWvUtSrQpOnMlK" },
  "installation_preference": "available",
  "created_at": "2026-09-02T10:00:00Z",
  "updated_at": "2026-09-02T10:00:00Z"
}
```

### インストール設定を削除する

`DELETE /v1/organizations/plugins/{plugin_id}/installation_settings/{target}`は、組織所有のプラグインについて1つのターゲットのインストール設定を削除します。`{target}`が`organization`の場合、プラグイン独自の組織全体の設定を削除します。その後、プラグインは再びマーケットプレイスのデフォルトを継承し（`organization_installation_preference_inherited`が`true`になります）、以降のそのデフォルトの変更に従います。グループ設定は影響を受けません。グループの`rbac_group_` IDの場合、そのグループの設定を削除します。グループのメンバーは組織全体の値、または所属する他のグループの設定にフォールバックします。独自の設定を保持していないターゲットは`404`を返します。これには、すでにマーケットプレイスのデフォルトを継承しているプラグインの`organization`ターゲットも含まれます。この変更はプラグインの`updated_at`を変更せず、Activity Feedに記録されます。レスポンスには`id`の代わりに複合キーが含まれます。`organization`ターゲットの場合、その`target`は`{"type": "organization"}`です。`write:plugins`スコープが必要です。

<CodeGroup>
  ```bash cURL
  curl -X DELETE "https://api.anthropic.com/v1/organizations/plugins/plugin_01Hq3vX8kZcN2mB7pR4tY9wL/installation_settings/rbac_group_01F3xQqQzXyWvUtSrQpOnMlK" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01"
  ```

  ```bash CLI
  ant beta:organization:plugins:installation-settings remove \
    --plugin-id plugin_01Hq3vX8kZcN2mB7pR4tY9wL \
    --target rbac_group_01F3xQqQzXyWvUtSrQpOnMlK
  ```

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

  removed_setting = client.beta.organization.plugins.installation_settings.remove(
      "rbac_group_01F3xQqQzXyWvUtSrQpOnMlK",
      plugin_id="plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  )

  print(f"plugin_id: {removed_setting.plugin_id}")
  ```

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

  const removedSetting = await client.beta.organization.plugins.installationSettings.remove(
    "rbac_group_01F3xQqQzXyWvUtSrQpOnMlK",
    { plugin_id: "plugin_01Hq3vX8kZcN2mB7pR4tY9wL" }
  );

  console.log(`plugin_id: ${removedSetting.plugin_id}`);
  ```

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

  var removedSetting = await client.Beta.Organization.Plugins.InstallationSettings.Remove(
      "rbac_group_01F3xQqQzXyWvUtSrQpOnMlK",
      new() { PluginID = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL" }
  );

  Console.WriteLine($"plugin_id: {removedSetting.PluginID}");
  ```

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

  removedSetting, err := client.Beta.Organization.Plugins.InstallationSettings.Remove(
  	context.Background(),
  	"rbac_group_01F3xQqQzXyWvUtSrQpOnMlK",
  	anthropic.BetaOrganizationPluginInstallationSettingRemoveParams{
  		PluginID: "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Printf("plugin_id: %s\n", removedSetting.PluginID)
  ```

  ```java Java
  import com.anthropic.models.beta.organization.plugins.installationsettings.InstallationSettingRemoveParams;

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

      var params = InstallationSettingRemoveParams.builder()
          .pluginId("plugin_01Hq3vX8kZcN2mB7pR4tY9wL")
          .build();
      var removedSetting = client.beta().organization().plugins().installationSettings()
          .remove("rbac_group_01F3xQqQzXyWvUtSrQpOnMlK", params);

      IO.println("plugin_id: " + removedSetting.pluginId());
  }
  ```

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

  $removedSetting = $client->beta->organization->plugins->installationSettings->remove(
      target: 'rbac_group_01F3xQqQzXyWvUtSrQpOnMlK',
      pluginID: 'plugin_01Hq3vX8kZcN2mB7pR4tY9wL',
  );

  echo "plugin_id: {$removedSetting->pluginID}\n";
  ```

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

  plugin_id = "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
  group_id = "rbac_group_01F3xQqQzXyWvUtSrQpOnMlK"
  removed_setting = client.beta.organization.plugins.installation_settings.remove(
    group_id,
    plugin_id: plugin_id
  )

  puts "plugin_id: #{removed_setting.plugin_id}"
  ```
</CodeGroup>

```json
{
  "type": "plugin_installation_setting_deleted",
  "plugin_id": "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  "target": { "type": "rbac_group", "rbac_group_id": "rbac_group_01F3xQqQzXyWvUtSrQpOnMlK" }
}
```

## プラグインの共有

共有はメンバー所有のプラグインにのみ存在し、このAPIでは読み取り専用です（[共有](https://platform.claude.com/docs/ja/manage-claude/plugins-api#shares)を参照）。

### プラグインの共有を一覧表示する

`GET /v1/organizations/plugins/{plugin_id}/shares`は、メンバー所有のプラグインの所有者がそのプラグインを誰と共有しているかを`granted_at`の降順で一覧表示します。共有先は、すべてのメンバー（`organization`）、グループ（`rbac_group`）、または指定されたメンバー（`organization_member`）です。`target_type`でフィルタリングできます。所有者が共有していないプラグインは空のリストを返し、組織所有のプラグインは`404`を返します。共有はこのAPIでは読み取り専用であり、一覧表示された共有は、その種類の共有がclaude.aiで組織に対して有効になっている間のみアクセスを付与します（[共有](https://platform.claude.com/docs/ja/manage-claude/plugins-api#shares)を参照）。`granted_at`は共有が付与された時刻です。所有者が後でclaude.aiで共有を変更した場合は、その変更の時刻になります。`read:plugins`スコープが必要です。

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/plugins/plugin_01Mr2wP7sU3aJ8vX5cY6nS9t/shares" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01"
  ```

  ```bash CLI
  ant beta:organization:plugins:shares list \
    --plugin-id plugin_01Mr2wP7sU3aJ8vX5cY6nS9t
  ```

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

  shares = client.beta.organization.plugins.shares.list("plugin_01Mr2wP7sU3aJ8vX5cY6nS9t")

  # 必要に応じて後続のページを自動的に取得します。
  for share in shares:
      print(f"plugin_id: {share.plugin_id}")
  ```

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

  const shares = await client.beta.organization.plugins.shares.list(
    "plugin_01Mr2wP7sU3aJ8vX5cY6nS9t"
  );

  for await (const share of shares) {
    console.log(`plugin_id: ${share.plugin_id}`);
  }
  ```

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

  var page = await client.Beta.Organization.Plugins.Shares.List("plugin_01Mr2wP7sU3aJ8vX5cY6nS9t");

  await foreach (var share in page.Paginate())
  {
      Console.WriteLine($"plugin_id: {share.PluginID}");
  }
  ```

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

  shares := client.Beta.Organization.Plugins.Shares.ListAutoPaging(
  	context.Background(),
  	"plugin_01Mr2wP7sU3aJ8vX5cY6nS9t",
  	anthropic.BetaOrganizationPluginShareListParams{},
  )

  for shares.Next() {
  	share := shares.Current()
  	fmt.Printf("plugin_id: %s\n", share.PluginID)
  }
  if err := shares.Err(); err != nil {
  	log.Fatal(err)
  }
  ```

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

  var shares = client.beta().organization().plugins().shares()
      .list("plugin_01Mr2wP7sU3aJ8vX5cY6nS9t");

  for (var share : shares.autoPager()) {
      IO.println("plugin_id: " + share.pluginId());
  }
  ```

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

  $shares = $client->beta->organization->plugins->shares->list(
      pluginID: 'plugin_01Mr2wP7sU3aJ8vX5cY6nS9t',
  );

  // このページのみです。次のページを取得するには、page: $shares->nextPage を指定して list() を再度呼び出します。
  foreach ($shares->getItems() as $share) {
      echo "plugin_id: {$share->pluginID}\n";
  }
  ```

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

  plugin_id = "plugin_01Mr2wP7sU3aJ8vX5cY6nS9t"
  page = client.beta.organization.plugins.shares.list(plugin_id)

  page.auto_paging_each do |share|
    puts "plugin_id: #{share.plugin_id}"
  end
  ```
</CodeGroup>

```json
{
  "data": [
    {
      "type": "plugin_share",
      "plugin_id": "plugin_01Mr2wP7sU3aJ8vX5cY6nS9t",
      "target": { "type": "organization_member", "user_id": "user_01WCz9BvGLdMYRUMmcAxMWvW" },
      "granted_at": "2026-08-20T15:12:00Z"
    }
  ],
  "next_page": null
}
```

## プラグインマーケットプレイス

このAPIは[マーケットプレイス](https://platform.claude.com/docs/ja/manage-claude/plugins-api#marketplaces)を読み取り、組織のマーケットプレイスのデフォルトのインストール設定を設定します。マーケットプレイス自体の作成、リポジトリへの接続、削除はclaude.aiで行います。

```json
{
  "type": "plugin_marketplace",
  "id": "marketplace_01VbNcMxZaSdFgHjKlQwErTy",
  "name": "engineering-tools",
  "owner": { "type": "organization" },
  "source": "github",
  "sync_status": "success",
  "last_sync_ended_at": "2026-09-10T22:15:03Z",
  "last_sync_read_sha": "9fceb02d0ae598e95dc970b74767f19372d61af8",
  "default_installation_preference": "available",
  "created_at": "2026-06-12T08:45:00Z"
}
```

| フィールド                             | 説明                                                                                                                                                                     |
| --------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`                            | マーケットプレイスの名前。存続期間中は固定です。                                                                                                                                               |
| `owner`                           | プラグインのものと同じ形式です。                                                                                                                                                       |
| `source`                          | `manual`、`github`、`gitlab`、または`public_git`。[マーケットプレイス](https://platform.claude.com/docs/ja/manage-claude/plugins-api#marketplaces)を参照してください。                           |
| `sync_status`                     | 最新の同期の結果: `success`、`in_progress`、`failed_content`、`failed_transient`、`failed_auth`、または`failed_limits`。同期が初めて試行されるまでは`null`で、ソースが`manual`のマーケットプレイスでは同期が試行されることはありません。 |
| `last_sync_ended_at`              | 結果にかかわらず、最新の同期の試行が終了した時刻。まだ同期されていない接続済みリポジトリの場合は、マーケットプレイスが作成された時刻です。同期されないマーケットプレイスでは`null`です。                                                                        |
| `last_sync_read_sha`              | 最後の同期がリポジトリから読み取ったコミット。提供バージョンの取得元のコミットとは限りません。同期されないマーケットプレイスでは`null`です。                                                                                              |
| `default_installation_preference` | 組織のマーケットプレイス: 独自の設定を持たない、そのマーケットプレイス内のすべてのプラグインに対する組織全体の値（一度も設定されていない場合は`not_available`）。個人用マーケットプレイス: `null`。                                                         |

`marketplace_`プレフィックスのない`marketplace_id`は`400`を返します。プレフィックスはあるものの解決できないもの、または別の組織に属するものは`404`を返します。

### マーケットプレイスを一覧表示する

`GET /v1/organizations/plugin_marketplaces`は、組織のマーケットプレイスとメンバーの個人用マーケットプレイスを`created_at`の降順で一覧表示します。マーケットプレイスがまだプラグインを保持していない段階で、そのIDを見つけてプラグインリストをフィルタリングしたり、そこにアップロードしたりするために使用します。ライブラリマーケットプレイスは、claude.aiまたはこのAPIを通じて、そこに初めて何かが作成された時点で表示されます。`owner_type`（`organization`または`user`）と`source`でフィルタリングできます。`limit`は1から1,000です。`read:plugins`スコープが必要です。

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/plugin_marketplaces?owner_type=organization" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01"
  ```

  ```bash CLI
  ant beta:organization:plugin-marketplaces list --owner-type organization
  ```

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

  marketplaces = client.beta.organization.plugin_marketplaces.list(
      owner_type="organization"
  )

  # 必要に応じて後続のページを自動的に取得します。
  for marketplace in marketplaces:
      print(f"{marketplace.id}: {marketplace.name}")
  ```

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

  const marketplaces = await client.beta.organization.pluginMarketplaces.list({
    owner_type: "organization"
  });

  for await (const marketplace of marketplaces) {
    console.log(`${marketplace.id}: ${marketplace.name}`);
  }
  ```

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

  AnthropicClient client = new();

  var page = await client.Beta.Organization.PluginMarketplaces.List(
      new() { OwnerType = OwnerType.Organization }
  );

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

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

  marketplaces := client.Beta.Organization.PluginMarketplaces.ListAutoPaging(
  	context.Background(),
  	anthropic.BetaOrganizationPluginMarketplaceListParams{
  		OwnerType: anthropic.BetaOrganizationPluginMarketplaceListParamsOwnerTypeOrganization,
  	},
  )

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

  ```java Java
  import com.anthropic.models.beta.organization.pluginmarketplaces.PluginMarketplaceListParams;

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

      var params = PluginMarketplaceListParams.builder()
          .ownerType(PluginMarketplaceListParams.OwnerType.ORGANIZATION)
          .build();
      var marketplaces = client.beta().organization().pluginMarketplaces().list(params);

      for (var marketplace : marketplaces.autoPager()) {
          IO.println(marketplace.id() + ": " + marketplace.name());
      }
  }
  ```

  ```php PHP
  use Anthropic\Beta\Organization\PluginMarketplaces\PluginMarketplaceListParams\OwnerType;
  // ...

  $client = new Client();

  $marketplaces = $client->beta->organization->pluginMarketplaces->list(
      ownerType: OwnerType::ORGANIZATION,
  );

  // このページのみです。次のページを取得するには、page: $marketplaces->nextPage を指定して list() を再度呼び出します。
  foreach ($marketplaces->getItems() as $marketplace) {
      echo "{$marketplace->id}: {$marketplace->name}\n";
  }
  ```

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

  page = client.beta.organization.plugin_marketplaces.list(owner_type: :organization)

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

### マーケットプレイスを取得する

`GET /v1/organizations/plugin_marketplaces/{marketplace_id}`は1つのマーケットプレイスを返します。`read:plugins`スコープが必要です。

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/plugin_marketplaces/marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01"
  ```

  ```bash CLI
  ant beta:organization:plugin-marketplaces retrieve \
    --marketplace-id marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r
  ```

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

  marketplace = client.beta.organization.plugin_marketplaces.retrieve(
      "marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r"
  )

  print(f"id: {marketplace.id}")
  print(f"name: {marketplace.name}")
  ```

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

  const marketplace = await client.beta.organization.pluginMarketplaces.retrieve(
    "marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r"
  );

  console.log(`id: ${marketplace.id}`);
  console.log(`name: ${marketplace.name}`);
  ```

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

  var marketplace = await client.Beta.Organization.PluginMarketplaces.Retrieve(
      "marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r"
  );

  Console.WriteLine($"id: {marketplace.ID}");
  Console.WriteLine($"name: {marketplace.Name}");
  ```

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

  marketplace, err := client.Beta.Organization.PluginMarketplaces.Get(
  	context.Background(),
  	"marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r",
  	anthropic.BetaOrganizationPluginMarketplaceGetParams{},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Printf("id: %s\n", marketplace.ID)
  fmt.Printf("name: %s\n", marketplace.Name)
  ```

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

  var marketplace = client.beta().organization().pluginMarketplaces()
      .retrieve("marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r");

  IO.println("id: " + marketplace.id());
  IO.println("name: " + marketplace.name());
  ```

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

  $marketplace = $client->beta->organization->pluginMarketplaces->retrieve(
      marketplaceID: 'marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r',
  );

  echo "id: {$marketplace->id}\n";
  echo "name: {$marketplace->name}\n";
  ```

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

  marketplace_id = "marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r"
  marketplace = client.beta.organization.plugin_marketplaces.retrieve(marketplace_id)

  puts "id: #{marketplace.id}"
  puts "name: #{marketplace.name}"
  ```
</CodeGroup>

### マーケットプレイスのデフォルトのインストール設定を設定する

`POST /v1/organizations/plugin_marketplaces/{marketplace_id}`は、組織所有のマーケットプレイスのデフォルトのインストール設定を設定します。独自の組織全体の設定を持たない、マーケットプレイス内のすべてのプラグインは、後から追加されたプラグインも含め、このデフォルトを`organization_installation_preference`として報告します。これは`manual`マーケットプレイスと同期されたマーケットプレイスの両方で機能します。メンバーの個人用マーケットプレイスは`403`を返します。更新可能なフィールドは`default_installation_preference`のみで、これは必須です。`null`に戻すことはできません。claude.aiと同様に、マーケットプレイスが一度デフォルトを持つと、それを保持し続けます。変更は1つの`marketplace_updated`イベントとして記録され、プラグインごとのイベントは記録されず、どのプラグインの`updated_at`も変更されません。すでに設定されている値を設定しても何も変わりませんが、1つ例外があります。デフォルトが一度も設定されていないマーケットプレイスは`not_available`を報告しますが設定を保持していないため、最初の書き込み（`not_available`であっても）は変更として扱われます。マーケットプレイスを返します。`write:plugins`スコープが必要です。

<CodeGroup>
  ```bash cURL
  curl -X POST "https://api.anthropic.com/v1/organizations/plugin_marketplaces/marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r" \
    -H "content-type: application/json" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01" \
    -d '{"default_installation_preference": "available"}'
  ```

  ```bash CLI
  ant beta:organization:plugin-marketplaces update \
    --marketplace-id marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r \
    --default-installation-preference available
  ```

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

  marketplace = client.beta.organization.plugin_marketplaces.update(
      "marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r",
      default_installation_preference="available",
  )

  print(f"id: {marketplace.id}")
  print(f"default_installation_preference: {marketplace.default_installation_preference}")
  ```

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

  const marketplace = await client.beta.organization.pluginMarketplaces.update(
    "marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r",
    { default_installation_preference: "available" }
  );

  console.log(`id: ${marketplace.id}`);
  console.log(`default_installation_preference: ${marketplace.default_installation_preference}`);
  ```

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

  AnthropicClient client = new();

  var marketplace = await client.Beta.Organization.PluginMarketplaces.Update(
      "marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r",
      new() { DefaultInstallationPreference = DefaultInstallationPreference.Available }
  );

  Console.WriteLine($"id: {marketplace.ID}");
  Console.WriteLine(
      $"default_installation_preference: {marketplace.DefaultInstallationPreference?.Raw()}"
  );
  ```

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

  marketplace, err := client.Beta.Organization.PluginMarketplaces.Update(
  	context.Background(),
  	"marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r",
  	anthropic.BetaOrganizationPluginMarketplaceUpdateParams{
  		DefaultInstallationPreference: anthropic.BetaOrganizationPluginMarketplaceUpdateParamsDefaultInstallationPreferenceAvailable,
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Printf("id: %s\n", marketplace.ID)
  fmt.Printf("default_installation_preference: %s\n", marketplace.DefaultInstallationPreference)
  ```

  ```java Java
  import com.anthropic.models.beta.organization.pluginmarketplaces.PluginMarketplaceUpdateParams;

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

      var params = PluginMarketplaceUpdateParams.builder()
          .defaultInstallationPreference(PluginMarketplaceUpdateParams.DefaultInstallationPreference.AVAILABLE)
          .build();
      var marketplace = client.beta().organization().pluginMarketplaces()
          .update("marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r", params);

      IO.println("id: " + marketplace.id());
      IO.println("default_installation_preference: "
          + marketplace.defaultInstallationPreference().map(preference -> preference.asString()).orElse(null));
  }
  ```

  ```php PHP
  use Anthropic\Beta\Organization\PluginMarketplaces\PluginMarketplaceUpdateParams\DefaultInstallationPreference;
  // ...

  $client = new Client();

  $marketplace = $client->beta->organization->pluginMarketplaces->update(
      marketplaceID: 'marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r',
      defaultInstallationPreference: DefaultInstallationPreference::AVAILABLE,
  );

  echo "id: {$marketplace->id}\n";
  echo "default_installation_preference: {$marketplace->defaultInstallationPreference}\n";
  ```

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

  marketplace_id = "marketplace_01Lp8uM5qS1yG6tV3aW4kQ7r"
  marketplace = client.beta.organization.plugin_marketplaces.update(
    marketplace_id,
    default_installation_preference: :available
  )

  puts "id: #{marketplace.id}"
  puts "default_installation_preference: #{marketplace.default_installation_preference}"
  ```
</CodeGroup>

### マーケットプレイスのコンテンツを検証する

2つのエンドポイントは、何も接続・保存することなく、指定されたマーケットプレイスのコンテンツを同期した場合に何が起こるかを報告します。`POST /v1/organizations/plugin_marketplaces/validate_repository`は公開GitHubリポジトリを読み取り、`POST /v1/organizations/plugin_marketplaces/validate_archive`はアップロードされたマーケットプレイスディレクトリの`.zip`を読み取ります。どちらも同じレポートを返します。内容は、`marketplace.json`が正しい形式かどうか、どのプラグインがスキップされるかとその理由、どのプラグインが一部のコンテンツを除外した状態で同期されるかです。チェック内容は実際の同期で実行されるものと同じです。コンテンツの問題はHTTPエラーとしてではなくレポートで返されます。リポジトリやアーカイブがまったく読み取れない場合でも、リクエストは`valid: false`で成功します。検証は読み取りとしてカウントされ、さらに2つのエンドポイント合計で組織あたり1分間に10回の検証に制限されます（[レート制限](https://platform.claude.com/docs/ja/manage-claude/plugins-api#rate-limiting)を参照）。Activity Feedには何も記録されません。検証は返されるまでに最大120秒かかることがあるため、クライアントのタイムアウトはそれより長く設定してください。どちらのエンドポイントも`read:plugins`または`write:plugins`スコープが必要です（`read:org_audit`と`read:compliance_org_data`ではこれらは付与されません）。

リポジトリ、およびGitHub上にあるリポジトリ外のプラグインソースは匿名で読み取られるため、プライベートリポジトリやプライベートなプラグインソースは見つからないと報告されます。GitHub以外のホスト上のプラグインソースは取得されません。そのようなプラグインには通常`marketplace_validate_source_not_checked`警告が付き、マーケットプレイスが実際に同期されるときにチェックされます。リポジトリが、またはアーカイブが名前で示すものが、Anthropicがすべての組織に同期するマーケットプレイスである場合は、より厳格なルールが適用されます。マーケットプレイス外のすべてのプラグインソースは完全なコミットSHAに固定されている必要があり、固定されていないソースやサポートされていないホストのソースはプラグインエラーとして報告され、読み取られるブランチはデフォルトでそのマーケットプレイスの同期元のブランチになります。

`validate_repository`は2つのフィールドを持つJSON本文を受け取ります。`repository_url`はgithub.com上の公開リポジトリの`https://` URL（必須）、`ref`はブランチ名または40文字の完全なコミットSHA（オプション。省略されるか`null`の場合は、同期で読み取られるブランチで、通常はリポジトリのデフォルトブランチ）です。`validate_archive`は、ファイル名付きのファイルパートとして送信される`archive`という1つのパートのみを含む`multipart/form-data`を受け取ります。これはマーケットプレイスディレクトリの`.zip`で、最大32 MB、コンテンツがルートにあるか1つのフォルダーで囲まれている（Gitホストのダウンロードで生成される形式）必要があり、圧縮方式はDEFLATEまたはSTOREのみです。他のフォームフィールドは受け付けられません。

ブランチを指定して公開リポジトリを検証します:

<CodeGroup>
  ```bash cURL
  curl -X POST "https://api.anthropic.com/v1/organizations/plugin_marketplaces/validate_repository" \
    -H "content-type: application/json" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01" \
    -d '{"repository_url": "https://github.com/example-org/claude-plugins", "ref": "release-candidate"}'
  ```

  ```bash CLI
  ant beta:organization:plugin-marketplaces validate-repository \
    --repository-url https://github.com/example-org/claude-plugins \
    --ref release-candidate
  ```

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

  report = client.beta.organization.plugin_marketplaces.validate_repository(
      repository_url="https://github.com/example-org/claude-plugins",
      ref="release-candidate",
  )

  print(f"valid: {str(report.valid).lower()}")
  print(f"total_plugin_count: {report.total_plugin_count}")
  ```

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

  const report = await client.beta.organization.pluginMarketplaces.validateRepository({
    repository_url: "https://github.com/example-org/claude-plugins",
    ref: "release-candidate"
  });

  console.log(`valid: ${report.valid}`);
  console.log(`total_plugin_count: ${report.total_plugin_count}`);
  ```

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

  var report = await client.Beta.Organization.PluginMarketplaces.ValidateRepository(
      new()
      {
          RepositoryUrl = "https://github.com/example-org/claude-plugins",
          Ref = "release-candidate",
      }
  );

  Console.WriteLine($"valid: {report.Valid.ToString().ToLowerInvariant()}");
  Console.WriteLine($"total_plugin_count: {report.TotalPluginCount}");
  ```

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

  report, err := client.Beta.Organization.PluginMarketplaces.ValidateRepository(
  	context.Background(),
  	anthropic.BetaOrganizationPluginMarketplaceValidateRepositoryParams{
  		RepositoryURL: "https://github.com/example-org/claude-plugins",
  		Ref:           anthropic.String("release-candidate"),
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Printf("valid: %t\n", report.Valid)
  fmt.Printf("total_plugin_count: %d\n", report.TotalPluginCount)
  ```

  ```java Java
  import com.anthropic.models.beta.organization.pluginmarketplaces.PluginMarketplaceValidateRepositoryParams;

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

      var params = PluginMarketplaceValidateRepositoryParams.builder()
          .repositoryUrl("https://github.com/example-org/claude-plugins")
          .ref("release-candidate")
          .build();
      var report = client.beta().organization().pluginMarketplaces().validateRepository(params);

      IO.println("valid: " + report.valid());
      IO.println("total_plugin_count: " + report.totalPluginCount());
  }
  ```

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

  $report = $client->beta->organization->pluginMarketplaces->validateRepository(
      repositoryURL: 'https://github.com/example-org/claude-plugins',
      ref: 'release-candidate',
  );

  echo 'valid: ' . ($report->valid ? 'true' : 'false') . "\n";
  echo "total_plugin_count: {$report->totalPluginCount}\n";
  ```

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

  report = client.beta.organization.plugin_marketplaces.validate_repository(
    repository_url: "https://github.com/example-org/claude-plugins",
    ref: "release-candidate"
  )

  puts "valid: #{report.valid}"
  puts "total_plugin_count: #{report.total_plugin_count}"
  ```
</CodeGroup>

```json
{
  "type": "plugin_marketplace_validation_report",
  "valid": false,
  "ref": "release-candidate",
  "commit_sha": "9fceb02d0ae598e95dc970b74767f19372d61af8",
  "total_plugin_count": 3,
  "manifest_error": null,
  "manifest_error_code": null,
  "plugin_errors": [
    {
      "name": "deploy-helper",
      "error": "The plugin has a top-level bin/ directory.",
      "error_code": "marketplace_sync_bin_directory_not_allowed"
    }
  ],
  "plugin_warnings": [
    {
      "name": "release-notes",
      "warnings": [
        {
          "message": "plugin.json has unrecognized top-level keys: owners",
          "error_code": "marketplace_sync_plugin_unrecognized_keys"
        }
      ]
    }
  ]
}
```

| フィールド                                  | 説明                                                                                                                                                                            |
| -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `valid`                                | `marketplace.json`が正しい形式で、スキップされるプラグインがない場合は`true`。警告があっても`false`にはなりません。                                                                                                     |
| `ref`                                  | 読み取られたブランチの名前。ブランチが指定されずデフォルトブランチが読み取られた場合、コミットSHAの場合、またはアーカイブの場合は`null`です。                                                                                                   |
| `commit_sha`                           | 検証されたコミット。Gitホストからダウンロードされたアーカイブの場合は、ホストがZIPファイルのコメントフィールドに記録したコミット（存在する場合。検証はされません）。                                                                                         |
| `total_plugin_count`                   | `marketplace.json`が宣言しているプラグインの数。読み取れなかった場合は`0`です。                                                                                                                            |
| `manifest_error`、`manifest_error_code` | 何も検証できなかった場合に設定されます。ソースを読み取れなかった場合、または`marketplace.json`が存在しない、形式が不正、もしくは制限を超えている場合です。120秒以内に完了しなかった検証は`manifest_error_code: "marketplace_validate_deadline_exceeded"`を報告します。 |
| `plugin_errors`                        | 同期でスキップされるプラグインごとに1つの`{name, error, error_code}`。                                                                                                                             |
| `plugin_warnings`                      | 一部のコンテンツを除外した状態で同期されるプラグインごとに1つの`{name, warnings: [{message, error_code}]}`。                                                                                                  |

代わりに、マーケットプレイスディレクトリのローカルコピーを`.zip`として検証することもできます。レスポンスは同じレポートです:

<CodeGroup>
  ```bash cURL
  curl -X POST "https://api.anthropic.com/v1/organizations/plugin_marketplaces/validate_archive" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: ce-plugins-2026-09-01" \
    -F "archive=@marketplace.zip"
  ```

  ```bash CLI
  ant beta:organization:plugin-marketplaces validate-archive \
    --archive marketplace.zip
  ```

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

  with open("marketplace.zip", "rb") as archive:
      report = client.beta.organization.plugin_marketplaces.validate_archive(
          archive=archive
      )

  print(f"valid: {str(report.valid).lower()}")
  print(f"total_plugin_count: {report.total_plugin_count}")
  ```

  ```typescript TypeScript
  import fs from "node:fs";

  const client = new Anthropic();

  const report = await client.beta.organization.pluginMarketplaces.validateArchive({
    archive: fs.createReadStream("marketplace.zip")
  });

  console.log(`valid: ${report.valid}`);
  console.log(`total_plugin_count: ${report.total_plugin_count}`);
  ```

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

  var report = await client.Beta.Organization.PluginMarketplaces.ValidateArchive(
      new() { Archive = File.OpenRead("marketplace.zip") }
  );

  Console.WriteLine($"valid: {report.Valid.ToString().ToLowerInvariant()}");
  Console.WriteLine($"total_plugin_count: {report.TotalPluginCount}");
  ```

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

  archive, err := os.Open("marketplace.zip")
  if err != nil {
  	log.Fatal(err)
  }
  defer archive.Close()

  report, err := client.Beta.Organization.PluginMarketplaces.ValidateArchive(
  	context.Background(),
  	anthropic.BetaOrganizationPluginMarketplaceValidateArchiveParams{
  		Archive: archive,
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Printf("valid: %t\n", report.Valid)
  fmt.Printf("total_plugin_count: %d\n", report.TotalPluginCount)
  ```

  ```java Java
  import com.anthropic.models.beta.organization.pluginmarketplaces.PluginMarketplaceValidateArchiveParams;

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

      // このエンドポイントではファイル名が必須のため、Path を渡して `archive` パートがファイル名付きで送信されるようにします。
      var params = PluginMarketplaceValidateArchiveParams.builder()
          .archive(Path.of("marketplace.zip"))
          .build();
      var report = client.beta().organization().pluginMarketplaces().validateArchive(params);

      IO.println("valid: " + report.valid());
      IO.println("total_plugin_count: " + report.totalPluginCount());
  }
  ```

  ```php PHP
  use Anthropic\Core\FileParam;

  $client = new Client();

  $report = $client->beta->organization->pluginMarketplaces->validateArchive(
      archive: FileParam::fromResource(fopen('marketplace.zip', 'r')),
  );

  echo 'valid: ' . ($report->valid ? 'true' : 'false') . "\n";
  echo "total_plugin_count: {$report->totalPluginCount}\n";
  ```

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

  report = client.beta.organization.plugin_marketplaces.validate_archive(
    archive: Pathname("marketplace.zip")
  )

  puts "valid: #{report.valid}"
  puts "total_plugin_count: #{report.total_plugin_count}"
  ```
</CodeGroup>

コンテンツの問題によってリクエストが失敗することはありません。すべてのエンドポイントに共通するレスポンス（`read:org_audit`または`read:compliance_org_data`のみを持つキーに対する`403`。[エラーレスポンス](https://platform.claude.com/docs/ja/manage-claude/plugins-api#error-responses)と[レート制限](https://platform.claude.com/docs/ja/manage-claude/plugins-api#rate-limiting)を参照）を除き、リクエスト自体は次の理由で失敗することがあります:

| ステータス | 原因                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 対処方法                                |
| ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------- |
| 400   | `validate_repository`の場合: 本文がJSONオブジェクトではない。`repository_url`が存在しない、2,048文字を超えている、認証情報を含んでいる、または`https://github.com/{owner}/{repo}`の形式ではない（`.git`サフィックスは受け付けられますが、別のホスト、ブランチページの`/tree/main`のような長いパス、443または80以外のポートは受け付けられません）。`ref`が空である、255文字を超えている、`..`を含んでいる、またはASCII英字、数字、`.`、`_`、`-`、`+`、`/`以外の文字を含んでいる。あるいは他のフィールドが存在する。これらのチェックを通過したものの、リポジトリに存在しないブランチを指定している`ref`は拒否されません。リクエストは`valid: false`で成功し、`manifest_error`でブランチが見つからなかったことが示されます。`validate_archive`の場合: 本文が`multipart/form-data`ではない、`archive`パートが存在しない、重複している、もしくはファイル名付きのファイルパートとして送信されていない、または他のフォームフィールドが存在する。 | リクエストを修正して再送信してください。                |
| 413   | `validate_archive`の場合: `archive`パート、またはリクエストで宣言された本文の長さが32 MBを超えています。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 代わりにURLでリポジトリを検証するか、アーカイブを縮小してください。 |

#### レポートコード

レポート内の各検出結果には安定したコードがあります。何も検証できなかった場合は`manifest_error_code`、各`plugin_errors`エントリには`error_code`、各警告には`error_code`があります。プラグインに複数の問題がある場合、`error_code`は最初の問題のコードで、`error`はそれらのメッセージを結合したものです。新しいコードが追加される可能性があります。認識できない`manifest_error_code`であってもコンテンツを検証できなかったことを意味し、`plugin_errors`エントリ上の認識できないコードであってもプラグインがスキップされることを意味し、警告上の認識できないコードであってもプラグインが同期されることを意味します。次のコードは一時的な状態を示すため、同じリクエストが後で成功する可能性があります: `marketplace_host_rate_limited`、`marketplace_host_server_error`、`marketplace_host_timeout`、`marketplace_host_unreachable`、`marketplace_repo_access_denied`、`marketplace_sync_transient_fetch_budget_exhausted`、`marketplace_validate_network_error`、および通常は`marketplace_validate_deadline_exceeded`。

## 認識できない値

このページのすべての文字列値（コンポーネントタイプ、`reach`、スキャンフィールド、マーケットプレイスの`source`、エラーコード）には、いつでも新しい値が追加される可能性があります。認識できない値は、失敗させるのではなく、他の未知の文字列と同様に扱ってください。

## レート制限

読み取りリクエスト（このページのすべての`GET`エンドポイント）は組織あたり**1分間に300リクエスト**の制限を共有し、書き込みリクエスト（プラグインまたはバージョンの作成、提供バージョンの変更、削除、インストール設定の設定または削除、マーケットプレイスの更新）は組織あたり**1分間に60リクエスト**の制限を共有します。マーケットプレイスの検証（どちらのエンドポイントも）は読み取りとしてカウントされ、さらに両方のエンドポイント合計で組織あたり1分間に10回に制限されます。どちらの制限もリクエスト本文が読み取られる前にチェックされます。これらの制限は組織のすべてのキーにわたってカウントされ、組織の他のAdmin APIの制限とは別です。制限を超えたリクエストは、`retry-after`ヘッダー付きで**429 Too Many Requests**を返します。レスポンスには、適用される制限についての`anthropic-ratelimit-requests-*`ヘッダーが含まれます（マーケットプレイスの検証では1分間に10回の制限、`429`ではリクエストを拒否した制限）。

アップロード、提供バージョンの変更、または検証は、サービスが一時的に追加の処理能力を持たない場合にも`retry-after`付きで`429`を返すことがあり、アップロードは組織がコンテンツスキャンのレートを超えた場合に`429`を返します。これらはすべて同じ方法で処理してください。`retry-after`の時間だけ待ってから再試行します。これらの制限とは別に、同じプラグインに対するインストール設定の書き込みは1つずつ送信してください。複数が同時に届くと、一部が`503`と`x-should-retry: true`で応答されることがあり、それらは1〜2秒後に安全に再送信できます（[インストール設定を設定する](https://platform.claude.com/docs/ja/manage-claude/plugins-api#set-an-installation-setting)を参照）。

## ページネーション

リストエンドポイントは**opaque cursor**（不透明なカーソル）を使用します。最初のリクエストは最大`limit`行と`next_page`カーソルを返します。次のリクエストでそのカーソルを変更せずに`page`パラメータとして渡し、`next_page`が`null`になるまで繰り返します。カーソル文字列は不透明なものとして扱ってください。自分で解析、変更、または構築しないでください。[プラグインを一覧表示する](https://platform.claude.com/docs/ja/manage-claude/plugins-api#list-plugins)は、`next_page`が設定されたままで、`limit`より少ないプラグインを含むページ、またはプラグインを含まないページを返すことがあるため、`next_page`が`null`になるまでページのリクエストを続けてください。Python、TypeScript、C#、Go、Java、Rubyの各SDKのリストイテレーターとCLI（`--format raw`を使用する場合を除く）は、これを自動的に行います。これらは`next_page`が設定されている間は次のページをリクエストするため、短いページや空のページで終了することはありません。PHPとcurlでは、各ページを自分でリクエストし、その`next_page`を`page`として渡してください。

`limit`のデフォルトは20で、最小値は1です。最大値は、プラグイン、インストール設定、共有では100、バージョンとマーケットプレイスでは1,000です。すべてのリストは新しい順に並べられます。

## エラーレスポンス

エラーレスポンスは、[エラー](https://platform.claude.com/docs/ja/api/errors)に記載されている標準の形式に従います。サポートに問い合わせる際は、レスポンス本文の`request_id`を伝えてください。

| ステータス | 意味                                                                                                                                                                                          |
| ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 400   | 入力が無効であるか、操作がこのプラグインまたはマーケットプレイスに適用されません（各エンドポイントのセクションを参照）。エンドポイントが認識しないクエリパラメータを指定した場合や、組織がClaude Enterprise組織ではない場合（`this endpoint is not supported for this organization type`）にも返されます。 |
| 401   | `x-api-key`ヘッダーがないか、キーが認識されません。                                                                                                                                                             |
| 403   | キーに必要なスコープがないか、リクエストがメンバーのプラグインまたは個人用マーケットプレイスに対して、アップロード、提供バージョンの変更、またはデフォルトの設定を行おうとしています。（メンバーのプラグインの削除は許可されています。）                                                                        |
| 404   | リソースが見つかりません。リクエストで`anthropic-beta`の値が省略されている場合や、組織でAPIが有効になっていない場合にも返され、エンドポイントは存在しないものとして扱われます。                                                                                           |
| 409   | 名前がすでに使用されている、コンテンツスキャンがまだ実行中である、または競合するアップロードが進行中です。                                                                                                                                       |
| 413   | リクエスト本文がサイズ制限を超えています。制限はアップロードの場合は200 MB、マーケットプレイスの検証の場合は32 MBです。                                                                                                                           |
| 429   | レート制限を超過しました。[レート制限](https://platform.claude.com/docs/ja/manage-claude/plugins-api#rate-limiting)を参照してください。                                                                                 |
| 500   | 内部エラーです。                                                                                                                                                                                    |
| 503   | 一時的なエラーです。1つのプラグインに対する複数のインストール設定の書き込みが同時に到着した場合にも返されます。その場合は1つずつ送信してください。`registration_pending`（次の表を参照）を除き、バックオフを使用して再試行してください。                                                            |

1つのステータスに、それぞれ異なる対処が必要な複数の原因がある場合、エラーには`error.details.error_code`も含まれます。また、原因が特定のプラグインまたはバージョンに関係する場合は、`error.details.plugin_id`または`error.details.plugin_version_id`も含まれます。

```json
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "...",
    "details": {
      "error_code": "plugin_name_taken",
      "plugin_id": "plugin_01Hq3vX8kZcN2mB7pR4tY9wL"
    }
  },
  "request_id": "req_018EeWyXxfu5pfWkrYcMdjWG"
}
```

| `error_code`                                    | ステータス | 意味と対処方法                                                                                                                                                                                                    |
| ----------------------------------------------- | ----- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `plugin_name_taken`                             | 409   | この名前のプラグインがマーケットプレイスにすでに存在します。`details.plugin_id`がそのプラグインです。レスポンスを受け取れなかった作成リクエストを再試行している場合は、そのプラグインで処理を続行してください。`plugin_id`が存在しない場合、その名前はスタンドアロンのスキルによって使用されています。別の名前でアップロードするか、claude.aiでそのスキルを削除してください。 |
| `skill_name_taken`                              | 409   | プラグインがライブラリマーケットプレイスにあり、そのスキルの1つが組織スキル（管理者がclaude.aiで組織全体向けにアップロードしたスキル）と同じ名前です。`details.skill_name`がその名前を示します。どちらかの名前を変更するか、削除してください。                                                                     |
| `registration_pending`                          | 503   | ファイルは保存されましたが、プラグインのスキルをまだメンバーが利用できる状態にできていません。[アップロードの再試行](https://platform.claude.com/docs/ja/manage-claude/plugins-api#retrying-uploads)を参照してください。                                                      |
| `scan_pending`                                  | 409   | バージョンのコンテンツスキャンがまだ実行中です。完了後に再試行してください。                                                                                                                                                                     |
| `scan_failed`                                   | 400   | バージョンのコンテンツスキャンが失敗した、エラーになった、または判定に至らなかったため、そのバージョンは提供できません。別のバージョンを選択してください。                                                                                                                              |
| `cmek_key_disabled`, `cmek_key_network_blocked` | 400   | 組織のカスタマー管理の暗号化キーが利用できません。[カスタマー管理の暗号化キー](https://platform.claude.com/docs/ja/manage-claude/plugins-api#customer-managed-encryption-keys)を参照してください。                                                         |

新しいコードが追加される場合があります。認識できないコードは、そのステータスと同じように扱ってください。

### アップロードの再試行

`Idempotency-Key`を受け付けるエンドポイントはありません。提供バージョンの変更、インストール設定の設定、マーケットプレイスのデフォルトの設定は、繰り返しても安全です。削除の繰り返し、またはインストール設定の削除の繰り返しは`404`を返します。

エラーを返したアップロードは何も保存していません。ただし1つの例外があります。`error_code: "registration_pending"`を伴う`503`です。アップロードのファイルを保存した後、サーバーは新しいバージョンのスキルをclaude.aiに登録します。これによりメンバーがスキルを使用できるようになります。`registration_pending`は、ファイルは保存されたものの、この最後のステップが完了しなかったことを意味します。同じファイルをもう一度アップロードすると完了します（さらに同一のバージョンがもう1つ保存されます）。

* `POST /v1/organizations/plugins`では、プラグインは作成*されており*、レスポンスには`x-should-retry: false`が含まれます。作成リクエストを再送信しないでください（再送信すると`409 plugin_name_taken`が返されます）。代わりに、同じファイルを`details.plugin_id`のバージョンとしてアップロードしてください。
* `POST /v1/organizations/plugins/{plugin_id}/versions`では、バージョンは保存*されています*（`details.plugin_version_id`）。レスポンスに`x-should-retry: true`が含まれる場合は同じリクエストを再送信し、`false`が含まれる場合は再送信しないでください。

作成リクエストのレスポンスが失われた場合は、再試行してください。再試行すると`details.plugin_id`にプラグインのIDを含む`409 plugin_name_taken`が返されるので、そのプラグインで続行します。レスポンスが失われたバージョン作成リクエストを再試行すると、2つ目の同一バージョンが保存されます。これを避けるには、各アップロードの前にプラグインの`latest_version_id`を記録しておき、レスポンスが失われた場合はプラグインを読み取り、`latest_version_id`が変わっていない場合にのみ再試行してください。

## Activity Feedイベント

このAPIを通じたすべての書き込みは、組織の[Compliance API Activity Feed](https://platform.claude.com/docs/ja/manage-claude/compliance-activity-feed)に記録され、`apikey_` IDを持つ`api_actor`としてAPIキーに帰属されます。同じアクターが、そのキーによって作成されたプラグインとバージョンの`created_by`にも表示されます。

| イベント                                     | 発行されるタイミング                                                                                                                    |
| ---------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `claude_plugin_created`                  | アップロード（ここまたはclaude.aiでのアップロード）、または承認された公開リクエストによってプラグインが作成されたとき。Git同期によって作成されたプラグインは、`claude_plugin_version_created`のみを発行します。 |
| `claude_plugin_version_created`          | バージョンが保存されたとき。Git同期によって保存されたバージョンは、`system_actor`に帰属されます。                                                                     |
| `claude_plugin_updated`                  | 既存のプラグインに新しいバージョンがアップロードされたとき。                                                                                                |
| `claude_plugin_served_version_updated`   | 提供バージョンが変更されたとき。                                                                                                              |
| `claude_plugin_deleted`                  | プラグインが単独で削除されたとき（ここまたはclaude.aiで）。                                                                                            |
| `plugin_installation_preference_updated` | インストール設定が設定または削除されたとき。                                                                                                        |
| `marketplace_created`                    | 最初のアップロードによってライブラリマーケットプレイスが作成されたとき。                                                                                          |
| `marketplace_updated`                    | マーケットプレイスのデフォルトのインストール設定が変更されたとき、または管理者やオーナーがclaude.aiで同期を開始したとき。                                                             |
| `marketplace_deleted`                    | マーケットプレイスがそのプラグインとともにclaude.aiで削除されたとき（プラグインごとのイベントは発行されません）。                                                                 |
| `claude_plugin_archive_accessed`         | メンバーが所有するプラグインのアーカイブがダウンロードされたとき。                                                                                             |
| `claude_plugin_security_scan_completed`  | コンテンツスキャンが完了したとき。                                                                                                             |

これらのイベントに含まれるプラグイン、バージョン、マーケットプレイスのIDは、このAPIが返すIDと同じです。`plugin_installation_preference_updated`は、プラグインを`id`ではなく、`name`と`marketplace_id`で識別します。

マーケットプレイスのデフォルトを変更すると、デフォルトを継承するすべてのプラグインの値が変わりますが、記録されるのは`marketplace_updated`イベント1件のみで、プラグインごとのイベントは記録されません。読み取りは記録されません。ただし、メンバーが所有するプラグインのアーカイブのダウンロードは例外です。何も変更しない書き込みは何も記録しません。

claude.aiで付与または取り消された共有は、フィード上に`role_assignment_granted`および`role_assignment_revoked`イベントとして表示されます。このAPIは削除を報告しません。削除されたプラグインは、次回のリストに含まれなくなるだけです。Git同期によって削除されたプラグイン、マーケットプレイスの削除（`marketplace_deleted`イベント1件）によって削除されたプラグイン、またはメンバーのアカウントや組織の削除によって削除されたプラグインは、プラグインごとのイベントを発行しません。そのため、削除を把握するには、定期的にインベントリ全体を再度リストしてください。

## カスタマー管理の暗号化キー

組織で「[customer-managed encryption key](https://platform.claude.com/docs/ja/manage-claude/cmek)」（カスタマー管理の暗号化キー）を使用している場合、バージョンの`description`、`release_notes`、`components`、およびファイルはそのキーで暗号化されます。キーが利用できない間は、次のようになります。

* 読み取りとリストは引き続き成功しますが、`description`、`release_notes`、`components`は`null`として返されます。
* アーカイブのダウンロード、作成、バージョンの作成、提供バージョンの変更は、`cmek_key_disabled`または`cmek_key_network_blocked`を伴う`400`を返します。
* ライブラリマーケットプレイス内のプラグインを削除すると、`400 cmek_key_disabled`が返され、何も削除されません。これは、まずそのスキルをclaude.aiから取り下げる必要があり、その処理にキーが必要なためです。その他の削除、インストール設定、マーケットプレイスのデフォルトは通常どおり機能します。

キーを復元すると、これらはすべて解消されます。

## 関連項目

<CardGroup cols={2}>
  <Card title="Admin APIキーを作成する" href="https://platform.claude.com/docs/ja/manage-claude/admin-api-keys">
    プライマリオーナーがスコープ付きキーを作成する場所です。
  </Card>

  <Card title="ユーザー管理" href="https://platform.claude.com/docs/ja/manage-claude/user-management">
    インストール設定で使用する`rbac_group_` IDを提供するグループエンドポイントです。
  </Card>

  <Card title="Compliance API Activity Feed" href="https://platform.claude.com/docs/ja/manage-claude/compliance-activity-feed">
    プラグインの書き込みとメンバーのアーカイブのダウンロードが記録される場所です。
  </Card>

  <Card title="Analytics API" href="https://platform.claude.com/docs/ja/manage-claude/analytics-api">
    Claude Enterprise向けのプラグインとスキルの使用状況レポートです。
  </Card>
</CardGroup>
