Plugins API
Claude Enterprise組織内のプラグインを一覧化して管理します。プラグインとバージョンのアップロード、メンバーに提供するバージョンの選択、各プラグインを使用できるユーザーの制御、レビュー用のプラグインファイルのダウンロード、接続前のマーケットプレイスの検証を行えます。
Plugins APIでは、次の操作を行えます。
- Claude Enterprise組織内のすべての「plugin」(プラグイン)を一覧化する
- 独自のパイプラインからプラグインと新しいバージョンを公開する
- メンバーに提供するバージョンを選択する
- 各プラグインを使用できるユーザーを制御する
- レビュー用にプラグインファイルをダウンロードする
- Gitマーケットプレイスを接続する前に確認する
プラグインの使用状況のレポート(メンバーがどのプラグインやスキルをどのくらいの頻度で使用しているか)については、Analytics APIsを参照してください。
エンドポイント
このAPIは、5つのリソースにわたる18個のエンドポイントを公開しています。
| リソース | エンドポイント |
|---|---|
| プラグイン:組織内のすべてのプラグインの一覧表示、新しいプラグインのアップロード、プラグインの参照、メンバーに提供するバージョンの選択(ロールバックまたは昇格)、プラグインの削除 | GET /v1/organizations/pluginsPOST /v1/organizations/pluginsGET /v1/organizations/plugins/{plugin_id}POST /v1/organizations/plugins/{plugin_id}DELETE /v1/organizations/plugins/{plugin_id} |
| プラグインバージョン:プラグインのバージョン履歴の一覧表示、新しいバージョンのアップロード、バージョンの参照、バージョンのファイルのダウンロード | GET /v1/organizations/plugins/{plugin_id}/versionsPOST /v1/organizations/plugins/{plugin_id}/versionsGET /v1/organizations/plugins/{plugin_id}/versions/{version}GET /v1/organizations/plugins/{plugin_id}/versions/{version}/content |
| インストール設定:組織所有のプラグインを使用できるユーザーの読み取り、組織全体または1つのグループに対する設定、いずれかの設定の削除 | GET /v1/organizations/plugins/{plugin_id}/installation_settingsPOST /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_marketplacesGET /v1/organizations/plugin_marketplaces/{marketplace_id}POST /v1/organizations/plugin_marketplaces/{marketplace_id}POST /v1/organizations/plugin_marketplaces/validate_repositoryPOST /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ヘッダーで渡します。SDKまたはCLIが追加のページを自動的に取得する場合、limitは合計数ではなくページサイズを設定します(ページネーションを参照)。
APIキーは組織に属しており、作成した人が退職した後も引き続き機能します。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 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つずつ保持できます(グループはユーザー管理で管理されるロールベースのアクセス制御グループです)。メンバーは次のルールによって値を取得します。
- 組織全体の値は、プラグイン自身の組織全体の設定があればその値、なければマーケットプレイスのデフォルト、それもなければ
not_availableです。プラグインはこの値をorganization_installation_preferenceで報告し、マーケットプレイスのデフォルトから取得している間はorganization_installation_preference_inherited: trueとなります。 - プラグインの設定を保持するグループに属していないメンバーは、組織全体の値を取得します。
- 設定を保持する1つ以上のグループに属するメンバーは、代わりにそれらのグループの設定のうち最も許容度の高いものを取得します。順位は
required、auto_install、available、not_availableです。
グループの設定は、そのメンバーに対して組織全体の値を置き換えるものであり、追加されるものではありません。たとえば、組織全体の値がrequiredで、Pilotグループがavailableを保持している場合、Pilotのメンバーはavailableを取得します。プラグインをパイロットグループから組織全体に移行する場合は、組織全体の値を設定してから、グループの設定を削除してください。組織全体の値を設定すると、プラグインはマーケットプレイスのデフォルトを継承しなくなります。組織全体の設定を削除すると、プラグインはそのデフォルトに戻ります。
この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でアップロードしたバージョンは、コンテンツスキャンを待機することはありません。そのバージョンが提供バージョンになると、スキャンに合格するまでメンバーはプラグインを利用できなくなり、スキャンが失敗した場合は利用できないままになります。新しいバージョンのスキャン中もメンバーに現在のバージョンを使い続けてもらう場合は、先にプラグインを固定してください(バージョンと提供バージョンを参照)。
claude.aiで保存されたバージョンがスキャンを待機している間、提供バージョンは変わりません。APIでのアップロードが提供バージョンになると、待機は終了します。待機中だったバージョンは、誰かがそれを選択した場合にのみ提供されます。待機中のバージョンのスキャンを確認するには、そのバージョンを読み取ってください(プラグインのバージョンを一覧表示するを参照)。
アップロード後、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文字
- リクエストボディと展開後のアーカイブ:それぞれ最大200 MB。上限を超えるリクエストボディは、
- ZIPアーカイブはDEFLATEまたはSTORE圧縮を使用する必要があり、暗号化やシンボリックリンクを含めることはできません。
- 1つのマーケットプレイスに保持できるアイテムは最大500個です。これには、プラグインと、メンバーがそこに保持しているスタンドアロンスキルが含まれます。この上限と5,000ファイルの上限は現在の値であり、引き上げられる可能性があります。
ワークフローの例
リリースパイプラインから各ビルドを公開する
CIからタグ付けされたすべてのビルドをアップロードし、ビルドを提供するタイミングをパイプラインで決定します。
GET /v1/organizations/plugin_marketplaces?owner_type=organizationでアップロード先のマーケットプレイスを見つけます。ライブラリマーケットプレイスを使用する場合は、marketplace_idを省略します。- 最初のリリースでは、
POST /v1/organizations/pluginsでプラグインを作成します。以降のリリースでは、プラグインのlatest_version_idを記録してから、POST /v1/organizations/plugins/{plugin_id}/versionsでバージョンをアップロードします。アップロードのレスポンスが失われた場合は、プラグインを読み取り、latest_version_idが変わっていない場合にのみ再試行します(アップロードの再試行を参照)。 - 新しいビルドを確認している間もメンバーに現在のバージョンを使わせるには、
served_version_idを現在のバージョンに設定して、プラグインを一度固定します。以降、各アップロードは提供されずに保存されます。固定は元に戻せないため、提供したいすべてのビルドでステップ5が必要になります。 - コンテンツスキャンが有効な場合は、
content_scan.statusがprocessingでなくなるまでGET /v1/organizations/plugins/{plugin_id}/versions/{version}をポーリングします。passまたはwarnでcompletedになった場合にのみ昇格します。 POST /v1/organizations/plugins/{plugin_id}と{"served_version_id": "<the new version's ID>"}でビルドを昇格します。ロールバックするには、同じ方法で以前のバージョンのIDを送信します。
プラグインをパイロットグループに展開してから全員に展開する
-
GET /v1/organizations/rbac_groupsでパイロットグループのIDを調べます。この呼び出しにはread:rbac_groupsスコープが必要で、このスコープにはすべてのリンクされた組織向けに作成されたキーが必要です(ユーザー管理を参照)。次のステップにはwrite:pluginsが必要で、これはキーが作成された組織に対してのみ機能します。そのため、複数のリンクされた組織を持つエンタープライズでは、プラグインを保持する組織でこのキーを作成して両方のスコープを付与するか、それらのステップにはその組織で作成した2つ目のキーを使用してください。 -
組織全体の値を
not_availableのままにして、POST /v1/organizations/plugins/{plugin_id}/installation_settings/{target}({target}はグループのrbac_group_ID)でグループに独自の設定を付与します(たとえばauto_install)。グループのメンバーのみがプラグインを取得します。 -
パイロットが終了したら、次の呼び出しで組織全体の値を設定し、グループの設定を削除して、グループが再び組織に従うようにします。組織全体の値を設定すると、プラグインはマーケットプレイスのデフォルトを継承しなくなります。後で組織全体の設定を削除すると、プラグインはそのデフォルトに戻ります。
Pythonclient = 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のままになります。
セキュリティインベントリを同期させる
メンバーのセッションの外部に及ぶプラグインや、コンテンツスキャンに失敗したプラグインにフラグを立てる夜間ジョブを実行します。
next_pageがnullになるまでGET /v1/organizations/plugins?limit=100をページングします(ページネーションを参照)。実行のたびに、その一覧から各プラグインのreachとcontent_scanを読み取ってください。後から届いたスキャン判定ではupdated_atは変わりません。updated_atは通常、前回の実行以降に新しいコンテンツまたは新しい提供バージョンを持つプラグイン(新たにアーカイブをダウンロードする価値があるもの)を示します。待機中のバージョン(バージョンと提供バージョンを参照)は、提供バージョンになったときにupdated_atを変更します。保存されたときに変更するとは限りません。これに気付くには、latest_version_idを前回の実行時の値と比較してください。削除を検出できるのも完全な再一覧表示です。Gitの同期やアカウントの削除によって削除されたプラグインは、イベントなしで消えるためです。reachがremote(MCPサーバーまたはCLIを宣言している)であるプラグイン、またはcontent_scan.assessmentがfailまたはunknownであるプラグインにフラグを立てます。これらのフィールドは提供バージョンを表します。提供されていない新しいバージョンも確認するには、latest_version_idがserved_version_idと異なる場合にプラグインのバージョンを一覧表示してください(プラグインのバージョンを一覧表示するを参照)。- フラグを立てた各プラグインについて、
GET /v1/organizations/plugins/{plugin_id}/versions/{served_version_id}/contentで提供バージョンのアーカイブをダウンロードしてレビューします(バージョンのファイルをダウンロードするを参照)。ステップ2の条件を満たす提供されていないバージョンも、そのIDを指定してダウンロードしてください。 - レビュー中にメンバーからプラグインを取り上げるには、元に戻せる(組織所有の)オプションと恒久的なオプションについてプラグインを削除するを参照してください。
プラグイン
プラグインオブジェクトは、組織のいずれかのマーケットプレイスまたはメンバーの個人用マーケットプレイスにあるプラグインを表します(クイックスタートのレスポンスに完全な例が示されています)。その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_プレフィックス付き。メンバーに提供されるバージョンと、最新のバージョンです。バージョンと提供バージョンを参照してください。 |
served_version_pinned | プラグインが固定されるまではfalse(バージョンと提供バージョンを参照)、それ以降は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 | 組織所有:組織全体の値と、それがマーケットプレイスのデフォルトから取得されているかどうか(インストール設定を参照)。メンバー所有:どちらも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。リーチを参照してください。 |
updated_at | 提供バージョンが変わったとき、プラグインが固定されたとき、および通常は新しいバージョンが保存されたときに変わります。待機中のバージョン(バージョンと提供バージョンを参照)は、提供バージョンになったときにこれを変更します。保存されたときに変更するとは限りません。インストール設定、共有、新しいスキャン結果では変わりません。 |
content_scanオブジェクト:
| フィールド | 説明 |
|---|---|
status | スキャンの実行中はprocessing、完了したときはcompleted、完了できなかったとき(または、まれにこのレスポンス用に結果を読み取れなかったとき。この場合は後の読み取りで報告される可能性があります)はerroredです。スキャンがprocessingまたはerroredのバージョンはメンバーに提供されません。コンテンツを新しいバージョンとして再度アップロードすると、新たにスキャンされます。 |
assessment | statusがcompletedの場合に設定されます:pass(何も見つからなかった)、warn(使用をブロックしない問題が見つかった)、fail(使用をブロックする問題が見つかった)、またはunknown(判定なし)。それ以外の場合はnullです。 |
reason | warnとfailの場合、次のリストから主な懸念事項が示されます。それ以外の場合はnullであり、理由の記録が始まる前の古いスキャンでもnullです。 |
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 | このリストより新しいものを含む、その他の懸念事項。 |
plugin_プレフィックスのないplugin_idは400を返します。プレフィックスはあるものの解決できない、別の組織に属している、またはスタンドアロンスキルを参照しているplugin_idは404を返します。
プラグインの一覧表示
GET /v1/organizations/pluginsは、組織内のすべてのプラグインをcreated_atの降順で一覧表示します。対象は、組織のマーケットプレイスとメンバーの個人用マーケットプレイスの両方です。read:pluginsスコープが必要です。
次のフィルターを使用できます。
owner_type(organizationまたはuser)owner_user_id(user_プレフィックス付き。メンバーのプラグインを返します。メンバーが組織を離れた後も使用できます)marketplace_idcreated_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。エラーレスポンスを参照)に加えて、作成は次の理由で失敗することがあります:
| ステータス | 原因 | 対処方法 |
|---|---|---|
| 404 | marketplace_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}は、組織所有のプラグインのどのバージョンをメンバーに提供するかを変更します。ロールバックするには以前のバージョンを、提供されずに保存されたビルドを昇格させるには新しいバージョンを渡します。これによりプラグインは固定(pin)され、固定されたプラグインは現在、ここでも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_…"}を送信してください。 |
| 404 | served_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つのターゲットのインストール設定を削除します。{target}がorganizationの場合、プラグイン独自の組織全体の設定を削除します。その後、プラグインは再びマーケットプレイスのデフォルトを継承し(organization_installation_preference_inheritedがtrueになります)、以降のそのデフォルトの変更に従います。グループ設定は影響を受けません。グループのrbac_group_ IDの場合、そのグループの設定を削除します。グループのメンバーは組織全体の値、または所属する他のグループの設定にフォールバックします。独自の設定を保持していないターゲットは404を返します。これには、すでにマーケットプレイスのデフォルトを継承しているプラグインのorganizationターゲットも含まれます。この変更はプラグインのupdated_atを変更せず、Activity Feedに記録されます。レスポンスにはidの代わりに複合キーが含まれます。organizationターゲットの場合、そのtargetは{"type": "organization"}です。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 | プラグインのものと同じ形式です。 |
source | manual、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"
}
]
}
]
}| フィールド | 説明 |
|---|---|
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として検証することもできます。レスポンスは同じレポートです:
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。エラーレスポンスとレート制限を参照)を除き、リクエスト自体は次の理由で失敗することがあります:
| ステータス | 原因 | 対処方法 |
|---|---|---|
| 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秒後に安全に再送信できます(インストール設定を設定するを参照)。
ページネーション
リストエンドポイントはopaque cursor(不透明なカーソル)を使用します。最初のリクエストは最大limit行とnext_pageカーソルを返します。次のリクエストでそのカーソルを変更せずにpageパラメータとして渡し、next_pageがnullになるまで繰り返します。カーソル文字列は不透明なものとして扱ってください。自分で解析、変更、または構築しないでください。プラグインを一覧表示するは、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です。すべてのリストは新しい順に並べられます。
エラーレスポンス
エラーレスポンスは、エラーに記載されている標準の形式に従います。サポートに問い合わせる際は、レスポンス本文の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 | レート制限を超過しました。レート制限を参照してください。 |
| 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_taken | 409 | この名前のプラグインがマーケットプレイスにすでに存在します。details.plugin_idがそのプラグインです。レスポンスを受け取れなかった作成リクエストを再試行している場合は、そのプラグインで処理を続行してください。plugin_idが存在しない場合、その名前はスタンドアロンのスキルによって使用されています。別の名前でアップロードするか、claude.aiでそのスキルを削除してください。 |
skill_name_taken | 409 | プラグインがライブラリマーケットプレイスにあり、そのスキルの1つが組織スキル(管理者がclaude.aiで組織全体向けにアップロードしたスキル)と同じ名前です。details.skill_nameがその名前を示します。どちらかの名前を変更するか、削除してください。 |
registration_pending | 503 | ファイルは保存されましたが、プラグインのスキルをまだメンバーが利用できる状態にできていません。アップロードの再試行を参照してください。 |
scan_pending | 409 | バージョンのコンテンツスキャンがまだ実行中です。完了後に再試行してください。 |
scan_failed | 400 | バージョンのコンテンツスキャンが失敗した、エラーになった、または判定に至らなかったため、そのバージョンは提供できません。別のバージョンを選択してください。 |
cmek_key_disabled, cmek_key_network_blocked | 400 | 組織のカスタマー管理の暗号化キーが利用できません。カスタマー管理の暗号化キーを参照してください。 |
新しいコードが追加される場合があります。認識できないコードは、そのステータスと同じように扱ってください。
アップロードの再試行
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に記録され、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?