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-20261021T030709Z

273 pages moved out of 808 read.

Pages moved 273 significant first
Pages read 808 in this capture
Captured 03:07 UTC
Corpus hash 2f3c9238b052 corpus-hash

What this read moved

51-75 of 273, page 3 of 11

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

api/beta/vaults Changed · +26 / -0 lines

from line 127
127127 
128128 - `"telemetry-destinations-2026-08-11"`
129129 
130 - `"webhooks-2026-10-07"`
131 
130132- `"anthropic-workspace-id": optional string`
131133 
132134 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 355
353355 
354356 - `"telemetry-destinations-2026-08-11"`
355357 
358 - `"webhooks-2026-10-07"`
359 
356360- `"anthropic-workspace-id": optional string`
357361 
358362 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 563
559563 
560564 - `"telemetry-destinations-2026-08-11"`
561565 
566 - `"webhooks-2026-10-07"`
567 
562568- `"anthropic-workspace-id": optional string`
563569 
564570 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 762
756762 
757763 - `"telemetry-destinations-2026-08-11"`
758764 
765 - `"webhooks-2026-10-07"`
766 
759767- `"anthropic-workspace-id": optional string`
760768 
761769 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 980
972980 
973981 - `"telemetry-destinations-2026-08-11"`
974982 
983 - `"webhooks-2026-10-07"`
984 
975985- `"anthropic-workspace-id": optional string`
976986 
977987 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 1147
11371147 
11381148 - `"telemetry-destinations-2026-08-11"`
11391149 
1150 - `"webhooks-2026-10-07"`
1151 
11401152- `"anthropic-workspace-id": optional string`
11411153 
11421154 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 1401
13891401 
13901402 - `"telemetry-destinations-2026-08-11"`
13911403 
1404 - `"webhooks-2026-10-07"`
1405 
13921406- `"anthropic-workspace-id": optional string`
13931407 
13941408 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 1929
19151929 
19161930 - `"telemetry-destinations-2026-08-11"`
19171931 
1932 - `"webhooks-2026-10-07"`
1933 
19181934- `"anthropic-workspace-id": optional string`
19191935 
19201936 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 2264
22482264 
22492265 - `"telemetry-destinations-2026-08-11"`
22502266 
2267 - `"webhooks-2026-10-07"`
2268 
22512269- `"anthropic-workspace-id": optional string`
22522270 
22532271 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 2590
25722590 
25732591 - `"telemetry-destinations-2026-08-11"`
25742592 
2593 - `"webhooks-2026-10-07"`
2594 
25752595- `"anthropic-workspace-id": optional string`
25762596 
25772597 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 3065
30453065 
30463066 - `"telemetry-destinations-2026-08-11"`
30473067 
3068 - `"webhooks-2026-10-07"`
3069 
30483070- `"anthropic-workspace-id": optional string`
30493071 
30503072 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 3236
32143236 
32153237 - `"telemetry-destinations-2026-08-11"`
32163238 
3239 - `"webhooks-2026-10-07"`
3240 
32173241- `"anthropic-workspace-id": optional string`
32183242 
32193243 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 3562
35383562 - `"spend-limit-reads-2026-09-26"`
35393563 
35403564 - `"telemetry-destinations-2026-08-11"`
3565 
3566 - `"webhooks-2026-10-07"`
35413567 
35423568- `"anthropic-workspace-id": optional string`
35433569 

api/beta/vaults/credentials Changed · +14 / -0 lines

from line 133
133133 
134134 - `"telemetry-destinations-2026-08-11"`
135135 
136 - `"webhooks-2026-10-07"`
137 
136138- `"anthropic-workspace-id": optional string`
137139 
138140 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 661
659661 
660662 - `"telemetry-destinations-2026-08-11"`
661663 
664 - `"webhooks-2026-10-07"`
665 
662666- `"anthropic-workspace-id": optional string`
663667 
664668 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 996
992996 
993997 - `"telemetry-destinations-2026-08-11"`
994998 
999 - `"webhooks-2026-10-07"`
1000 
9951001- `"anthropic-workspace-id": optional string`
9961002 
9971003 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 1322
13161322 
13171323 - `"telemetry-destinations-2026-08-11"`
13181324 
1325 - `"webhooks-2026-10-07"`
1326 
13191327- `"anthropic-workspace-id": optional string`
13201328 
13211329 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 1797
17891797 
17901798 - `"telemetry-destinations-2026-08-11"`
17911799 
1800 - `"webhooks-2026-10-07"`
1801 
17921802- `"anthropic-workspace-id": optional string`
17931803 
17941804 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 1968
19581968 
19591969 - `"telemetry-destinations-2026-08-11"`
19601970 
1971 - `"webhooks-2026-10-07"`
1972 
19611973- `"anthropic-workspace-id": optional string`
19621974 
19631975 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 2294
22822294 - `"spend-limit-reads-2026-09-26"`
22832295 
22842296 - `"telemetry-destinations-2026-08-11"`
2297 
2298 - `"webhooks-2026-10-07"`
22852299 
22862300- `"anthropic-workspace-id": optional string`
22872301 

api/beta/webhooks Changed · +89 / -1 lines

### Beta Webhook User Profile Enforcement Action Opened Event Data ### Beta Webhook User Profile Enforcement Action Resolved Event Data

from line 821
821821 
822822 - `workspace_id: string`
823823 
824 - `BetaWebhookUserProfileEnforcementActionOpenedEventData object`
825 
826 - `type: "user_profile.enforcement_action_opened"`
827 
828 - `id: string`
829 
830 ID of the user profile the enforcement action is on.
831 
832 - `enforcement_action_id: string`
833 
834 ID (`enac_...`) of the enforcement action that was opened or resolved.
835 
836 - `organization_id: string`
837 
838 - `BetaWebhookUserProfileEnforcementActionResolvedEventData object`
839 
840 - `type: "user_profile.enforcement_action_resolved"`
841 
842 - `id: string`
843 
844 ID of the user profile the enforcement action is on.
845 
846 - `enforcement_action_id: string`
847 
848 ID (`enac_...`) of the enforcement action that was opened or resolved.
849 
850 - `organization_id: string`
851 
824852### Beta Webhook Event Data
825853 
826- `BetaWebhookEventData = BetaWebhookSessionCreatedEventData or BetaWebhookSessionPendingEventData or BetaWebhookSessionRunningEventData or 41 more`
854- `BetaWebhookEventData = BetaWebhookSessionCreatedEventData or BetaWebhookSessionPendingEventData or BetaWebhookSessionRunningEventData or 43 more`
827855 
828856 - `BetaWebhookSessionCreatedEventData object`
829857 
from line 1409
13811409 
13821410 - `workspace_id: string`
13831411 
1412 - `BetaWebhookUserProfileEnforcementActionOpenedEventData object`
1413 
1414 - `type: "user_profile.enforcement_action_opened"`
1415 
1416 - `id: string`
1417 
1418 ID of the user profile the enforcement action is on.
1419 
1420 - `enforcement_action_id: string`
1421 
1422 ID (`enac_...`) of the enforcement action that was opened or resolved.
1423 
1424 - `organization_id: string`
1425 
1426 - `BetaWebhookUserProfileEnforcementActionResolvedEventData object`
1427 
1428 - `type: "user_profile.enforcement_action_resolved"`
1429 
1430 - `id: string`
1431 
1432 ID of the user profile the enforcement action is on.
1433 
1434 - `enforcement_action_id: string`
1435 
1436 ID (`enac_...`) of the enforcement action that was opened or resolved.
1437 
1438 - `organization_id: string`
1439 
13841440### Beta Webhook Memory Store Archived Event Data
13851441 
13861442- `BetaWebhookMemoryStoreArchivedEventData object`
from line 1728
16721728 - `organization_id: string`
16731729 
16741730 - `workspace_id: string`
1731 
1732### Beta Webhook User Profile Enforcement Action Opened Event Data
1733 
1734- `BetaWebhookUserProfileEnforcementActionOpenedEventData object`
1735 
1736 - `type: "user_profile.enforcement_action_opened"`
1737 
1738 - `id: string`
1739 
1740 ID of the user profile the enforcement action is on.
1741 
1742 - `enforcement_action_id: string`
1743 
1744 ID (`enac_...`) of the enforcement action that was opened or resolved.
1745 
1746 - `organization_id: string`
1747 
1748### Beta Webhook User Profile Enforcement Action Resolved Event Data
1749 
1750- `BetaWebhookUserProfileEnforcementActionResolvedEventData object`
1751 
1752 - `type: "user_profile.enforcement_action_resolved"`
1753 
1754 - `id: string`
1755 
1756 ID of the user profile the enforcement action is on.
1757 
1758 - `enforcement_action_id: string`
1759 
1760 ID (`enac_...`) of the enforcement action that was opened or resolved.
1761 
1762 - `organization_id: string`
16751763 
16761764### Beta Webhook Vault Archived Event Data
16771765 

api/compliance/activities 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.

Nothing in the body moved in this read. What changed is above.

api/messages Changed · +224 / -0 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 3880
38803880 
38813881 - `CacheMissModelChanged object`
38823882 
3883 A `cache_miss_reason` for a request whose `model` or `speed` differs from the previous request's.
3884 
3885 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
3886 
38833887 - `type: "model_changed"`
38843888 
38853889 default: model_changed
from line 3894
38903894 
38913895 - `CacheMissSystemChanged object`
38923896 
3897 A `cache_miss_reason` for a request whose `system` differs from the previous request's.
3898 
3899 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
3900 
38933901 - `type: "system_changed"`
38943902 
38953903 default: system_changed
from line 3908
39003908 
39013909 - `CacheMissToolsChanged object`
39023910 
3911 A `cache_miss_reason` for a request whose `tools` differ from the previous request's, for example because tools were added, removed, or reordered.
3912 
3913 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
3914 
39033915 - `type: "tools_changed"`
39043916 
39053917 default: tools_changed
from line 3922
39103922 
39113923 - `CacheMissMessagesChanged object`
39123924 
3925 A `cache_miss_reason` for a request whose `messages` differ from the previous request's in an earlier entry, instead of only having entries appended. The `model`, `system`, and `tools` match.
3926 
3927 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
3928 
39133929 - `type: "messages_changed"`
39143930 
39153931 default: messages_changed
from line 3936
39203936 
39213937 - `CacheMissPreviousMessageNotFound object`
39223938 
3939 A `cache_miss_reason` for when the API doesn't have a stored record of the request that `diagnostics.previous_message_id` references.
3940 
3941 This doesn't mean that this request changed.
3942 
3943 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
3944 
39233945 - `type: "previous_message_not_found"`
39243946 
39253947 default: previous_message_not_found
from line 3948
39263948 
39273949 - `CacheMissUnavailable object`
39283950 
3951 A `cache_miss_reason` for when the API can't give a diagnosis. The request itself was processed normally.
3952 
3953 This includes a request whose `model`, `system`, and `tools` match the previous request's but whose other prompt-affecting parameters, such as `thinking` or `tool_choice`, differ.
3954 
3955 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
3956 
39293957 - `type: "unavailable"`
39303958 
39313959 default: unavailable
from line 8489
84618489 
84628490 - `tab_id: optional string or null`
84638491 
8464 Tab to act on. Defaults to the active tab when omitted.
8465 
8466### Browser Get Page Text Tool Use Block
8467 
8468- `BrowserGetPageTextToolUseBlock object`
8469 
8470 - `type: "tool_use"`
8471 
8472 default: tool_use
8473 
8474 - `id: string`
8475 
8476 pattern: ^[a-zA-Z0-9_-]+$
8477 
8478 - `caller: ToolUseCaller`
8479 
8480 Which party invoked the tool call: the model directly, or a server tool on its behalf.
8481 
8482 - `DirectCaller object`
8483 
8484 Tool invocation directly from the model.
8485 
8486 - `type: "direct"`
8487 
8488 - `ServerToolCaller object`
8489 
8490 Tool invocation generated by a server-side tool.
8491 
8492 - `type: "code_execution_20250825"`
8493 
8494 - `tool_id: string`
8495 
8496 pattern: ^srvtoolu_[a-zA-Z0-9_]+$
8497 
8498 - `ServerToolCaller20260120 object`
8499 
8500 - `type: "code_execution_20260120"`
8501 
8502 - `tool_id: string`
8503 
8504 pattern: ^srvtoolu_[a-zA-Z0-9_]+$
8505 
8506 - `input: BrowserGetPageTextInput`
8507 
8508 Return the page's visible text content as plain text, prioritizing article
8509 content. Suited to articles, documentation, and other text-heavy pages.
8510 
8511 - `tab_id: optional string or null`
8512 
8513 Tab to act on. Defaults to the active tab when omitted.
8514 
8515 - `name: "get_page_text"`
8516 
8517 - `toolset_name: "browser"`
8518 
8519### Browser Hold Key Config
8520 
8521- `BrowserHoldKeyConfig object`
8522 
8523 `hold_key`'s config overrides.
8524 
8525 - `defer_loading: optional boolean or null`
8526 
8527 Defer loading for this member. Must resolve to the same value on every enabled member of the toolset.
8528 
8529 - `enabled: optional boolean or null`
8530 
8531 Whether this member is offered to the model. Default is per member, per the toolset's documentation. A member whose enabled resolves false is withheld from the served schema.
8532 
8533### Browser Hold Key Input
8534 
8535- `BrowserHoldKeyInput object`
8536 
8537 Hold a key or key chord down for a duration, then release it. Uses the same key
8538 names and "+" chord syntax as the key action.
8539 
8540 - `duration: number`
8541 
8542 Seconds to hold the key down (maximum 30).
8543 
8544 minimum: 0, maximum: 30
8545 
8546 - `text: string`
8547 
8548 The key or chord to hold.
8549 
8550 - `tab_id: optional string or null`
8551 
8552 Tab to act on. Defaults to the active tab when omitted.
8553 
8554### Browser Hold Key Tool Use Block
8555 
8556- `BrowserHoldKeyToolUseBlock object`
8557 
8558 - `type: "tool_use"`
8559 
8560 default: tool_use
8561 
8562 - `id: string`
8563 
8564 pattern: ^[a-zA-Z0-9_-]+$
8565 
8566 - `caller: ToolUseCaller`
8567 
8568 Which pa
8492 Tab to act on. Defaults to the active tab

api/messages/batches Changed · +112 / -0 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 4716
47164716 
47174717 - `CacheMissModelChanged object`
47184718 
4719 A `cache_miss_reason` for a request whose `model` or `speed` differs from the previous request's.
4720 
4721 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
4722 
47194723 - `type: "model_changed"`
47204724 
47214725 default: model_changed
from line 4730
47264730 
47274731 - `CacheMissSystemChanged object`
47284732 
4733 A `cache_miss_reason` for a request whose `system` differs from the previous request's.
4734 
4735 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
4736 
47294737 - `type: "system_changed"`
47304738 
47314739 default: system_changed
from line 4744
47364744 
47374745 - `CacheMissToolsChanged object`
47384746 
4747 A `cache_miss_reason` for a request whose `tools` differ from the previous request's, for example because tools were added, removed, or reordered.
4748 
4749 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
4750 
47394751 - `type: "tools_changed"`
47404752 
47414753 default: tools_changed
from line 4758
47464758 
47474759 - `CacheMissMessagesChanged object`
47484760 
4761 A `cache_miss_reason` for a request whose `messages` differ from the previous request's in an earlier entry, instead of only having entries appended. The `model`, `system`, and `tools` match.
4762 
4763 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
4764 
47494765 - `type: "messages_changed"`
47504766 
47514767 default: messages_changed
from line 4772
47564772 
47574773 - `CacheMissPreviousMessageNotFound object`
47584774 
4775 A `cache_miss_reason` for when the API doesn't have a stored record of the request that `diagnostics.previous_message_id` references.
4776 
4777 This doesn't mean that this request changed.
4778 
4779 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
4780 
47594781 - `type: "previous_message_not_found"`
47604782 
47614783 default: previous_message_not_found
from line 4784
47624784 
47634785 - `CacheMissUnavailable object`
47644786 
4787 A `cache_miss_reason` for when the API can't give a diagnosis. The request itself was processed normally.
4788 
4789 This includes a request whose `model`, `system`, and `tools` match the previous request's but whose other prompt-affecting parameters, such as `thinking` or `tool_choice`, differ.
4790 
4791 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
4792 
47654793 - `type: "unavailable"`
47664794 
47674795 default: unavailable
from line 6265
62376265 
62386266 - `CacheMissModelChanged object`
62396267 
6268 A `cache_miss_reason` for a request whose `model` or `speed` differs from the previous request's.
6269 
6270 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
6271 
62406272 - `type: "model_changed"`
62416273 
62426274 default: model_changed
from line 6279
62476279 
62486280 - `CacheMissSystemChanged object`
62496281 
6282 A `cache_miss_reason` for a request whose `system` differs from the previous request's.
6283 
6284 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
6285 
62506286 - `type: "system_changed"`
62516287 
62526288 default: system_changed
from line 6293
62576293 
62586294 - `CacheMissToolsChanged object`
62596295 
6296 A `cache_miss_reason` for a request whose `tools` differ from the previous request's, for example because tools were added, removed, or reordered.
6297 
6298 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
6299 
62606300 - `type: "tools_changed"`
62616301 
62626302 default: tools_changed
from line 6307
62676307 
62686308 - `CacheMissMessagesChanged object`
62696309 
6310 A `cache_miss_reason` for a request whose `messages` differ from the previous request's in an earlier entry, instead of only having entries appended. The `model`, `system`, and `tools` match.
6311 
6312 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
6313 
62706314 - `type: "messages_changed"`
62716315 
62726316 default: messages_changed
from line 6321
62776321 
62786322 - `CacheMissPreviousMessageNotFound object`
62796323 
6324 A `cache_miss_reason` for when the API doesn't have a stored record of the request that `diagnostics.previous_message_id` references.
6325 
6326 This doesn't mean that this request changed.
6327 
6328 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
6329 
62806330 - `type: "previous_message_not_found"`
62816331 
62826332 default: previous_message_not_found
from line 6333
62836333 
62846334 - `CacheMissUnavailable object`
62856335 
6336 A `cache_miss_reason` for when the API can't give a diagnosis. The request itself was processed normally.
6337 
6338 This includes a request whose `model`, `system`, and `tools` match the previous request's but whose other prompt-affecting parameters, such as `thinking` or `tool_choice`, differ.
6339 
6340 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
6341 
62866342 - `type: "unavailable"`
62876343 
62886344 default: unavailable
from line 7586
75307586 
75317587 - `CacheMissModelChanged object`
75327588 
7589 A `cache_miss_reason` for a request whose `model` or `speed` differs from the previous request's.
7590 
7591 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
7592 
75337593 - `type: "model_changed"`
75347594 
75357595 default: model_changed
from line 7600
75407600 
75417601 - `CacheMissSystemChanged object`
75427602 
7603 A `cache_miss_reason` for a request whose `system` differs from the previous request's.
7604 
7605 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
7606 
75437607 - `type: "system_changed"`
75447608 
75457609 default: system_changed
from line 7614
75507614 
75517615 - `CacheMissToolsChanged object`
75527616 
7617 A `cache_miss_reason` for a request whose `tools` differ from the previous request's, for example because tools were added, removed, or reordered.
7618 
7619 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
7620 
75537621 - `type: "tools_changed"`
75547622 
75557623 default: tools_changed
from line 7628
75607628 
75617629 - `CacheMissMessagesChanged object`
75627630 
7631 A `cache_miss_reason` for a request whose `messages` differ from the previous request's in an earlier entry, instead of only having entries appended. The `model`, `system`, and `tools` match.
7632 
7633 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
7634 
75637635 - `type: "messages_changed"`
75647636 
75657637 default: messages_changed
from line 7642
75707642 
75717643 - `CacheMissPreviousMessageNotFound object`
75727644 
7645 A `cache_miss_reason` for when the API doesn't have a stored record of the request that `diagnostics.previous_message_id` references.
7646 
7647 This doesn't mean that this request changed.
7648 
7649 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
7650 
75737651 - `type: "previous_message_not_found"`
75747652 
75757653 default: previous_message_not_found
from line 7654
75767654 
75777655 - `CacheMissUnavailable object`
75787656 
7657 A `cache_miss_reason` for when the API can't give a diagnosis. The request itself was processed normally.
7658 
7659 This includes a request whose `model`, `system`, and `tools` match the previous request's but whose other prompt-affecting parameters, such as `thinking` or `tool_choice`, differ.
7660 
7661 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
7662 
75797663 - `type: "unavailable"`
75807664 
75817665 default: unavailable
from line 8431
83478431 
83488432 - `WebSearchToolResultBlock object`
83498433 
8350 - `type: "web_search_tool_result"`
8351 
8352 default: web_search_tool_result
8353 
8354 - `caller: DirectCaller or ServerToolCaller or ServerToolCaller20260120`
8355 
8356 default: {"type":"direct"}
8357 
8358 - `DirectCaller object`
8359 
8360 Tool invocation directly from the model.
8361 
8362 - `ServerToolCaller object`
8363 
8364 Tool invocation generated by a server-side tool.
8365 
8366 - `ServerToolCaller20260120 object`
8367 
8368 - `content: WebSearchToolResultBlockContent`
8369 
8370 - `WebSearchToolResultError object`
8371 
8372 - `type: "web_search_tool_result_error"`
8373 
8374 default: web_search_tool_result_error
8375 
8376 - `error_code: WebSearchToolResultErrorCode`
8377 
8378 - `"invalid_tool_input"`
8379 
8380 - `"unavailable"`
8381 
8382 - `"max_uses_exceeded"`
8383 
8384 - `"too_many_requests"`
8385 
8386 - `"query_too_long"`
8387 
8388 - `"request_too_large"`
8389 
8390 - `array of WebSearchResultBlock`
8391 
8392 - `type: "web_search_result"`
8393 
8394 default: web_search_result
8395 
8396 - `encrypted_content: string`
8397 
8398 - `page_age: string or null`
8399 
8400 - `title: string`
8401 
8402 - `url: string`
8403 
8404 - `tool_use_id: string`
8405 
8406 pattern: ^srvtoolu_[a-zA-Z0-9_]+$
8407 
8408 - `WebFetchToolResultBlock object`
8409 
8410 - `type: "web_fetch_tool_result"`
8411 
8412 default: web_fetch_tool_result
8413 
8414 - `caller: DirectCaller or ServerToolCaller or ServerToolCaller20260120`
8415 
8416 default: {"type":"direct"}
8417 
8418 - `DirectCaller object`
8419 
8420 Tool invocation directly from the model.
8421 
8422 - `ServerToolCaller object`
8423 
8424 Tool invocation generated by a server-side tool.
8425 
8426 - `ServerToolCaller20260120 object`
8427 
8428 - `content: WebFetchToolResultErrorBlock or WebFetchBlock`
8429 
8430 - `WebFetchToolResultErrorBlock object`
8431 
8432 - `type: "web_fetch_tool_result_error"`
8433 
8434 default: web_fetch_tool_result_error
8435 
8436 - `error_code: WebFetchToolResultErrorCode`
8437 
8438 - `"invalid_tool_input"`
8439 
8440 - `"url_too_long"`
8441 
8442 - `"url_not_allowed"`
8443 
8444 - `"url_not_in_prior_context"`
8445 
8446 - `"url_not_accessible"`
8447 
8448 - `"unsupported_content_type"`
8449 
8450 - `"too_many_requests"`
8451 
8452 - `"max_uses_exceeded"`
8453 
8454 - `"unavailable"`
8455 
8456 - `"content_too_large"`
8457 
8458 - `WebFetchBlock object`
8459 
8460 - `type: "web_fetch_result"`
8461 
8462 default: web_fetch_result
8463 
8464 - `content: DocumentBlock`
8465 
8466 - `type: "document"`
8467 
8468 default: document
8469 
8470 - `citations: CitationsConfig or null`
8471 
8472 Citation configuration for the document
8473 
8474 - `enabled: boolean`
8475 
8476 default: false
8477 
8478 - `source: Base64PDFSource or PlainTextSource`
8479 
8480 - `Base64PDFSource object`
8481 
8482 - `type: "base64"`
8483 
8484 - `data: string`
8485 
8486 format: byte
8487 
8488 - `media_type: "application/pdf"`
8489 
8490 - `PlainTextSource object`
8491 
8492 - `type: "text"`
8493 
8494 - `data: string`
8495 
8496 - `media_type: "text/plain"`
8497 
8498 - `title: string or null`
8499 
8500 The title of the document
8501 
8502 - `retrieved_at: string or null`
8503 
8504 ISO 8601 timestamp when the content was retrieved
8505 
8506 - `url: string`
8507 
8508 Fetched content URL
8509 
8510 - `tool_use_id: string`
8511 
8512 pattern: ^srvtoolu_[a-zA-Z0-9_]+$
8513 
8514 - `CodeExecutionToolResultBlock object`
8515 
8516 - `type: "code_execution_tool_result"`
8517 
8518 default: code_execution_tool_result
8519 
8520 - `content: CodeExecutionToolResultBlockContent`
8521 
8522 - `CodeExecutionToolResultError object`
8523 
8524 - `type: "code_execution_tool_result_error"`
8525 
8526 default: code_execution_tool_result_error
8527 
8528 - `error_code: CodeExecutionToolResultErrorCode`
8529 
8530 - `"invalid_tool_input"`
8531 
8532 - `"unavailable"`
8533 
8534 - `"too_many_requests"`
8535 
8536 - `"execution_time_exceeded"`
8537 
8538 - `CodeExecutionResultBlock object`
8539 
8540 - `type: "code_execution_result"`
8541 
8542 default: code_execution_result
8543 
8544 - `content: array of CodeExecutionOutputBlock`
8545 
8546 - `type: "code_execution_output"`
8547 
8548 default: code_execution_output
8549 
8550 - `file_id: string`
8551 
8552 - `return_code: number`
8553 
8554 - `stderr: string`
8555 
8556 - `stdout: string`
8557 
8558 - `EncryptedCodeExecutionResultBlock object`
8559 
8560 Code execution result with encrypted stdout for PFC + web_search results.
8561 
8562 - `type: "encrypted_code_execution_result"`
8563 
8564 default: encrypted_code_execution_result
8565 
8566 - `content: array of CodeExecutionOutputBlock`
8567 
8568 - `type: "code_execution_output"`
8569 
8570 default: code_execution_output
8571 
8572 - `file_id: string`
8573 
8574 - `encrypted_stdout: string`
8575 
8576 - `return_code: number`
8577 
8578 - `stderr: string`
8579 
8580 - `tool_use_id: string`
8581 
8582 pattern: ^srvtoolu_[a-zA-Z0-9_]+$
8583 
8584 - `BashCodeExecutionToolResultBlock object`
8585 
8586 - `type: "bash_code_execution_tool_result"`
8587 
8588 default: bash_code_execution_tool_result
8589 
8590 - `content: BashCodeExecutionToolResultError or BashCodeExecutionResultBlock`
8591 
8592 - `BashCodeExecutionToolResultError object`
8593 
8594 - `type: "bash_code_execution_tool_result_error"`
8595 
8596 default: bash_code_execution_tool_result_error
8597 
8598 - `error_code: BashCodeExecutionToolResultErrorCode`
8599 
8600 - `"invalid_tool_input"`
8601 
8602 - `"unavailable"`
8603 
8604 - `"too_many_requests"`
8605 
8606 - `"execution_time_exceeded"`
8607 
8608 - `"output_file_too_large"`
8609 
8610 - `BashCodeExecutionResultBlock object`
8611 
8612 - `type: "bash_code_execution_result"`
8613 
8614 default: bash_code_execution_result
8615 
8616 - `content: array of BashCodeExecutionOutputBlock`
8617 
8618 - `type: "bash_code_execution_output"`
8619 
8620 default: bash_code_execution_output
8621 
8622 - `file_id: string`
8623 
8624 - `return_code: number`
8625 
8626 - `stderr: string`
8627 
8628 - `stdout: string`
8629 
8630 - `tool_use_id: string`
8631 
8632 pattern: ^srvtoolu_[a-zA-Z0-9_]+$
8633 
8634 - `TextEditorCodeExecutionToolResultBlock object`
8635 
8636 - `type: "text_editor_code_execution_tool_result"`
8637 
8638 default: text_editor_code_execution_tool_result
8639 
8640 - `content: TextEditorCodeExecutionToolResultError or TextEditorCodeExecutionViewResultBlock or TextEditorCodeExecutionCreateResultBlock or TextEditorCodeExecutionStrReplaceResultBlock`
8641 
8642 - `TextEditorCodeExecutionToolResultError object`
8643 
8644 - `type: "text_editor_code_execution_tool_result_error"`
8645 
8646 
8434

api/messages/batches/results Changed · +28 / -0 lines

from line 838
838838 
839839 - `CacheMissModelChanged object`
840840 
841 A `cache_miss_reason` for a request whose `model` or `speed` differs from the previous request's.
842 
843 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
844 
841845 - `type: "model_changed"`
842846 
843847 default: model_changed
from line 852
848852 
849853 - `CacheMissSystemChanged object`
850854 
855 A `cache_miss_reason` for a request whose `system` differs from the previous request's.
856 
857 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
858 
851859 - `type: "system_changed"`
852860 
853861 default: system_changed
from line 866
858866 
859867 - `CacheMissToolsChanged object`
860868 
869 A `cache_miss_reason` for a request whose `tools` differ from the previous request's, for example because tools were added, removed, or reordered.
870 
871 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
872 
861873 - `type: "tools_changed"`
862874 
863875 default: tools_changed
from line 880
868880 
869881 - `CacheMissMessagesChanged object`
870882 
883 A `cache_miss_reason` for a request whose `messages` differ from the previous request's in an earlier entry, instead of only having entries appended. The `model`, `system`, and `tools` match.
884 
885 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
886 
871887 - `type: "messages_changed"`
872888 
873889 default: messages_changed
from line 894
878894 
879895 - `CacheMissPreviousMessageNotFound object`
880896 
897 A `cache_miss_reason` for when the API doesn't have a stored record of the request that `diagnostics.previous_message_id` references.
898 
899 This doesn't mean that this request changed.
900 
901 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
902 
881903 - `type: "previous_message_not_found"`
882904 
883905 default: previous_message_not_found
884906 
885907 - `CacheMissUnavailable object`
908 
909 A `cache_miss_reason` for when the API can't give a diagnosis. The request itself was processed normally.
910 
911 This includes a request whose `model`, `system`, and `tools` match the previous request's but whose other prompt-affecting parameters, such as `thinking` or `tool_choice`, differ.
912 
913 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
886914 
887915 - `type: "unavailable"`
888916 

api/messages/create Changed · +28 / -0 lines

from line 3878
38783878 
38793879 - `CacheMissModelChanged object`
38803880 
3881 A `cache_miss_reason` for a request whose `model` or `speed` differs from the previous request's.
3882 
3883 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
3884 
38813885 - `type: "model_changed"`
38823886 
38833887 default: model_changed
from line 3892
38883892 
38893893 - `CacheMissSystemChanged object`
38903894 
3895 A `cache_miss_reason` for a request whose `system` differs from the previous request's.
3896 
3897 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
3898 
38913899 - `type: "system_changed"`
38923900 
38933901 default: system_changed
from line 3906
38983906 
38993907 - `CacheMissToolsChanged object`
39003908 
3909 A `cache_miss_reason` for a request whose `tools` differ from the previous request's, for example because tools were added, removed, or reordered.
3910 
3911 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
3912 
39013913 - `type: "tools_changed"`
39023914 
39033915 default: tools_changed
from line 3920
39083920 
39093921 - `CacheMissMessagesChanged object`
39103922 
3923 A `cache_miss_reason` for a request whose `messages` differ from the previous request's in an earlier entry, instead of only having entries appended. The `model`, `system`, and `tools` match.
3924 
3925 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
3926 
39113927 - `type: "messages_changed"`
39123928 
39133929 default: messages_changed
from line 3934
39183934 
39193935 - `CacheMissPreviousMessageNotFound object`
39203936 
3937 A `cache_miss_reason` for when the API doesn't have a stored record of the request that `diagnostics.previous_message_id` references.
3938 
3939 This doesn't mean that this request changed.
3940 
3941 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
3942 
39213943 - `type: "previous_message_not_found"`
39223944 
39233945 default: previous_message_not_found
39243946 
39253947 - `CacheMissUnavailable object`
3948 
3949 A `cache_miss_reason` for when the API can't give a diagnosis. The request itself was processed normally.
3950 
3951 This includes a request whose `model`, `system`, and `tools` match the previous request's but whose other prompt-affecting parameters, such as `thinking` or `tool_choice`, differ.
3952 
3953 See the [cache diagnostics guide](https://platform.claude.com/docs/en/build-with-claude/cache-diagnostics?sdk_languages=http#cache-miss-reason-types) to learn what to change for each reason.
39263954 
39273955 - `type: "unavailable"`
39283956 

api/organization Changed · +273 / -1 lines

### Set Workspace Rate Limits

from line 7310
73107310}
73117311```
73127312 
7313### Set Workspace Rate Limits
7314 
7315**POST** `/v1/organizations/workspaces/{workspace_id}/rate_limits/{rate_limit_id}`
7316 
7317Set or clear rate-limit overrides for one rate-limit group in a workspace.
7318 
7319Only the limiter types named in `limits` change: an integer `value` sets
7320that type's override and `null` clears it. Types not named keep their
7321current value. A value above the organization's own limit is stored, but
7322the organization limit still applies, so the lower of the two is
7323enforced.
7324 
7325Returns the targeted group's entry with this request applied, in the shape
7326`GET /v1/organizations/workspaces/{workspace_id}/rate_limits` returns.
7327Changes take effect within about an hour.
7328 
7329#### Path parameters
7330 
7331- `workspace_id: string`
7332 
7333 The ID of the workspace.
7334 
7335- `rate_limit_id: string`
7336 
7337 The `id` of the organization's rate-limit entry to set overrides for.
7338 
7339#### Headers
7340 
7341- `"anthropic-version": optional string`
7342 
7343 The version of the Claude API you want to use.
7344 
7345 Read more about versioning and our version history [here](https://platform.claude.com/docs/en/api/versioning?sdk_languages=http).
7346 
7347#### Body parameters
7348 
7349- `limits: array of WorkspaceRateLimitUpdateValue`
7350 
7351 Limits to set or clear. Unspecified limit types are unchanged.
7352 
7353 minItems: 1, maxItems: 16
7354 
7355 - `type: WorkspaceRateLimitType`
7356 
7357 Rate limiter type.
7358 
7359 - `"fast_itpmca"`
7360 
7361 - `"fast_otpm"`
7362 
7363 - `"input_tokens_per_minute"`
7364 
7365 - `"input_tokens_per_minute_cache_aware"`
7366 
7367 - `"output_tokens_per_minute"`
7368 
7369 - `"requests_per_minute"`
7370 
7371 - `"tokens_per_day"`
7372 
7373 - `"tokens_per_minute"`
7374 
7375 - `"tool_uses_per_second"`
7376 
7377 - `value: number or null`
7378 
7379 New limit value. Set to null to clear the workspace override and fall back to the organization limit.
7380 
7381 minimum: 0, maximum: 9007199254740991
7382 
7383#### Returns
7384 
7385- `WorkspaceRateLimit object`
7386 
7387 - `type: "workspace_rate_limit"`
7388 
7389 Object type. Always `workspace_rate_limit` for workspace rate-limit entries.
7390 
7391 default: workspace_rate_limit
7392 
7393 - `group: OrganizationRateLimitModelGroup or OrganizationRateLimitBatchGroup or OrganizationRateLimitTokenCountGroup or 3 more`
7394 
7395 The rate-limit group this entry's limits apply to. Its `type` equals `group_type`.
7396 
7397 - `OrganizationRateLimitModelGroup object`
7398 
7399 - `type: "model_group"`
7400 
7401 Always `model_group`: a family of models.
7402 
7403 default: model_group
7404 
7405 - `id: string`
7406 
7407 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
7408 
7409 - `display_name: string`
7410 
7411 Human-readable name of the model group (for example, `Claude Sonnet 4.x`). For display only; it may change.
7412 
7413 - `OrganizationRateLimitBatchGroup object`
7414 
7415 - `type: "batch"`
7416 
7417 Always `batch`: the Message Batches API.
7418 
7419 default: batch
7420 
7421 - `id: string`
7422 
7423 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
7424 
7425 - `OrganizationRateLimitTokenCountGroup object`
7426 
7427 - `type: "token_count"`
7428 
7429 Always `token_count`: the Token Count API.
7430 
7431 default: token_count
7432 
7433 - `id: string`
7434 
7435 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
7436 
7437 - `OrganizationRateLimitFilesGroup object`
7438 
7439 - `type: "files"`
7440 
7441 Always `files`: the Files API.
7442 
7443 default: files
7444 
7445 - `id: string`
7446 
7447 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
7448 
7449 - `OrganizationRateLimitSkillsGroup object`
7450 
7451 - `type: "skills"`
7452 
7453 Always `skills`: the Skills API.
7454 
7455 default: skills
7456 
7457 - `id: string`
7458 
7459 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
7460 
7461 - `OrganizationRateLimitWebSearchGroup object`
7462 
7463 - `type: "web_search"`
7464 
7465 Always `web_search`: the Messages API web search tool.
7466 
7467 default: web_search
7468 
7469 - `id: string`
7470 
7471 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
7472 
7473 - `limits: array of WorkspaceRateLimitValue`
7474 
7475 The workspace's limiter values for this group. By default only the limiter types with a workspace-level override are listed. With `include_inherited` set to `true`, the limiter types the workspace inherits from the organization are listed too, each marked by `source`.
7476 
7477 - `type: string`
7478 
7479 The limiter type (for example, `requests_per_minute` or `input_tokens_per_minute`).
7480 
7481 - `org_limit: number or null`
7482 
7483 The organization-level value for the same limiter type, for reference. `null` when the organization has no limit configured for this limiter type.
7484 
7485 - `source: WorkspaceRateLimitWorkspaceSource or WorkspaceRateLimitOrganizationSource`
7486 
7487 Where `value` comes from. `organization` values are listed only when `include_inherited` is `true`, and then `value` equals `org_limit`.
7488 
7489 - `WorkspaceRateLimitWorkspaceSource object`
7490 
7491 - `type: "workspace"`
7492 
7493 Always `workspace`: a workspace-level override is stored.
7494 
7495 default: workspace
7496 
7497 - `WorkspaceRateLimitOrganizationSource object`
7498 
7499 - `type: "organization"`
7500 
7501 Always `organization`: no workspace-level override is stored, so the organization's value applies.
7502 
7503 default: organization
7504 
7505 - `value: number`
7506 
7507 The workspace's value for this limiter type: the workspace-level override when `source.type` is `workspace`, otherwise the organization's value.
7508 
7509 - `models: array of string or null`
7510 
7511 Model names this entry's limits apply to, including aliases. `null` when `group_type` is not `"model_group"`.
7512 
7513 - `rate_limit_id: string`
7514 
7515 The `id` of the organization's RateLimit entry this entry applies to.
7516 
7517 - `workspace_id: string`
7518 
7519 ID of the Workspace this entry applies to.
7520 
7521 - `group_type: "batch" or "files" or "model_group" or 3 more`
7522 
7523 **Deprecated**: Use `group.type` instead. `group_type` is still returned and always equals `group.type`.
7524 
7525 Deprecated: use `group.type` instead. The kind of rate-limit group this entry represents. `model_group` entries apply to a family of models (listed in `models`); other values apply to an API-surface category and have `models` set to `null`. Always equal to `group.type`.
7526 
7527 - `"batch"`
7528 
7529 - `"files"`
7530 
7531 - `"model_group"`
7532 
7533 - `"skills"`
7534 
7535 - `"token_count"`
7536 
7537 - `"web_search"`
7538 
7539#### Example
7540 
7541```bash
7542curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID/rate_limits/$RATE_LIMIT_ID \
7543 -H 'Content-Type: application/json' \
7544 -H 'anthropic-version: 2023-06-01' \
7545 -H "X-Api-Key: $ANTHROPIC_API_KEY" \
7546 -d '{
7547 "limits": [
7548 {
7549 "type": "fast_itpmca",
7550 "value": 0
7551 }
7552 ]
7553 }'
7554```
7555 
7556##### Response (200)
7557 
7558```json
7559{
7560 "group": {
7561 "id": "id",
7562 "display_name": "display_name",
7563 "type": "model_group"
7564 },
7565 "group_type": "batch",
7566 "limits": [
7567 {
7568 "org_limit": 0,
7569 "source": {
7570 "type": "workspace"
7571 },
7572 "type": "type",
7573 "value": 0
7574 }
7575 ],
7576 "models": [
7577 "string"
7578 ],
7579 "rate_limit_id": "rate_limit_id",
7580 "type": "workspace_rate_limit",
7581 "workspace_id": "workspace_id"
7582}
7583```
7584 
73137585## Organization › Workspaces › Members
73147586 
73157587### List Workspace Members
from line 8588
83168588 
83178589 - `id: string`
83188590 
8319 Identifier of this rate-limit entry. It is stable within the organization and differs between organizations; the group's own identifier is `group.id`.
8591 Identifier of this rate-limit entry. It is stable within the organization and differs between organizations; the group's own identifier is `group.id`. Pass it as `rate_limit_id` to set a workspace's overrides for this group.
83208592 
83218593 - `group: OrganizationRateLimitModelGroup or OrganizationRateLimitBatchGroup or OrganizationRateLimitTokenCountGroup or 3 more`
83228594 

api/organization/workspaces Changed · +272 / -0 lines

### Set Workspace Rate Limits

from line 1432
14321432}
14331433```
14341434 
1435### Set Workspace Rate Limits
1436 
1437**POST** `/v1/organizations/workspaces/{workspace_id}/rate_limits/{rate_limit_id}`
1438 
1439Set or clear rate-limit overrides for one rate-limit group in a workspace.
1440 
1441Only the limiter types named in `limits` change: an integer `value` sets
1442that type's override and `null` clears it. Types not named keep their
1443current value. A value above the organization's own limit is stored, but
1444the organization limit still applies, so the lower of the two is
1445enforced.
1446 
1447Returns the targeted group's entry with this request applied, in the shape
1448`GET /v1/organizations/workspaces/{workspace_id}/rate_limits` returns.
1449Changes take effect within about an hour.
1450 
1451#### Path parameters
1452 
1453- `workspace_id: string`
1454 
1455 The ID of the workspace.
1456 
1457- `rate_limit_id: string`
1458 
1459 The `id` of the organization's rate-limit entry to set overrides for.
1460 
1461#### Headers
1462 
1463- `"anthropic-version": optional string`
1464 
1465 The version of the Claude API you want to use.
1466 
1467 Read more about versioning and our version history [here](https://platform.claude.com/docs/en/api/versioning?sdk_languages=http).
1468 
1469#### Body parameters
1470 
1471- `limits: array of WorkspaceRateLimitUpdateValue`
1472 
1473 Limits to set or clear. Unspecified limit types are unchanged.
1474 
1475 minItems: 1, maxItems: 16
1476 
1477 - `type: WorkspaceRateLimitType`
1478 
1479 Rate limiter type.
1480 
1481 - `"fast_itpmca"`
1482 
1483 - `"fast_otpm"`
1484 
1485 - `"input_tokens_per_minute"`
1486 
1487 - `"input_tokens_per_minute_cache_aware"`
1488 
1489 - `"output_tokens_per_minute"`
1490 
1491 - `"requests_per_minute"`
1492 
1493 - `"tokens_per_day"`
1494 
1495 - `"tokens_per_minute"`
1496 
1497 - `"tool_uses_per_second"`
1498 
1499 - `value: number or null`
1500 
1501 New limit value. Set to null to clear the workspace override and fall back to the organization limit.
1502 
1503 minimum: 0, maximum: 9007199254740991
1504 
1505#### Returns
1506 
1507- `WorkspaceRateLimit object`
1508 
1509 - `type: "workspace_rate_limit"`
1510 
1511 Object type. Always `workspace_rate_limit` for workspace rate-limit entries.
1512 
1513 default: workspace_rate_limit
1514 
1515 - `group: OrganizationRateLimitModelGroup or OrganizationRateLimitBatchGroup or OrganizationRateLimitTokenCountGroup or 3 more`
1516 
1517 The rate-limit group this entry's limits apply to. Its `type` equals `group_type`.
1518 
1519 - `OrganizationRateLimitModelGroup object`
1520 
1521 - `type: "model_group"`
1522 
1523 Always `model_group`: a family of models.
1524 
1525 default: model_group
1526 
1527 - `id: string`
1528 
1529 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
1530 
1531 - `display_name: string`
1532 
1533 Human-readable name of the model group (for example, `Claude Sonnet 4.x`). For display only; it may change.
1534 
1535 - `OrganizationRateLimitBatchGroup object`
1536 
1537 - `type: "batch"`
1538 
1539 Always `batch`: the Message Batches API.
1540 
1541 default: batch
1542 
1543 - `id: string`
1544 
1545 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
1546 
1547 - `OrganizationRateLimitTokenCountGroup object`
1548 
1549 - `type: "token_count"`
1550 
1551 Always `token_count`: the Token Count API.
1552 
1553 default: token_count
1554 
1555 - `id: string`
1556 
1557 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
1558 
1559 - `OrganizationRateLimitFilesGroup object`
1560 
1561 - `type: "files"`
1562 
1563 Always `files`: the Files API.
1564 
1565 default: files
1566 
1567 - `id: string`
1568 
1569 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
1570 
1571 - `OrganizationRateLimitSkillsGroup object`
1572 
1573 - `type: "skills"`
1574 
1575 Always `skills`: the Skills API.
1576 
1577 default: skills
1578 
1579 - `id: string`
1580 
1581 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
1582 
1583 - `OrganizationRateLimitWebSearchGroup object`
1584 
1585 - `type: "web_search"`
1586 
1587 Always `web_search`: the Messages API web search tool.
1588 
1589 default: web_search
1590 
1591 - `id: string`
1592 
1593 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
1594 
1595 - `limits: array of WorkspaceRateLimitValue`
1596 
1597 The workspace's limiter values for this group. By default only the limiter types with a workspace-level override are listed. With `include_inherited` set to `true`, the limiter types the workspace inherits from the organization are listed too, each marked by `source`.
1598 
1599 - `type: string`
1600 
1601 The limiter type (for example, `requests_per_minute` or `input_tokens_per_minute`).
1602 
1603 - `org_limit: number or null`
1604 
1605 The organization-level value for the same limiter type, for reference. `null` when the organization has no limit configured for this limiter type.
1606 
1607 - `source: WorkspaceRateLimitWorkspaceSource or WorkspaceRateLimitOrganizationSource`
1608 
1609 Where `value` comes from. `organization` values are listed only when `include_inherited` is `true`, and then `value` equals `org_limit`.
1610 
1611 - `WorkspaceRateLimitWorkspaceSource object`
1612 
1613 - `type: "workspace"`
1614 
1615 Always `workspace`: a workspace-level override is stored.
1616 
1617 default: workspace
1618 
1619 - `WorkspaceRateLimitOrganizationSource object`
1620 
1621 - `type: "organization"`
1622 
1623 Always `organization`: no workspace-level override is stored, so the organization's value applies.
1624 
1625 default: organization
1626 
1627 - `value: number`
1628 
1629 The workspace's value for this limiter type: the workspace-level override when `source.type` is `workspace`, otherwise the organization's value.
1630 
1631 - `models: array of string or null`
1632 
1633 Model names this entry's limits apply to, including aliases. `null` when `group_type` is not `"model_group"`.
1634 
1635 - `rate_limit_id: string`
1636 
1637 The `id` of the organization's RateLimit entry this entry applies to.
1638 
1639 - `workspace_id: string`
1640 
1641 ID of the Workspace this entry applies to.
1642 
1643 - `group_type: "batch" or "files" or "model_group" or 3 more`
1644 
1645 **Deprecated**: Use `group.type` instead. `group_type` is still returned and always equals `group.type`.
1646 
1647 Deprecated: use `group.type` instead. The kind of rate-limit group this entry represents. `model_group` entries apply to a family of models (listed in `models`); other values apply to an API-surface category and have `models` set to `null`. Always equal to `group.type`.
1648 
1649 - `"batch"`
1650 
1651 - `"files"`
1652 
1653 - `"model_group"`
1654 
1655 - `"skills"`
1656 
1657 - `"token_count"`
1658 
1659 - `"web_search"`
1660 
1661#### Example
1662 
1663```bash
1664curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID/rate_limits/$RATE_LIMIT_ID \
1665 -H 'Content-Type: application/json' \
1666 -H 'anthropic-version: 2023-06-01' \
1667 -H "X-Api-Key: $ANTHROPIC_API_KEY" \
1668 -d '{
1669 "limits": [
1670 {
1671 "type": "fast_itpmca",
1672 "value": 0
1673 }
1674 ]
1675 }'
1676```
1677 
1678##### Response (200)
1679 
1680```json
1681{
1682 "group": {
1683 "id": "id",
1684 "display_name": "display_name",
1685 "type": "model_group"
1686 },
1687 "group_type": "batch",
1688 "limits": [
1689 {
1690 "org_limit": 0,
1691 "source": {
1692 "type": "workspace"
1693 },
1694 "type": "type",
1695 "value": 0
1696 }
1697 ],
1698 "models": [
1699 "string"
1700 ],
1701 "rate_limit_id": "rate_limit_id",
1702 "type": "workspace_rate_limit",
1703 "workspace_id": "workspace_id"
1704}
1705```
1706 
14351707## Workspaces › Members
14361708 
14371709### List Workspace Members

api/organization/workspaces/rate_limits Changed · +328 / -0 lines

## Set Workspace Rate Limits ### Body parameters ### Workspace Rate Limit Type ### Workspace Rate Limit Update Value

from line 275
275275}
276276```
277277 
278## Set Workspace Rate Limits
279 
280**POST** `/v1/organizations/workspaces/{workspace_id}/rate_limits/{rate_limit_id}`
281 
282Set or clear rate-limit overrides for one rate-limit group in a workspace.
283 
284Only the limiter types named in `limits` change: an integer `value` sets
285that type's override and `null` clears it. Types not named keep their
286current value. A value above the organization's own limit is stored, but
287the organization limit still applies, so the lower of the two is
288enforced.
289 
290Returns the targeted group's entry with this request applied, in the shape
291`GET /v1/organizations/workspaces/{workspace_id}/rate_limits` returns.
292Changes take effect within about an hour.
293 
294### Path parameters
295 
296- `workspace_id: string`
297 
298 The ID of the workspace.
299 
300- `rate_limit_id: string`
301 
302 The `id` of the organization's rate-limit entry to set overrides for.
303 
304### Headers
305 
306- `"anthropic-version": optional string`
307 
308 The version of the Claude API you want to use.
309 
310 Read more about versioning and our version history [here](https://platform.claude.com/docs/en/api/versioning?sdk_languages=http).
311 
312### Body parameters
313 
314- `limits: array of WorkspaceRateLimitUpdateValue`
315 
316 Limits to set or clear. Unspecified limit types are unchanged.
317 
318 minItems: 1, maxItems: 16
319 
320 - `type: WorkspaceRateLimitType`
321 
322 Rate limiter type.
323 
324 - `"fast_itpmca"`
325 
326 - `"fast_otpm"`
327 
328 - `"input_tokens_per_minute"`
329 
330 - `"input_tokens_per_minute_cache_aware"`
331 
332 - `"output_tokens_per_minute"`
333 
334 - `"requests_per_minute"`
335 
336 - `"tokens_per_day"`
337 
338 - `"tokens_per_minute"`
339 
340 - `"tool_uses_per_second"`
341 
342 - `value: number or null`
343 
344 New limit value. Set to null to clear the workspace override and fall back to the organization limit.
345 
346 minimum: 0, maximum: 9007199254740991
347 
348### Returns
349 
350- `WorkspaceRateLimit object`
351 
352 - `type: "workspace_rate_limit"`
353 
354 Object type. Always `workspace_rate_limit` for workspace rate-limit entries.
355 
356 default: workspace_rate_limit
357 
358 - `group: OrganizationRateLimitModelGroup or OrganizationRateLimitBatchGroup or OrganizationRateLimitTokenCountGroup or 3 more`
359 
360 The rate-limit group this entry's limits apply to. Its `type` equals `group_type`.
361 
362 - `OrganizationRateLimitModelGroup object`
363 
364 - `type: "model_group"`
365 
366 Always `model_group`: a family of models.
367 
368 default: model_group
369 
370 - `id: string`
371 
372 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
373 
374 - `display_name: string`
375 
376 Human-readable name of the model group (for example, `Claude Sonnet 4.x`). For display only; it may change.
377 
378 - `OrganizationRateLimitBatchGroup object`
379 
380 - `type: "batch"`
381 
382 Always `batch`: the Message Batches API.
383 
384 default: batch
385 
386 - `id: string`
387 
388 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
389 
390 - `OrganizationRateLimitTokenCountGroup object`
391 
392 - `type: "token_count"`
393 
394 Always `token_count`: the Token Count API.
395 
396 default: token_count
397 
398 - `id: string`
399 
400 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
401 
402 - `OrganizationRateLimitFilesGroup object`
403 
404 - `type: "files"`
405 
406 Always `files`: the Files API.
407 
408 default: files
409 
410 - `id: string`
411 
412 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
413 
414 - `OrganizationRateLimitSkillsGroup object`
415 
416 - `type: "skills"`
417 
418 Always `skills`: the Skills API.
419 
420 default: skills
421 
422 - `id: string`
423 
424 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
425 
426 - `OrganizationRateLimitWebSearchGroup object`
427 
428 - `type: "web_search"`
429 
430 Always `web_search`: the Messages API web search tool.
431 
432 default: web_search
433 
434 - `id: string`
435 
436 Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.
437 
438 - `limits: array of WorkspaceRateLimitValue`
439 
440 The workspace's limiter values for this group. By default only the limiter types with a workspace-level override are listed. With `include_inherited` set to `true`, the limiter types the workspace inherits from the organization are listed too, each marked by `source`.
441 
442 - `type: string`
443 
444 The limiter type (for example, `requests_per_minute` or `input_tokens_per_minute`).
445 
446 - `org_limit: number or null`
447 
448 The organization-level value for the same limiter type, for reference. `null` when the organization has no limit configured for this limiter type.
449 
450 - `source: WorkspaceRateLimitWorkspaceSource or WorkspaceRateLimitOrganizationSource`
451 
452 Where `value` comes from. `organization` values are listed only when `include_inherited` is `true`, and then `value` equals `org_limit`.
453 
454 - `WorkspaceRateLimitWorkspaceSource object`
455 
456 - `type: "workspace"`
457 
458 Always `workspace`: a workspace-level override is stored.
459 
460 default: workspace
461 
462 - `WorkspaceRateLimitOrganizationSource object`
463 
464 - `type: "organization"`
465 
466 Always `organization`: no workspace-level override is stored, so the organization's value applies.
467 
468 default: organization
469 
470 - `value: number`
471 
472 The workspace's value for this limiter type: the workspace-level override when `source.type` is `workspace`, otherwise the organization's value.
473 
474 - `models: array of string or null`
475 
476 Model names this entry's limits apply to, including aliases. `null` when `group_type` is not `"model_group"`.
477 
478 - `rate_limit_id: string`
479 
480 The `id` of the organization's RateLimit entry this entry applies to.
481 
482 - `workspace_id: string`
483 
484 ID of the Workspace this entry applies to.
485 
486 - `group_type: "batch" or "files" or "model_group" or 3 more`
487 
488 **Deprecated**: Use `group.type` instead. `group_type` is still returned and always equals `group.type`.
489 
490 Deprecated: use `group.type` instead. The kind of rate-limit group this entry represents. `model_group` entries apply to a family of models (listed in `models`); other values apply to an API-surface category and have `models` set to `null`. Always equal to `group.type`.
491 
492 - `"batch"`
493 
494 - `"files"`
495 
496 - `"model_group"`
497 
498 - `"skills"`
499 
500 - `"token_count"`
501 
502 - `"web_search"`
503 
504### Example
505 
506```bash
507curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID/rate_limits/$RATE_LIMIT_ID \
508 -H 'Content-Type: application/json' \
509 -H 'anthropic-version: 2023-06-01' \
510 -H "X-Api-Key: $ANTHROPIC_API_KEY" \
511 -d '{
512 "limits": [
513 {
514 "type": "fast_itpmca",
515 "value": 0
516 }
517 ]
518 }'
519```
520 
521#### Response (200)
522 
523```json
524{
525 "group": {
526 "id": "id",
527 "display_name": "display_name",
528 "type": "model_group"
529 },
530 "group_type": "batch",
531 "limits": [
532 {
533 "org_limit": 0,
534 "source": {
535 "type": "workspace"
536 },
537 "type": "type",
538 "value": 0
539 }
540 ],
541 "models": [
542 "string"
543 ],
544 "rate_limit_id": "rate_limit_id",
545 "type": "workspace_rate_limit",
546 "workspace_id": "workspace_id"
547}
548```
549 
278550## Domain types
279551 
280552### Workspace Rate Limit
from line 714
442714 Always `organization`: no workspace-level override is stored, so the organization's value applies.
443715 
444716 default: organization
717 
718### Workspace Rate Limit Type
719 
720- `WorkspaceRateLimitType = "fast_itpmca" or "fast_otpm" or "input_tokens_per_minute" or 6 more`
721 
722 Rate limiter type.
723 
724 - `"fast_itpmca"`
725 
726 - `"fast_otpm"`
727 
728 - `"input_tokens_per_minute"`
729 
730 - `"input_tokens_per_minute_cache_aware"`
731 
732 - `"output_tokens_per_minute"`
733 
734 - `"requests_per_minute"`
735 
736 - `"tokens_per_day"`
737 
738 - `"tokens_per_minute"`
739 
740 - `"tool_uses_per_second"`
741 
742### Workspace Rate Limit Update Value
743 
744- `WorkspaceRateLimitUpdateValue object`
745 
746 - `type: WorkspaceRateLimitType`
747 
748 Rate limiter type.
749 
750 - `"fast_itpmca"`
751 
752 - `"fast_otpm"`
753 
754 - `"input_tokens_per_minute"`
755 
756 - `"input_tokens_per_minute_cache_aware"`
757 
758 - `"output_tokens_per_minute"`
759 
760 - `"requests_per_minute"`
761 
762 - `"tokens_per_day"`
763 
764 - `"tokens_per_minute"`
765 
766 - `"tool_uses_per_second"`
767 
768 - `value: number or null`
769 
770 New limit value. Set to null to clear the workspace override and fall back to the organization limit.
771 
772 minimum: 0, maximum: 9007199254740991
445773 
446774### Workspace Rate Limit Value
447775 

api/organization/workspaces/rate_limits/update New page · 276 lines, new page

# Set Workspace Rate Limits ## Path parameters ## Headers ## Body parameters ## Returns ## Example ### Response (200)

A whole new page. There's nothing to diff it against, so here is what it says.

---
title: Set Workspace Rate Limits
url: https://platform.claude.com/docs/en/api/organization/workspaces/rate_limits/update
---

# Set Workspace Rate Limits

**POST** `/v1/organizations/workspaces/{workspace_id}/rate_limits/{rate_limit_id}`

Set or clear rate-limit overrides for one rate-limit group in a workspace.

Only the limiter types named in `limits` change: an integer `value` sets
that type's override and `null` clears it. Types not named keep their
current value. A value above the organization's own limit is stored, but
the organization limit still applies, so the lower of the two is
enforced.

Returns the targeted group's entry with this request applied, in the shape
`GET /v1/organizations/workspaces/{workspace_id}/rate_limits` returns.
Changes take effect within about an hour.

## Path parameters

- `workspace_id: string`

  The ID of the workspace.

- `rate_limit_id: string`

  The `id` of the organization's rate-limit entry to set overrides for.

## Headers

- `"anthropic-version": optional string`

  The version of the Claude API you want to use.

  Read more about versioning and our version history [here](https://platform.claude.com/docs/en/api/versioning?sdk_languages=http).

## Body parameters

- `limits: array of WorkspaceRateLimitUpdateValue`

  Limits to set or clear. Unspecified limit types are unchanged.

  minItems: 1, maxItems: 16

  - `type: WorkspaceRateLimitType`

    Rate limiter type.

    - `"fast_itpmca"`

    - `"fast_otpm"`

    - `"input_tokens_per_minute"`

    - `"input_tokens_per_minute_cache_aware"`

    - `"output_tokens_per_minute"`

    - `"requests_per_minute"`

    - `"tokens_per_day"`

    - `"tokens_per_minute"`

    - `"tool_uses_per_second"`

  - `value: number or null`

    New limit value. Set to null to clear the workspace override and fall back to the organization limit.

    minimum: 0, maximum: 9007199254740991

## Returns

- `WorkspaceRateLimit object`

  - `type: "workspace_rate_limit"`

    Object type. Always `workspace_rate_limit` for workspace rate-limit entries.

    default: workspace_rate_limit

  - `group: OrganizationRateLimitModelGroup or OrganizationRateLimitBatchGroup or OrganizationRateLimitTokenCountGroup or 3 more`

    The rate-limit group this entry's limits apply to. Its `type` equals `group_type`.

    - `OrganizationRateLimitModelGroup object`

      - `type: "model_group"`

        Always `model_group`: a family of models.

        default: model_group

      - `id: string`

        Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.

      - `display_name: string`

        Human-readable name of the model group (for example, `Claude Sonnet 4.x`). For display only; it may change.

    - `OrganizationRateLimitBatchGroup object`

      - `type: "batch"`

        Always `batch`: the Message Batches API.

        default: batch

      - `id: string`

        Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.

    - `OrganizationRateLimitTokenCountGroup object`

      - `type: "token_count"`

        Always `token_count`: the Token Count API.

        default: token_count

      - `id: string`

        Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.

    - `OrganizationRateLimitFilesGroup object`

      - `type: "files"`

        Always `files`: the Files API.

        default: files

      - `id: string`

        Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.

    - `OrganizationRateLimitSkillsGroup object`

      - `type: "skills"`

        Always `skills`: the Skills API.

        default: skills

      - `id: string`

        Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.

    - `OrganizationRateLimitWebSearchGroup object`

      - `type: "web_search"`

        Always `web_search`: the Messages API web search tool.

        default: web_search

      - `id: string`

        Opaque identifier of the rate-limit group (for example, `rlg_01VPTCmyiu5ZLsWkcxYG2pY8`). It is the same in every organization and never changes, unlike the entry's own identifier, which differs per organization.

  - `limits: array of WorkspaceRateLimitValue`

    The workspace's limiter values for this group. By default only the limiter types with a workspace-level override are listed. With `include_inherited` set to `true`, the limiter types the workspace inherits from the organization are listed too, each marked by `source`.

    - `type: string`

      The limiter type (for example, `requests_per_minute` or `input_tokens_per_minute`).

    - `org_limit: number or null`

      The organization-level value for the same limiter type, for reference. `null` when the organization has no limit configured for this limiter type.

    - `source: WorkspaceRateLimitWorkspaceSource or WorkspaceRateLimitOrganizationSource`

      Where `value` comes from. `organization` values are listed only when `include_inherited` is `true`, and then `value` equals `org_limit`.

      - `WorkspaceRateLimitWorkspaceSource object`

        - `type: "workspace"`

          Always `workspace`: a workspace-level override is stored.

          default: workspace

      - `WorkspaceRateLimitOrganizationSource object`

        - `type: "organization"`

          Always `organization`: no workspace-level override is stored, so the organization's value applies.

          default: organization

    - `value: number`

      The workspace's value for this limiter type: the workspace-level override when `source.type` is `workspace`, otherwise the organization's value.

  - `models: array of string or null`

    Model names this entry's limits apply to, including aliases. `null` when `group_type` is not `"model_group"`.

  - `rate_limit_id: string`

    The `id` of the organization's RateLimit entry this entry applies to.

  - `workspace_id: string`

    ID of the Workspace this entry applies to.

  - `group_type: "batch" or "files" or "model_group" or 3 more`

    **Deprecated**: Use `group.type` instead. `group_type` is still returned and always equals `group.type`.

    Deprecated: use `group.type` instead. The kind of rate-limit group this entry represents. `model_group` entries apply to a family of models (listed in `models`); other values apply to an API-surface category and have `models` set to `null`. Always equal to `group.type`.

    - `"batch"`

    - `"files"`

    - `"model_group"`

    - `"skills"`

    - `"token_count"`

    - `"web_search"`

## Example

```bash
curl https://api.anthropic.com/v1/organizations/workspaces/$WORKSPACE_ID/rate_limits/$RATE_LIMIT_ID \
    -H 'Content-Type: application/json' \
    -H 'anthropic-version: 2023-06-01' \
    -H "X-Api-Key: $ANTHROPIC_API_KEY" \
    -d '{
          "limits": [
            {
              "type": "fast_itpmca",
              "value": 0
            }
          ]
        }'
```

### Response (200)

```json
{
  "group": {
    "id": "id",
    "display_name": "display_name",
    "type": "model_group"
  },
  "group_type": "batch",
  "limits": [
    {
      "org_limit": 0,
      "source": {
        "type": "workspace"
      },
      "type": "type",
      "value": 0
    }
  ],
  "models": [
    "string"
  ],
  "rate_limit_id": "rate_limit_id",
  "type": "workspace_rate_limit",
  "workspace_id": "workspace_id"
}
```

manage-claude/organization-webhooks New page · 413 lines, new page

## Before you begin ## Event types ### Before your first event ### What an event contains ## Endpoint fields ## Deliveries ## Manage endpoints ## Errors

A whole new page. There's nothing to diff it against, so here is what it says.

---
title: Organization webhooks
url: https://platform.claude.com/docs/en/manage-claude/organization-webhooks
description: Register webhook endpoints for events about enforcement actions on your organization's user profiles.
featureMetadata:
  status: beta
  betaHeader: webhooks-2026-10-07
  supportedPlatforms:
    Claude API: beta
---

An organization webhook endpoint receives an event when Anthropic restricts or bans one of your organization's [user profiles](https://platform.claude.com/docs/en/manage-claude/user-profiles), and when the restriction or ban ends. You manage it with the Admin API under `/v1/organizations/webhooks`.

<Note>
  Event delivery isn't live: Anthropic doesn't send the two events, so an endpoint you register receives nothing. You can register endpoints and build your handler from the event format on this page.
</Note>

Any member of your organization can list and view organization webhook endpoints with the API, but only members with the admin, owner, or primary owner role can create, change, or delete them, or replace their signing secret.

## Before you begin

You need the following:

* An organization on the Claude API that has organization webhooks turned on and doesn't have [HIPAA readiness](https://platform.claude.com/docs/en/manage-claude/api-and-data-retention#hipaa-readiness) enabled. To request access, contact your Anthropic account team.

* One of these credentials:

  * An [Admin API key](https://platform.claude.com/docs/en/manage-claude/admin-api-keys).
  * An [OAuth bearer token](https://platform.claude.com/docs/en/manage-claude/admin-api#oauth-bearer-token) with the `org:admin` scope.
  * A [personal or service account key](https://platform.claude.com/docs/en/manage-claude/authentication#key-types) that isn't scoped to a workspace.

## Event types

Organization webhook endpoints accept two event types. Both are about enforcement actions on user profiles. An enforcement action is a restriction or a ban that Anthropic places on the end customer a profile represents.

| Event                                      | Trigger                                                                             |
| ------------------------------------------ | ----------------------------------------------------------------------------------- |
| `user_profile.enforcement_action_opened`   | Anthropic opens an enforcement action on a user profile.                            |
| `user_profile.enforcement_action_resolved` | An enforcement action ends. Anthropic resolves it, or its `expires_at` time passes. |

Deleting a profile ends its open actions without a `user_profile.enforcement_action_resolved` event.

### Before your first event

Your profiles won't have the `enforcement_status` and `enforcement_actions` fields until enforcement actions are on for your organization. Until then, and in any request whose `anthropic-beta` header has `user-profiles-2026-09-04` or an earlier value, responses leave the fields out and the `enforcement_status[]` list filter returns a `400`. To get the fields, remove that value from your requests.

If an enforcement action opened before Anthropic turned on enforcement actions and event delivery for your organization, or before you registered your endpoint, you don't get a `user_profile.enforcement_action_opened` event for it. The action still appears on the profile. To find these actions, [list your profiles](https://platform.claude.com/docs/en/api/user_profiles/list) with `enforcement_status[]=restricted` and `enforcement_status[]=banned`. A response might return fewer profiles than `limit`, or none, before the list ends, so keep requesting pages until `next_page` is `null`.

### What an event contains

Events carry IDs, not the action or the profile. `data.id` is the profile's ID, and `data.enforcement_action_id` is the action's ID, which starts with `enac_`:

```json
{
  "type": "event",
  "id": "whe_4f2a9c1e7b3d5a8f0e6c2b9d1a7f3e5c",
  "created_at": "2026-10-15T17:02:41Z",
  "data": {
    "type": "user_profile.enforcement_action_opened",
    "id": "uprof_011CZkZCu8hGbp5mYRQgUmz9",
    "enforcement_action_id": "enac_011CZkZEq4TnWb7xLfRgPm2v",
    "organization_id": "org_011CZkZBj9RsYd3wNcHvKq6t"
  }
}
```

To see what changed, [retrieve the profile](https://platform.claude.com/docs/en/api/user_profiles/retrieve) with `GET /v1/user_profiles/{id}` (python, ruby: `client.user_profiles.retrieve()`; typescript: `client.userProfiles.retrieve()`; go: `client.UserProfiles.Get()`; java: `client.userProfiles().retrieve()`; csharp: `client.UserProfiles.Retrieve()`; php: `$client->userProfiles->retrieve()`; cli: `ant user-profiles retrieve`), using `data.id`. Its `enforcement_actions` list shows its open actions. Each action has a `type` (`restriction` or `ban`), an `id`, a `reason`, an `opened_at` time, and an `expires_at` time or `null`. `enforcement_status` summarizes them: `banned` while a ban is open, `restricted` while any other action is open, and `unrestricted` when none is. Treat any other value as `restricted`.

Anthropic sends an event only after the profile shows the change, so the profile you retrieve shows that change or a later one. Events might arrive late or out of order, so use the profile's current state, not the order events arrive in. After `user_profile.enforcement_action_resolved`, the resolved action is no longer in the list. A `404` means the profile was deleted.

## Endpoint fields

An organization webhook endpoint has these fields:

| Field             | Type             | Description                                                                                                                                                                               |
| ----------------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`              | string           | The endpoint's ID, which starts with `wep_`. Set by Anthropic.                                                                                                                            |
| `url`             | string           | Where Anthropic sends events. Must be HTTPS on port 443, with a public domain name, not an IP address. Two enabled organization webhook endpoints in your organization can't share a URL. |
| `enabled_events`  | array of strings | The [event types](https://platform.claude.com/docs/en/manage-claude/organization-webhooks#event-types) this endpoint receives. A create request must list at least one.                   |
| `name`            | string           | An optional label for your own use.                                                                                                                                                       |
| `description`     | string           | An optional description for your own use.                                                                                                                                                 |
| `state`           | string           | `enabled` or `disabled`.                                                                                                                                                                  |
| `disabled_reason` | string           | Why Anthropic disabled the endpoint. Empty otherwise.                                                                                                                                     |
| `created_at`      | string           | When the endpoint was created. Set by Anthropic.                                                                                                                                          |
| `updated_at`      | string           | When the endpoint last changed. Set by Anthropic.                                                                                                                                         |
| `signing_secret`  | string           | A `whsec_`-prefixed secret, created with the endpoint. Only the responses that create the endpoint or replace the secret include it, so store it securely.                                |

```json
{
  "id": "wep_011CZkZDf8HnUq2mTxRbVn4s",
  "url": "https://example.com/anthropic-webhooks",
  "name": "Enforcement actions",
  "description": "",
  "enabled_events": [
    "user_profile.enforcement_action_opened",
    "user_profile.enforcement_action_resolved"
  ],
  "state": "enabled",
  "disabled_reason": "",
  "created_at": "2026-10-20T19:00:00Z",
  "updated_at": "2026-10-20T19:00:00Z"
}
```

An organization can have up to 32 organization webhook endpoints. Disabled webhook endpoints still count toward this total.

## Deliveries

Deliveries follow the [Standard Webhooks](https://www.standardwebhooks.com/) specification. Each one carries the `webhook-id`, `webhook-timestamp`, and `webhook-signature` headers. Before you trust an event, verify its signature with the endpoint's signing secret, using any Standard Webhooks library.

Return any `2xx` status within 5 seconds, and do slow work afterward. Any other response, or no response, counts as a failed attempt.

* **Duplicates:** An endpoint might receive the same event more than once, with the same event `id` (the same value as the `webhook-id` header). Deduplicate on it.

* **Retries:** If a delivery fails, Anthropic retries it a few times over the next few minutes. If every attempt fails, Anthropic drops the event. To catch up, list your profiles by enforcement status, as in [Before your first event](https://platform.claude.com/docs/en/manage-claude/organization-webhooks#before-your-first-event).

* **Automatic disabling:** Anthropic disables an endpoint when:

  * It returns a redirect (`3xx`).
  * Its URL resolves to a non-public IP address.
  * Its deliveries keep failing.

  Anthropic skips events for a disabled endpoint and doesn't send them later.

## Manage endpoints

With the Admin API, you can make these requests:

| Task                                                                            | Request                                                                                                                                                                           |
| ------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| List your organization's endpoints                                              | [`GET /v1/organizations/webhooks`](https://platform.claude.com/docs/en/api/beta/organization/webhooks/list)                                                                       |
| Create an endpoint                                                              | [`POST /v1/organizations/webhooks`](https://platform.claude.com/docs/en/api/beta/organization/webhooks/create)                                                                    |
| Get one endpoint                                                                | [`GET /v1/organizations/webhooks/{webhook_endpoint_id}`](https://platform.claude.com/docs/en/api/beta/organization/webhooks/retrieve)                                             |
| Update an endpoint's `url`, `name`, `description`, `enabled_events`, or `state` | [`POST /v1/organizations/webhooks/{webhook_endpoint_id}`](https://platform.claude.com/docs/en/api/beta/organization/webhooks/update)                                              |
| Delete an endpoint                                                              | [`DELETE /v1/organizations/webhooks/{webhook_endpoint_id}`](https://platform.claude.com/docs/en/api/beta/organization/webhooks/delete)                                            |
| Replace the signing secret                                                      | [`POST /v1/organizations/webhooks/{webhook_endpoint_id}/regenerate_signing_secret`](https://platform.claude.com/docs/en/api/beta/organization/webhooks/regenerate_signing_secret) |

In an update, `enabled_events` replaces the endpoint's whole list of event types. An empty list doesn't clear the list: the endpoint keeps the event types it had. To stop deliveries, send `"state": "disabled"` or delete the endpoint.

To turn an endpoint back on, including after Anthropic disabled it, send `"state": "enabled"` in an update request.

When you replace the signing secret, the old secret stops working at once. Deliveries from then on, including retries of earlier events, are signed with the new secret, so update your receiver right away.

Send the `anthropic-beta: webhooks-2026-10-07` header with every request. The SDK and the CLI send it for you. This example lists your organization's endpoints, using an Admin API key from `ANTHROPIC_API_KEY`.

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/webhooks" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: webhooks-2026-10-07"
  ```

  ```bash CLI
  ant beta:organization:webhooks list
  ```

  ```python Python
  client = anthropic.Anthropic()

  endpoints = client.beta.organization.webhooks.list()

  for endpoint in endpoints:
      print(f"{endpoint.id}: {endpoint.url} ({endpoint.state})")
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const endpoints = await client.beta.organization.webhooks.list();

  for await (const endpoint of endpoints) {
    console.log(`${endpoint.id}: ${endpoint.url} (${endpoint.state})`);
  }
  ```

  ```csharp C#
  AnthropicClient client = new();

  var page = await client.Beta.Organization.Webhooks.List();

  await foreach (var endpoint in page.Paginate())
  {
      Console.WriteLine($"{endpoint.ID}: {endpoint.Url} ({endpoint.State.Raw()})");
  }
  ```

  ```go Go
  client := anthropic.NewClient()

  endpoints := client.Beta.Organization.Webhooks.ListAutoPaging(context.Background(), anthropic.BetaOrganizationWebhookListParams{})

  for endpoints.Next() {
  	endpoint := endpoints.Current()
  	fmt.Printf("%s: %s (%s)\n", endpoint.ID, endpoint.URL, endpoint.State)
  }
  if err := endpoints.Err(); err != nil {
  	log.Fatal(err)
  }
  ```

  ```java Java
  AnthropicClient client = AnthropicOkHttpClient.fromEnv();

  var endpoints = client.beta().organization().webhooks().list();

  for (var endpoint : endpoints.autoPager()) {
      IO.println(endpoint.id() + ": " + endpoint.url() + " (" + endpoint.state().asString() + ")");
  }
  ```

  ```php PHP
  $client = new Client();

  $endpoints = $client->beta->organization->webhooks->list();

  foreach ($endpoints->pagingEachItem() as $endpoint) {
      echo "{$endpoint->id}: {$endpoint->url} ({$endpoint->state})\n";
  }
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  endpoints = client.beta.organization.webhooks.list

  endpoints.auto_paging_each do |endpoint|
    puts "#{endpoint.id}: #{endpoint.url} (#{endpoint.state})"
  end
  ```
</CodeGroup>

With no endpoints, the API returns an empty list:

```json
{
  "data": [],
  "has_more": false
}
```

A list returns up to 20 endpoints by default. Set `limit` to get up to 100. If `has_more` is `true`, pass the response's `last_id` as `after_id` to get the next page.

This example creates an endpoint that receives both event types:

<CodeGroup>
  ```bash cURL
  curl "https://api.anthropic.com/v1/organizations/webhooks" \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-beta: webhooks-2026-10-07" \
    -H "content-type: application/json" \
    -d '{
      "url": "https://example.com/anthropic-webhooks",
      "name": "Enforcement actions",
      "enabled_events": [
        "user_profile.enforcement_action_opened",
        "user_profile.enforcement_action_resolved"
      ]
    }'
  ```

  ```bash CLI
  ant beta:organization:webhooks create \
    --url https://example.com/anthropic-webhooks \
    --name "Enforcement actions" \
    --enabled-event user_profile.enforcement_action_opened \
    --enabled-event user_profile.enforcement_action_resolved
  ```

  ```python Python
  client = anthropic.Anthropic()

  endpoint = client.beta.organization.webhooks.create(
      url="https://example.com/anthropic-webhooks",
      name="Enforcement actions",
      enabled_events=[
          "user_profile.enforcement_action_opened",
          "user_profile.enforcement_action_resolved",
      ],
  )

  print(endpoint.id)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const endpoint = await client.beta.organization.webhooks.create({
    url: "https://example.com/anthropic-webhooks",
    name: "Enforcement actions",
    enabled_events: [
      "user_profile.enforcement_action_opened",
      "user_profile.enforcement_action_resolved"
    ]
  });

  console.log(endpoint.id);
  ```

Cut at 300 lines. The page has the rest.

manage-claude/user-profiles New page · 652 lines, new page

## Decide who gets a profile ## What a profile contains and how Anthropic uses it ## Before you begin ## Create a profile for each end customer ### What to tell Anthropic about an end customer ## Attribute each request ### Attribute requests on Amazon Bedrock and Google Cloud ### Identify individual users within a company ## Keep profiles current ### Update a profile ### Delete a profile ## Next steps

A whole new page. There's nothing to diff it against, so here is what it says.

---
title: User profiles for end-customer attribution
url: https://platform.claude.com/docs/en/manage-claude/user-profiles
description: Attribute API requests to the end customers your platform serves, so a safety enforcement action can apply to one profile instead of your whole organization.
---

User profiles ("profiles") tell Anthropic which of your end customers each API request is for. A safety enforcement action, such as a hold or a block, can then apply to one end customer instead of your whole organization. When it does, the rest of your traffic is unaffected.

If you operate a platform or gateway, or resell API access, the requests you send for your end customers arrive under your organization. Anthropic runs automated safety classifiers over API traffic. Without a profile on the request, one end customer can trigger an enforcement action that applies to your whole organization.

You register each end customer once with `POST /v1/user_profiles` and store the `uprof_` ID it returns. Then you send that ID in the `anthropic-user-profile-id` header on every request you make on that end customer's behalf.

Profiles aren't billable and don't affect pricing.

## Decide who gets a profile

What a profile stands for depends on how you sell Claude: a person who uses your product, or a company you resell API access to. These two cases cover most platforms. The profile's `access_type` field says which one applies.

| Who the traffic is for                                       | Profile                                                                                                                                                                                                | `access_type`                                                     |
| ------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------- |
| A signed-up user of your product                             | One for each user, created when they sign up.                                                                                                                                                          | `application` (the default, set when you leave `access_type` out) |
| A company you resell API access to, for example as a gateway | One for each company, not for each person within it.                                                                                                                                                   | `passthrough` (not the default, so you have to send it)           |
| Your own organization                                        | None. Anthropic counts a request with no profile ID as your own usage. Keep that usage in a [separate organization](https://platform.claude.com/docs/en/manage-claude/user-profiles#before-you-begin). | Not applicable                                                    |
| A workspace in your organization                             | No separate profile. A profile belongs to your organization, and its ID works on requests through any workspace in it.                                                                                 | Not applicable                                                    |

## What a profile contains and how Anthropic uses it

A profile contains only what you send about the end customer, plus any [program status](https://platform.claude.com/docs/en/manage-claude/user-profiles-verification-portal#after-the-end-customer-links-the-profile) that Anthropic sets. It doesn't contain conversation content. Anthropic uses the details you send to attribute requests, to monitor for abuse, for enforcement of the [Usage Policy](https://www.anthropic.com/legal/aup), and to enable application and access to trusted access programs. Anthropic doesn't verify the details.

Anthropic processes profiles in accordance with the [Privacy Policy](https://www.anthropic.com/legal/privacy).

## Before you begin

You create and manage profiles in one of the following:

* An organization on the Claude API.
* An organization on [Claude Platform on AWS](https://platform.claude.com/docs/en/build-with-claude/claude-platform-on-aws). The calling principal needs the [user profile IAM actions](https://platform.claude.com/docs/en/api/claude-platform-on-aws-iam-actions#user-profiles).
* A [Microsoft Foundry](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry) deployment [hosted on Anthropic](https://platform.claude.com/docs/en/build-with-claude/claude-in-microsoft-foundry#hosting-options), not one hosted on Azure. You don't need an organization on the Claude API or Claude Platform on AWS. Use your Foundry endpoint, with the same base URL and authentication that you use for inference.

Amazon Bedrock and Google Cloud don't have the `/v1/user_profiles` endpoints. If your inference runs there, create your profiles in an organization on the Claude API or Claude Platform on AWS. On Amazon Bedrock, profiles work only with [Claude in Amazon Bedrock](https://platform.claude.com/docs/en/build-with-claude/claude-in-amazon-bedrock). See [Attribute requests on Amazon Bedrock and Google Cloud](https://platform.claude.com/docs/en/manage-claude/user-profiles#attribute-requests-on-amazon-bedrock-and-google-cloud).

Keep the traffic you send for your end customers in one organization and your own internal usage in another. Profiles belong to an organization, not a workspace, so separate workspaces in one organization aren't enough. Only the organization for end-customer traffic needs user profiles. To create another organization on the Claude API, see the "How to create a new organization" section of [Creating and managing Workspaces in the Claude Console](https://support.claude.com/en/articles/9796807) in the Claude Help Center.

The examples call the Claude API with an API key. You don't need an [Admin API key](https://platform.claude.com/docs/en/manage-claude/admin-api-keys). On Claude Platform on AWS, use its base URL and authentication.

## Create a profile for each end customer

Create one profile for each end customer whose traffic you send to Claude. Create it once, in your customer-onboarding flow. `POST /v1/user_profiles` isn't idempotent, so every call creates a new profile, even when `reference_id` matches an existing one. If you already have end customers without profiles, see the guidance on registering an existing customer base later in this section.

The following example registers a company that buys API access through a gateway, so it sets `access_type` to `passthrough`. For an `application` profile, leave out `access_type`, and describe one end user in `name` and `external_user_details` instead of a company. [Decide who gets a profile](https://platform.claude.com/docs/en/manage-claude/user-profiles#decide-who-gets-a-profile) compares the two access types.

<CodeGroup>
  ```bash cURL
  curl https://api.anthropic.com/v1/user_profiles \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "content-type: application/json" \
    -d '{
      "name": "Acme Analytics, Inc.",
      "access_type": "passthrough",
      "external_user_details": {
        "reference_id": "cust-8f2a1c",
        "country": "US"
      }
    }'
  ```

  ```bash CLI
  ant user-profiles create \
    --name "Acme Analytics, Inc." \
    --access-type passthrough \
    --external-user-details '{reference_id: cust-8f2a1c, country: US}'
  ```

  ```python Python
  client = anthropic.Anthropic()

  profile = client.user_profiles.create(
      name="Acme Analytics, Inc.",
      access_type="passthrough",
      external_user_details={"reference_id": "cust-8f2a1c", "country": "US"},
  )

  print(profile.id)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const profile = await client.userProfiles.create({
    name: "Acme Analytics, Inc.",
    access_type: "passthrough",
    external_user_details: { reference_id: "cust-8f2a1c", country: "US" }
  });

  console.log(profile.id);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var profile = await client.UserProfiles.Create(new()
  {
      Name = "Acme Analytics, Inc.",
      AccessType = UserProfileAccessType.Passthrough,
      ExternalUserDetails = new()
      {
          ReferenceID = "cust-8f2a1c",
          Country = "US"
      }
  });

  Console.WriteLine(profile.ID);
  ```

  ```go Go
  client := anthropic.NewClient()

  profile, err := client.UserProfiles.New(context.Background(), anthropic.UserProfileNewParams{
  	Name:       anthropic.String("Acme Analytics, Inc."),
  	AccessType: anthropic.UserProfileAccessTypePassthrough,
  	ExternalUserDetails: anthropic.UserProfileExternalUserDetailsParams{
  		ReferenceID: anthropic.String("cust-8f2a1c"),
  		Country:     anthropic.String("US"),
  	},
  })
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(profile.ID)
  ```

  ```java Java
  import com.anthropic.models.userprofiles.UserProfileAccessType;
  import com.anthropic.models.userprofiles.UserProfileCreateParams;
  import com.anthropic.models.userprofiles.UserProfileExternalUserDetailsParams;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      var params = UserProfileCreateParams.builder()
          .name("Acme Analytics, Inc.")
          .accessType(UserProfileAccessType.PASSTHROUGH)
          .externalUserDetails(UserProfileExternalUserDetailsParams.builder()
              .referenceId("cust-8f2a1c")
              .country("US")
              .build())
          .build();
      var profile = client.userProfiles().create(params);

      IO.println(profile.id());
  }
  ```

  ```php PHP
  $client = new Client();

  $profile = $client->userProfiles->create(
      name: 'Acme Analytics, Inc.',
      accessType: 'passthrough',
      externalUserDetails: ['referenceID' => 'cust-8f2a1c', 'country' => 'US'],
  );

  echo $profile->id, PHP_EOL;
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  profile = client.user_profiles.create(
    name: "Acme Analytics, Inc.",
    access_type: :passthrough,
    external_user_details: { reference_id: "cust-8f2a1c", country: "US" }
  )

  puts profile.id
  ```
</CodeGroup>

The response is the new profile:

```json
{
  "type": "user_profile",
  "id": "uprof_011CZkZCu8hGbp5mYRQgUmz9",
  "name": "Acme Analytics, Inc.",
  "access_type": "passthrough",
  "external_user_details": {
    "reference_id": "cust-8f2a1c",
    "onboarded_at": null,
    "account_status": null,
    "entity_type": null,
    "country": "US",
    "name_hash": null,
    "email_hash": null
  },
  "metadata": {},
  "programs": {
    "cyber": null,
    "efs": null
  },
  "created_at": "2026-03-15T10:00:00Z",
  "updated_at": "2026-03-15T10:00:00Z"
}
```

Store the `id` on your customer record, and have your service instances read it from there instead of creating their own profile. You retrieve, update, and delete a profile by that `id`. The `programs` field is read-only, and attribution doesn't use it. It holds the end customer's status in each program that Anthropic runs. For what its values mean, see [which programs apply to a profile](https://platform.claude.com/docs/en/manage-claude/user-profiles-verification-portal#after-the-end-customer-links-the-profile).

There's no cap on the number of profiles in an organization, but profile creation is rate limited. Before you register an existing customer base in bulk, contact your Anthropic account team.

### What to tell Anthropic about an end customer

Every field is optional. You can send `name`, `metadata`, and these fields in `external_user_details`: `entity_type`, `country`, `reference_id`, `onboarded_at`, `account_status`, `name_hash`, and `email_hash`. The [Create a profile](https://platform.claude.com/docs/en/api/user_profiles/create) reference describes each field, with its type, format, and length limit.

Follow these rules when you set the fields:

* **Unknown values:** If you don't know a value, leave it out instead of sending a placeholder. You can replace a value in `external_user_details` later, but you can't clear it.
* **Company names:** For a `passthrough` profile, send the company's legal name in `name` if you know it.
* **Country:** In `country`, send the end customer's country, not yours.
* **Your own ID:** In `reference_id`, send your own stable identifier for the end customer. It doesn't have to be unique.
* **Names and email addresses you can't share:** Leave out `name` and send `external_user_details.name_hash` instead. For the email address, send `external_user_details.email_hash`. A profile has no field for the address itself.
* **Hashes:** Compute the hashes yourself, with a function you choose. They show Anthropic which of your profiles share a name or an email address. Use the same function and the same case and whitespace normalization for every profile, because only values computed the same way match.

## Attribute each request

Send the profile ID in the `anthropic-user-profile-id` header on every request you make on the end customer's behalf. The SDKs and the CLI have an argument that sends the header for you: `user_profile_id` (java: `userProfileId`; php: `userProfileID`; csharp, go: `UserProfileID`; cli: `--user-profile-id`).

<CodeGroup>
  ```bash cURL
  curl https://api.anthropic.com/v1/messages \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "anthropic-user-profile-id: uprof_011CZkZCu8hGbp5mYRQgUmz9" \
    -H "content-type: application/json" \
    -d '{
      "model": "claude-opus-5-5",
      "max_tokens": 1024,
      "messages": [
        {"role": "user", "content": "Hello, Claude"}
      ]
    }'
  ```

  ```bash CLI
  ant messages create \
    --model claude-opus-5-5 \
    --max-tokens 1024 \
    --message '{role: user, content: "Hello, Claude"}' \
    --user-profile-id uprof_011CZkZCu8hGbp5mYRQgUmz9
  ```

  ```python Python
  client = anthropic.Anthropic()

  message = client.messages.create(
      model="claude-opus-5-5",
      max_tokens=1024,
      messages=[{"role": "user", "content": "Hello, Claude"}],
      user_profile_id="uprof_011CZkZCu8hGbp5mYRQgUmz9",
  )

  print(message)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const message = await client.messages.create({
    model: "claude-opus-5-5",
    max_tokens: 1024,
    messages: [{ role: "user", content: "Hello, Claude" }],
    user_profile_id: "uprof_011CZkZCu8hGbp5mYRQgUmz9"
  });

  console.log(message);
  ```

  ```csharp C#
  AnthropicClient client = new();

  var parameters = new MessageCreateParams
  {
      Model = Model.ClaudeOpus5_5,
      MaxTokens = 1024,
      Messages = [new() { Role = Role.User, Content = "Hello, Claude" }],
      UserProfileID = "uprof_011CZkZCu8hGbp5mYRQgUmz9"
  };
  var message = await client.Messages.Create(parameters);

  Console.WriteLine(message);
  ```

  ```go Go
  client := anthropic.NewClient()

  message, err := client.Messages.New(context.Background(), anthropic.MessageNewParams{
  	Model:     anthropic.ModelClaudeOpus5_5,
  	MaxTokens: 1024,
  	Messages: []anthropic.MessageParam{

Cut at 300 lines. The page has the rest.

manage-claude/user-profiles-verification-portal New page · 201 lines, new page

## Create the link ## What the end customer sees ## After the end customer links the profile ## Next steps

A whole new page. There's nothing to diff it against, so here is what it says.

---
title: Send an end customer a link to the Verification Portal
url: https://platform.claude.com/docs/en/manage-claude/user-profiles-verification-portal
description: Create an enrollment link for a user profile, see what your end customer does in the Verification Portal, and check which programs apply to the profile afterward.
---

Anthropic runs programs that an organization can apply to in the Verification Portal. For an end customer's approvals to apply when they use Claude through your platform, the end customer links their user profile to their own Anthropic organization in the portal. You start the process: create an enrollment link for the profile and give it to the end customer.

A user profile tells Anthropic which of your end customers each API request is for. You create one for each end customer and send its `uprof_` ID on every request you make for them. The profile must exist before you can create a link for it. To create one, see [User profiles for end-customer attribution](https://platform.claude.com/docs/en/manage-claude/user-profiles).

You can skip this page if you need only attribution, or if creating enrollment links isn't enabled for your organization.

## Create the link

To create an enrollment link for a profile, call `POST /v1/user_profiles/{id}/action_urls` with the profile's ID in the path. In the request body, set `action.type` to `enroll_end_user`.

The call returns a `404` if creating enrollment links isn't enabled for your organization. That's the same status as for a profile ID it can't find, so check the ID first.

<CodeGroup>
  ```bash cURL
  curl https://api.anthropic.com/v1/user_profiles/uprof_011CZkZCu8hGbp5mYRQgUmz9/action_urls \
    -H "x-api-key: $ANTHROPIC_API_KEY" \
    -H "anthropic-version: 2023-06-01" \
    -H "content-type: application/json" \
    -d '{"action": {"type": "enroll_end_user"}}'
  ```

  ```bash CLI
  ant user-profiles:action-urls create \
    --user-profile-id uprof_011CZkZCu8hGbp5mYRQgUmz9 \
    --action '{type: enroll_end_user}'
  ```

  ```python Python
  client = anthropic.Anthropic()

  action_url = client.user_profiles.action_urls.create(
      "uprof_011CZkZCu8hGbp5mYRQgUmz9",
      action={"type": "enroll_end_user"},
  )

  print(action_url.url)
  ```

  ```typescript TypeScript
  const client = new Anthropic();

  const actionURL = await client.userProfiles.actionURLs.create(
    "uprof_011CZkZCu8hGbp5mYRQgUmz9",
    { action: { type: "enroll_end_user" } }
  );

  console.log(actionURL.url);
  ```

  ```csharp C#
  using Anthropic.Models.UserProfiles.ActionUrls;

  AnthropicClient client = new();

  var actionUrl = await client.UserProfiles.ActionUrls.Create(
      "uprof_011CZkZCu8hGbp5mYRQgUmz9",
      new() { Action = new UserProfileEnrollEndUserAction() }
  );

  Console.WriteLine(actionUrl.Url);
  ```

  ```go Go
  client := anthropic.NewClient()

  actionURL, err := client.UserProfiles.ActionURLs.New(
  	context.Background(),
  	"uprof_011CZkZCu8hGbp5mYRQgUmz9",
  	anthropic.UserProfileActionURLNewParams{
  		Action: anthropic.UserProfileActionUnionParam{
  			OfEnrollEndUser: &anthropic.UserProfileEnrollEndUserActionParam{},
  		},
  	},
  )
  if err != nil {
  	log.Fatal(err)
  }

  fmt.Println(actionURL.URL)
  ```

  ```java Java
  import com.anthropic.models.userprofiles.actionurls.ActionUrlCreateParams;
  import com.anthropic.models.userprofiles.actionurls.UserProfileEnrollEndUserAction;

  void main() {
      AnthropicClient client = AnthropicOkHttpClient.fromEnv();

      var params = ActionUrlCreateParams.builder()
          .userProfileId("uprof_011CZkZCu8hGbp5mYRQgUmz9")
          .action(UserProfileEnrollEndUserAction.builder().build())
          .build();
      var actionUrl = client.userProfiles().actionUrls().create(params);

      IO.println(actionUrl.url());
  }
  ```

  ```php PHP
  $client = new Client();

  $actionURL = $client->userProfiles->actionURLs->create(
      'uprof_011CZkZCu8hGbp5mYRQgUmz9',
      action: ['type' => 'enroll_end_user'],
  );

  echo $actionURL->url, PHP_EOL;
  ```

  ```ruby Ruby
  client = Anthropic::Client.new

  action_url = client.user_profiles.action_urls.create(
    "uprof_011CZkZCu8hGbp5mYRQgUmz9",
    action: { type: :enroll_end_user }
  )

  puts action_url.url
  ```
</CodeGroup>

The response contains the link and the time it stops working:

```json
{
  "type": "user_profile_action_url",
  "url": "https://portal.anthropic.com/enroll?enrollment_token=...",
  "expires_at": "2026-03-15T11:00:00Z"
}
```

The link works until the time in `expires_at`, about an hour after you create it. Create it when the end customer asks for it, for example when they click a button in your product, not ahead of time in an email they might read later. They can open the link more than once until it expires. If it has expired, create a new one: each call returns a fresh link. Creating a new link doesn't cancel earlier ones.

Anyone who has the link can use it until it expires, so give it only to the end customer it's for. Send it to an admin or owner of the end customer's Anthropic organization, because only an admin or owner can link a profile. Don't parse the URL or build one yourself. Its format can change.

If you're using Claude Platform on AWS, create the link with `POST /v1/user_profiles/{id}/enrollment_url` instead, and send the `anthropic-beta: user-profiles-2026-08-18` header. That request takes no body, and the response has the same `url` and `expires_at` fields. In the SDK and the CLI, that call is in the beta namespace: `client.beta.user_profiles.create_enrollment_url()` (typescript: `client.beta.userProfiles.createEnrollmentURL()`; csharp: `client.Beta.UserProfiles.CreateEnrollmentUrl()`; go: `client.Beta.UserProfiles.NewEnrollmentURL()`; java: `client.beta().userProfiles().createEnrollmentUrl()`; php: `$client->beta->userProfiles->createEnrollmentURL()`; cli: `ant beta:user-profiles create-enrollment-url`).

`POST /v1/user_profiles/{id}/action_urls` is not available on Microsoft Foundry.

## What the end customer sees

The link opens Anthropic's Verification Portal at `portal.anthropic.com`. After the end customer logs in, the portal shows them the name of your Anthropic organization and the profile's ID.

<Steps>
  <Step title="Log in">
    The end customer logs in with an Anthropic account: one they already use for the Claude Console or claude.ai, or a new one that they create at this step. The portal keeps its own login session, separate from the Claude Console and claude.ai. If they belong to more than one organization, they pick the one to link.

    <Frame caption="Before logging in, the end customer sees why they were sent to the portal.">
      ![Verification Portal card titled Link your account to apply for trusted access, with a Continue to log in button.](https://platform.claude.com/docs/images/user-profiles/portal-log-in.png)
    </Frame>
  </Step>

  <Step title="Link the profile">
    The portal shows a card titled **Link your partner profile**. It names your platform, the profile's ID, the end customer's organization, and when the invitation expires. The end customer selects **Link profile** to accept or **Skip for now** to continue to the portal without linking.

    <Frame caption="The end customer confirms which organization the profile links to.">
      ![Verification Portal card titled Link your partner profile, with the partner, profile ID, organization, and expiry shown.](https://platform.claude.com/docs/images/user-profiles/portal-link-profile.png)
    </Frame>

    Only an admin or owner of the organization can link a profile. Anyone else sees **Admin access needed** and can't link the profile. They can switch to an organization where they are an admin or owner. Otherwise, tell the end customer that an admin or owner of their Anthropic organization has to open the link.
  </Step>

  <Step title="See the confirmation">
    The portal confirms with **Profile linked**. The end customer stays in the portal, where they can view the programs available to their organization and apply for them.

    <Frame caption="After linking, the end customer stays in the portal.">
      ![Verification Portal confirmation titled Profile linked, with View programs and View linked accounts buttons.](https://platform.claude.com/docs/images/user-profiles/portal-profile-linked.png)
    </Frame>
  </Step>
</Steps>

If the link has expired by the time an admin or owner opens it and logs in, the portal shows **This invitation has expired** and tells them to ask you for a new one.

A profile links to one organization. If it's already linked to a different one, the portal says **This partner profile is already linked to a different organization** and doesn't link it. An admin or owner of the organization it's linked to can unlink it under **Linked accounts** in the portal. After that, create a new link and send it to the end customer.

## After the end customer links the profile

The portal doesn't send the end customer back to your product, and Anthropic doesn't notify you. Tell the end customer in your own interface to return when they have finished.

Linking doesn't approve anything by itself. It connects the profile to the end customer's organization, so that programs the organization is approved for apply to requests that carry the profile's ID. The profile has no field that says it is linked.

To see which programs apply to a profile, [retrieve the profile](https://platform.claude.com/docs/en/api/user_profiles/retrieve) and read `programs`. It has a key for each program, such as `cyber` and `efs`, and every profile has every key. Each key is one of the following:

* `null`: Anthropic has no status to report for that program. Every key is `null` if Anthropic hasn't enabled programs for your organization.
* An object: Its `status` is `active` when Anthropic has approved the end customer for the program, otherwise `pending` or `rejected`.

The end customer can see the linked profile under **Linked accounts** in the portal.

If your inference runs on Claude in Amazon Bedrock or Google Cloud, you have to link your own accounts too. Programs apply to requests from an AWS account or Google Cloud project only after you link it to the Anthropic organization that creates your profiles. See [Attribute requests on Amazon Bedrock and Google Cloud](https://platform.claude.com/docs/en/manage-claude/user-profiles#attribute-requests-on-amazon-bedrock-and-google-cloud).

## Next steps

For each field that a retrieved profile contains, see the [Retrieve a profile](https://platform.claude.com/docs/en/api/user_profiles/retrieve) reference.

To create profiles, send their IDs on your requests, and keep them current, see [User profiles for end-customer attribution](https://platform.claude.com/docs/en/manage-claude/user-profiles).

api/beta/agents/archive Changed · +2 / -0 lines

from line 131
131131 
132132 - `"telemetry-destinations-2026-08-11"`
133133 
134 - `"webhooks-2026-10-07"`
135 
134136- `"anthropic-workspace-id": optional string`
135137 
136138 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).

api/beta/agents/create Changed · +2 / -0 lines

from line 125
125125 
126126 - `"telemetry-destinations-2026-08-11"`
127127 
128 - `"webhooks-2026-10-07"`
129 
128130- `"anthropic-workspace-id": optional string`
129131 
130132 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).

api/beta/agents/list Changed · +2 / -0 lines

from line 153
153153 
154154 - `"telemetry-destinations-2026-08-11"`
155155 
156 - `"webhooks-2026-10-07"`
157 
156158- `"anthropic-workspace-id": optional string`
157159 
158160 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).

api/beta/agents/retrieve Changed · +2 / -0 lines

from line 139
139139 
140140 - `"telemetry-destinations-2026-08-11"`
141141 
142 - `"webhooks-2026-10-07"`
143 
142144- `"anthropic-workspace-id": optional string`
143145 
144146 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).

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

from line 131
131131 
132132 - `"telemetry-destinations-2026-08-11"`
133133 
134 - `"webhooks-2026-10-07"`
135 
134136- `"anthropic-workspace-id": optional string`
135137 
136138 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).

api/beta/agents/versions Changed · +2 / -0 lines

from line 145
145145 
146146 - `"telemetry-destinations-2026-08-11"`
147147 
148 - `"webhooks-2026-10-07"`
149 
148150- `"anthropic-workspace-id": optional string`
149151 
150152 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).

api/beta/agents/versions/list Changed · +2 / -0 lines

from line 143
143143 
144144 - `"telemetry-destinations-2026-08-11"`
145145 
146 - `"webhooks-2026-10-07"`
147 
146148- `"anthropic-workspace-id": optional string`
147149 
148150 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).

api/beta/deployment_runs Changed · +4 / -0 lines

from line 183
183183 
184184 - `"telemetry-destinations-2026-08-11"`
185185 
186 - `"webhooks-2026-10-07"`
187 
186188- `"anthropic-workspace-id": optional string`
187189 
188190 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
from line 585
583585 - `"spend-limit-reads-2026-09-26"`
584586 
585587 - `"telemetry-destinations-2026-08-11"`
588 
589 - `"webhooks-2026-10-07"`
586590 
587591- `"anthropic-workspace-id": optional string`
588592 

api/beta/deployment_runs/list Changed · +2 / -0 lines

from line 181
181181 
182182 - `"telemetry-destinations-2026-08-11"`
183183 
184 - `"webhooks-2026-10-07"`
185 
184186- `"anthropic-workspace-id": optional string`
185187 
186188 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).

api/beta/deployment_runs/retrieve Changed · +2 / -0 lines

from line 131
131131 
132132 - `"telemetry-destinations-2026-08-11"`
133133 
134 - `"webhooks-2026-10-07"`
135 
134136- `"anthropic-workspace-id": optional string`
135137 
136138 Optional header to select the Workspace for this request. The value is a Workspace ID (for example, `wrkspc_011CZkZaBF1tNoB5wlCeusgy`).
Feedback