Follow Discord
Sweep 22 Oct 2026 · 21:04Z Build v2.1.309 528 read Stable v2.1.308 Latest v2.1.309 Next v2.1.309 Feeds RSS JSON llms.txt llms-full.txt Unofficial
One change · api

plugins-api changedmanage-claude/plugins-api

Nearest release: v2.1.309, published 3 hours before this site recorded the change. Shown because the two are within 24 hours of each other. Nothing here says the release caused the edit.

Recorded here
Lines+7added
Lines−7removed
From line 40 where the diff opens
First seen 1 Oct 2026 this site's first read of the page
Recorded edits10to this page, all time

The whole hunk

from line 40, old and new numbered
/
lines
from line 40
4040* Your primary owner creates an Admin API key with the `read:plugins` scope, the `write:plugins` scope, or both in [claude.ai > Organization settings > API](https://claude.ai/admin-settings/api-access). See [Create a key for a Claude Enterprise organization](https://platform.claude.com/docs/en/manage-claude/admin-api-keys#create-a-key-for-a-claude-enterprise-organization).
4141* Every request carries three headers: `x-api-key`, `anthropic-version: 2023-06-01`, and `anthropic-beta: ce-plugins-2026-09-01`.
4242 
43The SDK exposes these endpoints under `client.beta.organization` (csharp, go: `client.Beta.Organization`; java: `client.beta().organization()`; php: `$client->beta->organization`), and the [`ant` CLI](https://platform.claude.com/docs/en/cli-sdks-libraries/cli/quickstart) under `ant beta:organization`; they send the `anthropic-version` and `anthropic-beta` headers for you. The examples on this page use the SDK's default client, which, like the CLI, reads the Admin API key from the `ANTHROPIC_API_KEY` environment variable; the curl examples read the key from the same variable and pass it in the `x-api-key` header. Where an SDK or the CLI fetches more pages for you, `limit` sets the page size, not the total (see [Pagination](https://platform.claude.com/docs/en/manage-claude/plugins-api#pagination)).
43In Python, TypeScript, C#, Go, Java, PHP, and Ruby, the SDK exposes these endpoints under `client.beta.organization` (csharp, go: `client.Beta.Organization`; java: `client.beta().organization()`; php: `$client->beta->organization`), and the [`ant` CLI](https://platform.claude.com/docs/en/cli-sdks-libraries/cli/quickstart) under `ant beta:organization`; they send the `anthropic-version` and `anthropic-beta` headers for you. The examples on this page use the SDK's default client, which, like the CLI, reads the Admin API key from the `ANTHROPIC_API_KEY` environment variable; the curl examples read the key from the same variable and pass it in the `x-api-key` header. Where an SDK or the CLI fetches more pages for you, `limit` sets the page size, not the total (see [Pagination](https://platform.claude.com/docs/en/manage-claude/plugins-api#pagination)).
4444 
4545API keys belong to the organization and keep working after the person who created them leaves. Do not share them or check them into source control.
4646 
from line 762
762762 void main() throws Exception {
763763 AnthropicClient client = AnthropicOkHttpClient.fromEnv();
764764 
765 // Build the `files[]` part by hand so the archive is sent with its filename,
765 // Build the `files[]` part by hand so the archive is sent with its file name,
766766 // which the upload requires.
767767 var archive = MultipartField.<List<InputStream>>builder()
768768 .value(List.of(Files.newInputStream(Path.of("dist/sales-toolkit.zip"))))
from line 944
944944 }
945945 defer skillMd.Close()
946946 
947 // anthropic.File keeps each file's path within the plugin as the part's filename;
947 // anthropic.File keeps each file's path within the plugin as the part's file name;
948948 // a bare *os.File would be sent under its base name and the manifest would not be found.
949949 plugin, err := client.Beta.Organization.Plugins.New(context.Background(), anthropic.BetaOrganizationPluginNewParams{
950950 Files: []io.Reader{
from line 968
968968 void main() throws Exception {
969969 AnthropicClient client = AnthropicOkHttpClient.fromEnv();
970970 
971 // The `files` setters on PluginCreateParams take one filename for the whole
971 // The `files` setters on PluginCreateParams take one file name for the whole
972972 // list, so upload the plugin as one archive instead: a single hand-built
973 // part that carries the archive's filename, which the upload requires.
973 // part that carries the archive's file name, which the upload requires.
974974 var archive = MultipartField.<List<InputStream>>builder()
975975 .value(List.of(Files.newInputStream(Path.of("dist/sales-toolkit.zip"))))
976976 .filename("sales-toolkit.zip")
from line 1624
16241624 void main() throws Exception {
16251625 AnthropicClient client = AnthropicOkHttpClient.fromEnv();
16261626 
1627 // Build the `files[]` part by hand so the archive is sent with its filename,
1627 // Build the `files[]` part by hand so the archive is sent with its file name,
16281628 // which the upload requires.
16291629 var archive = MultipartField.<List<InputStream>>builder()
16301630 .value(List.of(Files.newInputStream(Path.of("dist/sales-toolkit.zip"))))
from line 3086
30863086 void main() {
30873087 AnthropicClient client = AnthropicOkHttpClient.fromEnv();
30883088 
3089 // Pass a Path so the `archive` part is sent with a filename, which this endpoint requires.
3089 // Pass a Path so the `archive` part is sent with a file name, which this endpoint requires.
30903090 var params = PluginMarketplaceValidateArchiveParams.builder()
30913091 .archive(Path.of("marketplace.zip"))
30923092 .build();
Feedback