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

One read of Claude Developer Platformapi-20261021T220722Z

82 pages moved out of 808 read.

Pages moved 82 significant first
Pages read 808 in this capture
Captured 22:07 UTC
Corpus hash dd90a8d0c9c2 index-hash

What this read moved

26-50 of 82, page 2 of 4

This capture is too large to show at once. Changes 26-50 of 82 are below, significant first; the rest are on the following screens.

build-with-claude/token-counting Changed · +6 / -5 lines

from line 175
175175 client = Anthropic::Client.new
176176 
177177 response = client.messages.count_tokens(
178 model: "claude-opus-5-5",
178 model: Anthropic::Model::CLAUDE_OPUS_5_5,
179179 system: "You are a scientist",
180180 messages: [
181181 { role: "user", content: "Hello, Claude" }
from line 443
443443 client = Anthropic::Client.new
444444 
445445 response = client.messages.count_tokens(
446 model: "claude-opus-5-5",
446 model: Anthropic::Model::CLAUDE_OPUS_5_5,
447447 tools: [
448448 {
449449 name: "get_weather",
from line 503
503503 ```
504504 
505505 ```bash CLI
506 curl -s "https://platform.claude.com/docs/images/vision-example.jpg" -o ./vision-example.jpg
506 curl -s "https://platform.claude.com/docs/images/vision-example.jpg" \
507 -o ./vision-example.jpg
507508 
508509 ant messages count-tokens <<'YAML'
509510 model: claude-opus-5-5
from line 752
751752 client = Anthropic::Client.new
752753 
753754 response = client.messages.count_tokens(
754 model: "claude-opus-5-5",
755 model: Anthropic::Model::CLAUDE_OPUS_5_5,
755756 messages: [
756757 {
757758 role: "user",
from line 1355
13541355 pdf_base64 = Base64.strict_encode64(File.binread("/path/to/document.pdf"))
13551356 
13561357 response = client.messages.count_tokens(
1357 model: "claude-opus-5-5",
1358 model: Anthropic::Model::CLAUDE_OPUS_5_5,
13581359 messages: [
13591360 {
13601361 role: "user",

build-with-claude/vision Changed · +3 / -4 lines

from line 266
266266 image_data = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGP4z8AAAAMBAQDJ/pLvAAAAAElFTkSuQmCC"
267267 
268268 message = client.messages.create(
269 model: "claude-opus-5-5",
269 model: Anthropic::Model::CLAUDE_OPUS_5_5,
270270 max_tokens: 1024,
271271 messages: [
272272 {
from line 575
575575 https://platform.claude.com/docs/images/vision-example.jpg
576576 
577577 # First, upload your image to the Files API
578 ant files upload \
579 --file ./vision-example.jpg
578 ant files upload --file ./vision-example.jpg
580579 
581580 # Then use the file_id from the upload response in your message
582581 ant messages create <<YAML
from line 1176
11771176 image2_data = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGNgYPgPAAEDAQAIicLsAAAAAElFTkSuQmCC"
11781177 
11791178 message = client.messages.create(
1180 model: "claude-opus-5-5",
1179 model: Anthropic::Model::CLAUDE_OPUS_5_5,
11811180 max_tokens: 1024,
11821181 messages: [
11831182 {

cli-sdks-libraries/overview Changed · +7 / -7 lines

from line 61
6161| Tool | Latest version | Package |
6262| ---------- | -------------- | ----------------------------------------------------------------------------------------------------- |
6363| ant CLI | `2.0.0` | [`github.com/anthropics/anthropic-cli`](https://github.com/anthropics/anthropic-cli/releases) |
64| Python | `2.0.0` | [`anthropic`](https://pypi.org/project/anthropic/) |
65| TypeScript | `1.0.0` | [`@anthropic-ai/sdk`](https://www.npmjs.com/package/@anthropic-ai/sdk) |
66| C# | `13.0.0` | [`Anthropic`](https://www.nuget.org/packages/Anthropic) |
67| Go | `2.0.0` | [`github.com/anthropics/anthropic-sdk-go`](https://pkg.go.dev/github.com/anthropics/anthropic-sdk-go) |
68| Java | `3.0.0` | [`com.anthropic:anthropic-java`](https://central.sonatype.com/artifact/com.anthropic/anthropic-java) |
69| PHP | `1.0.0` | [`anthropic-ai/sdk`](https://packagist.org/packages/anthropic-ai/sdk) |
70| Ruby | `2.0.0` | [`anthropic`](https://rubygems.org/gems/anthropic) |
64| Python | `2.1.0` | [`anthropic`](https://pypi.org/project/anthropic/) |
65| TypeScript | `1.1.0` | [`@anthropic-ai/sdk`](https://www.npmjs.com/package/@anthropic-ai/sdk) |
66| C# | `13.1.0` | [`Anthropic`](https://www.nuget.org/packages/Anthropic) |
67| Go | `2.1.0` | [`github.com/anthropics/anthropic-sdk-go`](https://pkg.go.dev/github.com/anthropics/anthropic-sdk-go) |
68| Java | `3.1.0` | [`com.anthropic:anthropic-java`](https://central.sonatype.com/artifact/com.anthropic/anthropic-java) |
69| PHP | `1.1.0` | [`anthropic-ai/sdk`](https://packagist.org/packages/anthropic-ai/sdk) |
70| Ruby | `2.1.0` | [`anthropic`](https://rubygems.org/gems/anthropic) |
7171 
7272The same versions are available as JSON at `https://platform.claude.com/docs/sdk-versions.json`.
7373 

cli-sdks-libraries/sdks/ruby Changed · +8 / -8 lines

from line 32
3232message = anthropic.messages.create(
3333 max_tokens: 1024,
3434 messages: [{role: "user", content: "Hello, Claude"}],
35 model: :"claude-opus-5-5"
35 model: Anthropic::Model::CLAUDE_OPUS_5_5
3636)
3737 
3838message.content.each do |block|
from line 51
5151stream = anthropic.messages.stream(
5252 max_tokens: 1024,
5353 messages: [{role: "user", content: "Hello, Claude"}],
54 model: :"claude-opus-5-5"
54 model: Anthropic::Model::CLAUDE_OPUS_5_5
5555)
5656 
5757stream.each do |message|
from line 68
6868stream = anthropic.messages.stream(
6969 max_tokens: 1024,
7070 messages: [{role: :user, content: "Say hello there!"}],
71 model: :"claude-opus-5-5"
71 model: Anthropic::Model::CLAUDE_OPUS_5_5
7272)
7373 
7474stream.text.each do |text|
from line 100
100100 
101101# Automatically handles tool execution loop
102102anthropic.beta.messages.tool_runner(
103 model: "claude-opus-5-5",
103 model: Anthropic::Model::CLAUDE_OPUS_5_5,
104104 max_tokens: 1024,
105105 messages: [{role: "user", content: "What's 15 * 7?"}],
106106 tools: [Calculator.new]
from line 121
121121 message = anthropic.messages.create(
122122 max_tokens: 1024,
123123 messages: [{role: "user", content: "Hello, Claude"}],
124 model: :"claude-opus-5-5"
124 model: Anthropic::Model::CLAUDE_OPUS_5_5
125125 )
126126rescue Anthropic::Errors::APIConnectionError => e
127127 puts("The server could not be reached")
from line 262
262262anthropic.messages.create(
263263 max_tokens: 1024,
264264 messages: [Anthropic::MessageParam.new(role: "user", content: "Hello, Claude")],
265 model: :"claude-opus-5-5"
265 model: Anthropic::Model::CLAUDE_OPUS_5_5
266266)
267267```
268268 
from line 274
274274anthropic.messages.create(
275275 max_tokens: 1024,
276276 messages: [{role: "user", content: "Hello, Claude"}],
277 model: :"claude-opus-5-5"
277 model: Anthropic::Model::CLAUDE_OPUS_5_5
278278)
279279 
280280# You can also splat a full Params class:
from line 281
281281params = Anthropic::MessageCreateParams.new(
282282 max_tokens: 1024,
283283 messages: [Anthropic::MessageParam.new(role: "user", content: "Hello, Claude")],
284 model: :"claude-opus-5-5"
284 model: Anthropic::Model::CLAUDE_OPUS_5_5
285285)
286286anthropic.messages.create(**params)
287287```

manage-claude/inference-hooks-endpoint Changed · +30 / -7 lines

from line 258
258258 
259259`tool_info` says who runs or provides the tool, not what the tool can reach. It is one of four kinds, told apart by its `type` field, and each kind carries its own fields. Anthropic sends the first of the following kinds that fits the tool. New kinds may appear: accept a `type` you don't recognize, and for such a kind rely only on `type`.
260260 
261An optional field that doesn't apply is left out, never `null`, so a `tool_info` can be just `{"type": "client"}`. `tool_name` is chosen by whoever defined the tool, and a server's `toolset_name` by whoever wrote the request, so don't treat either as a trust boundary.
261An optional field that doesn't apply is left out, never `null`, so a `tool_info` can be just `{"type": "client"}`. `tool_name` is chosen by whoever defined the tool, and a server's `toolset_name` by whoever wrote the request or named the connector. Don't treat either as a trust boundary.
262262 
263263### Platform tools
264264 
from line 301
301301 
302302A third-party tool is one on a server that Anthropic knows of, such as a claude.ai connector or an MCP server that the request names in `mcp_servers`. This doesn't mean Anthropic has vetted the server. In voice mode, a call to a claude.ai connector's tool is `"client"` instead.
303303 
304| Field | Present | Description |
305| ----------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
306| `type` | Always | `"third_party"` |
307| `toolset_name` | Optional | The name the request gives the server. |
308| `origin` | Optional | The scheme, host, and non-default port of the server's URL. It can be a private or local address, `localhost` included. An absent `origin` means unknown, not safe. |
309| `verified_origin` | Whenever `origin` is | `true` only when Anthropic's servers connect to the server themselves. Treat `false` as an origin that Anthropic hasn't confirmed. |
304| Field | Present | Description |
305| ----------------- | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
306| `type` | Always | `"third_party"` |
307| `toolset_name` | Optional | For a server in `mcp_servers`, the name the request gives the server. For any other server, such as a claude.ai connector, the server's name, copied from `tool_name`. |
308| `origin` | Optional | The scheme, host, and non-default port of the server's URL. It can be a private or local address, `localhost` included. An absent `origin` means unknown, not safe. |
309| `verified_origin` | Whenever `origin` is | `true` only when Anthropic's servers connect to the server themselves. Treat `false` as an origin that Anthropic hasn't confirmed. |
310310 
311311A `tool_use` block for a tool on an MCP server that the request names `crm` in `mcp_servers`:
312312 
from line 326
326326 }
327327}
328328```
329 
330A `tool_use` block for a tool on a Gmail connector, called in a claude.ai chat:
331 
332```json
333{
334 "type": "tool_use",
335 "id": "toolu_01DeFgHiJkLmNoPqRsTuVwXy",
336 "tool_name": "mcp__Gmail__search_threads",
337 "input": {
338 "query": "from:[email protected] newer_than:30d"
339 },
340 "tool_info": {
341 "type": "third_party",
342 "toolset_name": "Gmail",
343 "origin": "https://gmail.mcp.example.com",
344 "verified_origin": false
345 }
346}
347```
348 
349For a claude.ai connector, `verified_origin` can be `false` even when Anthropic's servers connect to the server themselves.
350 
351A name copied from `tool_name` can differ from the name the user sees: `mcp__Google_Drive__search_files` gives `Google_Drive`, not `Google Drive`. It can also end in a short suffix (`Gmail-1a2b3c4d`), for example when another of the user's connectors has the same name. The name isn't a stable identifier and doesn't prove which server the tool is on. When `tool_name` has no server name in it, `toolset_name` is left out.
329352 
330353### Client tools
331354 

manage-claude/plugins-api Changed · +22 / -17 lines

#### Failed scans an administrator allowed

from line 260
260260* `latest_version_id`: the newest version
261261* `served_version_id`: the version members are served
262262 
263By default `served_version_pinned` is `false`: the served version normally follows the newest one. When content scanning is on, a version saved in claude.ai might **wait** for its content scan: it is stored but not served at once. This page uses "wait" only for a version saved in claude.ai, not for one that a member or an administrator publishes into a plugin. While scanning is on, a waiting version is served only after its scan completes with `pass` or `warn`. While a version waits, `served_version_id` names an earlier version than `latest_version_id`. Do not poll until the two IDs match: they might stay different, for example when the scan fails.
263By default `served_version_pinned` is `false`: the served version normally follows the newest one. When content scanning is on, a version saved in claude.ai might **wait** for its content scan: it is stored but not served at once. This page uses "wait" only for a version saved in claude.ai, not for one that a member or an administrator publishes into a plugin. While scanning is on, a waiting version is served only when its `content_scan` reads `completed` with `pass` or `warn`. While a version waits, `served_version_id` names an earlier version than `latest_version_id`. Do not poll until the two IDs match: they might stay different, for example when the scan fails.
264264 
265265Choosing a version with `POST /v1/organizations/plugins/{plugin_id}` **pins** the plugin (`served_version_pinned: true`). So does an administrator choosing a version in claude.ai, or accepting a member's request to publish into the plugin. From then on, new uploads are stored and advance `latest_version_id`, but members keep the pinned version until you point `served_version_id` at another one. A plugin whose two pointers differ has a stored version that is not being served.
266266 
267This lets a release pipeline upload each build, test it, and then promote it. To have your pipeline determine when each build is served, pin the plugin once by setting `served_version_id` to its current version; from then on, promote each build you want served. With content scanning on, that first pin returns `409 scan_pending` until the current version's scan completes, and `400 scan_failed` if the scan completed with `fail` or `unknown`, or errored (`warn` is accepted). A pinned plugin cannot currently be unpinned, here or in claude.ai.
267This lets a release pipeline upload each build, test it, and then promote it. To have your pipeline determine when each build is served, pin the plugin once by setting `served_version_id` to its current version; from then on, promote each build you want served. With content scanning on, that first pin returns `409 scan_pending` until the current version's scan completes, and `400 scan_failed` if the scan reads `fail` or `unknown`, or errored (`warn` is accepted). A pinned plugin cannot currently be unpinned, here or in claude.ai.
268268 
269269To roll back, set `served_version_id` to an earlier version. Roll forward the same way.
270270 
from line 301
301301 
302302Content scanning is an organization setting in claude.ai. When it is on, newly stored versions are scanned (claude.ai exempts a few) and the result is reported in `content_scan`; a version that was not scanned, for example one stored before scanning was turned on, has `content_scan: null`. Scanning is not offered to organizations that use customer-managed encryption keys or zero data retention.
303303 
304While scanning is on, members are served a plugin only when its served version's scan is `completed` with `pass` or `warn`. While the scan runs, or after it fails, errors, or reaches no verdict, the plugin is withheld from members, and an earlier version is not served in its place. A version that was never scanned (`content_scan: null`) is served normally.
304While scanning is on, members are served a plugin only when its served version's scan is `completed` with `pass` or `warn`. While the scan is `processing` or `errored`, or reads `fail` or `unknown`, the plugin is withheld from members, and an earlier version is not served in its place. A version that was never scanned (`content_scan: null`) is served normally.
305305 
306A version you upload through this API never waits for its content scan. When it becomes the served version, members lose the plugin until its scan completes with `pass` or `warn`. If members should keep the current version while a new one is scanned, pin the plugin first (see [Versions and the served version](https://platform.claude.com/docs/en/manage-claude/plugins-api#versions-and-the-served-version)).
306A version you upload through this API never waits for its content scan. When it becomes the served version, members lose the plugin until its `content_scan` reads `completed` with `pass` or `warn`. If members should keep the current version while a new one is scanned, pin the plugin first (see [Versions and the served version](https://platform.claude.com/docs/en/manage-claude/plugins-api#versions-and-the-served-version)).
307307 
308308While a version saved in claude.ai waits for its scan, the served version does not change. When your API upload becomes the served version, any wait ends: the waiting version is served only if someone chooses it. To see a waiting version's scan, read the version (see [List a plugin's versions](https://platform.claude.com/docs/en/manage-claude/plugins-api#list-a-plugins-versions)).
309309 
310After an upload, `content_scan.status` is `processing` and the verdict arrives asynchronously. Read the version to see it; the plugin object shows only its served version's scan. Changing the served version to a version whose scan is still running returns `409 scan_pending`; to one whose scan failed, `400 scan_failed`.
310After an upload, `content_scan.status` is `processing` and the verdict arrives asynchronously. Read the version to see it; the plugin object shows only its served version's scan. While scanning is on, changing the served version to a version whose scan is still running returns `409 scan_pending`, and changing it to one whose scan reads `fail` or `unknown`, or errored, returns `400 scan_failed`.
311311 
312#### Failed scans an administrator allowed
313 
314In claude.ai, an administrator can allow a version whose scan failed. This API can then report that scan as `completed` with `warn` and the failed scan's `reason`. While it does, the rules for `warn` apply: the version can be served to members, and you can make it the served version. Nothing in the response shows that it was allowed, so a `warn` is either a warning or a failed scan that an administrator allowed. Allowing a version whose scan reads `warn` does not change its `content_scan`. When a version stops being allowed, this API reports the verdict of its newest completed scan, and a served version whose scan reads `fail` or `unknown` is withheld from members.
315 
312316### Reach
313317 
314318`reach` summarizes, in one value, how far a version reaches on members' machines and beyond:
from line 497
493497 
494498### Keep a security inventory in sync
495499 
496Run a nightly job that flags plugins reaching outside the member's session or failing their content scan.
500Run a nightly job that flags plugins that reach outside the member's session or whose content scan reads `warn`, `fail`, or `unknown`.
497501 
4981. Page through [`GET /v1/organizations/plugins?limit=100`](https://platform.claude.com/docs/en/manage-claude/plugins-api#list-plugins) until `next_page` is `null` (see [Pagination](https://platform.claude.com/docs/en/manage-claude/plugins-api#pagination)). Read each plugin's `reach` and `content_scan` from that list on every run: a scan verdict that arrives later does not move `updated_at`. `updated_at` normally tells you which plugins have new content or a new served version since the last run (worth a fresh archive download). A waiting version (see [Versions and the served version](https://platform.claude.com/docs/en/manage-claude/plugins-api#versions-and-the-served-version)) moves `updated_at` when it becomes the served version, not necessarily when it is stored. To notice one, compare `latest_version_id` with the value from your last run. The full re-list is also what catches removals, because a plugin removed by a Git synchronization or an account deletion disappears without an event.
4992. Flag each plugin whose `reach` is `remote` (it declares an MCP server or a CLI), or whose `content_scan.assessment` is `fail` or `unknown`. These fields describe the served version. To also check a newer version that is not served, list the plugin's versions when `latest_version_id` differs from `served_version_id` (see [List a plugin's versions](https://platform.claude.com/docs/en/manage-claude/plugins-api#list-a-plugins-versions)).
5021. Page through [`GET /v1/organizations/plugins?limit=100`](https://platform.claude.com/docs/en/manage-claude/plugins-api#list-plugins) until `next_page` is `null` (see [Pagination](https://platform.claude.com/docs/en/manage-claude/plugins-api#pagination)). Read each plugin's `reach` and `content_scan` from that list on every run: a change to `content_scan` alone, such as a verdict that arrives later, does not move `updated_at`. `updated_at` normally tells you which plugins have new content or a new served version since the last run (worth a fresh archive download). A waiting version (see [Versions and the served version](https://platform.claude.com/docs/en/manage-claude/plugins-api#versions-and-the-served-version)) moves `updated_at` when it becomes the served version, not necessarily when it is stored. To notice one, compare `latest_version_id` with the value from your last run. The full re-list is also what catches removals, because a plugin removed by a Git synchronization or an account deletion disappears without an event.
5032. Flag each plugin whose `reach` is `remote` (it declares an MCP server or a CLI), or whose `content_scan.assessment` is `warn`, `fail`, or `unknown`. A `warn` can also be a failed scan that an administrator allowed (see [Failed scans an administrator allowed](https://platform.claude.com/docs/en/manage-claude/plugins-api#failed-scans-an-administrator-allowed)); leave `warn` out only if you accept every failed scan that an administrator allows. These fields describe the served version. To also check a newer version that is not served, list the plugin's versions when `latest_version_id` differs from `served_version_id` (see [List a plugin's versions](https://platform.claude.com/docs/en/manage-claude/plugins-api#list-a-plugins-versions)).
5005043. For each flagged plugin, download the served version's archive for review with `GET /v1/organizations/plugins/{plugin_id}/versions/{served_version_id}/content` (see [Download a version's files](https://platform.claude.com/docs/en/manage-claude/plugins-api#download-a-versions-files)). Also download any unserved version that meets step 2's test, by its ID.
5015054. To take a plugin away from members while you review it, see [Delete a plugin](https://platform.claude.com/docs/en/manage-claude/plugins-api#delete-a-plugin) for the reversible (organization-owned) and permanent options.
502506 
from line 522
518522| `content_scan` | The served version's scan result, an object with `status`, `assessment`, and `reason` (described after this table). `null` when it was never scanned. |
519523| `components` | The served version's components, each `{"type", "name", "description"}` with `type` one of `skill`, `mcp_server`, `command`, `agent`, `hook`, or `cli`, listed in that type order and then by name. For an MCP server, `name` is its key in the manifest; for a hook, the event it runs on; for a CLI, the executable's name. `description` is always `null` for MCP servers, hooks, and CLIs. `null` when not recorded. |
520524| `reach` | `contained`, `privileged`, or `remote`. See [Reach](https://platform.claude.com/docs/en/manage-claude/plugins-api#reach). |
521| `updated_at` | Changes when the served version changes, when the plugin becomes pinned, and normally when a new version is stored. A waiting version (see [Versions and the served version](https://platform.claude.com/docs/en/manage-claude/plugins-api#versions-and-the-served-version)) changes it when it becomes the served version, not necessarily when it is stored. It does not change for installation settings, shares, or new scan results. |
525| `updated_at` | Changes when the served version changes, when the plugin becomes pinned, and normally when a new version is stored. A waiting version (see [Versions and the served version](https://platform.claude.com/docs/en/manage-claude/plugins-api#versions-and-the-served-version)) changes it when it becomes the served version, not necessarily when it is stored. It does not change for installation settings, shares, or a change to `content_scan` alone. |
522526 
523527The `content_scan` object:
524528 
525| Field | Description |
526| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
527| `status` | `processing` while the scan runs, `completed` when it finished, or `errored` when it could not finish (or, occasionally, when its result could not be read for this response, in which case a later read may report it). Members are not served a version whose scan is `processing` or `errored`; uploading the content again as a new version gets a fresh scan. |
528| `assessment` | Set when `status` is `completed`: `pass` (nothing found), `warn` (something found that does not block use), `fail` (something found that blocks use), or `unknown` (no verdict). Otherwise `null`. |
529| `reason` | For `warn` and `fail`, the main concern, from the following list. Otherwise `null`, and also `null` on an older scan that predates reason recording. |
529| Field | Description |
530| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
531| `status` | `processing` while the scan runs, `completed` when it finished, or `errored` when it could not finish (or, occasionally, when its result could not be read for this response, in which case a later read may report it). Members are not served a version whose scan is `processing` or `errored`; uploading the content again as a new version gets a fresh scan. |
532| `assessment` | Set when `status` is `completed`: `pass` (nothing found), `warn` (something found that does not block use, or a failed scan that an administrator allowed; see [Failed scans an administrator allowed](https://platform.claude.com/docs/en/manage-claude/plugins-api#failed-scans-an-administrator-allowed)), `fail` (something found that blocks use), or `unknown` (no verdict). Otherwise `null`. |
533| `reason` | For `warn` and `fail`, the main concern, from the following list. Otherwise `null`, and also `null` on an older scan that predates reason recording. |
530534 
531535<Accordion title="Content scan reason values">
532536 | `reason` | Meaning |
from line 3188
31843188| `skill_name_taken` | 409 | The plugin is in the library marketplace and one of its skills has the same name as an organization skill (a skill an administrator uploaded for the whole organization in claude.ai). `details.skill_name` names it. Rename or remove one of them. |
31853189| `registration_pending` | 503 | The files were stored, but the plugin's skills could not yet be made available to members. See [Retrying uploads](https://platform.claude.com/docs/en/manage-claude/plugins-api#retrying-uploads). |
31863190| `scan_pending` | 409 | The version's content scan is still running. Retry once it finishes. |
3187| `scan_failed` | 400 | The version's content scan failed, errored, or reached no verdict, so it cannot be served. Choose another version. |
3191| `scan_failed` | 400 | The version's content scan reads `fail` or `unknown`, or errored, so it cannot be served. Choose another version. |
31883192| `cmek_key_disabled`, `cmek_key_network_blocked` | 400 | Your organization's customer-managed encryption key is unavailable. See [Customer-managed encryption keys](https://platform.claude.com/docs/en/manage-claude/plugins-api#customer-managed-encryption-keys). |
3193| `unsupported_charset` | 400 | On an upload or `validate_archive`, the request's `Content-Type` header names a charset other than UTF-8, ISO-8859-1, or US-ASCII. Send the request with no charset, or with one of these. |
31893194 
31903195New codes may be added. Treat a code you do not recognize the way you treat its status.
31913196 

manage-claude/spend-limits-api Changed · +9 / -2 lines

from line 511
511511 -H "content-type: application/json" \
512512 -H "x-api-key: $ANTHROPIC_API_KEY" \
513513 -H "anthropic-version: 2023-06-01" \
514 -d '{"scope": {"type": "user", "user_id": "user_01AbCdEfGh"}, "amount": "75000"}'
514 -d '{
515 "scope": {"type": "user", "user_id": "user_01AbCdEfGh"},
516 "amount": "75000"
517 }'
515518 ```
516519 
517520 ```bash CLI
from line 2019
20162019 -H "content-type: application/json" \
20172020 -H "x-api-key: $ANTHROPIC_API_KEY" \
20182021 -H "anthropic-version: 2023-06-01" \
2019 -d '{"scope": {"type": "user", "user_id": "user_01AbCdEfGh"}, "amount": "500000", "period": "monthly"}'
2022 -d '{
2023 "scope": {"type": "user", "user_id": "user_01AbCdEfGh"},
2024 "amount": "500000",
2025 "period": "monthly"
2026 }'
20202027 ```
20212028 
20222029 ```bash CLI

manage-claude/wif-providers/spiffe Changed · +7 / -7 lines

from line 85
8585# Replace NODE_UID with the node's UID:
8686# kubectl get node <node-name> -o jsonpath='{.metadata.uid}'
8787spire-server entry create \
88 -spiffeID spiffe://prod.example.com/ns/inference/sa/worker \
89 -parentID spiffe://prod.example.com/spire/agent/k8s_psat/prod-cluster/NODE_UID \
90 -selector k8s:ns:inference \
91 -selector k8s:sa:worker
88 -spiffeID spiffe://prod.example.com/ns/inference/sa/worker \
89 -parentID spiffe://prod.example.com/spire/agent/k8s_psat/prod-cluster/NODE_UID \
90 -selector k8s:ns:inference \
91 -selector k8s:sa:worker
9292```
9393 
9494<Note>
from line 453
453453 
454454```bash CLI
455455spire-agent api fetch jwt \
456 -audience https://api.anthropic.com \
457 -socketPath /run/spire/sockets/agent.sock \
458 -output json \
456 -audience https://api.anthropic.com \
457 -socketPath /run/spire/sockets/agent.sock \
458 -output json \
459459 | jq -r '.[0].svids[0].svid' \
460460 | jq -rR 'split(".")[1] | gsub("-";"+") | gsub("_";"/") | @base64d | fromjson'
461461```

managed-agents/multiagent-orchestration Changed · +4 / -4 lines

from line 318
318318 ```ruby Ruby
319319 lead_agent = client.beta.agents.create(
320320 name: "Engineering Lead",
321 model: "claude-opus-5-5",
321 model: Anthropic::Beta::BetaManagedAgentsModel::CLAUDE_OPUS_5_5,
322322 system: "You coordinate engineering work. Delegate code review to the reviewer agent and test writing to the test agent.",
323323 tools: [
324324 {type: "agent_toolset_20260401"}
from line 457
457457 "tools": [{"type": "mcp_toolset", "mcp_server_name": "github"}]
458458 }'
459459 
460 # Create the agent that delegates to it: research_agent_id is the id from the first response
460 # Create the agent that delegates to it: research_agent_id is the ID from the first response
461461 curl --fail-with-body -sS https://api.anthropic.com/v1/agents \
462462 -H "x-api-key: $ANTHROPIC_API_KEY" \
463463 -H "anthropic-version: 2023-06-01" \
from line 976
976976 ```ruby Ruby
977977 agent = client.beta.agents.create(
978978 name: "Contract Reviewer",
979 model: "claude-opus-5-5",
979 model: Anthropic::Beta::BetaManagedAgentsModel::CLAUDE_OPUS_5_5,
980980 system_: "You review contracts. When you're asked to review more than a few contracts, start a workflow run that reads them in parallel and combines the findings. Review one or two contracts yourself, without a run.",
981981 tools: [
982982 {type: "agent_toolset_20260401"}
from line 1197
11971197 ```ruby Ruby
11981198 agent = client.beta.agents.create(
11991199 name: "Backend engineer",
1200 model: "claude-sonnet-5",
1200 model: Anthropic::Beta::BetaManagedAgentsModel::CLAUDE_SONNET_5,
12011201 system_: "You implement backend features end to end. Consult the advisor before major backend design decisions.",
12021202 multiagent: {
12031203 type: "multiagent_20261001",

managed-agents/session-operations Changed · +3 / -8 lines

from line 277
277277 ```bash CLI
278278 # --format raw returns one page envelope with its prev_page and next_page
279279 # cursors; the default output auto-paginates and emits only the sessions.
280 ant beta:sessions list \
281 --agent-id "$AGENT_ID" \
282 --limit 1 \
283 --format raw
280 ant beta:sessions list --agent-id "$AGENT_ID" --limit 1 --format raw
284281 # Pass next_page back as --page to fetch the next page, or prev_page to go back.
285282 ```
286283 
from line 501
504501 ```
505502 
506503 ```bash CLI
507 ant beta:sessions archive \
508 --session-id "$SESSION_ID"
504 ant beta:sessions archive --session-id "$SESSION_ID"
509505 ```
510506 
511507 ```python Python
from line 551
555551 ```
556552 
557553 ```bash CLI
558 ant beta:sessions delete \
559 --session-id "$SESSION_ID"
554 ant beta:sessions delete --session-id "$SESSION_ID"
560555 ```
561556 
562557 ```python Python

managed-agents/session-threads Changed · +10 / -2 lines

from line 117
117117 -H "anthropic-version: 2023-06-01" \
118118 -H "anthropic-beta: managed-agents-2026-04-01" \
119119 -H "content-type: application/json" \
120 -d '{"events": [{"type": "user.interrupt", "session_thread_id": "'"$THREAD_ID"'"}]}'
120 -d '{
121 "events": [
122 {"type": "user.interrupt", "session_thread_id": "'"$THREAD_ID"'"}
123 ]
124 }'
121125 ```
122126 
123127 ```bash CLI
from line 267
263267 -H "anthropic-version: 2023-06-01" \
264268 -H "anthropic-beta: managed-agents-2026-04-01" \
265269 -H "content-type: application/json" \
266 -d '{"events": [{"type": "user.interrupt", "session_thread_id": "'"$THREAD_ID"'"}]}'
270 -d '{
271 "events": [
272 {"type": "user.interrupt", "session_thread_id": "'"$THREAD_ID"'"}
273 ]
274 }'
267275 
268276 curl -fsS -X POST "https://api.anthropic.com/v1/sessions/$SESSION_ID/threads/$THREAD_ID/archive" \
269277 -H "x-api-key: $ANTHROPIC_API_KEY" \

managed-agents/sessions Changed · +3 / -6 lines

from line 30
3030 ```
3131 
3232 ```bash CLI
33 ant beta:sessions create \
34 --agent "$AGENT_ID" \
35 --environment-id "$ENVIRONMENT_ID"
33 ant beta:sessions create --agent "$AGENT_ID" --environment-id "$ENVIRONMENT_ID"
3634 ```
3735 
3836 ```python Python
from line 466
468466 
469467 ```bash CLI
470468 # The response's `agent` is the resolved snapshot: each override replaces that
471 # field for this session only, and the agent resource keeps its id and version.
469 # field for this session only, and the agent resource keeps its ID and version.
472470 ant beta:sessions create <<YAML
473471 agent:
474472 type: agent_with_overrides
from line 993
995993 ```
996994 
997995 ```bash CLI
998 ant beta:sessions:events send \
999 --session-id "$SESSION_ID" <<'YAML'
996 ant beta:sessions:events send --session-id "$SESSION_ID" <<'YAML'
1000997 events:
1001998 - type: user.message
1002999 content:

release-notes/overview Changed · +4 / -3 lines

from line 17
1717* We've released API version `2026-10-21`. [Migrating to API version 2026-10-21](https://platform.claude.com/docs/en/api/migration-2026-10-21) shows how to upgrade.
1818* We've released new versions of the [client SDKs](https://platform.claude.com/docs/en/cli-sdks-libraries/overview) and the [`ant` CLI](https://platform.claude.com/docs/en/cli-sdks-libraries/cli/quickstart) that send API version `2026-10-21` by default: Python SDK 2.0.0, TypeScript SDK 1.0.0, C# SDK 13.0.0, Go SDK 2.0.0, Java SDK 3.0.0, PHP SDK 1.0.0, Ruby SDK 2.0.0, and `ant` CLI 2.0.0. See [Switch to 2026-10-21](https://platform.claude.com/docs/en/api/migration-2026-10-21#upgrade).
1919* The new SDK and CLI versions also have breaking changes that don't depend on the API version, and they are licensed under Apache 2.0 instead of the MIT License. See [SDK and CLI changes](https://platform.claude.com/docs/en/api/migration-2026-10-21#sdk-changes).
20* We've added the `enforcement_status` and `enforcement_actions` fields to [user profiles](https://platform.claude.com/docs/en/manage-claude/user-profiles), so you can see whether Anthropic has restricted or banned one of your end customers. To find the profiles that have an open restriction or ban, [list your profiles](https://platform.claude.com/docs/en/api/user_profiles/list) with the new `enforcement_status[]` filter. See [Check whether Anthropic has restricted or banned a profile](https://platform.claude.com/docs/en/manage-claude/user-profiles#check-whether-anthropic-has-restricted-or-banned-a-profile).
2021 
21- We've added the `enforcement_status` and `enforcement_actions` fields to [user profiles](https://platform.claude.com/docs/en/manage-claude/user-profiles), so you can see whether Anthropic has restricted or banned one of your end customers. To find the profiles that have an open restriction or ban, [list your profiles](https://platform.claude.com/docs/en/api/user_profiles/list) with the new `enforcement_status[]` filter. See [Check whether Anthropic has restricted or banned a profile](https://platform.claude.com/docs/en/manage-claude/user-profiles#check-whether-anthropic-has-restricted-or-banned-a-profile).
22 
2322### October 20, 2026
2423 
2524* [Inference hooks](https://platform.claude.com/docs/en/manage-claude/inference-hooks) are out of beta for Claude Enterprise organizations.
2625* We've launched [user profiles](https://platform.claude.com/docs/en/manage-claude/user-profiles), so you can tell Anthropic which of your end customers each API request is for. If you operate a platform or gateway, or resell API access, a safety enforcement action can then apply to one end customer instead of your whole organization. The SDK and the `ant` CLI support the new [`/v1/user_profiles` endpoints](https://platform.claude.com/docs/en/api/user_profiles).
2726* We've added [organization webhooks](https://platform.claude.com/docs/en/manage-claude/organization-webhooks) to the [Admin API](https://platform.claude.com/docs/en/manage-claude/admin-api), in beta with the `webhooks-2026-10-07` beta header. Its [`/v1/organizations/webhooks` endpoints](https://platform.claude.com/docs/en/api/beta/organization/webhooks) register webhook endpoints for two event types: one for when Anthropic restricts or bans one of your organization's user profiles, and one for when the restriction or ban ends. To request access, contact your Anthropic account team.
27* Organization admins can now turn off web fetch for their organization on the [**Capabilities**](https://platform.claude.com/settings/capabilities) page of the Claude Console. With web fetch off, a Messages API request that includes the web fetch tool fails with a 400 error. In a Claude Managed Agents session, `web_fetch` calls return an error result to the agent instead. With web fetch on, admins can also set allowed or blocked domains for web fetch on the same page. See [Web fetch tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-fetch-tool#how-to-use-web-fetch) and [Domain filtering](https://platform.claude.com/docs/en/agents-and-tools/tool-use/server-tools#domain-filtering).
28* In Claude Managed Agents, the [`web_fetch` tool](https://platform.claude.com/docs/en/managed-agents/tools#available-tools) now follows your organization's web fetch domain restrictions set on the [**Capabilities**](https://platform.claude.com/settings/capabilities) page of the Claude Console. A URL, including one reached by a redirect, must pass both the organization's list and the `allowed_domains` or `blocked_domains` list on the agent's `web_fetch` tool. See [Restrict web search and web fetch domains](https://platform.claude.com/docs/en/managed-agents/tools-web-restrictions).
29* In Claude Managed Agents, sessions follow your organization's web search settings on the [**Capabilities**](https://platform.claude.com/settings/capabilities) page of the Claude Console: the **Allow web search** setting since October 6, and its web search domain restrictions since October 14. The agent receives only the search results that both the organization's domain restrictions and the `allowed_domains` or `blocked_domains` list on the agent's [`web_search` tool](https://platform.claude.com/docs/en/managed-agents/tools#available-tools) allow. See [Restrict web search and web fetch domains](https://platform.claude.com/docs/en/managed-agents/tools-web-restrictions).
2830 
2931### October 15, 2026
3032 
from line 39
3739 
3840* We've launched [OpenTelemetry export](https://platform.claude.com/docs/en/manage-claude/opentelemetry) in beta, so you can trace Messages API requests and Claude Managed Agents sessions in your observability platform. The Claude SDK emits spans in Python, TypeScript, C#, Go, Java, PHP, and Ruby. To get spans from the API, [add an OpenTelemetry destination](https://platform.claude.com/docs/en/manage-claude/opentelemetry/api#add-a-destination) in the Claude Console.
3941* Claude Managed Agents [scheduled deployments](https://platform.claude.com/docs/en/managed-agents/scheduled-deployments) are now available on [Claude Platform on AWS](https://platform.claude.com/docs/en/build-with-claude/claude-platform-on-aws#claude-managed-agents).
40* In Claude Managed Agents, the [`web_search` tool](https://platform.claude.com/docs/en/managed-agents/tools#available-tools) now follows your organization's web search domain restrictions set in the Claude Console. The agent receives only the search results that both the organization's domain restrictions and the `allowed_domains` or `blocked_domains` list on the agent's `web_search` tool allow. Sessions have followed the organization's **Allow web search** setting since October 6. See [Restrict web search and web fetch domains](https://platform.claude.com/docs/en/managed-agents/tools-web-restrictions).
4142 
4243### October 9, 2026
4344 

about-claude/use-case-guides/customer-support-chat Changed · +1 / -1 lines

from line 440
440440 
441441<CodeGroup exclude="shell">
442442 ```python Python
443 # In your chatbot.py, import these from the config.py you wrote above:
443 # In your chatbot.py, import these from the config.py you wrote earlier:
444444 # from config import IDENTITY, TOOLS, MODEL, get_quote
445445 from anthropic import Anthropic
446446 from dotenv import load_dotenv

agents-and-tools/agent-skills/best-practices Changed · +1 / -1 lines

from line 918
918918# Longer timeout accounts for slow connections
919919REQUEST_TIMEOUT = 30
920920 
921# Three retries balances reliability vs speed
921# Three retries balances reliability versus speed
922922# Most intermittent failures resolve by the second retry
923923MAX_RETRIES = 3
924924```

agents-and-tools/agent-skills/enterprise Changed · +1 / -1 lines

from line 46
4646 
4747### Skill content scanning
4848 
49Claude Enterprise organizations can turn on automated security scanning for custom Skills in claude.ai and Claude Cowork. After you turn on **Skill and plugin security scanning** at [claude.ai > Organization settings > Skills](https://claude.ai/admin-settings/skills), Skills that members then upload or edit in claude.ai or Cowork are scanned for signs of malicious behavior, such as hidden code execution, sending your data to an outside service, or instructions that tamper with Claude's safeguards. A Skill that fails the scan, or whose scan hasn't completed, is blocked from use. A Skill that passes with a warning stays usable behind a caution notice. If scanning is available to your organization, turn it on. It complements, but doesn't replace, the [review checklist](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/enterprise#review-checklist).
49Claude Enterprise organizations can turn on automated security scanning for custom Skills in claude.ai and Claude Cowork. After you turn on **Skill and plugin security scanning** at [claude.ai > Organization settings > Skills](https://claude.ai/admin-settings/skills), Skills that members then upload or edit in claude.ai or Cowork are scanned for signs of malicious behavior, such as hidden code execution, sending your data to an outside service, or instructions that tamper with Claude's safeguards. A Skill that fails the scan, or whose scan hasn't completed, is blocked from use. An administrator can allow some Skills that failed the scan. A Skill that passes with a warning stays usable behind a caution notice. If scanning is available to your organization, turn it on. It complements, but doesn't replace, the [review checklist](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/enterprise#review-checklist).
5050 
5151Scanning doesn't cover the Claude API. Skills you upload through the Skills API (`/v1/skills`), including from the Claude Console, aren't scanned, so for API deployments, rely on the review checklist and [version pinning](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/enterprise#versioning-strategy). Scanning also doesn't apply to Skills that were already in your organization when you turned it on, or to organizations with certain data handling configurations, such as customer-managed encryption keys (CMEK), zero data retention (ZDR), or HIPAA readiness. For setup steps, exclusions, and result types, see [Get started with skill and plugin scanning](https://support.claude.com/en/articles/15927065-get-started-with-skill-and-plugin-scanning) in the Claude Help Center.
5252 

agents-and-tools/agent-skills/quickstart Changed · +3 / -1 lines

from line 394
394394 
395395 if [[ -n "$file_id" ]]; then
396396 # Download the file and save it
397 ant files download --file-id "$file_id" --output "${TMPDIR:-/tmp}/renewable_energy.pptx"
397 ant files download \
398 --file-id "$file_id" \
399 --output "${TMPDIR:-/tmp}/renewable_energy.pptx"
398400 fi
399401 ```
400402 

agents-and-tools/mcp-tunnels/deploy-compose Changed · +2 / -2 lines

from line 409
409409export ANTHROPIC_FEDERATION_RULE_ID=fdrl_...
410410export ANTHROPIC_ORGANIZATION_ID=00000000-0000-0000-0000-000000000000
411411# export ANTHROPIC_WORKSPACE_ID=wrkspc_... # if your rule is workspace-scoped
412# Re-mint ANTHROPIC_IDENTITY_TOKEN per the WIF provider guide for your
413# environment (it will have expired since install).
412# Re-mint ANTHROPIC_IDENTITY_TOKEN as described in the WIF provider guide for
413# your environment (it will have expired since install).
414414export ANTHROPIC_IDENTITY_TOKEN=...
415415 
416416docker compose run --rm setup

agents-and-tools/tool-use/advisor-tool Changed · +2 / -2 lines

from line 1181
11811181 end
11821182 
11831183 tools = [
1184 { type: "advisor_20260301", name: "advisor", model: "claude-opus-5-5" }
1184 { type: "advisor_20260301", name: "advisor", model: Anthropic::Model::CLAUDE_OPUS_5_5 }
11851185 # ... your other tools
11861186 ]
11871187 task = "Build a concurrent worker pool in Go with graceful shutdown."
from line 1190
11901190 
11911191 (1..MAX_TURNS).each do |turn|
11921192 response = client.beta.messages.create(
1193 model: "claude-haiku-5-5",
1193 model: Anthropic::Model::CLAUDE_HAIKU_5_5,
11941194 max_tokens: 4096,
11951195 tools: tools,
11961196 messages: messages,

agents-and-tools/tool-use/bash-tool Changed · +2 / -2 lines

from line 166
166166 client = Anthropic::Client.new
167167 
168168 response = client.messages.create(
169 model: "claude-opus-5-5",
169 model: Anthropic::Model::CLAUDE_OPUS_5_5,
170170 max_tokens: 1024,
171171 tools: [{type: "bash_20250124", name: "bash"}],
172172 messages: [
from line 1147
11471147 client = Anthropic::Client.new
11481148 
11491149 response = client.messages.create(
1150 model: "claude-opus-5-5",
1150 model: Anthropic::Model::CLAUDE_OPUS_5_5,
11511151 max_tokens: 1024,
11521152 tools: [{type: "bash_20250124", name: "bash"}],
11531153 messages: [

agents-and-tools/tool-use/browser-use-tool Changed · +2 / -2 lines

from line 186
186186 client = Anthropic::Client.new
187187 
188188 response = client.messages.create(
189 model: "claude-opus-5-5",
189 model: Anthropic::Model::CLAUDE_OPUS_5_5,
190190 max_tokens: 2048,
191191 tools: [
192192 { type: "browser_toolset_20260801" }
from line 802
802802 continue;
803803 }
804804 if (failed) {
805 // A batch stops at its first failure; answer later actions unexecuted
805 // A batch stops at its first failure; answer later actions without running them
806806 toolResults.push(browserResult(block.id, HALT_TEXT, true));
807807 continue;
808808 }

agents-and-tools/tool-use/code-execution-tool Changed · +2 / -2 lines

from line 295
295295 -H "anthropic-version: 2023-06-01" \
296296 -F "[email protected]"
297297 
298 # Then use the file with code execution: FILE_ID is the id from the upload response
298 # Then use the file with code execution: FILE_ID is the ID from the upload response
299299 curl --fail-with-body -sS https://api.anthropic.com/v1/messages \
300300 -H "x-api-key: $ANTHROPIC_API_KEY" \
301301 -H "anthropic-version: 2023-06-01" \
from line 321
321321 # First, upload a file
322322 ant files upload --file ./data.csv
323323 
324 # Then use the file with code execution: FILE_ID is the id from the upload response
324 # Then use the file with code execution: FILE_ID is the ID from the upload response
325325 ant messages create <<YAML
326326 model: claude-opus-5-5
327327 max_tokens: 4096

agents-and-tools/tool-use/computer-use-tool Changed · +2 / -2 lines

from line 253
253253 client = Anthropic::Client.new
254254 
255255 response = client.messages.create(
256 model: "claude-opus-5-5",
256 model: Anthropic::Model::CLAUDE_OPUS_5_5,
257257 max_tokens: 1024,
258258 tools: [
259259 { type: "computer_toolset_20260801" },
from line 1323
13231323 continue;
13241324 }
13251325 if (failed) {
1326 // A batch stops at its first failure; answer later actions unexecuted
1326 // A batch stops at its first failure; answer later actions without running them
13271327 toolResults.push(computerResult(block.id, HALT_TEXT, true));
13281328 continue;
13291329 }

agents-and-tools/tool-use/define-tools Changed · +2 / -2 lines

from line 494
494494 client = Anthropic::Client.new
495495 
496496 message = client.messages.create(
497 model: "claude-opus-5-5",
497 model: Anthropic::Model::CLAUDE_OPUS_5_5,
498498 max_tokens: 1024,
499499 tools: [
500500 {
from line 807
807807 client = Anthropic::Client.new
808808 
809809 message = client.messages.create(
810 model: "claude-opus-5",
810 model: Anthropic::Model::CLAUDE_OPUS_5,
811811 max_tokens: 1024,
812812 tools: [
813813 {

agents-and-tools/tool-use/programmatic-tool-calling Changed · +1 / -1 lines

from line 1197
11971197 results[region] = sum(row["revenue"] for row in rows)
11981198 
11991199# Process results programmatically
1200top_region = max(results.items(), key=lambda x: x[1])
1200top_region = max(results.items(), key=lambda item: item[1])
12011201print(f"Top region: {top_region[0]} with ${top_region[1]:,} in revenue")
12021202```
12031203 
Feedback