Claude Platform Docs
管理組織

Plugins API

Claude Enterprise組織内のプラグインを一覧化して管理します。プラグインとバージョンのアップロード、メンバーに提供するバージョンの選択、各プラグインを使用できるユーザーの制御、レビュー用のプラグインファイルのダウンロード、接続前のマーケットプレイスの検証を行えます。

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

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

プラグインの使用状況のレポート(メンバーがどのプラグインやスキルをどのくらいの頻度で使用しているか)については、Analytics APIsを参照してください。

エンドポイント

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

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

このリリースには、スタンドアロンスキルは含まれません。スタンドアロンスキルとは、メンバーがclaude.aiのスキルエディターで作成したスキルや、単一のスキルとしてアップロードしたスキルのことです。これらはインベントリに表示されず、ここで作成することもできません。Anthropicが公開するプラグインもインベントリの対象外です。その使用状況はAnalytics APIsで報告されます。マーケットプレイスの作成、リポジトリへの接続、削除は、このAPIではなくclaude.aiで行います。

前提条件

  • 組織がClaude Enterpriseプランを利用している必要があります。
  • プライマリオーナーが、claude.ai > 組織設定 > APIで、read:pluginsスコープ、write:pluginsスコープ、またはその両方を持つAdmin APIキーを作成します。Admin APIキーの作成を参照してください。
  • すべてのリクエストには、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の下で公開されています。ant CLIではant beta:organizationの下で公開されています。いずれもanthropic-versionヘッダーとanthropic-betaヘッダーを自動的に送信します。

このページの例では、各SDKのデフォルトクライアントを使用します。デフォルトクライアントはCLIと同様に、ANTHROPIC_API_KEY環境変数からAdmin APIキーを読み取ります。curlの例も同じ変数からキーを読み取り、x-api-keyヘッダーで渡します。

ページネーションの動作は例によって異なります。

  • Python、TypeScript、C#、Go、Java、Rubyの一覧表示の例とCLI:反復処理に応じてSDKが追加のページを取得します。そのため、limitは合計数ではなくページサイズを設定します。
  • PHPとcurlの例:1ページのみを返します(ページネーションを参照)。

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

クイックスタート

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

client = anthropic.Anthropic()

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

# 必要に応じて後続のページを自動的に取得します。
for plugin in plugins:
    print(f"{plugin.id}: {plugin.name}")
{
  "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エンドポイント(アーカイブのダウンロードを含む)に加え、ユーザー管理と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にアクセスできる任意の組織で同じ操作を行えます(同じ親組織の配下にある別の組織の読み取りを参照)。

このようなダウンロードのたびに、Compliance API Activity Feedにclaude_plugin_archive_accessedイベントが記録されます。このイベントは、キー、プラグイン、バージョン、メンバーを識別します(Activity Feedイベントを参照)。組織所有のプラグインのダウンロードは記録されません。

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

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

会社に、1つの親組織の下にリンクされた複数のClaude組織がある場合は、親組織のプライマリオーナーがすべてのリンクされた組織向けに作成したread:org_auditまたはread:compliance_org_dataキーを使用できます(Admin APIキーの作成を参照)。このキーは、リンクされた組織のうち、この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 serverClaudeから別のシステムのツールやデータへの接続(「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フィルターでも引き続き検索できます。そのため、退職したメンバーのコンテンツを確認して削除できます。これらのプラグインは、メンバーのアカウントが削除されたときに削除されます。

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

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

  • latest_version_id:最新のバージョン。
  • served_version_id:メンバーに提供されるバージョン。

デフォルトではserved_version_pinnedはfalseです。この場合、提供バージョンは最新のバージョンに追従し、新しいバージョンは保存されるとすぐに提供されます。

次のいずれかの操作を行うと、プラグインが固定されます(served_version_pinned: true)。

  • POST /v1/organizations/plugins/{plugin_id}でバージョンを選択する
  • 管理者がclaude.aiでバージョンを選択する
  • 管理者が、プラグインへの公開を求めるメンバーのリクエストを承認する

固定後は、新しいアップロードは保存されてlatest_version_idを進めます。しかし、served_version_idを別のバージョンに向けるまで、メンバーには固定されたバージョンが提供され続けます。2つのポインターが異なるプラグインには、提供されていない保存済みのバージョンがあります。

この仕組みにより、リリースパイプラインで各ビルドをアップロードし、テストしてから昇格できます。各ビルドを提供するタイミングをパイプラインで決めるには、次のようにします。

  1. served_version_idを現在のバージョンに設定して、プラグインを一度固定します。
  2. 以降は、提供したい各ビルドを昇格します。

コンテンツスキャンが有効な場合、最初の固定は次のように動作します。

  • 現在のバージョンのスキャンが完了するまでは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つずつ持つことができます。ここでのグループとは、ユーザー管理で管理されるロールベースのアクセス制御グループです。メンバーに適用される値は、次のルールで決まります。

  1. 組織全体の値は、次の優先順位で決まります。

    • プラグイン自身の組織全体の設定(ある場合)
    • マーケットプレイスのデフォルト
    • not_available

    プラグインはこの値をorganization_installation_preferenceで報告します。値がマーケットプレイスのデフォルトに由来する間は、organization_installation_preference_inherited: trueになります。

  2. プラグインの設定を持つグループに1つも属していないメンバーには、組織全体の値が適用されます。

  3. 設定を持つグループに1つ以上属しているメンバーには、代わりにそれらのグループの設定のうち最も許容度の高いものが適用されます。許容度の順位はrequired、auto_install、available、not_availableです。

グループの設定は、そのメンバーに対して組織全体の値を置き換えます。組織全体の値に追加されるわけではありません。たとえば、組織全体の値がrequiredで、Pilotグループがavailableを持つ場合、Pilotのメンバーにはavailableが適用されます。

プラグインをパイロットグループから組織全体に移行するときは、次の順序で操作します。

  1. 組織全体の値を設定します。組織全体の値を設定すると、プラグインはマーケットプレイスのデフォルトを継承しなくなり、この変更は元に戻せません(インストール設定の設定を参照)。
  2. グループの設定を削除します。

この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)は通常どおり提供されます。

固定されていないプラグインでは、アップロードのたびにそのバージョンがすぐに提供バージョンになります。メンバーは、新しいバージョンのスキャンに合格するまでプラグインを使用できなくなり、スキャンが失敗した場合は使用できないままになります。新しいバージョンのスキャン中もメンバーに現在のバージョンを使わせたい場合は、先にプラグインを固定してください(バージョンと提供バージョンを参照)。

アップロード後、content_scan.statusはprocessingになり、判定は非同期で届きます。判定を確認するには、バージョンを読み取ってください。プラグインオブジェクトには、提供バージョンのスキャンのみが表示されます。提供バージョンを変更する際は、次のエラーが返されることがあります。

  • スキャンがまだ実行中のバージョンに変更した場合:409 scan_pending
  • スキャンが失敗したバージョンに変更した場合:400 scan_failed

リーチ

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

値意味
remoteMCPサーバーまたはCLIを宣言しています(他に何を宣言しているかは問いません)。
privilegedMCPサーバーもCLIも宣言していませんが、次のいずれかに該当します。
・hook、monitor(セッション中に実行され続けるバックグラウンドコマンド)、「Language Server Protocol」(言語サーバープロトコル)、すなわちLSPのサーバー、またはプラグインがメンバーのアプリに適用する設定を宣言している
・自身に対してツールを事前承認するスキルまたはコマンド(フロントマターのallowed-tools)を含んでいる
これらはメンバー自身のコンピューター上で実行されるか、効果を発揮します。
containedMCPサーバー、CLI、hook、monitor、LSPサーバー、アプリ設定のいずれも宣言しておらず、ツールを事前承認するスキルやコマンドもありません(たとえば、allowed-toolsを持たないスキル、コマンド、エージェントのみを含むプラグイン)。

reachは、バージョンが宣言するすべてのものを対象とします。これには、componentsに含まれないmonitor、LSPサーバー、アプリ設定も含まれます。そのため、componentsリストが空のバージョンでもprivilegedになることがあります。

次のバージョンではreachはnullになります。nullは未分類として扱ってください。

  • コンポーネントが記録される前に保存されたバージョン
  • スキルまたはコマンドのファイルの1つを読み取れず、リーチを判定できなかったバージョン

アップロードの要件

アップロードは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でプラグインを作成します。以降のリリースでは、プラグインのlatest_version_idを記録してから、POST /v1/organizations/plugins/{plugin_id}/versionsでバージョンをアップロードします。アップロードのレスポンスが失われた場合は、プラグインを読み取り、latest_version_idが変わっていない場合にのみ再試行します(アップロードの再試行を参照)。
  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>"}でビルドを昇格します。ロールバックするには、同じ方法で以前のバージョンのIDを送信します。

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

  1. GET /v1/organizations/rbac_groupsでパイロットグループのIDを調べます。この呼び出しにはread:rbac_groupsスコープが必要で、このスコープにはすべてのリンクされた組織向けに作成されたキーが必要です(ユーザー管理を参照)。

    一方、以降のステップにはwrite:pluginsが必要です。このスコープは、キーが作成された組織に対してのみ機能します。そのため、複数のリンクされた組織を持つエンタープライズでは、次のいずれかの方法を取ってください。

    • プラグインを保持する組織でこのキーを作成し、両方のスコープを付与する
    • 以降のステップには、その組織で作成した2つ目のキーを使用する
  2. POST /v1/organizations/plugins/{plugin_id}/installation_settings/{target}で、グループに独自の設定を付与します(たとえばauto_install)。{target}はグループのrbac_group_ IDです。組織全体の値はnot_availableのままにします。これで、グループのメンバーのみがプラグインを使用できます。

  3. パイロットが終了したら、組織全体の値を設定します。これにより、プラグインはマーケットプレイスのデフォルトを継承しなくなり、この変更は元に戻せません(インストール設定の設定を参照)。その後、グループが再び組織の設定に従うように、グループの設定を削除します。

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

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

セキュリティインベントリを同期する

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

  1. next_pageがnullになるまで、GET /v1/organizations/plugins?limit=100でページを順に取得します。SDKのリストイテレーターはこのリストで早期に停止することがあるため、使用しないでください。代わりに、各ページのnext_pageを自分でpageとして渡します(ページネーションを参照)。

    実行のたびに、このリストから各プラグインのreachとcontent_scanを読み取ってください。後から届いたスキャン判定ではupdated_atは変わらないためです。updated_atからは、前回の実行以降に新しいコンテンツまたは新しい提供バージョンを持つプラグインがわかります(アーカイブを改めてダウンロードする価値があります)。また、削除を検出できるのも完全な再取得だけです。Git同期やアカウント削除によって削除されたプラグインは、イベントなしで消えるためです。

  2. 次のいずれかに該当するプラグインにフラグを立てます。

    • reachがremote(MCPサーバーまたはCLIを宣言している)
    • content_scan.assessmentがfailまたはunknown
  3. フラグを立てた各プラグインについて、GET /v1/organizations/plugins/{plugin_id}/versions/{served_version_id}/contentで提供バージョンのアーカイブをダウンロードしてレビューします(バージョンのファイルのダウンロードを参照)。

  4. レビュー中にメンバーからプラグインを取り上げるには、プラグインの削除を参照してください。元に戻せる方法(組織所有の場合)と、完全に削除する方法が説明されています。

プラグイン

プラグインオブジェクトは、組織のマーケットプレイスまたはメンバーの個人用マーケットプレイスにあるプラグインを表します(完全な例はクイックスタートのレスポンスを参照)。display_name、description、manifest_version、content_scan、components、reachは、提供バージョンを表します。そのため、1回の一覧表示の呼び出しで、メンバーに何が提供されているかがわかります。

フィールド説明
idplugin_プレフィックス付き。
nameマニフェストから取得されます。組織全体ではなく、マーケットプレイス内で一意です。組織所有のプラグインでは固定です。メンバーがclaude.aiで自分のプラグインの名前を変更すると変わります。
display_name、description、manifest_version提供バージョンのマニフェストのdisplayName、description、version。マニフェストで宣言されていない場合は、それぞれnullです。
manifest_versionは表示用に正規化され、先頭のvまたはVが1つ削除されます。たとえば、マニフェストのversionが"v1.4.0"の場合は"1.4.0"として返されます。
次の場合もnullになります。
・"latest"のように、バージョン番号に見えない値
・claude.aiが2026年8月にこのフィールドの記録を開始する前に作成されたプラグインバージョン
versionを理由にアップロードが拒否されることはなく、manifest_versionは一意ではありません。
served_version_id、latest_version_idpluginver_プレフィックス付き。それぞれ、メンバーに提供されるバージョンと最新のバージョンです。バージョンと提供バージョンを参照してください。
served_version_pinned提供バージョンが新しいバージョンに追従している間はfalse、バージョンが明示的に選択されるとtrueになります。
owner{"type": "organization"}、またはメンバーの個人用マーケットプレイスの場合は{"type": "user", "user_id": "user_..."}。
marketplace_idmarketplace_プレフィックス付き。
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組織所有の場合:組織全体の値と、その値がマーケットプレイスのデフォルトに由来するかどうか(インストール設定を参照)。メンバー所有の場合:どちらもnull。
content_scan提供バージョンのスキャン結果。status、assessment、reasonを持つオブジェクトです(この表の後で説明します)。一度もスキャンされていない場合はnullです。
components提供バージョンのコンポーネント。各要素は{"type", "name", "description"}で、typeはskill、mcp_server、command、agent、hook、cliのいずれかです。このタイプ順、次に名前順で並びます。
nameの内容はタイプによって異なります。
・MCPサーバー:マニフェスト内のキー
・hook:実行されるイベント
・CLI:実行ファイルの名前
MCPサーバー、hook、CLIのdescriptionは常にnullです。記録されていない場合、このフィールドはnullです。
reachcontained、privileged、remoteのいずれか。リーチを参照してください。
updated_at新しいバージョンが保存されたとき、または提供バージョンが変更されたときにのみ変わります。インストール設定、共有、新しいスキャン結果では変わりません。

content_scanオブジェクト:

フィールド説明
status次のいずれかです。
・processing:スキャンの実行中
・completed:スキャンが完了した
・errored:スキャンを完了できなかった。まれに、このレスポンス用に結果を読み取れなかった場合にもerroredになります。その場合は、後の読み取りで結果が報告されることがあります。
スキャンがprocessingまたはerroredのバージョンは、メンバーに提供されません。同じコンテンツを新しいバージョンとして再度アップロードすると、新たにスキャンされます。
assessmentstatusがcompletedの場合に設定され、次のいずれかになります。
・pass:何も検出されなかった
・warn:使用を妨げない問題が検出された
・fail:使用を妨げる問題が検出された
・unknown:判定なし
それ以外の場合はnullです。
reasonwarnとfailの場合に、主な懸念事項を次のリストの値で示します。それ以外の場合はnullです。理由の記録が始まる前の古いスキャンでもnullになります。

plugin_idのエラーは次のとおりです。

  • plugin_プレフィックスがない場合:400
  • プレフィックスはあるが、解決できない、別の組織に属している、またはスタンドアロンスキルを指している場合: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は、エラーではなく空のページを返します。レスポンスの形式はクイックスタートに示したとおりです。

client = anthropic.Anthropic()

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

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

プラグインを作成する

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はアップロードされたマニフェストから取得され、アップロードはアップロード要件を満たす必要があります。コンテンツスキャンが有効な場合、レスポンスのcontent_scan.statusはprocessingとなり、判定結果は非同期で届きます。プラグインを返します。write:pluginsスコープが必要です。

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

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}")
{
  "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つのアーカイブとしてマーケットプレイスにアップロードしています:

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

アップロード要件に違反するアップロードに対する400(リクエスト本文が200 MBを超える場合は413)と共通のレスポンス(marketplace_idがメンバーの個人用マーケットプレイスである場合の403。エラーレスポンスを参照)に加えて、作成は次の理由で失敗することがあります:

ステータス原因対処方法
404marketplace_idが組織のマーケットプレイスではありません。マーケットプレイスを一覧表示するから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のバージョンとしてアップロードしてください(アップロードの再試行を参照)。

プラグインを取得する

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

client = anthropic.Anthropic()

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

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

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

POST /v1/organizations/plugins/{plugin_id}は、組織所有のプラグインのどのバージョンをメンバーに提供するかを変更します。ロールバックするには以前のバージョンを、提供されずに保存されていたビルドを昇格させるには新しいバージョンを渡します。これによりプラグインは「pinned」(固定)状態になり、固定されたプラグインは現在、ここでもclaude.aiでも固定を解除できません(バージョンと提供バージョンを参照)。更新可能なフィールドはserved_version_idのみで、これは必須です。変更はレスポンスが返される前にメンバーに反映され、バージョンは作成されません。コンテンツスキャンが有効な場合、そのバージョンはメンバーに提供可能なものである必要があります(コンテンツスキャンを参照)。固定されたプラグインですでに提供されているバージョンを渡しても何も変わりません。固定されていないプラグインでそれを渡すと、そのバージョンで固定されるため、以降のアップロードは自動的に提供されなくなります。プラグインを返します。write:pluginsスコープが必要です。

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}")
{
  "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。エラーレスポンスを参照)に加えて、リクエストは次の理由で失敗することがあります:

ステータス原因対処方法
400本文にserved_version_idが含まれていない、nullに設定されている、または他のフィールドが含まれています。あるいは、値にpluginver_プレフィックスがないか、latestです。正確に{"served_version_id": "pluginver_…"}を送信してください。
404served_version_idがこのプラグインのバージョンではありません。プラグインのバージョンを一覧表示するから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に設定し(マーケットプレイスのデフォルトを継承していたプラグインは、それ以降独自の設定を保持します)、GET /v1/organizations/plugins/{plugin_id}/installation_settingsが一覧表示するすべてのグループ設定を削除(またはnot_availableに設定)してください。グループの設定は、そのメンバーに対して組織全体の値より優先されるためです。これらの書き込みは並列ではなく、1つずつ順番に送信してください(インストール設定を設定するを参照)。メンバー所有のプラグインは、削除する以外にこのAPIで提供停止にすることはできず、削除もそのマーケットプレイスがmanualの場合に限られます。

client = anthropic.Anthropic()

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

print(f"id: {deleted_plugin.id}")
{ "type": "plugin_deleted", "id": "plugin_01Hq3vX8kZcN2mB7pR4tY9wL" }

プラグインのバージョン

プラグインのバージョンは、1回のアップロードによるプラグインのファイルの不変のスナップショットです(完全なオブジェクトはバージョンを作成するのレスポンスで確認できます)。そのフィールドは、このバージョンについてのプラグインの提供バージョンのフィールド(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スコープが必要です。

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

バージョンを作成する

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

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}")
{
  "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"
}

アップロード要件に違反するアップロードに対する400(リクエスト本文が200 MBを超える場合は413)と共通のレスポンス(メンバー所有のプラグインに対する403。エラーレスポンスを参照)に加えて、リクエストは次の理由で失敗することがあります:

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

バージョンを取得する

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

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

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

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で識別し、名前は含みません。組織所有のプラグインのアーカイブをダウンロードしても何も記録されません。

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

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

これらのエンドポイントは組織所有のプラグインに適用されます。メンバー所有のプラグインに対しては404を返します。メンバー所有のプラグインには代わりに共有があります。{target}は、プラグインの組織全体の設定を表すリテラルorganization、またはそのグループの設定を表すグループのrbac_group_ IDです。それ以外の値は400を返します。グループIDはGET /v1/organizations/rbac_groupsから取得します(スコープread:rbac_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スコープが必要です。

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

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

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

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

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}")
{
  "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つのグループの設定を削除します。そのグループのメンバーには、組織全体の値、または所属する他のグループの設定が適用されるようになります。組織全体の設定は、claude.aiと同様に、一度設定すると削除できません({target}がorganizationの場合は400を返します)。代わりにその値を変更してください。このプラグインの設定を保持していないグループは404を返します。レスポンスにはidの代わりに複合キーが含まれます。write:pluginsスコープが必要です。

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}")
{
  "type": "plugin_installation_setting_deleted",
  "plugin_id": "plugin_01Hq3vX8kZcN2mB7pR4tY9wL",
  "target": { "type": "rbac_group", "rbac_group_id": "rbac_group_01F3xQqQzXyWvUtSrQpOnMlK" }
}

プラグインの共有

共有はメンバー所有のプラグインにのみ存在し、このAPIでは読み取り専用です(共有を参照)。

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

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

client = anthropic.Anthropic()

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

# 必要に応じて後続のページを自動的に取得します。
for share in shares:
    print(f"plugin_id: {share.plugin_id}")
{
  "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はマーケットプレイスを読み取り、組織のマーケットプレイスのデフォルトのインストール設定を設定します。マーケットプレイス自体の作成、リポジトリへの接続、削除はclaude.aiで行います。

{
  "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プラグインのものと同じ形式です。
sourcemanual、github、gitlab、またはpublic_git。マーケットプレイスを参照してください。
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スコープが必要です。

client = anthropic.Anthropic()

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

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

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

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

client = anthropic.Anthropic()

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

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

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

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スコープが必要です。

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

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

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回の検証に制限されます(レート制限を参照)。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のみです。他のフォームフィールドは受け付けられません。

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

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}")
{
  "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"
        }
      ]
    }
  ]
}
フィールド説明
validmarketplace.jsonが正しい形式で、スキップされるプラグインがない場合はtrue。警告があってもfalseにはなりません。
ref読み取られたブランチの名前。ブランチが指定されずデフォルトブランチが読み取られた場合、コミットSHAの場合、またはアーカイブの場合はnullです。
commit_sha検証されたコミット。Gitホストからダウンロードされたアーカイブの場合は、ホストがZIPファイルのコメントフィールドに記録したコミット(存在する場合。検証はされません)。
total_plugin_countmarketplace.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として検証することもできます。レスポンスは同じレポートです:

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

コンテンツの問題によってリクエストが失敗することはありません。すべてのエンドポイントに共通するレスポンス(read:org_auditまたはread:compliance_org_dataのみを持つキーに対する403。エラーレスポンスとレート制限を参照)を除き、リクエスト自体は次の理由で失敗することがあります:

ステータス原因対処方法
400validate_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パートが存在しない、重複している、もしくはファイル名付きのファイルパートとして送信されていない、または他のフォームフィールドが存在する。リクエストを修正して再送信してください。
413validate_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秒後に安全に再送信できます(インストール設定を設定するを参照)。

ページネーション

リストエンドポイントは「opaque cursor」(不透明カーソル)を使用します。最初のリクエストは最大limit行とnext_pageカーソルを返します。次のリクエストでそのカーソルを変更せずにpageパラメータとして渡し、next_pageがnullになるまで繰り返してください。カーソル文字列は不透明なものとして扱い、自分で解析、変更、または構築しないでください。プラグインを一覧表示するは、next_pageが設定されたまま、limitより少ないプラグインを含むページ、またはプラグインを含まないページを返すことがあるため、next_pageがnullになるまでページのリクエストを続けてください。SDKのリストイテレーターは反復処理に応じて後続のページを取得しますが、最初の空のページで停止するため、プラグインのリストでは早期に終了する可能性があります。セキュリティインベントリのワークフローのようにすべてのプラグインが必要な場合は、各ページを自分でリクエストし、そのnext_pageをpageとして渡してください。

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

エラーレスポンス

エラーレスポンスは、エラーに記載されている標準の形式に従います。サポートに問い合わせる際は、レスポンス本文のrequest_idを伝えてください。

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

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

{
  "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_taken409この名前のプラグインがマーケットプレイスにすでに存在します。details.plugin_idがそのプラグインです。レスポンスを受け取れなかった作成リクエストを再試行している場合は、そのプラグインで処理を続行してください。plugin_idが存在しない場合、その名前はスタンドアロンのスキルによって使用されています。別の名前でアップロードするか、claude.aiでそのスキルを削除してください。
skill_name_taken409プラグインがライブラリマーケットプレイスにあり、そのスキルの1つが組織スキル(管理者がclaude.aiで組織全体向けにアップロードしたスキル)と同じ名前です。details.skill_nameがその名前を示します。どちらかの名前を変更するか、削除してください。
registration_pending503ファイルは保存されましたが、プラグインのスキルをまだメンバーが利用できる状態にできていません。アップロードの再試行を参照してください。
scan_pending409バージョンのコンテンツスキャンがまだ実行中です。完了後に再試行してください。
scan_failed400バージョンのコンテンツスキャンが失敗した、エラーになった、または判定に至らなかったため、そのバージョンは提供できません。別のバージョンを選択してください。
cmek_key_disabled, cmek_key_network_blocked400組織のカスタマー管理の暗号化キーが利用できません。カスタマー管理の暗号化キーを参照してください。

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

アップロードの再試行

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

エラーを返したアップロードでは何も保存されていません。ただし、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に記録され、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」(カスタマー管理の暗号化キー)を使用している場合、バージョンのdescription、release_notes、components、およびファイルはそのキーで暗号化されます。キーが利用できない間は、次のようになります。

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

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

関連項目

プライマリオーナーがスコープ付きキーを作成する場所です。

インストール設定で使用するrbac_group_ IDを提供するグループエンドポイントです。

プラグインの書き込みとメンバーのアーカイブのダウンロードが記録される場所です。

Claude Enterprise向けのプラグインとスキルの使用状況レポートです。

Was this page helpful?