Claude Platform Docs

플러그인 버전 생성

$ ant beta:organization:plugins:versions create
POST/v1/organizations/plugins/{plugin_id}/versions

새 버전의 파일을 업로드하여 조직 소유 플러그인에 버전을 추가합니다. 플러그인의 제공 버전이 고정되지 않은 한, 추가된 버전이 구성원에게 제공되는 버전이 됩니다.

업로드는 플러그인 생성과 동일한 multipart/form-data 형식입니다. 버전의 파일(files, 각 파트는 files[]로 전송)과 선택 사항인 release_notes를 포함합니다. 업로드된 매니페스트의 name은 플러그인의 name과 같아야 합니다. 저장된 버전을 반환합니다. 플러그인이 어떤 버전을 제공하는지 확인하려면 플러그인을 다시 조회하세요.

manual 마켓플레이스에 있는 플러그인만 업로드를 받습니다. 리포지토리에서 동기화된 플러그인은 리포지토리에서 버전을 가져옵니다. 플러그인이 조직의 라이브러리 마켓플레이스에 있는 경우, 조직 스킬(관리자가 claude.ai에서 조직 전체를 위해 업로드한 스킬)과 같은 이름의 스킬을 추가하는 버전은 409로 거부됩니다. 이때 error_code는 skill_name_taken이며 해당 이름은 details.skill_name에 포함됩니다. error_code가 registration_pending인 503은 버전이 저장되었지만 아직 사용할 수 없음을 의미합니다. 이후 해당 플러그인에서 버전을 생성하면 등록이 완료됩니다.

실제 예시는 Plugins API 가이드의 버전 생성을 참조하세요.

허용되는 자격 증명: write:plugins 범위가 있는 Admin API 키.

모든 요청에는 베타 헤더 anthropic-beta: ce-plugins-2026-09-01을 포함해야 합니다. 이 헤더가 없는 요청은 엔드포인트가 존재하지 않는 것과 똑같이 404를 반환합니다. Plugins API는 베타 버전이며 Claude Enterprise 조직에서만 사용할 수 있습니다. Claude Platform(Claude Console) 조직이나 HIPAA 준비가 활성화된 조직에서는 사용할 수 없습니다.

Parameters
--plugin-id: string⁠Path parameter

ID of the Plugin (prefixed plugin_).

--file: array of string

The version's files: one part per file, the part's filename being the file's path within the Plugin (for example skills/review-pr/SKILL.md), or a single .zip or .plugin archive holding them all. On the wire each part is named files[], and a part named plain files is not read; with cURL, -F 'files[]=@SKILL.md;filename=skills/review-pr/SKILL.md'. The files must include the manifest, .claude-plugin/plugin.json.

--release-notes: optional string

Release notes stored with the version and shown in its version history in claude.ai; up to 5,000 characters.

maxLength5000
--beta: optional array of AnthropicBeta⁠Header parameter

This endpoint is in beta: requests must send ce-plugins-2026-09-01 in this header.

Returns
beta_plugin_version: object{ type: "plugin_version", id, components, 9 more }
type: "plugin_version"

Always plugin_version.

id: string

The version's ID.

components: array of BetaPluginComponent { type, description, name }

What the version contains; null when not enumerated.

type: "agent" or "cli" or "command" or 3 more

The kind of component.

One of the following:
"agent"
"cli"
"command"
"hook"
"mcp_server"
"skill"
description: string

What the component declares about itself; always null for MCP servers, hooks, and CLIs.

name: string

The component's name: a skill's, command's or agent's name, an MCP server's key in the manifest, the event a hook runs on, or a CLI's executable.

content_scan: object{ assessment, reason, status }

This version's content scan; null when it has not been scanned.

assessment: "fail" or "pass" or "unknown" or "warn"

The scan's verdict; set only when status is completed.

One of the following:
"fail"
"pass"
"unknown"
"warn"
reason: string

The primary mechanism behind a warn or fail, such as credential-exposure or guardrail-tampering; a mechanism this API does not yet name reads as other. Null on a pass, whenever assessment is null, and when no mechanism is reported for the verdict.

status: "completed" or "errored" or "processing"

processing while a scan runs, completed when it ran to completion, errored when it could not run or its outcome cannot be read.

One of the following:
"completed"
"errored"
"processing"
created_at: string

RFC 3339.

formatdate-time

Who uploaded this version; null when not recorded.

One of the following:
beta_plugin_user_actor: object{ type: "user_actor", email_address, user_id }
type: "user_actor"

A member of the organization.

email_address: string

The member's email address; may be null, for example when they are no longer a member of the organization.

user_id: string

The member's User ID.

beta_plugin_api_actor: object{ type: "api_actor", api_key_id }
type: "api_actor"

An Admin API key, in the same form the Compliance API activity feed uses for it.

api_key_id: string

The key's ID.

description: string

The manifest's description; null when it declares none.

display_name: string

The manifest's display name; null when it declares none.

manifest_version: string

The manifest's version, normalized for display: one leading v or V is dropped, and the result is returned only if it is 1 to 64 characters, starts with a digit, and uses only ASCII letters, digits, ., +, and -; otherwise null. For example, "v1.4.0" is returned as "1.4.0", and "latest" as null. For a synchronized plugin, the version of its marketplace.json entry can take the place of the manifest's version. It is also null for a version stored before claude.ai began recording this field (August 2026).

plugin_id: string

The Plugin's ID.

reach: "contained" or "privileged" or "remote"

How far the version reaches: remote, privileged, contained, or null, as defined on the Plugin's reach.

One of the following:
"contained"
"privileged"
"remote"
release_notes: string

As supplied with the upload; null when none were supplied.

플러그인 버전 생성
ant beta:organization:plugins:versions create \
  --api-key my-anthropic-api-key \
  --plugin-id plugin_id \
  --file 'Example data'
Returns Examples
Response 200
{
  "id": "pluginver_01KaZmQpRsTuVwXyZ2b4c6d8",
  "components": [
    {
      "description": "description",
      "name": "review-pr",
      "type": "skill"
    }
  ],
  "content_scan": {
    "assessment": "warn",
    "reason": "credential-exposure",
    "status": "completed"
  },
  "created_at": "2026-03-14T09:26:53.589793Z",
  "created_by": {
    "email_address": "user@example.com",
    "type": "user_actor",
    "user_id": "user_01WCz1FkmYMm4gnmykNKUu3Q"
  },
  "description": "Reviews pull requests against your team's conventions.",
  "display_name": "Code Review Helper",
  "manifest_version": "1.2.0",
  "plugin_id": "plugin_01JyHfbRkZvD1gW7oTqXc3Ne",
  "reach": "contained",
  "release_notes": "Adds a review checklist for database migrations.",
  "type": "plugin_version"
}