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-20261012T230714Z

86 pages moved out of 760 read.

Pages moved 86 significant first
Pages read 760 in this capture
Captured 23:07 UTC
Corpus hash 8c5aa1a14983 corpus-hash

What this read moved

26-50 of 86, page 2 of 4

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

api/compliance/activities/list Changed · +1515 / -3 lines

This page is larger than the 256 KiB this site keeps, so one side of the diff below stops where the stored text does.

from line 15
1515 
1616## Query parameters
1717 
18- `activity_types: optional array of "abuse_decision_received" or "account_deleted" or "admin_api_key_created" or 516 more`
18- `activity_types: optional array of "abuse_decision_received" or "account_deleted" or "admin_api_key_created" or 522 more`
1919 
2020 Filter activities by type. See the response `data` schema for the additional fields each type returns. Cannot be combined with `exclude_activity_types[]`.
2121 
from line 267
267267 
268268 A new version of an artifact was published — for an artifact created in a chat this is the action that made it publicly viewable; for an artifact created outside a chat it is recorded when the artifact is saved, including saves of private artifacts, except that automatic saves made while a person keeps editing may be recorded periodically for that person rather than once per save; changes to who can access the artifact are recorded separately as claude_artifact_sharing_updated.
269269 
270 - `"claude_artifact_sent_to_partner"`
271 
272 A member sent an export of an artifact to a partner application ("Send to …" on the artifact; a partner is a third-party application listed in Claude's connector directory): a file exported from the artifact was made available over a temporary link for the chosen partner to fetch. One activity is recorded per send, in the artifact owner's organization with the sending member as actor, whether or not the partner then retrieved the file; the partner's own import of the file is not part of this record. The file's name and contents are not recorded.
273 
270274 - `"claude_artifact_sharing_updated"`
271275 
272276 An artifact's sharing settings were updated.
from line 687
683687 
684688 A security scan of a skill completed and produced a verdict.
685689 
690 - `"claude_survey_closed"`
691 
692 An organization admin closed an in-app survey before its end date, ending the collection of responses; a survey that reaches its end date records no event.
693 
694 - `"claude_survey_created"`
695 
696 An organization admin launched an in-app survey to its chosen audience, opening it immediately or at a scheduled start time.
697 
698 - `"claude_survey_deleted"`
699 
700 An organization admin permanently deleted a closed in-app survey together with every response collected for it.
701 
702 - `"claude_survey_response_submitted"`
703 
704 A member submitted their response to an in-app survey run by their organization; the record omits the response content, and a retried submission can produce more than one record for the same response.
705 
706 - `"claude_survey_responses_exported"`
707 
708 An organization admin downloaded a survey's responses as a CSV file, one row per response with the member's email address (blank if it is no longer available, for example because they left the organization), the groups, department and cost center they were invited through, the product they answered in, the submission time, and their answers.
709 
686710 - `"claude_user_role_updated"`
687711 
688712 A user's role within the organization was changed, or the user was added to or removed from the organization.
from line 2174
21502174 
21512175 format: date-time
21522176 
2153- `exclude_activity_types: optional array of "abuse_decision_received" or "account_deleted" or "admin_api_key_created" or 516 more`
2177- `exclude_activity_types: optional array of "abuse_decision_received" or "account_deleted" or "admin_api_key_created" or 522 more`
21542178 
21552179 Exclude activities of these types. Cannot be combined with `activity_types[]`.
21562180 
from line 2426
24022426 
24032427 A new version of an artifact was published — for an artifact created in a chat this is the action that made it publicly viewable; for an artifact created outside a chat it is recorded when the artifact is saved, including saves of private artifacts, except that automatic saves made while a person keeps editing may be recorded periodically for that person rather than once per save; changes to who can access the artifact are recorded separately as claude_artifact_sharing_updated.
24042428 
2429 - `"claude_artifact_sent_to_partner"`
2430 
2431 A member sent an export of an artifact to a partner application ("Send to …" on the artifact; a partner is a third-party application listed in Claude's connector directory): a file exported from the artifact was made available over a temporary link for the chosen partner to fetch. One activity is recorded per send, in the artifact owner's organization with the sending member as actor, whether or not the partner then retrieved the file; the partner's own import of the file is not part of this record. The file's name and contents are not recorded.
2432 
24052433 - `"claude_artifact_sharing_updated"`
24062434 
24072435 An artifact's sharing settings were updated.
from line 2846
28182846 
28192847 A security scan of a skill completed and produced a verdict.
28202848 
2849 - `"claude_survey_closed"`
2850 
2851 An organization admin closed an in-app survey before its end date, ending the collection of responses; a survey that reaches its end date records no event.
2852 
2853 - `"claude_survey_created"`
2854 
2855 An organization admin launched an in-app survey to its chosen audience, opening it immediately or at a scheduled start time.
2856 
2857 - `"claude_survey_deleted"`
2858 
2859 An organization admin permanently deleted a closed in-app survey together with every response collected for it.
2860 
2861 - `"claude_survey_response_submitted"`
2862 
2863 A member submitted their response to an in-app survey run by their organization; the record omits the response content, and a retried submission can produce more than one record for the same response.
2864 
2865 - `"claude_survey_responses_exported"`
2866 
2867 An organization admin downloaded a survey's responses as a CSV file, one row per response with the member's email address (blank if it is no longer available, for example because they left the organization), the groups, department and cost center they were invited through, the product they answered in, the submission time, and their answers.
2868 
28212869 - `"claude_user_role_updated"`
28222870 
28232871 A user's role within the organization was changed, or the user was added to or removed from the organization.
from line 4331
42834331 
42844332## Returns
42854333 
4286- `data: optional array of AbuseDecisionReceived or AccountDeleted or AdminAPIKeyCreated or 516 more`
4334- `data: optional array of AbuseDecisionReceived or AccountDeleted or AdminAPIKeyCreated or 522 more`
42874335 
42884336 List of activity records. Each element's `type` field identifies which activity it is and which additional fields are present.
42894337 
from line 9547
94999547 
95009548 - `SystemActor object`
95019549 
9502 Automated background processing performed by Anthropic systems, acting
9503 without a user or customer credential.
9504 
9505 - `type: optional "system_actor"`
9506 
9507 default: system_actor
9508 
9509 - `service: optional string or null`
9510 
9511 Name of the automated process that performed the action, when known.
9512 
9513 - `AdminAPIKeyActor object`
9514 
9515 - `type: optional "admin_api_key_actor"`
9516 
9517 default: admin_api_key_actor
9518 
9519 - `admin_api_key_id: string`
9520 
9521 - `ip_address: string`
9522 
9523 - `user_agent: string`
9524 
9525 - `ServiceAccountActor object`
9526 
9527 - `type: optional "service_account_actor"`
9528 
9529 default: service_account_actor
9530 
9531 - `ip_address: string`
9532 
9533 - `service_account_id: string`
9534 
9535 - `user_agent: string`
9536 
9537 - `ScimDirectorySyncActor object`
9538 
9539 - `type: optional "scim_directory_sync_actor"`
9540 
9541 default: scim_directory_sync_actor
9542 
9543 - `directory_id: string`
9544 
9545 - `workos_event_id: string`
9546 
9547 - `idp_connection_type: optional string or null`
9548 
9549 - `FederatedIdentityActor object`
9550 
9551 A federated external workload authenticated via a verified OIDC token.
9552 
9553 Carries the verified issuer, subject, and audience claims from the
9554 presented JWT.
9555 
9556 - `type: optional "federated_identity_actor"`
9557 
9558 default: federated_identity_actor
9559 
9560 - `issuer: string`
9561 
9562 - `subject: string`
9563 
9564 - `audience: optional array of string`
9565 
9566 - `ip_address: optional string or null`
9567 
9568 - `user_agent: optional string or null`
9569 
9570 - `FederatedActor object`
9571 
9572 An external identity asserted by a trusted provider — a cloud-provider
9573 gateway or a customer-registered federation issuer — acting without an
9574 Anthropic-provisioned account or service account.
9575 
9576 - `type: optional "federated_actor"`
9577 
9578 default: federated_actor
9579 
9580 - `provider: FederatedActorAwsProvider or FederatedActorAzureProvider or FederatedActorGcpProvider or FederatedActorOidcProvider`
9581 
9582 - `FederatedActorAwsProvider object`
9583 
9584 Asserting party: the AWS account the organization is bound to.
9585 
9586 - `type: optional "aws"`
9587 
9588 default: aws
9589 
9590 - `account_id: string`
9591 
9592 - `signed_principal: string`
9593 
9594 The AWS-signed ARN of the IAM principal that requested the token.
9595 
9596 - `FederatedActorAzureProvider object`
9597 
9598 Asserting party: the Azure subscription the organization is bound to.
9599 
9600 - `type: optional "azure"`
9601 
9602 default: azure
9603 
9604 - `subscription_id: string`
9605 
9606 - `FederatedActorGcpProvider object`
9607 
9608 Asserting party: the GCP project the organization is bound to.
9609 
9610 - `type: optional "gcp"`
9611 
9612 default: gcp
9613 
9614 - `project_number: string`
9615 
9616 - `FederatedActorOidcProvider object`
9617 
9618 Asserting party: a customer-registered OIDC federation issuer.
9619 
9620 - `type: optional "oidc"`
9621 
9622 default: oidc
9623 
9624 - `issuer: optional string or null`
9625 
9626 The federation issuer's URL. Null when the presented credential failed verification.
9627 
9628 - `ip_address: optional string or null`
9629 
9630 - `subject: optional string or null`
9631 
9632 The provider's verified identifier for the caller; its form depends on the provider.
9633 
9634 - `user_agent: optional string or null`
9635 
9636 - `AttestedDevi
9550 Au

api/messages Changed · +4 / -4 lines

This page is larger than the 256 KiB this site keeps, so one side of the diff below stops where the stored text does.

from line 4411
44114411 "role": "user"
44124412 }
44134413 ],
4414 "model": "claude-opus-5",
4414 "model": "claude-opus-5-5",
44154415 "stream": false,
44164416 "system": [
44174417 {
from line 4482
44824482 "type": "model_changed"
44834483 }
44844484 },
4485 "model": "claude-opus-5",
4485 "model": "claude-opus-5-5",
44864486 "role": "assistant",
44874487 "stop_details": {
44884488 "category": "cyber",
from line 7480
74807480 "role": "user"
74817481 }
74827482 ],
7483 "model": "claude-opus-5",
7483 "model": "claude-opus-5-5",
74847484 "system": [
74857485 {
74867486 "text": "Today'\''s date is 2024-06-01.",
from line 8575
85758575 
85768576 - `text: string`
85778577 
8578 The key or chord to ho
8578 The key or chord

api/models Changed · +6 / -6 lines

from line 387
387387{
388388 "data": [
389389 {
390 "id": "claude-opus-5",
390 "id": "claude-opus-5-5",
391391 "capabilities": {
392392 "batch": {
393393 "supported": true
from line 461
461461 }
462462 }
463463 },
464 "created_at": "2026-07-24T00:00:00Z",
464 "created_at": "2026-09-21T00:00:00Z",
465465 "deprecated_at": "2019-12-27T18:11:19.117Z",
466 "display_name": "Claude Opus 5",
466 "display_name": "Claude Opus 5.5",
467467 "lifecycle": "active",
468468 "line": "haiku",
469469 "max_input_tokens": 0,
from line 822
822822 
823823```json
824824{
825 "id": "claude-opus-5",
825 "id": "claude-opus-5-5",
826826 "capabilities": {
827827 "batch": {
828828 "supported": true
from line 896
896896 }
897897 }
898898 },
899 "created_at": "2026-07-24T00:00:00Z",
899 "created_at": "2026-09-21T00:00:00Z",
900900 "deprecated_at": "2019-12-27T18:11:19.117Z",
901 "display_name": "Claude Opus 5",
901 "display_name": "Claude Opus 5.5",
902902 "lifecycle": "active",
903903 "line": "haiku",
904904 "max_input_tokens": 0,

api/models/list Changed · +3 / -3 lines

from line 385
385385{
386386 "data": [
387387 {
388 "id": "claude-opus-5",
388 "id": "claude-opus-5-5",
389389 "capabilities": {
390390 "batch": {
391391 "supported": true
from line 459
459459 }
460460 }
461461 },
462 "created_at": "2026-07-24T00:00:00Z",
462 "created_at": "2026-09-21T00:00:00Z",
463463 "deprecated_at": "2019-12-27T18:11:19.117Z",
464 "display_name": "Claude Opus 5",
464 "display_name": "Claude Opus 5.5",
465465 "lifecycle": "active",
466466 "line": "haiku",
467467 "max_input_tokens": 0,

api/models/retrieve Changed · +3 / -3 lines

from line 347
347347 
348348```json
349349{
350 "id": "claude-opus-5",
350 "id": "claude-opus-5-5",
351351 "capabilities": {
352352 "batch": {
353353 "supported": true
from line 421
421421 }
422422 }
423423 },
424 "created_at": "2026-07-24T00:00:00Z",
424 "created_at": "2026-09-21T00:00:00Z",
425425 "deprecated_at": "2019-12-27T18:11:19.117Z",
426 "display_name": "Claude Opus 5",
426 "display_name": "Claude Opus 5.5",
427427 "lifecycle": "active",
428428 "line": "haiku",
429429 "max_input_tokens": 0,

build-with-claude/context-editing Changed · +4 / -4 lines

from line 20
2020* **Thinking block clearing** - For managing thinking blocks from earlier turns, with options to preserve recent thinking for context continuity
2121* **Client-side SDK compaction** - An SDK-based alternative for summary-based context management (server-side compaction is generally preferred)
2222 
23| Approach | Where it runs | Strategies | How it works |
24| --------------- | ------------- | ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
25| **Server-side** | API | Tool result clearing (`clear_tool_uses_20250919`) Thinking block clearing (`clear_thinking_20251015`) | Applied before the prompt reaches Claude. Clears specific content from conversation history. Each strategy can be configured independently. |
26| **Client-side** | SDK | Compaction | Available in [TypeScript and Ruby SDKs](https://platform.claude.com/docs/en/cli-sdks-libraries/overview) when using [`tool_runner`](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-runner). Generates a summary and replaces full conversation history. See [Client-side compaction](https://platform.claude.com/docs/en/build-with-claude/context-editing#client-side-compaction-sdk). |
23| Approach | Where it runs | Strategies | How it works |
24| --------------- | ------------- | ---------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
25| **Server-side** | API | Tool result clearing (`clear_tool_uses_20250919`)<br />Thinking block clearing (`clear_thinking_20251015`) | Applied before the prompt reaches Claude. Clears specific content from conversation history. Each strategy can be configured independently. |
26| **Client-side** | SDK | Compaction | Available in [TypeScript and Ruby SDKs](https://platform.claude.com/docs/en/cli-sdks-libraries/overview) when using [`tool_runner`](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-runner). Generates a summary and replaces full conversation history. See [Client-side compaction](https://platform.claude.com/docs/en/build-with-claude/context-editing#client-side-compaction-sdk). |
2727 
2828## Server-side strategies
2929 

build-with-claude/mid-conversation-effort-example Changed · +4 / -4 lines

from line 1231
12311231 if (DOC_TEST_MODE) {
12321232 $workDir = sys_get_temp_dir() . '/orchestration-' . bin2hex(random_bytes(8));
12331233 if (!mkdir($workDir, 0700)) {
1234 throw new RuntimeException("could not create working directory {$workDir}");
1234 throw new \RuntimeException("could not create working directory {$workDir}");
12351235 }
12361236 file_put_contents(
12371237 $workDir . '/sample.py',
from line 1776
17761776 */
17771777 function drainMessageStream(iterable $events): array
17781778 {
1779 $stringValue = fn ($value) => $value instanceof BackedEnum ? $value->value : $value;
1779 $stringValue = fn ($value) => $value instanceof \BackedEnum ? $value->value : $value;
17801780 $blocks = [];
17811781 $jsonBuffers = [];
17821782 $stopReason = null;
from line 2701
27012701 if (is_string($raw)) {
27022702 try {
27032703 $raw = json_decode($raw, true, flags: JSON_THROW_ON_ERROR);
2704 } catch (JsonException) {
2704 } catch (\JsonException) {
27052705 $raw = str_contains($raw, "\n") ? explode("\n", $raw) : [$raw];
27062706 }
27072707 }
from line 2746
27462746 $runOne = function (string $prompt) use ($client, $model): string {
27472747 try {
27482748 return journaled($prompt, fn () => runSubagent($client, $model, $prompt));
2749 } catch (Throwable $error) {
2749 } catch (\Throwable $error) {
27502750 // Isolation boundary: one bad subagent should not end the run.
27512751 return '(subagent failed: ' . $error::class . ': ' . $error->getMessage() . ')';
27522752 }

build-with-claude/overview Changed · +5 / -5 lines

from line 20
2020 
2121The Availability column in each of the following tables lists the platforms that offer a feature. A platform listed without a label offers the feature as stable, fully supported, and recommended for production use, with no beta header and with standard API [versioning](https://platform.claude.com/docs/en/api/versioning) guarantees. A label after a platform name marks one of the following classifications on that platform. Not all features pass through every stage, and a feature may enter at any stage or skip stages.
2222 
23| Classification | Description |
24| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
25| **Beta** | Preview features used for gathering feedback and iterating on a less mature use case. Availability may be limited, including through sign-up requirements or waitlists, and may not be publicly announced. Features may change significantly or be discontinued based on feedback. Not guaranteed for ongoing production use. Breaking changes are possible with notice, and some platform-specific limitations may apply. Most beta features on the Claude API and [Claude Platform on AWS](https://platform.claude.com/docs/en/build-with-claude/claude-platform-on-aws) have a [beta header](https://platform.claude.com/docs/en/api/beta-headers). |
26| **Deprecated** | Feature is still functional but no longer recommended. A migration path and removal timeline are provided. |
27| **Retired** | Feature is no longer available. |
23| Classification | Description |
24| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
25| **Beta** | Preview features used for gathering feedback and iterating on a less mature use case. Availability may be limited, including through sign-up requirements or waitlists, and may not be publicly announced.<br /><br />Features may change significantly or be discontinued based on feedback. Not guaranteed for ongoing production use. Breaking changes are possible with notice, and some platform-specific limitations may apply. Most beta features on the Claude API and [Claude Platform on AWS](https://platform.claude.com/docs/en/build-with-claude/claude-platform-on-aws) have a [beta header](https://platform.claude.com/docs/en/api/beta-headers). |
26| **Deprecated** | Feature is still functional but no longer recommended. A migration path and removal timeline are provided. |
27| **Retired** | Feature is no longer available. |
2828 
2929**Platform labels:** Claude API (Anthropic first-party) · [Bedrock](https://platform.claude.com/docs/en/build-with-claude/claude-in-amazon-bedrock) (AWS-operated) · [Claude Platform on AWS](https://platform.claude.com/docs/en/build-with-claude/claude-platform-on-aws) (Anthropic-operated on AWS) · [Google Cloud](https://platform.claude.com/docs/en/build-with-claude/claude-on-vertex-ai) (Google-operated) · [Microsoft Foundry](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry) (Anthropic-operated on Azure)
3030 

build-with-claude/prompt-caching Changed · +5 / -5 lines

from line 479
479479 
480480With automatic caching, the cache point moves forward automatically as conversations grow. Each new request caches everything up to the last cacheable block, and previous content is read from cache.
481481 
482| Request | Content | Cache behavior |
483| --------- | ---------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- |
484| Request 1 | System + User(1) + Asst(1) + **User(2)** ◀ cache | Everything written to cache |
485| Request 2 | System + User(1) + Asst(1) + User(2) + Asst(2) + **User(3)** ◀ cache | System through User(2) read from cache; Asst(2) + User(3) written to cache |
486| Request 3 | System + User(1) + Asst(1) + User(2) + Asst(2) + User(3) + Asst(3) + **User(4)** ◀ cache | System through User(3) read from cache; Asst(3) + User(4) written to cache |
482| Request | Content | Cache behavior |
483| --------- | ------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------- |
484| Request 1 | System<br />+ User(1) + Asst(1)<br />+ **User(2)** ◀ cache | Everything written to cache |
485| Request 2 | System<br />+ User(1) + Asst(1)<br />+ User(2) + Asst(2)<br />+ **User(3)** ◀ cache | System through User(2) read from cache;<br />Asst(2) + User(3) written to cache |
486| Request 3 | System<br />+ User(1) + Asst(1)<br />+ User(2) + Asst(2)<br />+ User(3) + Asst(3)<br />+ **User(4)** ◀ cache | System through User(3) read from cache;<br />Asst(3) + User(4) written to cache |
487487 
488488The cache breakpoint automatically moves to the last cacheable block in each request, so you don't need to update any `cache_control` markers as the conversation grows.
489489 

cli-sdks-libraries/sdks/php Changed · +4 / -2 lines

from line 72
7272Streaming requires an HTTP client that returns the response body incrementally. When Guzzle is the discovered PSR-18 client, the SDK configures it for streaming automatically. With a buffering client, the `foreach` loop yields every event at once when the response completes instead of incrementally; if you observe that symptom, install Guzzle or supply a streaming-capable PSR-18 client through the `streamingTransporter` request option:
7373 
7474```php
75$client = new Anthropic\Client(
76 requestOptions: Anthropic\RequestOptions::with(streamingTransporter: $myStreamingClient),
75$client = new \Anthropic\Client(
76 requestOptions: \Anthropic\RequestOptions::with(streamingTransporter: $myStreamingClient),
7777);
7878```
7979 
from line 160
160160 echo $item->id, PHP_EOL;
161161}
162162// make additional network requests to fetch items from all pages, including and after the current page
163// ...
163164foreach ($page->pagingEachItem() as $item) {
164165 echo $item->id, PHP_EOL;
166// ...
165167}
166168```
167169 

manage-claude/api-and-data-retention Changed · +37 / -37 lines

from line 165
165165* **Yes (qualified):** Your prompts and Claude's outputs are not stored, but a bounded technical artifact (named in the Details column) is retained briefly for the feature to function. See [How Anthropic approaches data retention](https://platform.claude.com/docs/en/manage-claude/api-and-data-retention#how-anthropic-approaches-data-retention) for the commitments that govern these features.
166166* **No:** The feature is not eligible. Under HIPAA readiness, the API blocks requests that include a "No" feature and returns a `400` error, unless the feature's Details column says otherwise. Under ZDR, the API does **not** block these features; using one is a choice to step outside your ZDR arrangement for that specific data, and the feature's own documented retention policy applies. Features marked "No" for ZDR are typically stateful (they store jobs, files, or container state), which is why they cannot be zero-retention.
167167 
168| Feature | Endpoint | ZDR eligible | HIPAA eligible | Details |
169| -------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- | ------------------------------------------------------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
170| [1M token context window](https://platform.claude.com/docs/en/build-with-claude/context-windows) | `/v1/messages` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | |
171| [Adaptive thinking](https://platform.claude.com/docs/en/build-with-claude/thinking) | `/v1/messages` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | |
172| [Advisor tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/advisor-tool) | `/v1/messages` with `advisor` tool | <Eligible>Yes</Eligible> | <Eligible status="no">No</Eligible> | Advisor model output is returned in the API response; nothing is stored server-side after the response. |
173| [Agent skills](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview) | `/v1/skills` `/v1/messages` with `skills` | <Eligible status="no">No</Eligible> | <Eligible status="no">No</Eligible> | Skill data retained per standard policy. See [Agent skills](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview#data-retention). |
174| [Bash tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/bash-tool) | `/v1/messages` with `bash` tool | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Client-side tool executed in your environment. |
175| [Batch processing](https://platform.claude.com/docs/en/build-with-claude/batch-processing) | `/v1/messages/batches` | <Eligible status="no">No</Eligible> | <Eligible status="no">No</Eligible> | 29-day retention; async storage required. See [Batch processing](https://platform.claude.com/docs/en/build-with-claude/batch-processing#data-retention). |
176| [Browser use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-tool) | `/v1/messages` with `browser` toolset | <Eligible>Yes</Eligible> | <Eligible status="no">No</Eligible> | Client-side tool. Anthropic does not run browser actions or retain page content beyond standard API handling. Not covered under HIPAA readiness; requests that include the browser use tool are not blocked. See [Browser use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-tool#data-retention). |
177| [Cache diagnostics](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics) | `/v1/messages` with `diagnostics` | <Eligible status="qualified">Yes (qualified)</Eligible> | <Eligible status="no">No</Eligible> | Your prompts and Claude's outputs are not stored. A fingerprint of cryptographic hashes and token-count estimates is retained briefly to enable comparison against the next request. See [Cache diagnostics](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics#data-retention). |
178| [Citations](https://platform.claude.com/docs/en/build-with-claude/citations) | `/v1/messages` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | |
179| [Claude Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) | `/v1/agents` `/v1/sessions` `/v1/environments` | <Eligible status="no">No</Eligible> | <Eligible status="no">No</Eligible> | Sessions are stateful resources; transcripts persist until you delete them. Applies to all Managed Agents sub-features, including [Self-hosted sandboxes](https://platform.claude.com/docs/en/managed-agents/self-hosted-sandboxes). |
180| [Code execution](https://platform.claude.com/docs/en/agents-and-tools/tool-use/code-execution-tool) | `/v1/messages` with `code_execution` tool | <Eligible status="no">No</Eligible> | <Eligible status="no">No</Eligible> | Container data retained up to 30 days. See [Code execution](https://platform.claude.com/docs/en/agents-and-tools/tool-use/code-execution-tool#data-retention). |
181| [Computer use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool) | `/v1/messages` with `computer` toolset or tool | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Client-side tool where screenshots and files are captured and stored in your environment, not by Anthropic. See [Computer use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool#data-retention). |
182| [Context editing](https://platform.claude.com/docs/en/build-with-claude/context-editing) | `/v1/messages` with `context_management` | <Eligible>Yes</Eligible> | <Eligible status="no">No</Eligible> | Context edits (tool use clearing and thinking clearing) are applied in real time. |
183| [Context management (compaction)](https://platform.claude.com/docs/en/build-with-claude/compaction-threshold) | `/v1/messages` with `context_management` | <Eligible>Yes</Eligible> | <Eligible status="no">No</Eligible> | Server-side compaction results are returned and round-tripped statelessly through the API response. |
184| [Data residency](https://platform.claude.com/docs/en/manage-claude/data-residency) | `/v1/messages` with `inference_geo` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | |
185| [Effort](https://platform.claude.com/docs/en/build-with-claude/effort) | `/v1/messages` with `effort` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | |
186| [Fast mode](https://platform.claude.com/docs/en/build-with-claude/fast-mode) | `/v1/messages` with `speed: "fast"` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Same Messages API endpoint with faster inference. ZDR applies regardless of speed setting. |
187| [Files API](https://platform.claude.com/docs/en/build-with-claude/files) | `/v1/files` | <Eligible status="no">No</Eligible> | <Eligible status="no">No</Eligible> | Files retained until explicitly deleted or they reach their configured expiration. See [Files API](https://platform.claude.com/docs/en/build-with-claude/files#data-retention). |
188| [Fine-grained tool streaming](https://platform.claude.com/docs/en/agents-and-tools/tool-use/fine-grained-tool-streaming) | `/v1/messages` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | |
189| [MCP connector](https://platform.claude.com/docs/en/agents-and-tools/mcp-connector) | `/v1/messages` with `mcp_servers` | <Eligible status="no">No</Eligible> | <Eligible status="no">No</Eligible> | Data retained per standard policy. See [MCP connector](https://platform.claude.com/docs/en/agents-and-tools/mcp-connector#data-retention). |
190| [MCP tunnels](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/overview) | `/v1/tunnels` | <Eligible status="no">No</Eligible> | <Eligible status="no">No</Eligible> | Research preview. See [MCP tunnels security](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/security) for the data-flow boundary and subprocessor details. |
191| [Memory tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/memory-tool) | `/v1/messages` with `memory` tool | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Client-side memory storage where you control data retention. |
192| [Messages API](https://platform.claude.com/docs/en/build-with-claude/working-with-messages) | `/v1/messages` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Standard API calls for generating Claude responses. |
193| [Mid-conversation system messages](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages) | `/v1/messages` with `role: "system"` messages | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Request-shape capability of the Messages API; mid-conversation system messages flow through the standard inference path and nothing is stored server-side after the response. |
194| [PDF support](https://platform.claude.com/docs/en/build-with-claude/pdf-support) | `/v1/messages` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | HIPAA eligibility applies to PDFs sent inline through the Messages API, not through the Files API. |
195| [Programmatic tool calling](https://platform.claude.com/docs/en/agents-and-tools/tool-use/programmatic-tool-calling) | `/v1/messages` with `code_execution` tool | <Eligible status="no">No</Eligible> | <Eligible status="no">No</Eligible> | Built on code execution containers; data retained up to 30 days. See [Programmatic tool calling](https://platform.claude.com/docs/en/agents-and-tools/tool-use/programmatic-tool-calling#data-retention). |
196| [Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) | `/v1/messages` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Your prompts and Claude's outputs are not stored. KV cache representations and cryptographic hashes are held in memory for the cache TTL and promptly deleted after expiry. See [Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#data-retention). |
197| [Search results](https://platform.claude.com/docs/en/build-with-claude/search-results) | `/v1/messages` with `search_results` source | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | |
198| [Structured outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs) | `/v1/messages` | <Eligible status="qualified">Yes (qualified)</Eligible> | <Eligible>Yes</Eligible> | Your prompts and Claude's outputs are not stored. Only the JSON schema is cached, for up to 24 hours since last use. This also covers [strict tool use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/strict-tool-use) (`strict: true` on tools), which uses the same grammar pipeline. PHI must not be included in JSON schema definitions; see [PHI handling guidelines](https://platform.claude.com/docs/en/manage-claude/api-and-data-retention#phi-handling-guidelines). See [Structured outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs#data-retention). |
199| [Text editor tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/text-editor-tool) | `/v1/messages` with `text_editor` tool | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Client-side tool executed in your environment. |
200| [Thinking](https://platform.claude.com/docs/en/build-with-claude/thinking) | `/v1/messages` with `thinking` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | |
201| [Token counting](https://platform.claude.com/docs/en/build-with-claude/token-counting) | `/v1/messages/count_tokens` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Count tokens before sending requests. |
202| [Tool search](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool) | `/v1/messages` with `tool_search` tool | <Eligible>Yes</Eligible> | <Eligible status="no">No</Eligible> | Server-side tool executed by Anthropic; the tool definitions in the request are searched in memory per call and nothing is stored after the response. |
203| [Web fetch](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-fetch-tool) | `/v1/messages` with `web_fetch` tool | <Eligible>Yes</Eligible> | <Eligible status="no">No</Eligible> | Fetched web content returned in the API response. [Dynamic filtering](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-fetch-tool#dynamic-filtering) is not eligible for ZDR or HIPAA. Website publishers may retain request data (such as fetched URLs and request metadata) according to their own policies. |
204| [Web search](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-search-tool) | `/v1/messages` with `web_search` tool | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Real-time web search results returned in the API response. [Dynamic filtering](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-search-tool#dynamic-filtering) is not eligible for ZDR or HIPAA. |
168| Feature | Endpoint | ZDR eligible | HIPAA eligible | Details |
169| -------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ------------------------------------------------------- | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
170| [1M token context window](https://platform.claude.com/docs/en/build-with-claude/context-windows) | `/v1/messages` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | |
171| [Adaptive thinking](https://platform.claude.com/docs/en/build-with-claude/thinking) | `/v1/messages` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | |
172| [Advisor tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/advisor-tool) | `/v1/messages`<br />with `advisor` tool | <Eligible>Yes</Eligible> | <Eligible status="no">No</Eligible> | Advisor model output is returned in the API response; nothing is stored server-side after the response. |
173| [Agent skills](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview) | `/v1/skills`<br />`/v1/messages` with `skills` | <Eligible status="no">No</Eligible> | <Eligible status="no">No</Eligible> | Skill data retained per standard policy. See [Agent skills](https://platform.claude.com/docs/en/agents-and-tools/agent-skills/overview#data-retention). |
174| [Bash tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/bash-tool) | `/v1/messages`<br />with `bash` tool | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Client-side tool executed in your environment. |
175| [Batch processing](https://platform.claude.com/docs/en/build-with-claude/batch-processing) | `/v1/messages/batches` | <Eligible status="no">No</Eligible> | <Eligible status="no">No</Eligible> | 29-day retention; async storage required. See [Batch processing](https://platform.claude.com/docs/en/build-with-claude/batch-processing#data-retention). |
176| [Browser use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-tool) | `/v1/messages`<br />with `browser` toolset | <Eligible>Yes</Eligible> | <Eligible status="no">No</Eligible> | Client-side tool. Anthropic does not run browser actions or retain page content beyond standard API handling. Not covered under HIPAA readiness; requests that include the browser use tool are not blocked. See [Browser use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/browser-use-tool#data-retention). |
177| [Cache diagnostics](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics) | `/v1/messages`<br />with `diagnostics` | <Eligible status="qualified">Yes (qualified)</Eligible> | <Eligible status="no">No</Eligible> | Your prompts and Claude's outputs are not stored. A fingerprint of cryptographic hashes and token-count estimates is retained briefly to enable comparison against the next request. See [Cache diagnostics](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics#data-retention). |
178| [Citations](https://platform.claude.com/docs/en/build-with-claude/citations) | `/v1/messages` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | |
179| [Claude Managed Agents](https://platform.claude.com/docs/en/managed-agents/overview) | `/v1/agents`<br />`/v1/sessions`<br />`/v1/environments` | <Eligible status="no">No</Eligible> | <Eligible status="no">No</Eligible> | Sessions are stateful resources; transcripts persist until you delete them. Applies to all Managed Agents sub-features, including [Self-hosted sandboxes](https://platform.claude.com/docs/en/managed-agents/self-hosted-sandboxes). |
180| [Code execution](https://platform.claude.com/docs/en/agents-and-tools/tool-use/code-execution-tool) | `/v1/messages`<br />with `code_execution` tool | <Eligible status="no">No</Eligible> | <Eligible status="no">No</Eligible> | Container data retained up to 30 days. See [Code execution](https://platform.claude.com/docs/en/agents-and-tools/tool-use/code-execution-tool#data-retention). |
181| [Computer use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool) | `/v1/messages`<br />with `computer` toolset or tool | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Client-side tool where screenshots and files are captured and stored in your environment, not by Anthropic. See [Computer use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/computer-use-tool#data-retention). |
182| [Context editing](https://platform.claude.com/docs/en/build-with-claude/context-editing) | `/v1/messages`<br />with `context_management` | <Eligible>Yes</Eligible> | <Eligible status="no">No</Eligible> | Context edits (tool use clearing and thinking clearing) are applied in real time. |
183| [Context management (compaction)](https://platform.claude.com/docs/en/build-with-claude/compaction-threshold) | `/v1/messages`<br />with `context_management` | <Eligible>Yes</Eligible> | <Eligible status="no">No</Eligible> | Server-side compaction results are returned and round-tripped statelessly through the API response. |
184| [Data residency](https://platform.claude.com/docs/en/manage-claude/data-residency) | `/v1/messages`<br />with `inference_geo` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | |
185| [Effort](https://platform.claude.com/docs/en/build-with-claude/effort) | `/v1/messages`<br />with `effort` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | |
186| [Fast mode](https://platform.claude.com/docs/en/build-with-claude/fast-mode) | `/v1/messages`<br />with `speed: "fast"` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Same Messages API endpoint with faster inference. ZDR applies regardless of speed setting. |
187| [Files API](https://platform.claude.com/docs/en/build-with-claude/files) | `/v1/files` | <Eligible status="no">No</Eligible> | <Eligible status="no">No</Eligible> | Files retained until explicitly deleted or they reach their configured expiration. See [Files API](https://platform.claude.com/docs/en/build-with-claude/files#data-retention). |
188| [Fine-grained tool streaming](https://platform.claude.com/docs/en/agents-and-tools/tool-use/fine-grained-tool-streaming) | `/v1/messages` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | |
189| [MCP connector](https://platform.claude.com/docs/en/agents-and-tools/mcp-connector) | `/v1/messages`<br />with `mcp_servers` | <Eligible status="no">No</Eligible> | <Eligible status="no">No</Eligible> | Data retained per standard policy. See [MCP connector](https://platform.claude.com/docs/en/agents-and-tools/mcp-connector#data-retention). |
190| [MCP tunnels](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/overview) | `/v1/tunnels` | <Eligible status="no">No</Eligible> | <Eligible status="no">No</Eligible> | Research preview. See [MCP tunnels security](https://platform.claude.com/docs/en/agents-and-tools/mcp-tunnels/security) for the data-flow boundary and subprocessor details. |
191| [Memory tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/memory-tool) | `/v1/messages`<br />with `memory` tool | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Client-side memory storage where you control data retention. |
192| [Messages API](https://platform.claude.com/docs/en/build-with-claude/working-with-messages) | `/v1/messages` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Standard API calls for generating Claude responses. |
193| [Mid-conversation system messages](https://platform.claude.com/docs/en/build-with-claude/mid-conversation-system-messages) | `/v1/messages`<br />with `role: "system"` messages | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Request-shape capability of the Messages API; mid-conversation system messages flow through the standard inference path and nothing is stored server-side after the response. |
194| [PDF support](https://platform.claude.com/docs/en/build-with-claude/pdf-support) | `/v1/messages` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | HIPAA eligibility applies to PDFs sent inline through the Messages API, not through the Files API. |
195| [Programmatic tool calling](https://platform.claude.com/docs/en/agents-and-tools/tool-use/programmatic-tool-calling) | `/v1/messages`<br />with `code_execution` tool | <Eligible status="no">No</Eligible> | <Eligible status="no">No</Eligible> | Built on code execution containers; data retained up to 30 days. See [Programmatic tool calling](https://platform.claude.com/docs/en/agents-and-tools/tool-use/programmatic-tool-calling#data-retention). |
196| [Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) | `/v1/messages` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Your prompts and Claude's outputs are not stored. KV cache representations and cryptographic hashes are held in memory for the cache TTL and promptly deleted after expiry. See [Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#data-retention). |
197| [Search results](https://platform.claude.com/docs/en/build-with-claude/search-results) | `/v1/messages`<br />with `search_results` source | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | |
198| [Structured outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs) | `/v1/messages` | <Eligible status="qualified">Yes (qualified)</Eligible> | <Eligible>Yes</Eligible> | Your prompts and Claude's outputs are not stored. Only the JSON schema is cached, for up to 24 hours since last use. This also covers [strict tool use](https://platform.claude.com/docs/en/agents-and-tools/tool-use/strict-tool-use) (`strict: true` on tools), which uses the same grammar pipeline. PHI must not be included in JSON schema definitions; see [PHI handling guidelines](https://platform.claude.com/docs/en/manage-claude/api-and-data-retention#phi-handling-guidelines). See [Structured outputs](https://platform.claude.com/docs/en/build-with-claude/structured-outputs#data-retention). |
199| [Text editor tool](https://platform.claude.com/docs/en/agents-and-tools/tool-use/text-editor-tool) | `/v1/messages`<br />with `text_editor` tool | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Client-side tool executed in your environment. |
200| [Thinking](https://platform.claude.com/docs/en/build-with-claude/thinking) | `/v1/messages`<br />with `thinking` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | |
201| [Token counting](https://platform.claude.com/docs/en/build-with-claude/token-counting) | `/v1/messages/count_tokens` | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Count tokens before sending requests. |
202| [Tool search](https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool) | `/v1/messages`<br />with `tool_search` tool | <Eligible>Yes</Eligible> | <Eligible status="no">No</Eligible> | Server-side tool executed by Anthropic; the tool definitions in the request are searched in memory per call and nothing is stored after the response. |
203| [Web fetch](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-fetch-tool) | `/v1/messages`<br />with `web_fetch` tool | <Eligible>Yes</Eligible> | <Eligible status="no">No</Eligible> | Fetched web content returned in the API response. [Dynamic filtering](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-fetch-tool#dynamic-filtering) is not eligible for ZDR or HIPAA. Website publishers may retain request data (such as fetched URLs and request metadata) according to their own policies. |
204| [Web search](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-search-tool) | `/v1/messages`<br />with `web_search` tool | <Eligible>Yes</Eligible> | <Eligible>Yes</Eligible> | Real-time web search results returned in the API response. [Dynamic filtering](https://platform.claude.com/docs/en/agents-and-tools/tool-use/web-search-tool#dynamic-filtering) is not eligible for ZDR or HIPAA. |
205205 
206206## Retention regardless of arrangement
207207 

manage-claude/plugins-api Changed · +7 / -7 lines

from line 24
2424 
2525The API exposes 18 endpoints across five resources:
2626 
27| Resource | Endpoints |
28| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
29| **Plugins**: list every plugin in the organization, upload a new one, look one up, choose the version members are served (roll back or promote), delete one | `GET /v1/organizations/plugins` `POST /v1/organizations/plugins` `GET /v1/organizations/plugins/{plugin_id}` `POST /v1/organizations/plugins/{plugin_id}` `DELETE /v1/organizations/plugins/{plugin_id}` |
30| **Plugin versions**: list a plugin's version history, upload a new version, look one up, download a version's files | `GET /v1/organizations/plugins/{plugin_id}/versions` `POST /v1/organizations/plugins/{plugin_id}/versions` `GET /v1/organizations/plugins/{plugin_id}/versions/{version}` `GET /v1/organizations/plugins/{plugin_id}/versions/{version}/content` |
31| **Installation settings**: read who can use an organization-owned plugin, set it for the whole organization or for one group, remove either setting | `GET /v1/organizations/plugins/{plugin_id}/installation_settings` `POST /v1/organizations/plugins/{plugin_id}/installation_settings/{target}` `DELETE /v1/organizations/plugins/{plugin_id}/installation_settings/{target}` |
32| **Shares**: read who a member has shared their own plugin with (read-only) | `GET /v1/organizations/plugins/{plugin_id}/shares` |
33| **Plugin marketplaces**: find a marketplace's ID, look one up, set the default installation setting for its plugins, check marketplace content before connecting it | `GET /v1/organizations/plugin_marketplaces` `GET /v1/organizations/plugin_marketplaces/{marketplace_id}` `POST /v1/organizations/plugin_marketplaces/{marketplace_id}` `POST /v1/organizations/plugin_marketplaces/validate_repository` `POST /v1/organizations/plugin_marketplaces/validate_archive` |
27| Resource | Endpoints |
28| ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
29| **Plugins**: list every plugin in the organization, upload a new one, look one up, choose the version members are served (roll back or promote), delete one | `GET /v1/organizations/plugins`<br />`POST /v1/organizations/plugins`<br />`GET /v1/organizations/plugins/{plugin_id}`<br />`POST /v1/organizations/plugins/{plugin_id}`<br />`DELETE /v1/organizations/plugins/{plugin_id}` |
30| **Plugin versions**: list a plugin's version history, upload a new version, look one up, download a version's files | `GET /v1/organizations/plugins/{plugin_id}/versions`<br />`POST /v1/organizations/plugins/{plugin_id}/versions`<br />`GET /v1/organizations/plugins/{plugin_id}/versions/{version}`<br />`GET /v1/organizations/plugins/{plugin_id}/versions/{version}/content` |
31| **Installation settings**: read who can use an organization-owned plugin, set it for the whole organization or for one group, remove either setting | `GET /v1/organizations/plugins/{plugin_id}/installation_settings`<br />`POST /v1/organizations/plugins/{plugin_id}/installation_settings/{target}`<br />`DELETE /v1/organizations/plugins/{plugin_id}/installation_settings/{target}` |
32| **Shares**: read who a member has shared their own plugin with (read-only) | `GET /v1/organizations/plugins/{plugin_id}/shares` |
33| **Plugin marketplaces**: find a marketplace's ID, look one up, set the default installation setting for its plugins, check marketplace content before connecting it | `GET /v1/organizations/plugin_marketplaces`<br />`GET /v1/organizations/plugin_marketplaces/{marketplace_id}`<br />`POST /v1/organizations/plugin_marketplaces/{marketplace_id}`<br />`POST /v1/organizations/plugin_marketplaces/validate_repository`<br />`POST /v1/organizations/plugin_marketplaces/validate_archive` |
3434 
3535This release does not include standalone skills (skills a member writes in the skills editor or uploads as a single skill in claude.ai). They do not appear in the inventory and cannot be created here. Plugins that Anthropic publishes are not inventoried either; their usage is reported by the [Analytics APIs](https://platform.claude.com/docs/en/manage-claude/analytics-api). Marketplaces are created, connected to repositories, and deleted in claude.ai, not through this API.
3636 

manage-claude/spend-limits-api Changed · +4 / -4 lines

from line 22
2222 
2323The API exposes eight endpoints across two resources:
2424 
25| Resource | Endpoints | Use for |
26| --------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
27| **Spend limits** | `GET /v1/organizations/spend_limits/effective` `GET /v1/organizations/spend_limits/{spend_limit_id}` `POST /v1/organizations/spend_limits` `DELETE /v1/organizations/spend_limits/{spend_limit_id}` | Read each member's effective spend limit and period-to-date spend; set or clear a per-user override. |
28| **Spend limit increase requests** | `GET /v1/organizations/spend_limit_increase_requests` `GET /v1/organizations/spend_limit_increase_requests/{id}` `POST /v1/organizations/spend_limit_increase_requests/{id}/approve` `POST /v1/organizations/spend_limit_increase_requests/{id}/deny` | List members' requests for a higher spend limit, with the context needed to decide; approve or deny each request. |
25| Resource | Endpoints | Use for |
26| --------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
27| **Spend limits** | `GET /v1/organizations/spend_limits/effective`<br />`GET /v1/organizations/spend_limits/{spend_limit_id}`<br />`POST /v1/organizations/spend_limits`<br />`DELETE /v1/organizations/spend_limits/{spend_limit_id}` | Read each member's effective spend limit and period-to-date spend; set or clear a per-user override. |
28| **Spend limit increase requests** | `GET /v1/organizations/spend_limit_increase_requests`<br />`GET /v1/organizations/spend_limit_increase_requests/{id}`<br />`POST /v1/organizations/spend_limit_increase_requests/{id}/approve`<br />`POST /v1/organizations/spend_limit_increase_requests/{id}/deny` | List members' requests for a higher spend limit, with the context needed to decide; approve or deny each request. |
2929 
3030Use the **spend limits** endpoints to answer "what spend limit applies to each member, where does it come from, and how close are they to it?" and to set a per-user override. Use the **spend limit increase requests** endpoints to work the queue of member-submitted requests.
3131 

manage-claude/user-management Changed · +7 / -7 lines

from line 35
3535 
3636This page covers five resources:
3737 
38| Resource | Endpoints | Use for |
39| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
40| **Members** | `GET /v1/organizations/users` `GET /v1/organizations/users/{user_id}` `POST /v1/organizations/users/{user_id}` `DELETE /v1/organizations/users/{user_id}` | List the organization's members or look one up by email; change a member's role; remove a member. |
41| **Invites** | `POST /v1/organizations/invites` `GET /v1/organizations/invites` `GET /v1/organizations/invites/{invite_id}` `DELETE /v1/organizations/invites/{invite_id}` | Invite a person to the organization, track the invitation's status, and withdraw it before it is accepted. |
42| **Groups** | `GET /v1/organizations/rbac_groups` `GET /v1/organizations/rbac_groups/{rbac_group_id}` `POST /v1/organizations/rbac_groups` `POST /v1/organizations/rbac_groups/{rbac_group_id}` `DELETE /v1/organizations/rbac_groups/{rbac_group_id}` | Read your enterprise's groups and the custom roles attached to each; create, rename, and delete groups. |
43| **Group members** | `GET /v1/organizations/rbac_groups/{rbac_group_id}/members` `POST /v1/organizations/rbac_groups/{rbac_group_id}/members` `DELETE /v1/organizations/rbac_groups/{rbac_group_id}/members/{user_id}` | Read a group's members; add and remove members. |
44| **Custom roles** | `GET /v1/organizations/rbac_roles` `GET /v1/organizations/rbac_roles/{rbac_role_id}` `GET /v1/organizations/rbac_roles/{rbac_role_id}/permissions` | Read your organization's custom roles and the permissions each role grants. |
38| Resource | Endpoints | Use for |
39| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------- |
40| **Members** | `GET /v1/organizations/users`<br />`GET /v1/organizations/users/{user_id}`<br />`POST /v1/organizations/users/{user_id}`<br />`DELETE /v1/organizations/users/{user_id}` | List the organization's members or look one up by email; change a member's role; remove a member. |
41| **Invites** | `POST /v1/organizations/invites`<br />`GET /v1/organizations/invites`<br />`GET /v1/organizations/invites/{invite_id}`<br />`DELETE /v1/organizations/invites/{invite_id}` | Invite a person to the organization, track the invitation's status, and withdraw it before it is accepted. |
42| **Groups** | `GET /v1/organizations/rbac_groups`<br />`GET /v1/organizations/rbac_groups/{rbac_group_id}`<br />`POST /v1/organizations/rbac_groups`<br />`POST /v1/organizations/rbac_groups/{rbac_group_id}`<br />`DELETE /v1/organizations/rbac_groups/{rbac_group_id}` | Read your enterprise's groups and the custom roles attached to each; create, rename, and delete groups. |
43| **Group members** | `GET /v1/organizations/rbac_groups/{rbac_group_id}/members`<br />`POST /v1/organizations/rbac_groups/{rbac_group_id}/members`<br />`DELETE /v1/organizations/rbac_groups/{rbac_group_id}/members/{user_id}` | Read a group's members; add and remove members. |
44| **Custom roles** | `GET /v1/organizations/rbac_roles`<br />`GET /v1/organizations/rbac_roles/{rbac_role_id}`<br />`GET /v1/organizations/rbac_roles/{rbac_role_id}/permissions` | Read your organization's custom roles and the permissions each role grants. |
4545 
4646Custom roles and their group attachments are managed in [claude.ai organization settings](https://claude.ai/admin-settings); the API reads them but cannot change them.
4747 

managed-agents/agent-setup Changed · +102 / -4 lines

from line 469
469469 
470470The preceding example supplies `version` from the create response, so the update only applies if nothing else has changed the agent since you read it. To apply an update unconditionally, omit `version` from the request:
471471 
472<CodeGroup exclude="shell:CLI, python, typescript, csharp, go, java, php, ruby">
472<CodeGroup>
473473 ```bash cURL
474474 updated_agent=$(curl -fsSL "https://api.anthropic.com/v1/agents/$AGENT_ID" \
475475 -H "x-api-key: $ANTHROPIC_API_KEY" \
from line 482
482482 
483483 echo "New version: $(jq -r '.version' <<< "$updated_agent")"
484484 ```
485 
486 ```bash CLI
487 ant beta:agents update \
488 --agent-id "$AGENT_ID" \
489 --description "Writes and reviews code."
490 ```
491 
492 ```python Python
493 unconditional_agent = client.beta.agents.update(
494 agent.id,
495 description="Writes and reviews code.",
496 )
497 
498 print(f"New version: {unconditional_agent.version}")
499 ```
500 
501 ```typescript TypeScript
502 const unconditionalAgent = await client.beta.agents.update(agent.id, {
503 description: "Writes and reviews code.",
504 });
505 
506 console.log(`New version: ${unconditionalAgent.version}`);
507 ```
508 
509 ```csharp C#
510 var unconditionalAgent = await client.Beta.Agents.Update(agent.ID, new()
511 {
512 Description = "Writes and reviews code.",
513 });
514 
515 Console.WriteLine($"New version: {unconditionalAgent.Version}");
516 ```
517 
518 ```go Go
519 unconditionalAgent, err := client.Beta.Agents.Update(ctx, agent.ID, anthropic.BetaAgentUpdateParams{
520 Description: anthropic.String("Writes and reviews code."),
521 })
522 if err != nil {
523 panic(err)
524 }
525 
526 fmt.Printf("New version: %d\n", unconditionalAgent.Version)
527 ```
528 
529 ```java Java
530 var unconditionalAgent = client.beta().agents().update(
531 agent.id(),
532 AgentUpdateParams.builder()
533 .description("Writes and reviews code.")
534 .build()
535 );
536 
537 IO.println("New version: " + unconditionalAgent.version());
538 ```
539 
540 ```php PHP
541 $unconditionalAgent = $client->beta->agents->update(
542 $agent->id,
543 description: 'Writes and reviews code.',
544 );
545 
546 echo "New version: {$unconditionalAgent->version}\n";
547 ```
548 
549 ```ruby Ruby
550 unconditional_agent = client.beta.agents.update(
551 agent.id,
552 description: "Writes and reviews code."
553 )
554 
555 puts "New version: #{unconditional_agent.version}"
556 ```
485557</CodeGroup>
486558 
487559### Update semantics
from line 576
504576 
505577The following update clears the description, deletes the `team` key from `metadata` (java, php; csharp, go: `Metadata`), and sets `workflows` (java, php; csharp, go: `Workflows`) to `null`, which turns dynamic workflows on:
506578 
507<CodeGroup exclude="shell:CLI">
579<CodeGroup defaultLanguage="CLI">
508580 ```bash cURL
509581 cleared_agent=$(curl -fsSL "https://api.anthropic.com/v1/agents/$AGENT_ID" \
510582 -H "x-api-key: $ANTHROPIC_API_KEY" \
from line 592
520592 echo "Description: $(jq -r '.description' <<< "$cleared_agent")"
521593 ```
522594 
595 <CodeGroupItem>
596 ```bash CLI
597 ant apply code-reviewer.md
598 ```
599 
600 <File filename="code-reviewer.md">
601 ```markdown
602 ---
603 name: Code Reviewer
604 model: claude-opus-5-5
605 tools:
606 - type: agent_toolset_20260401
607 metadata:
608 owner: docs
609 multiagent:
610 type: multiagent_20261001
611 workflows: null
612 ---
613 
614 You are a helpful coding agent.
615 ```
616 </File>
617 
618 The file no longer has `description` or the `team` key, so `ant apply` sends `null` for them. Deleting a setting inside `multiagent` keeps its stored value, so the file sets `workflows` to `null`.
619 </CodeGroupItem>
620 
523621 ```python Python
524622 cleared_agent = client.beta.agents.update(
525623 agent.id,
from line 779
681779 
682780 ```php PHP
683781 foreach ($client->beta->agents->versions->list($agent->id)->pagingEachItem() as $version) {
684 echo "Version {$version->version}: {$version->updatedAt->format(DateTimeInterface::ATOM)}\n";
782 echo "Version {$version->version}: {$version->updatedAt->format(\DateTimeInterface::ATOM)}\n";
685783 }
686784 ```
687785 
from line 840
742840 ```php PHP
743841 $archived = $client->beta->agents->archive($agent->id);
744842 
745 echo "Archived at: {$archived->archivedAt->format(DateTimeInterface::ATOM)}\n";
843 echo "Archived at: {$archived->archivedAt->format(\DateTimeInterface::ATOM)}\n";
746844 ```
747845 
748846 ```ruby Ruby

managed-agents/event-deltas Changed · +127 / -8 lines

from line 491
491491 ```
492492 
493493 ```php PHP
494 // In PHP, set eventDeltas on EventStreamParams and accumulate with Anthropic\Lib\Sessions\EventAccumulator.
494 use Anthropic\Beta\Sessions\BetaManagedAgentsDeltaEvent;
495 use Anthropic\Beta\Sessions\BetaManagedAgentsDeltaType;
496 use Anthropic\Beta\Sessions\BetaManagedAgentsStartEvent;
497 use Anthropic\Beta\Sessions\Events\ManagedAgentsAgentMessageEvent;
498 use Anthropic\Beta\Sessions\Events\ManagedAgentsSessionStatusIdleEvent;
499 use Anthropic\Beta\Sessions\Events\ManagedAgentsSpanModelRequestEndEvent;
500 use Anthropic\Beta\Sessions\Events\ManagedAgentsTextBlock;
501 use Anthropic\Lib\Sessions\EventAccumulator;
502 
503 // Preview snapshots, keyed by event id. EventAccumulator::accumulate() adds each
504 // event_start / event_delta to an agent.message snapshot; the buffered
505 // agent.message replaces it.
506 $previews = [];
507 
508 // The text of an agent.message snapshot or event
509 $textOf = fn (ManagedAgentsAgentMessageEvent $message): string => implode(
510 '',
511 array_map(
512 fn ($block) => $block->text,
513 array_filter(
514 $message->content,
515 fn ($block) => $block instanceof ManagedAgentsTextBlock,
516 ),
517 ),
518 );
519 
520 // Opt in to agent.message previews on this connection
521 $stream = $client->beta->sessions->events->streamStream(
522 $session->id,
523 eventDeltas: [BetaManagedAgentsDeltaType::AGENT_MESSAGE],
524 );
525 
526 $client->beta->sessions->events->send(
527 $session->id,
528 events: [
529 [
530 'type' => 'user.message',
531 'content' => [['type' => 'text', 'text' => 'Describe the repo in one sentence.']],
532 ],
533 ],
534 );
535 
536 foreach ($stream as $event) {
537 switch (true) {
538 case $event instanceof BetaManagedAgentsStartEvent:
539 $snapshot = EventAccumulator::accumulate(null, $event);
540 if ($snapshot !== null) {
541 $previews[$event->event->id] = $snapshot;
542 }
543 printf("event_start %s %s\n", $event->event->type, $event->event->id);
544 break;
545 case $event instanceof BetaManagedAgentsDeltaEvent:
546 // Skip a late delta for a preview that was already replaced or closed
547 if (!isset($previews[$event->eventID])) {
548 break; // Break switch statement
549 }
550 $previews[$event->eventID] = EventAccumulator::accumulate($previews[$event->eventID], $event);
551 printf("event_delta preview: %s\n", json_encode($textOf($previews[$event->eventID])));
552 break;
553 case $event instanceof ManagedAgentsAgentMessageEvent:
554 // The buffered event is the record: it replaces and closes the preview
555 unset($previews[$event->id]);
556 printf("agent.message %s %s\n", $event->id, json_encode($textOf($event)));
557 break;
558 case $event instanceof ManagedAgentsSpanModelRequestEndEvent:
559 // No more deltas are coming. Close any preview whose
560 // buffered event never arrived.
561 foreach (array_keys($previews) as $eventID) {
562 printf("span.model_request_end closing preview for %s\n", $eventID);
563 }
564 $previews = [];
565 break;
566 case $event instanceof ManagedAgentsSessionStatusIdleEvent:
567 break 2; // Break foreach loop
568 }
569 }
570 $stream->close();
495571 ```
496572 
497573 ```ruby Ruby
from line 712
636712 ```
637713 
638714 ```python Python
639 # List the session's threads and pick a child: child threads carry a non-null
715 # List the session's threads and pick a child: child threads have a non-null
640716 # parent_thread_id, and the primary thread's parent_thread_id is null.
641717 child_thread = next(
642718 thread
from line 743
667743 ```
668744 
669745 ```typescript TypeScript
670 // List the session's threads and pick a child: child threads carry a non-null
746 // List the session's threads and pick a child: child threads have a non-null
671747 // parent_thread_id, and the primary thread's parent_thread_id is null.
672748 let childThreadId: string | undefined;
673749 for await (const thread of client.beta.sessions.threads.list(session.id)) {
from line 783
707783 ```
708784 
709785 ```csharp C#
710 // List the session's threads and pick a child: child threads carry a non-null
786 // List the session's threads and pick a child: child threads have a non-null
711787 // parent_thread_id, and the primary thread's parent_thread_id is null.
712788 var threads = await client.Beta.Sessions.Threads.List(session.ID);
713789 var childThread = threads.Items.First(thread => thread.ParentThreadID is not null);
from line 817
741817 ```
742818 
743819 ```go Go
744 // List the session's threads and pick a child: child threads carry a non-null
820 // List the session's threads and pick a child: child threads have a non-null
745821 // parent_thread_id, and the primary thread's parent_thread_id is null.
746822 var childThreadID string
747823 threads := client.Beta.Sessions.Threads.ListAutoPaging(ctx, session.ID, anthropic.BetaSessionThreadListParams{})
from line 864
788864 ```
789865 
790866 ```java Java
791 // List the session's threads and pick a child: child threads carry a non-null
867 // List the session's threads and pick a child: child threads have a non-null
792868 // parent_thread_id, and the primary thread's parent_thread_id is null.
793869 var childThread = client.beta().sessions().threads().list(session.id()).autoPager().stream()
794870 .filter(thread -> thread.parentThreadId().isPresent())
from line 900
824900 ```
825901 
826902 ```php PHP
827 // In PHP, set eventDeltas on the thread EventStreamParams and accumulate with Anthropic\Lib\Sessions\EventAccumulator.
903 use Anthropic\Beta\Sessions\BetaManagedAgentsDeltaEvent;
904 use Anthropic\Beta\Sessions\BetaManagedAgentsDeltaType;
905 use Anthropic\Beta\Sessions\Events\ManagedAgentsAgentMessageEvent;
906 use Anthropic\Beta\Sessions\Events\ManagedAgentsSessionThreadStatusIdleEvent;
907 use Anthropic\Beta\Sessions\Events\ManagedAgentsTextBlock;
908 
909 // List the session's threads and pick a child: child threads have a non-null
910 // parentThreadID, and the primary thread's parentThreadID is null.
911 $childThread = null;
912 foreach ($client->beta->sessions->threads->list($session->id)->pagingEachItem() as $thread) {
913 if ($thread->parentThreadID !== null) {
914 $childThread = $thread;
915 break;
916 }
917 }
918 
919 // The child thread's stream takes the same eventDeltas parameter as the
920 // session stream.
921 $stream = $client->beta->sessions->threads->events->streamStream(
922 $childThread->id,
923 sessionID: $session->id,
924 eventDeltas: [BetaManagedAgentsDeltaType::AGENT_MESSAGE],
925 );
926 
927 foreach ($stream as $event) {
928 switch (true) {
929 case $event instanceof BetaManagedAgentsDeltaEvent:
930 echo $event->delta->content->text;
931 break;
932 case $event instanceof ManagedAgentsAgentMessageEvent:
933 // The buffered event is the authoritative record; render its content
934 echo "\n";
935 foreach ($event->content as $block) {
936 if ($block instanceof ManagedAgentsTextBlock) {
937 echo $block->text;
938 }
939 }
940 echo "\n";
941 break;
942 case $event instanceof ManagedAgentsSessionThreadStatusIdleEvent:
943 break 2; // Break foreach loop
944 }
945 }
946 $stream->close();
828947 ```
829948 
830949 ```ruby Ruby
831 # List the session's threads and pick a child: child threads carry a non-null
950 # List the session's threads and pick a child: child threads have a non-null
832951 # parent_thread_id, and the primary thread's parent_thread_id is null.
833952 child_thread = client.beta.sessions.threads.list(session.id).to_enum.find { it.parent_thread_id }
834953 

managed-agents/events-and-streaming Changed · +20 / -6 lines

from line 261
261261 ```
262262 
263263 ```php PHP
264 use Anthropic\Beta\Sessions\Events\ManagedAgentsAgentMessageEvent;
265 use Anthropic\Beta\Sessions\Events\ManagedAgentsSessionErrorEvent;
266 use Anthropic\Beta\Sessions\Events\ManagedAgentsTextBlock;
267 
264268 // Open the stream first, then send the user message
265269 $stream = $client->beta->sessions->events->streamStream($session->id);
266270 $client->beta->sessions->events->send(
from line 279
275279 
276280 foreach ($stream as $event) {
277281 match (true) {
278 $event instanceof \Anthropic\Beta\Sessions\Events\ManagedAgentsAgentMessageEvent => array_walk(
282 $event instanceof ManagedAgentsAgentMessageEvent => array_walk(
279283 $event->content,
280 static fn ($block) => $block instanceof \Anthropic\Beta\Sessions\Events\ManagedAgentsTextBlock ? print($block->text) : null,
284 static fn ($block) => $block instanceof ManagedAgentsTextBlock ? print($block->text) : null,
281285 ),
282 $event instanceof \Anthropic\Beta\Sessions\Events\ManagedAgentsSessionErrorEvent => printf("\n[Error: %s]", $event->error?->message ?? 'unknown'),
286 $event instanceof ManagedAgentsSessionErrorEvent => printf("\n[Error: %s]", $event->error?->message ?? 'unknown'),
283287 default => null,
284288 };
285289 if ($event->type === 'session.status_idle' || $event->type === 'session.error') {
from line 529
525529 ```
526530 
527531 ```php PHP
532 use Anthropic\Beta\Sessions\Events\ManagedAgentsAgentMessageEvent;
533 use Anthropic\Beta\Sessions\Events\ManagedAgentsTextBlock;
534 
528535 $stream = $client->beta->sessions->events->streamStream($session->id);
529536 
530537 // Stream is open and buffering. List history before tailing live.
from line 547
540547 }
541548 $seenEventIds[$event->id] = true;
542549 match (true) {
543 $event instanceof \Anthropic\Beta\Sessions\Events\ManagedAgentsAgentMessageEvent => array_walk(
550 $event instanceof ManagedAgentsAgentMessageEvent => array_walk(
544551 $event->content,
545 static fn ($block) => $block instanceof \Anthropic\Beta\Sessions\Events\ManagedAgentsTextBlock ? print($block->text) : null,
552 static fn ($block) => $block instanceof ManagedAgentsTextBlock ? print($block->text) : null,
546553 ),
547554 default => null,
548555 };
from line 1776
17691776 ```
17701777 
17711778 ```php PHP
1772 // In PHP, pass the types you want on EventListParams; see the Anthropic PHP SDK.
1779 $events = $client->beta->sessions->events->list(
1780 $session->id,
1781 types: ['agent.tool_use', 'agent.tool_result'],
1782 );
1783 foreach ($events->data as $event) {
1784 $processedAt = ($event->processedAt ?? null)?->format(DATE_RFC3339) ?? 'null';
1785 echo "[{$event->type}] {$processedAt}\n";
1786 }
17731787 ```
17741788 
17751789 ```ruby Ruby

test-and-evaluate/develop-tests Changed · +6 / -6 lines

from line 98
9898Most use cases need multidimensional evaluation along several success criteria.
9999 
100100<Accordion title="Example multidimensional criteria for sentiment analysis">
101 | | Criteria |
102 | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
103 | Bad | The model should classify sentiments well |
104 | Good | On a held-out test set of 10,000 diverse Twitter posts, the sentiment analysis model should achieve: - an F1 score of at least 0.85 - 99.5% of outputs are non-toxic - 90% of errors would cause inconvenience, not egregious error\* - 95% response time \< 200ms |
101 | | Criteria |
102 | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
103 | Bad | The model should classify sentiments well |
104 | Good | On a held-out test set of 10,000 diverse Twitter posts, the sentiment analysis model should achieve:<br />- an F1 score of at least 0.85<br />- 99.5% of outputs are non-toxic<br />- 90% of errors would cause inconvenience, not egregious error\*<br />- 95% response time \< 200ms |
105105 
106106 \*In reality, you would also define what "inconvenience" and "egregious" mean.
107107</Accordion>
from line 1549
15491549 );
15501550 $scoreText = trim(contentText($response));
15511551 if (filter_var($scoreText, FILTER_VALIDATE_INT) === false) {
1552 throw new RuntimeException("Unexpected rating from grader: {$scoreText}");
1552 throw new \RuntimeException("Unexpected rating from grader: {$scoreText}");
15531553 }
15541554 return (int) $scoreText;
15551555 }
from line 2719
27192719 );
27202720 $scoreText = trim(contentText($response));
27212721 if (filter_var($scoreText, FILTER_VALIDATE_INT) === false) {
2722 throw new RuntimeException("Unexpected rating from grader: {$scoreText}");
2722 throw new \RuntimeException("Unexpected rating from grader: {$scoreText}");
27232723 }
27242724 return (int) $scoreText;
27252725 }

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

from line 673
673673 'type' => typeText($input['text']),
674674 'screenshot' => captureScreenshot(),
675675 // Handle other actions as needed
676 default => throw new RuntimeException("Unknown or unimplemented member: {$name}"),
676 default => throw new \RuntimeException("Unknown or unimplemented member: {$name}"),
677677 };
678678 }
679679 ```
from line 1006
10061006 try {
10071007 // A real executor also returns a browser_state block on navigation and tab-management results
10081008 $toolResults[] = [...$result, 'content' => handleBrowserAction($block->name, $block->input)];
1009 } catch (Throwable $e) {
1009 } catch (\Throwable $e) {
10101010 $failed = true;
10111011 $toolResults[] = [...$result, 'content' => 'Error: ' . $e->getMessage(), 'is_error' => true];
10121012 }

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

from line 1215
12151215 'left_click' => clickAt($input['coordinate'] ?? null),
12161216 'type' => typeText($input['text']),
12171217 // Handle other actions as needed
1218 default => throw new RuntimeException("Unknown or unimplemented member: {$name}"),
1218 default => throw new \RuntimeException("Unknown or unimplemented member: {$name}"),
12191219 };
12201220 }
12211221 ```
from line 1534
15341534 try {
15351535 // A string, or the image block list that screenshot returns
15361536 $toolResults[] = [...$result, 'content' => handleComputerAction($block->name, $block->input)];
1537 } catch (Throwable $e) {
1537 } catch (\Throwable $e) {
15381538 $failed = true;
15391539 $toolResults[] = [...$result, 'content' => 'Error: ' . $e->getMessage(), 'is_error' => true];
15401540 }

agents-and-tools/tool-use/fine-grained-tool-streaming Changed · +1 / -1 lines

from line 835
835835 try {
836836 $parsed = json_decode($accumulated, associative: true, flags: JSON_THROW_ON_ERROR);
837837 echo "Tool input: " . json_encode($parsed) . "\n";
838 } catch (JsonException $e) {
838 } catch (\JsonException $e) {
839839 // The accumulated string is not guaranteed to be valid JSON.
840840 // See "Handling invalid JSON in tool responses" on this page.
841841 echo "Invalid tool input: {$accumulated}\n";

api/beta/agents/archive Changed · +1 / -1 lines

from line 928
928928 "foo": "bar"
929929 },
930930 "model": {
931 "id": "claude-opus-5",
931 "id": "claude-opus-5-5",
932932 "effort": {
933933 "type": "low"
934934 },

api/beta/agents/list Changed · +1 / -1 lines

from line 955
955955 "foo": "bar"
956956 },
957957 "model": {
958 "id": "claude-opus-5",
958 "id": "claude-opus-5-5",
959959 "effort": {
960960 "type": "low"
961961 },

api/beta/agents/retrieve Changed · +1 / -1 lines

from line 935
935935 "foo": "bar"
936936 },
937937 "model": {
938 "id": "claude-opus-5",
938 "id": "claude-opus-5-5",
939939 "effort": {
940940 "type": "low"
941941 },

api/beta/agents/update Changed · +2 / -2 lines

from line 163
163163 
164164- `model: optional BetaManagedAgentsModel or BetaManagedAgentsModelConfigParams`
165165 
166 Model identifier. Accepts the [model string](https://platform.claude.com/docs/en/about-claude/models/overview?sdk_languages=http#latest-models-comparison), e.g. `claude-opus-5`, or a `model_config` object for additional configuration control. Omit to preserve. Cannot be cleared.
166 Model identifier. Accepts the [model string](https://platform.claude.com/docs/en/about-claude/models/overview?sdk_languages=http#latest-models-comparison), e.g. `claude-opus-5-5`, or a `model_config` object for additional configuration control. Omit to preserve. Cannot be cleared.
167167 
168168 - `BetaManagedAgentsModel = "claude-haiku-5-5" or "claude-sonnet-5-5" or "claude-opus-5-5" or 14 more or string`
169169 
from line 1863
18631863 "foo": "bar"
18641864 },
18651865 "model": {
1866 "id": "claude-opus-5",
1866 "id": "claude-opus-5-5",
18671867 "effort": {
18681868 "type": "low"
18691869 },
Feedback