Claude Platform Docs

Validate Plugin Marketplace Archive

$ ant beta:organization:plugin-marketplaces validate-archive
POST/v1/organizations/plugin_marketplaces/validate_archive

Check whether a plugin marketplace, uploaded as a .zip of the marketplace directory, would synchronize into claude.ai, without connecting or storing it.

To check a public GitHub repository instead, use Validate Plugin Marketplace Repository.

The report says whether marketplace.json is well-formed, which plugins a synchronization would skip and why, and which plugins would synchronize only in part, with some files left out. An archive that cannot be read as a marketplace is reported, not refused: the response is a report with valid: false. Plugin sources outside the marketplace are fetched anonymously from GitHub, so a private one is reported as not found; a source on any other host is not fetched here, and the report notes that it will be checked when the marketplace actually synchronizes.

Nothing is recorded on the Compliance API activity feed.

For a worked example, see Validate marketplace content in the Plugins API guide.

Accepted credentials: an Admin API key with the read:plugins or write:plugins scope; read:org_audit and read:compliance_org_data do not grant it.

Every request must include the beta header anthropic-beta: ce-plugins-2026-09-01. A request without it returns 404, exactly as if the endpoint did not exist. The Plugins API is in beta and is available to Claude Enterprise organizations only. It is not available to Claude Platform (Claude Console) organizations, or to organizations with HIPAA readiness enabled.

Parameters
--archive: string

A .zip of the marketplace directory (its contents at the root, or wrapped in one folder as a Git host's download produces), sent as a file part with a filename; DEFLATE- or STORE-compressed, at most 32 MB. A part sent without a filename, a second archive part, or any other form field is a 400; a larger archive is a 413.

formatbinary
--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_marketplace_validation_report: object{ type: "plugin_marketplace_validation_report", commit_sha, manifest_error, 6 more }

The outcome of validating plugin marketplace content: a report, not a stored object, so nothing in it can be retrieved afterwards.

type: "plugin_marketplace_validation_report"

Always plugin_marketplace_validation_report.

commit_sha: string

The full SHA of the commit that was validated: for a repository, the commit that was read; for an uploaded archive, the commit recorded in the archive's comment (as a Git host's download writes it; not verified), else null.

manifest_error: string

Set when nothing could be validated: the repository or archive could not be read, or marketplace.json is missing, malformed or over a limit. Null otherwise.

manifest_error_code: string

A stable identifier for manifest_error; null when that is.

plugin_errors: array of BetaPluginMarketplaceValidationPluginError { error, error_code, name }

One entry per plugin a synchronization would skip entirely, keyed by the plugin's name in marketplace.json.

error: string

Why the plugin would be skipped by a synchronization.

error_code: string

A stable identifier for the reason — the value to branch on.

name: string

The plugin's name, as its entry in marketplace.json declares it.

plugin_warnings: array of BetaPluginMarketplaceValidationPluginWarnings { name, warnings }

One entry per plugin that would synchronize with some of its contents left out, keyed by the plugin's name in marketplace.json.

name: string

The plugin's name, as its entry in marketplace.json declares it.

warnings: array of BetaPluginMarketplaceValidationPluginWarning { error_code, message }

The parts of the plugin a synchronization would leave out.

error_code: string

A stable identifier for the kind of warning.

message: string

What would be left out, and why.

ref: string

For a repository, the branch that was read by name: the one requested, or else the branch a synchronization of this repository is set to read. Null when no branch is named or set and the repository's default branch was read, for a request by commit SHA, and for an uploaded archive.

total_plugin_count: number

How many plugins marketplace.json declares; 0 when it could not be read.

valid: boolean

True when marketplace.json is well-formed and no plugin would be skipped; warnings never make it false.

Validate Plugin Marketplace Archive
ant beta:organization:plugin-marketplaces validate-archive \
  --api-key my-anthropic-api-key \
  --archive 'Example data'
Returns Examples
Response 200
{
  "commit_sha": "9fceb02d0ae598e95dc970b74767f19372d61af8",
  "manifest_error": "manifest_error",
  "manifest_error_code": "marketplace_sync_manifest_not_found",
  "plugin_errors": [
    {
      "error": "error",
      "error_code": "marketplace_sync_plugin_missing_manifest",
      "name": "name"
    }
  ],
  "plugin_warnings": [
    {
      "name": "name",
      "warnings": [
        {
          "error_code": "marketplace_sync_zipball_symlink_dangling",
          "message": "message"
        }
      ]
    }
  ],
  "ref": "main",
  "total_plugin_count": 0,
  "type": "plugin_marketplace_validation_report",
  "valid": false
}